OSDN Git Service

Add MIPS support
[android-x86/external-koush-Superuser.git] / Superuser / src / com / koushikdutta / superuser / MainActivity.java
index b24eab9..dc14acd 100644 (file)
 
 package com.koushikdutta.superuser;
 
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipFile;
-import java.util.zip.ZipOutputStream;
-
 import android.app.AlertDialog;
 import android.app.ProgressDialog;
 import android.content.DialogInterface;
-import android.content.Intent;
 import android.content.DialogInterface.OnClickListener;
+import android.content.Intent;
 import android.net.Uri;
+import android.os.Build;
 import android.os.Bundle;
+import android.util.Log;
 import android.view.Menu;
 import android.view.MenuInflater;
 import android.view.MenuItem;
@@ -41,6 +35,14 @@ import com.koushikdutta.superuser.util.StreamUtility;
 import com.koushikdutta.superuser.util.SuHelper;
 import com.koushikdutta.widgets.BetterListActivity;
 
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
+import java.util.zip.ZipOutputStream;
+
 public class MainActivity extends BetterListActivity {
     public MainActivity() {
         super(PolicyFragment.class);
@@ -65,13 +67,21 @@ public class MainActivity extends BetterListActivity {
         
         return super.onCreateOptionsMenu(menu);
     }
+
+    private String getArch() {
+        String prop = System.getProperty("os.arch");
+        if (prop.contains("x86") || prop.contains("i686") || prop.contains("i386")) {
+            return "x86";
+        } else if (prop.contains("mips")) {
+            return "mips";
+        } else {
+            return "armeabi";
+        }
+    }
     
     File extractSu() throws IOException, InterruptedException {
-        String arch = "armeabi";
-        if (System.getProperty("os.arch").contains("x86") || System.getProperty("os.arch").contains("i686") || System.getProperty("os.arch").contains("i386"))
-            arch = "x86";
         ZipFile zf = new ZipFile(getPackageCodePath());
-        ZipEntry su = zf.getEntry("assets/" + arch + "/su");
+        ZipEntry su = zf.getEntry("assets/" + getArch() + "/su");
         InputStream zin = zf.getInputStream(su);
         File ret = getFileStreamPath("su");
         FileOutputStream fout = new FileOutputStream(ret);
@@ -81,7 +91,7 @@ public class MainActivity extends BetterListActivity {
         fout.close();
         return ret;
     }
-    
+
     void doRecoveryInstall() {
         final ProgressDialog dlg = new ProgressDialog(this);
         dlg.setTitle(R.string.installing);
@@ -105,14 +115,11 @@ public class MainActivity extends BetterListActivity {
                     File zip = getFileStreamPath("superuser.zip");
                     ZipOutputStream zout = new ZipOutputStream(new FileOutputStream(zip));
                     doEntry(zout, "assets/update-binary", "META-INF/com/google/android/update-binary");
-                    zout.close();
-
-                    zout = new ZipOutputStream(new FileOutputStream(zip));
                     doEntry(zout, "assets/install-recovery.sh", "install-recovery.sh");
                     zout.close();
 
                     ZipFile zf = new ZipFile(getPackageCodePath());
-                    ZipEntry ze = zf.getEntry("assets/reboot");
+                    ZipEntry ze = zf.getEntry("assets/" + getArch() + "/reboot");
                     InputStream in;
                     FileOutputStream reboot;
                     StreamUtility.copyStream(in = zf.getInputStream(ze), reboot = openFileOutput("reboot", MODE_PRIVATE));
@@ -195,7 +202,7 @@ public class MainActivity extends BetterListActivity {
                 }
                 catch (Exception ex) {
                     _error = true;
-                    ex.printStackTrace();
+                    Log.e("Superuser", "error upgrading", ex);
                 }
                 dlg.dismiss();
                 final boolean error = _error;
@@ -223,12 +230,14 @@ public class MainActivity extends BetterListActivity {
         AlertDialog.Builder builder = new AlertDialog.Builder(this);
         builder.setTitle(R.string.install);
         builder.setMessage(R.string.install_superuser_info);
-        builder.setPositiveButton(R.string.install, new OnClickListener() {
-            @Override
-            public void onClick(DialogInterface dialog, int which) {
-                doSystemInstall();
-            }
-        });
+        if (Build.VERSION.SDK_INT < 18) {
+            builder.setPositiveButton(R.string.install, new OnClickListener() {
+                @Override
+                public void onClick(DialogInterface dialog, int which) {
+                    doSystemInstall();
+                }
+            });
+        }
         builder.setNegativeButton(android.R.string.cancel, null);
         builder.setNeutralButton(R.string.recovery_install, new OnClickListener() {
             @Override
@@ -244,7 +253,7 @@ public class MainActivity extends BetterListActivity {
     }
     
     // this is intentionally not localized as it will change constantly.
-    private static final String WHATS_NEW = "Recovery installation fixes for some devices.";
+    private static final String WHATS_NEW = "Added support for Android 4.3.";
     protected void doWhatsNew() {
         if (WHATS_NEW.equals(Settings.getString(this, "whats_new")))
             return;