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);