Search in sources :

Example 11 with MagiskManager

use of com.topjohnwu.magisk.MagiskManager in project MagiskManager by topjohnwu.

the class MarkDownWindow method doInBackground.

@Override
protected String doInBackground(Void... voids) {
    MagiskManager mm = MagiskManager.get();
    String md;
    if (mUrl != null) {
        md = WebService.getString(mUrl);
    } else {
        try (ByteArrayOutputStream out = new ByteArrayOutputStream()) {
            ShellUtils.pump(is, out);
            md = out.toString();
            is.close();
        } catch (IOException e) {
            e.printStackTrace();
            return "";
        }
    }
    String css;
    try (InputStream in = mm.getResources().openRawResource(mm.isDarkTheme ? R.raw.dark : R.raw.light);
        ByteArrayOutputStream out = new ByteArrayOutputStream()) {
        ShellUtils.pump(in, out);
        css = out.toString();
        in.close();
    } catch (IOException e) {
        e.printStackTrace();
        return "";
    }
    Parser parser = Parser.builder().build();
    HtmlRenderer renderer = HtmlRenderer.builder().build();
    Node doc = parser.parse(md);
    return String.format("<style>%s</style>%s", css, renderer.render(doc));
}
Also used : MagiskManager(com.topjohnwu.magisk.MagiskManager) InputStream(java.io.InputStream) Node(org.commonmark.node.Node) HtmlRenderer(org.commonmark.renderer.html.HtmlRenderer) ByteArrayOutputStream(java.io.ByteArrayOutputStream) IOException(java.io.IOException) Parser(org.commonmark.parser.Parser)

Example 12 with MagiskManager

use of com.topjohnwu.magisk.MagiskManager in project MagiskManager by topjohnwu.

the class CheckSafetyNet method onPostExecute.

@Override
protected void onPostExecute(Exception err) {
    MagiskManager mm = MagiskManager.get();
    try {
        if (err != null)
            throw err;
        Object helper = helperClazz.getConstructors()[0].newInstance(getActivity(), dexPath.getPath(), Proxy.newProxyInstance(loader, new Class[] { callbackClazz }, (proxy, method, args) -> {
            mm.safetyNetDone.publish(false, args[0]);
            return null;
        }));
        helperClazz.getMethod("attest").invoke(helper);
    } catch (Exception e) {
        e.printStackTrace();
        mm.safetyNetDone.publish(false, -1);
    }
    super.onPostExecute(err);
}
Also used : OutputStream(java.io.OutputStream) HttpURLConnection(java.net.HttpURLConnection) BufferedInputStream(java.io.BufferedInputStream) Proxy(java.lang.reflect.Proxy) FileOutputStream(java.io.FileOutputStream) Const(com.topjohnwu.magisk.utils.Const) IOException(java.io.IOException) Shell(com.topjohnwu.superuser.Shell) File(java.io.File) BufferedOutputStream(java.io.BufferedOutputStream) ShellUtils(com.topjohnwu.superuser.ShellUtils) WebService(com.topjohnwu.magisk.utils.WebService) MagiskManager(com.topjohnwu.magisk.MagiskManager) Activity(android.app.Activity) DexClassLoader(dalvik.system.DexClassLoader) InputStream(java.io.InputStream) MagiskManager(com.topjohnwu.magisk.MagiskManager) IOException(java.io.IOException)

Example 13 with MagiskManager

use of com.topjohnwu.magisk.MagiskManager in project MagiskManager by topjohnwu.

the class CheckUpdates method onPostExecute.

@Override
protected void onPostExecute(Void v) {
    MagiskManager mm = MagiskManager.get();
    if (showNotification) {
        if (BuildConfig.VERSION_CODE < mm.remoteManagerVersionCode) {
            ShowUI.managerUpdateNotification();
        } else if (mm.magiskVersionCode < mm.remoteMagiskVersionCode) {
            ShowUI.magiskUpdateNotification();
        }
    }
    mm.updateCheckDone.publish();
    super.onPostExecute(v);
}
Also used : MagiskManager(com.topjohnwu.magisk.MagiskManager)

