diff --git a/libs/junrar-0.7.jar b/libs/junrar-0.7.jar new file mode 100644 index 000000000..2b6817ca5 Binary files /dev/null and b/libs/junrar-0.7.jar differ diff --git a/libs/raroscope-1.0.jar b/libs/raroscope-1.0.jar deleted file mode 100644 index f52744ac8..000000000 Binary files a/libs/raroscope-1.0.jar and /dev/null differ diff --git a/res/values/strings.xml b/res/values/strings.xml index 455ba9c41..1bd6e3ee8 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -258,5 +258,9 @@ Unsaved Changes You have unsaved changes,do you want to save them before exiting? Saving + Package Installer + View + Install + This is a package installer. What action would you like to perform? diff --git a/src/com/amaze/filemanager/adapters/ZipAdapter.java b/src/com/amaze/filemanager/adapters/ZipAdapter.java index 8ab0a3c46..d91daa462 100644 --- a/src/com/amaze/filemanager/adapters/ZipAdapter.java +++ b/src/com/amaze/filemanager/adapters/ZipAdapter.java @@ -156,7 +156,6 @@ public class ZipAdapter extends ArrayAdapter { } else { holder.imageView.setImageDrawable( Icons.loadMimeIcon(zipViewer.getActivity(),rowItem.getName(),false)); final StringBuilder stringBuilder = new StringBuilder(rowItem.getName()); - if(zipViewer.showSize) holder.txtDesc.setText(new Futils().readableFileSize(rowItem.getSize())); if(zipViewer.showLastModified)holder.date.setText(new Futils().getdate(rowItem.getTime(),"MMM dd, yyyy",zipViewer.year)); if (rowItem.isDirectory()) { holder.imageView.setImageDrawable(folder); @@ -167,7 +166,8 @@ public class ZipAdapter extends ArrayAdapter { }catch (Exception e) { holder.txtTitle.setText(rowItem.getName().substring(0, rowItem.getName().lastIndexOf("/"))); - } }else{holder.txtTitle.setText(rowItem.getName().substring(rowItem.getName().lastIndexOf("/") + 1)); + } }else{if(zipViewer.showSize) holder.txtDesc.setText(new Futils().readableFileSize(rowItem.getSize())); + holder.txtTitle.setText(rowItem.getName().substring(rowItem.getName().lastIndexOf("/") + 1)); if (zipViewer.coloriseIcons) { if (Icons.isVideo(rowItem.getName())) gradientDrawable.setColor(Color.parseColor("#f06292")); diff --git a/src/com/amaze/filemanager/fragments/Main.java b/src/com/amaze/filemanager/fragments/Main.java index 4706ad476..1acfab55d 100644 --- a/src/com/amaze/filemanager/fragments/Main.java +++ b/src/com/amaze/filemanager/fragments/Main.java @@ -794,7 +794,7 @@ public class Main extends android.support.v4.app.Fragment { showOption(R.id.sethome, menu); - } else if (x.getName().toLowerCase().endsWith(".zip") || x.getName().toLowerCase().endsWith(".jar") || x.getName().toLowerCase().endsWith(".apk")) { + } else if (x.getName().toLowerCase().endsWith(".zip") || x.getName().toLowerCase().endsWith(".jar") || x.getName().toLowerCase().endsWith(".apk") || x.getName().toLowerCase().endsWith(".rar")) { showOption(R.id.ex, menu); diff --git a/src/com/amaze/filemanager/services/ExtractService.java b/src/com/amaze/filemanager/services/ExtractService.java index 683e4fcfc..fa022480e 100644 --- a/src/com/amaze/filemanager/services/ExtractService.java +++ b/src/com/amaze/filemanager/services/ExtractService.java @@ -34,6 +34,9 @@ import android.util.Log; import com.amaze.filemanager.R; import com.amaze.filemanager.activities.MainActivity; import com.amaze.filemanager.utils.Futils; +import com.github.junrar.Archive; +import com.github.junrar.exception.RarException; +import com.github.junrar.rarfile.FileHeader; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; @@ -126,6 +129,42 @@ ArrayList entries=new ArrayList(); inputStream.close(); } } + private void unzipRAREntry(int id, Archive zipfile, FileHeader entry, String outputDir) + throws IOException, RarException { + String name=entry.getFileNameString(); + name=name.replaceAll("\\\\","/"); + if (entry.isDirectory()) { + createDir(new File(outputDir, name)); + return; + } + File outputFile = new File(outputDir, name); + if (!outputFile.getParentFile().exists()) { + createDir(outputFile.getParentFile()); + } + // Log.i("Amaze", "Extracting: " + entry); + BufferedInputStream inputStream = new BufferedInputStream( + zipfile.getInputStream(entry)); + BufferedOutputStream outputStream = new BufferedOutputStream( + new FileOutputStream(outputFile)); + try { + int len; + byte buf[] = new byte[1024]; + while ((len = inputStream.read(buf)) > 0) { + //System.out.println(id + " " + hash.get(id)); + if (hash.get(id)) { + publishResults(true); + outputStream.write(buf, 0, len); + + } else { + stopSelf(id); + publishResults(false); + } + } + }finally { + outputStream.close(); + inputStream.close(); + } + } public boolean extract(int id, File archive, String destinationPath,ArrayList x) { int i = 0; @@ -190,7 +229,34 @@ ArrayList entries=new ArrayList(); } } + public boolean extractRar(int id, File archive, String destinationPath) { + int i = 0; + try { + Archive zipfile = new Archive(archive); + FileHeader fh = zipfile.nextFileHeader(); + while(fh != null){ + if (hash.get(id)) { + publishResults(true); + unzipRAREntry(id,zipfile,fh,destinationPath); + fh=zipfile.nextFileHeader(); + } else { + stopSelf(id); + publishResults(false); + } + } + + Intent intent = new Intent("loadlist"); + sendBroadcast(intent); + return true; + } catch (Exception e) { + Log.e("amaze", "Error while extracting file " + archive, e); + Intent intent = new Intent("loadlist"); + sendBroadcast(intent); + return false; + } + + } public class Doback extends AsyncTask { protected Integer doInBackground(Bundle... p1) { String file = p1[0].getString("file"); @@ -198,8 +264,10 @@ ArrayList entries=new ArrayList(); System.out.println(f.getName()+""+eentries); if(eentries) { extract(p1[0].getInt("id"), f, f.getParent() + "/" + f.getName().substring(0, f.getName().lastIndexOf(".")), entries); - }else + }else if(f.getName().toLowerCase().endsWith(".zip")) extract(p1[0].getInt("id"), f, f.getParent() + "/" + f.getName().substring(0, f.getName().lastIndexOf("."))); + else if(f.getName().toLowerCase().endsWith(".rar")) + extractRar(p1[0].getInt("id"), f, f.getParent() + "/" + f.getName().substring(0, f.getName().lastIndexOf("."))); Log.i("Amaze", "Almost Completed"); diff --git a/src/com/amaze/filemanager/services/asynctasks/ZipHelperTask.java b/src/com/amaze/filemanager/services/asynctasks/ZipHelperTask.java index 88c30974c..0a16fa7e9 100644 --- a/src/com/amaze/filemanager/services/asynctasks/ZipHelperTask.java +++ b/src/com/amaze/filemanager/services/asynctasks/ZipHelperTask.java @@ -5,7 +5,6 @@ import android.util.Log; import android.widget.TextView; import android.widget.Toast; -import com.adarshr.raroscope.RARFile; import com.amaze.filemanager.R; import com.amaze.filemanager.activities.MainActivity; import com.amaze.filemanager.adapters.ZipAdapter; diff --git a/src/com/amaze/filemanager/utils/Futils.java b/src/com/amaze/filemanager/utils/Futils.java index e5fa4f519..c5a38b19c 100644 --- a/src/com/amaze/filemanager/utils/Futils.java +++ b/src/com/amaze/filemanager/utils/Futils.java @@ -469,7 +469,7 @@ public class Futils { Intent i = new Intent(m, TextReader.class); i.putExtra("path", f.getPath()); m.startActivity(i); - } else if (f.getName().toLowerCase().endsWith(".zip")) { + } else if (f.getName().toLowerCase().endsWith(".zip") || f.getName().toLowerCase().endsWith(".jar")) { m.select=-2; FragmentTransaction fragmentTransaction = m.getSupportFragmentManager().beginTransaction(); Fragment fragment = new ZipViewer(); @@ -480,7 +480,7 @@ public class Futils { //fragmentTransaction.addToBackStack(null); fragmentTransaction.commit(); - } else { + }else if(f.getName().toLowerCase().endsWith(".apk")){showPackageDialog(f,m);}else { try { openunknown(f, m); } catch (Exception e) { @@ -489,7 +489,35 @@ public class Futils { } } } +public void showPackageDialog(final File f,final MainActivity m){ + MaterialDialog.Builder mat=new MaterialDialog.Builder(m); + mat.title(R.string.packageinstaller).content(R.string.pitext).positiveText(R.string.install).negativeText(R.string.view).neutralText(R.string.cancel).callback(new MaterialDialog.Callback() { + @Override + public void onPositive(MaterialDialog materialDialog) { + openunknown(f,m); + } + @Override + public void onNegative(MaterialDialog materialDialog) { + m.select=-2; + FragmentTransaction fragmentTransaction = m.getSupportFragmentManager().beginTransaction(); + Fragment fragment = new ZipViewer(); + Bundle bundle = new Bundle(); + bundle.putString("path", f.getPath()); + fragment.setArguments(bundle); + fragmentTransaction.replace(R.id.content_frame, fragment); + //fragmentTransaction.addToBackStack(null); + fragmentTransaction.commit(); + + } + }); + mat.positiveColor(Color.parseColor(m.skin)); + mat.neutralColor(Color.parseColor(m.skin)); + mat.negativeColor(Color.parseColor(m.skin)); + if(m.theme1==1)mat.theme(Theme.DARK); + mat.build().show(); + +} public Layoutelements newElement(Drawable i, String d,String permissions,String symlink,String size,String directorybool,boolean b) { Layoutelements item = new Layoutelements(i, new File(d).getName(), d,permissions,symlink,size,directorybool,b); return item; diff --git a/src/com/amaze/filemanager/utils/Icons.java b/src/com/amaze/filemanager/utils/Icons.java index c6ca5735a..08a93b0cd 100644 --- a/src/com/amaze/filemanager/utils/Icons.java +++ b/src/com/amaze/filemanager/utils/Icons.java @@ -96,6 +96,7 @@ static { add("application/mac-binhex40", icon); add("application/rar", icon); add("application/zip", icon); + add("application/java-archive",icon); add("application/x-apple-diskimage", icon); add("application/x-debian-package", icon); add("application/x-gtar", icon);