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;
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);
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);
fout.close();
return ret;
}
-
+
void doRecoveryInstall() {
final ProgressDialog dlg = new ProgressDialog(this);
dlg.setTitle(R.string.installing);
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));
}
catch (Exception ex) {
_error = true;
- ex.printStackTrace();
+ Log.e("Superuser", "error upgrading", ex);
}
dlg.dismiss();
final boolean error = _error;
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
}
// 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;