Example 14 with MagiskManager

use of com.topjohnwu.magisk.MagiskManager in project MagiskManager by topjohnwu.

the class SuReceiver method onReceive.

@Override
public void onReceive(Context context, Intent intent) {
    int fromUid, toUid, pid, mode;
    String command, action;
    Policy policy;
    MagiskManager mm = Utils.getMagiskManager(context);
    if (intent == null)
        return;
    mode = intent.getIntExtra("mode", -1);
    if (mode < 0)
        return;
    if (mode == Const.Value.NOTIFY_USER_TO_OWNER) {
        MagiskManager.toast(R.string.multiuser_hint_owner_request, Toast.LENGTH_LONG);
        return;
    }
    fromUid = intent.getIntExtra("from.uid", -1);
    if (fromUid < 0)
        return;
    // Don't show anything if it's Magisk Manager
    if (fromUid == Process.myUid())
        return;
    action = intent.getStringExtra("action");
    if (action == null)
        return;
    policy = mm.suDB.getPolicy(fromUid);
    if (policy == null) {
        try {
            policy = new Policy(fromUid, context.getPackageManager());
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
            return;
        }
    }
    SuLogEntry log = new SuLogEntry(policy);
    String message;
    switch(action) {
        case "allow":
            message = context.getString(R.string.su_allow_toast, policy.appName);
            log.action = true;
            break;
        case "deny":
            message = context.getString(R.string.su_deny_toast, policy.appName);
            log.action = false;
            break;
        default:
            return;
    }
    if (policy.notification && mm.suNotificationType == Const.Value.NOTIFICATION_TOAST) {
        MagiskManager.toast(message, Toast.LENGTH_SHORT);
    }
    if (mode == Const.Value.NOTIFY_NORMAL_LOG && policy.logging) {
        toUid = intent.getIntExtra("to.uid", -1);
        if (toUid < 0)
            return;
        pid = intent.getIntExtra("pid", -1);
        if (pid < 0)
            return;
        command = intent.getStringExtra("command");
        if (command == null)
            return;
        log.toUid = toUid;
        log.fromPid = pid;
        log.command = command;
        log.date = new Date();
        mm.suDB.addLog(log);
    }
}
Also used : Policy(com.topjohnwu.magisk.container.Policy) PackageManager(android.content.pm.PackageManager) MagiskManager(com.topjohnwu.magisk.MagiskManager) SuLogEntry(com.topjohnwu.magisk.container.SuLogEntry) Date(java.util.Date)

Example 15 with MagiskManager

use of com.topjohnwu.magisk.MagiskManager in project MagiskManager by topjohnwu.

the class ShowUI method uninstallDialog.

public static void uninstallDialog(Activity activity) {
    MagiskManager mm = Utils.getMagiskManager(activity);
    new AlertDialogBuilder(activity).setTitle(R.string.uninstall_magisk_title).setMessage(R.string.uninstall_magisk_msg).setPositiveButton(R.string.complete_uninstall, (d, i) -> {
        ByteArrayOutputStream uninstaller = new ByteArrayOutputStream();
        try (InputStream in = mm.getAssets().open(Const.UNINSTALLER)) {
            ShellUtils.pump(in, uninstaller);
        } catch (IOException e) {
            e.printStackTrace();
            return;
        }
        ByteArrayOutputStream utils = new ByteArrayOutputStream();
        try (InputStream in = mm.getAssets().open(Const.UTIL_FUNCTIONS)) {
            ShellUtils.pump(in, utils);
        } catch (IOException e) {
            e.printStackTrace();
            return;
        }
        Shell.Sync.su(Utils.fmt("echo '%s' > /cache/%s", uninstaller.toString().replace("'", "'\\''"), Const.UNINSTALLER), Utils.fmt("echo '%s' > %s/%s", utils.toString().replace("'", "'\\''"), mm.magiskVersionCode >= 1464 ? "/data/adb/magisk" : "/data/magisk", Const.UTIL_FUNCTIONS));
        try {
            uninstaller.close();
            utils.close();
        } catch (IOException ignored) {
        }
        MagiskManager.toast(R.string.uninstall_toast, Toast.LENGTH_LONG);
        new Handler().postDelayed(() -> Utils.uninstallPkg(mm.getPackageName()), 5000);
    }).setNeutralButton(R.string.restore_img, (d, i) -> new RestoreImages().exec()).setNegativeButton(R.string.uninstall_app, (d, i) -> Utils.uninstallPkg(mm.getPackageName())).show();
}
Also used : Context(android.content.Context) ByteArrayOutputStream(java.io.ByteArrayOutputStream) AlertDialogBuilder(com.topjohnwu.magisk.components.AlertDialogBuilder) Uri(android.net.Uri) TaskStackBuilder(android.support.v4.app.TaskStackBuilder) Intent(android.content.Intent) PendingIntent(android.app.PendingIntent) FlashActivity(com.topjohnwu.magisk.FlashActivity) RebootReceiver(com.topjohnwu.magisk.receivers.RebootReceiver) Shell(com.topjohnwu.superuser.Shell) ManagerUpdate(com.topjohnwu.magisk.receivers.ManagerUpdate) ArrayList(java.util.ArrayList) R(com.topjohnwu.magisk.R) ShellUtils(com.topjohnwu.superuser.ShellUtils) Manifest(android.Manifest) Handler(android.os.Handler) Toast(android.widget.Toast) MagiskManager(com.topjohnwu.magisk.MagiskManager) SplashActivity(com.topjohnwu.magisk.SplashActivity) RestoreImages(com.topjohnwu.magisk.asyncs.RestoreImages) NotificationManager(android.app.NotificationManager) DownloadReceiver(com.topjohnwu.magisk.receivers.DownloadReceiver) IOException(java.io.IOException) List(java.util.List) AlertDialog(android.support.v7.app.AlertDialog) NotificationCompat(android.support.v4.app.NotificationCompat) Activity(android.app.Activity) InputStream(java.io.InputStream) AlertDialogBuilder(com.topjohnwu.magisk.components.AlertDialogBuilder) MagiskManager(com.topjohnwu.magisk.MagiskManager) InputStream(java.io.InputStream) Handler(android.os.Handler) ByteArrayOutputStream(java.io.ByteArrayOutputStream) IOException(java.io.IOException) RestoreImages(com.topjohnwu.magisk.asyncs.RestoreImages)

Aggregations

MagiskManager (com.topjohnwu.magisk.MagiskManager)21 IOException (java.io.IOException)7 PendingIntent (android.app.PendingIntent)6 Intent (android.content.Intent)6 AlertDialogBuilder (com.topjohnwu.magisk.components.AlertDialogBuilder)6 InputStream (java.io.InputStream)6 NotificationManager (android.app.NotificationManager)5 NotificationCompat (android.support.v4.app.NotificationCompat)5 TaskStackBuilder (android.support.v4.app.TaskStackBuilder)5 SuFile (com.topjohnwu.superuser.io.SuFile)4 Activity (android.app.Activity)3 Shell (com.topjohnwu.superuser.Shell)3 ShellUtils (com.topjohnwu.superuser.ShellUtils)3 BufferedInputStream (java.io.BufferedInputStream)3 BufferedOutputStream (java.io.BufferedOutputStream)3 ByteArrayOutputStream (java.io.ByteArrayOutputStream)3 File (java.io.File)3 FileOutputStream (java.io.FileOutputStream)3 OutputStream (java.io.OutputStream)3 Manifest (android.Manifest)2