Search in sources :

Example 1 with UIUtils.displayLongToast

use of io.github.muntashirakon.AppManager.utils.UIUtils.displayLongToast in project AppManager by MuntashirAkon.

the class AppInfoFragment method setHorizontalActions.

private void setHorizontalActions() {
    mHorizontalLayout.removeAllViews();
    if (mainModel != null && !mainModel.getIsExternalApk()) {
        // Set open
        final Intent launchIntentForPackage = mPackageManager.getLaunchIntentForPackage(mPackageName);
        if (launchIntentForPackage != null) {
            addToHorizontalLayout(R.string.launch_app, R.drawable.ic_open_in_new_black_24dp).setOnClickListener(v -> {
                try {
                    startActivity(launchIntentForPackage);
                } catch (Throwable th) {
                    UIUtils.displayLongToast(th.getLocalizedMessage());
                }
            });
        }
        // Set disable
        if (isRootEnabled || isAdbEnabled) {
            if (mApplicationInfo.enabled) {
                addToHorizontalLayout(R.string.disable, R.drawable.ic_block_black_24dp).setOnClickListener(v -> {
                    if (BuildConfig.APPLICATION_ID.equals(mPackageName)) {
                        new MaterialAlertDialogBuilder(mActivity).setMessage(R.string.are_you_sure).setPositiveButton(R.string.yes, (d, w) -> disable()).setNegativeButton(R.string.no, null).show();
                    } else
                        disable();
                });
            }
        }
        // Set uninstall
        addToHorizontalLayout(R.string.uninstall, R.drawable.ic_trash_can_outline).setOnClickListener(v -> {
            final boolean isSystemApp = (mApplicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0;
            if (Ops.isPrivileged()) {
                ScrollableDialogBuilder builder = new ScrollableDialogBuilder(mActivity, isSystemApp ? R.string.uninstall_system_app_message : R.string.uninstall_app_message).setCheckboxLabel(R.string.keep_data_and_app_signing_signatures).setTitle(mPackageLabel).setPositiveButton(R.string.uninstall, (dialog, which, keepData) -> executor.submit(() -> {
                    try {
                        PackageInstallerCompat.uninstall(mPackageName, mainModel.getUserHandle(), keepData);
                        runOnUiThread(() -> {
                            displayLongToast(R.string.uninstalled_successfully, mPackageLabel);
                            mActivity.finish();
                        });
                    } catch (Exception e) {
                        Log.e(TAG, e);
                        runOnUiThread(() -> displayLongToast(R.string.failed_to_uninstall, mPackageLabel));
                    }
                })).setNegativeButton(R.string.cancel, (dialog, which, keepData) -> {
                    if (dialog != null)
                        dialog.cancel();
                });
                if ((mApplicationInfo.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0) {
                    builder.setNeutralButton(R.string.uninstall_updates, (dialog, which, keepData) -> executor.submit(() -> {
                        Runner.Result result = RunnerUtils.uninstallPackageUpdate(mPackageName, mainModel.getUserHandle(), keepData);
                        if (result.isSuccessful()) {
                            runOnUiThread(() -> displayLongToast(R.string.update_uninstalled_successfully, mPackageLabel));
                        } else {
                            runOnUiThread(() -> displayLongToast(R.string.failed_to_uninstall_updates, mPackageLabel));
                        }
                    }));
                }
                builder.show();
            } else {
                Intent uninstallIntent = new Intent(Intent.ACTION_DELETE);
                uninstallIntent.setData(Uri.parse("package:" + mPackageName));
                startActivity(uninstallIntent);
            }
        });
        // Enable/disable app (root/ADB only)
        if (isRootEnabled || isAdbEnabled) {
            if (!mApplicationInfo.enabled) {
                // Enable app
                addToHorizontalLayout(R.string.enable, R.drawable.ic_baseline_get_app_24).setOnClickListener(v -> {
                    try {
                        PackageManagerCompat.setApplicationEnabledSetting(mPackageName, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 0, mainModel.getUserHandle());
                    } catch (RemoteException | SecurityException e) {
                        Log.e(TAG, e);
                        displayLongToast(R.string.failed_to_enable, mPackageLabel);
                    }
                });
            }
        }
        if (isAdbEnabled || isRootEnabled || ServiceHelper.checkIfServiceIsRunning(mActivity, NoRootAccessibilityService.class)) {
            // Force stop
            if ((mApplicationInfo.flags & ApplicationInfo.FLAG_STOPPED) == 0) {
                addToHorizontalLayout(R.string.force_stop, R.drawable.ic_baseline_power_settings_new_24).setOnClickListener(v -> {
                    if (isAdbEnabled || isRootEnabled) {
                        executor.submit(() -> {
                            try {
                                PackageManagerCompat.forceStopPackage(mPackageName, mainModel.getUserHandle());
                                runOnUiThread(this::refreshDetails);
                            } catch (RemoteException | SecurityException e) {
                                Log.e(TAG, e);
                                displayLongToast(R.string.failed_to_stop, mPackageLabel);
                            }
                        });
                    } else {
                        // Use accessibility
                        AccessibilityMultiplexer.getInstance().enableForceStop(true);
                        activityLauncher.launch(IntentUtils.getAppDetailsSettings(mPackageName), result -> {
                            AccessibilityMultiplexer.getInstance().enableForceStop(false);
                            refreshDetails();
                        });
                    }
                });
            }
            // Clear data
            addToHorizontalLayout(R.string.clear_data, R.drawable.ic_trash_can_outline).setOnClickListener(v -> new MaterialAlertDialogBuilder(mActivity).setTitle(mPackageLabel).setMessage(R.string.clear_data_message).setPositiveButton(R.string.clear, (dialog, which) -> {
                if (isAdbEnabled || isRootEnabled) {
                    executor.submit(() -> {
                        if (PackageManagerCompat.clearApplicationUserData(mPackageName, mainModel.getUserHandle())) {
                            runOnUiThread(this::refreshDetails);
                        }
                    });
                } else {
                    // Use accessibility
                    AccessibilityMultiplexer.getInstance().enableNavigateToStorageAndCache(true);
                    AccessibilityMultiplexer.getInstance().enableClearData(true);
                    activityLauncher.launch(IntentUtils.getAppDetailsSettings(mPackageName), result -> {
                        AccessibilityMultiplexer.getInstance().enableNavigateToStorageAndCache(true);
                        AccessibilityMultiplexer.getInstance().enableClearData(false);
                        refreshDetails();
                    });
                }
            }).setNegativeButton(R.string.cancel, null).show());
            // Clear cache
            addToHorizontalLayout(R.string.clear_cache, R.drawable.ic_trash_can_outline).setOnClickListener(v -> {
                if (isAdbEnabled || isRootEnabled) {
                    executor.submit(() -> {
                        if (PackageManagerCompat.deleteApplicationCacheFilesAsUser(mPackageName, mainModel.getUserHandle())) {
                            runOnUiThread(this::refreshDetails);
                        }
                    });
                } else {
                    // Use accessibility
                    AccessibilityMultiplexer.getInstance().enableNavigateToStorageAndCache(true);
                    AccessibilityMultiplexer.getInstance().enableClearCache(true);
                    activityLauncher.launch(IntentUtils.getAppDetailsSettings(mPackageName), result -> {
                        AccessibilityMultiplexer.getInstance().enableNavigateToStorageAndCache(false);
                        AccessibilityMultiplexer.getInstance().enableClearCache(false);
                        refreshDetails();
                    });
                }
            });
        } else {
            // Display Android settings button
            addToHorizontalLayout(R.string.view_in_settings, R.drawable.ic_baseline_settings_24).setOnClickListener(v -> startActivity(IntentUtils.getAppDetailsSettings(mPackageName)));
        }
    } else if (FeatureController.isInstallerEnabled()) {
        if (mInstalledPackageInfo == null) {
            // App not installed
            addToHorizontalLayout(R.string.install, R.drawable.ic_baseline_get_app_24).setOnClickListener(v -> install());
        } else {
            // App is installed
            long installedVersionCode = PackageInfoCompat.getLongVersionCode(mInstalledPackageInfo);
            long thisVersionCode = PackageInfoCompat.getLongVersionCode(mPackageInfo);
            if (installedVersionCode < thisVersionCode) {
                // Needs update
                addToHorizontalLayout(R.string.whats_new, R.drawable.ic_information_variant).setOnClickListener(v -> {
                    Bundle args = new Bundle();
                    args.putParcelable(WhatsNewDialogFragment.ARG_NEW_PKG_INFO, mPackageInfo);
                    args.putParcelable(WhatsNewDialogFragment.ARG_OLD_PKG_INFO, mInstalledPackageInfo);
                    WhatsNewDialogFragment dialogFragment = new WhatsNewDialogFragment();
                    dialogFragment.setArguments(args);
                    dialogFragment.show(mActivity.getSupportFragmentManager(), WhatsNewDialogFragment.TAG);
                });
                addToHorizontalLayout(R.string.update, R.drawable.ic_baseline_get_app_24).setOnClickListener(v -> install());
            } else if (installedVersionCode == thisVersionCode) {
                // Needs reinstall
                addToHorizontalLayout(R.string.reinstall, R.drawable.ic_baseline_get_app_24).setOnClickListener(v -> install());
            } else {
                // Needs downgrade
                if (Ops.isPrivileged()) {
                    addToHorizontalLayout(R.string.downgrade, R.drawable.ic_baseline_get_app_24).setOnClickListener(v -> install());
                }
            }
        }
    }
    // Set manifest
    if (FeatureController.isManifestEnabled()) {
        addToHorizontalLayout(R.string.manifest, R.drawable.ic_package_variant).setOnClickListener(v -> {
            Intent intent = new Intent(mActivity, ManifestViewerActivity.class);
            startActivityForSplit(intent);
        });
    }
    // Set scanner
    if (FeatureController.isScannerEnabled()) {
        addToHorizontalLayout(R.string.scanner, R.drawable.ic_baseline_security_24).setOnClickListener(v -> {
            Intent intent = new Intent(mActivity, ScannerActivity.class);
            intent.putExtra(ScannerActivity.EXTRA_IS_EXTERNAL, isExternalApk);
            startActivityForSplit(intent);
        });
    }
    // Root only features
    if (!mainModel.getIsExternalApk()) {
        // Shared prefs (root only)
        final List<ProxyFile> sharedPrefs = new ArrayList<>();
        ProxyFile[] tmpPaths = getSharedPrefs(mApplicationInfo.dataDir);
        if (tmpPaths != null)
            sharedPrefs.addAll(Arrays.asList(tmpPaths));
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            tmpPaths = getSharedPrefs(mApplicationInfo.deviceProtectedDataDir);
            if (tmpPaths != null)
                sharedPrefs.addAll(Arrays.asList(tmpPaths));
        }
        if (!sharedPrefs.isEmpty()) {
            CharSequence[] sharedPrefNames = new CharSequence[sharedPrefs.size()];
            for (int i = 0; i < sharedPrefs.size(); ++i) {
                sharedPrefNames[i] = sharedPrefs.get(i).getName();
            }
            addToHorizontalLayout(R.string.shared_prefs, R.drawable.ic_view_list_black_24dp).setOnClickListener(v -> new MaterialAlertDialogBuilder(mActivity).setTitle(R.string.shared_prefs).setItems(sharedPrefNames, (dialog, which) -> {
                Intent intent = new Intent(mActivity, SharedPrefsActivity.class);
                intent.putExtra(SharedPrefsActivity.EXTRA_PREF_LOCATION, sharedPrefs.get(which).getAbsolutePath());
                intent.putExtra(SharedPrefsActivity.EXTRA_PREF_LABEL, mPackageLabel);
                startActivity(intent);
            }).setNegativeButton(R.string.ok, null).show());
        }
        // Databases (root only)
        final List<ProxyFile> databases = new ArrayList<>();
        tmpPaths = getDatabases(mApplicationInfo.dataDir);
        if (tmpPaths != null)
            databases.addAll(Arrays.asList(tmpPaths));
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            tmpPaths = getDatabases(mApplicationInfo.deviceProtectedDataDir);
            if (tmpPaths != null)
                databases.addAll(Arrays.asList(tmpPaths));
        }
        if (!databases.isEmpty()) {
            CharSequence[] databases2 = new CharSequence[databases.size()];
            for (int i = 0; i < databases.size(); ++i) {
                databases2[i] = databases.get(i).getName();
            }
            addToHorizontalLayout(R.string.databases, R.drawable.ic_database).setOnClickListener(v -> new MaterialAlertDialogBuilder(mActivity).setTitle(R.string.databases).setItems(databases2, (dialog, i) -> {
                // TODO: 7/7/21 VACUUM the database before opening it
                Context ctx = AppManager.getContext();
                Path dbPath = new Path(ctx, databases.get(i));
                Intent openFile = new Intent(Intent.ACTION_VIEW);
                openFile.setDataAndType(FmProvider.getContentUri(dbPath), "application/vnd.sqlite3");
                openFile.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_GRANT_READ_URI_PERMISSION);
                if (openFile.resolveActivityInfo(ctx.getPackageManager(), 0) != null) {
                    ctx.startActivity(openFile);
                }
            }).setNegativeButton(R.string.ok, null).show());
        }
    }
    // End root only features
    // Set F-Droid
    Intent fdroid_intent = new Intent(Intent.ACTION_VIEW);
    fdroid_intent.setData(Uri.parse("https://f-droid.org/packages/" + mPackageName));
    List<ResolveInfo> resolvedActivities = mPackageManager.queryIntentActivities(fdroid_intent, 0);
    if (resolvedActivities.size() > 0) {
        addToHorizontalLayout(R.string.fdroid, R.drawable.ic_frost_fdroid_black_24dp).setOnClickListener(v -> {
            try {
                startActivity(fdroid_intent);
            } catch (Exception ignored) {
            }
        });
    }
    // Set Aurora Store
    try {
        PackageInfo auroraInfo = mPackageManager.getPackageInfo(PACKAGE_NAME_AURORA_STORE, 0);
        if (PackageInfoCompat.getLongVersionCode(auroraInfo) == 36L || !auroraInfo.applicationInfo.enabled) {
            // Aurora Store is disabled or the installed version has promotional apps
            throw new PackageManager.NameNotFoundException();
        }
        addToHorizontalLayout(R.string.store, R.drawable.ic_frost_aurorastore_black_24dp).setOnClickListener(v -> {
            Intent intent = new Intent(Intent.ACTION_VIEW);
            intent.setPackage(PACKAGE_NAME_AURORA_STORE);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            intent.setData(Uri.parse("https://play.google.com/store/apps/details?id=" + mPackageName));
            try {
                startActivity(intent);
            } catch (Exception ignored) {
            }
        });
    } catch (PackageManager.NameNotFoundException ignored) {
    }
    View v = mHorizontalLayout.getChildAt(0);
    if (v != null)
        v.requestFocus();
}
Also used : Chip(com.google.android.material.chip.Chip) Arrays(java.util.Arrays) Bundle(android.os.Bundle) NonNull(androidx.annotation.NonNull) BackupDialogFragment(io.github.muntashirakon.AppManager.backup.BackupDialogFragment) BuildConfig(io.github.muntashirakon.AppManager.BuildConfig) ComponentRule(io.github.muntashirakon.AppManager.rules.struct.ComponentRule) ProxyFile(io.github.muntashirakon.io.ProxyFile) Uri(android.net.Uri) ImageView(android.widget.ImageView) Drawable(android.graphics.drawable.Drawable) LogViewerActivity(io.github.muntashirakon.AppManager.logcat.LogViewerActivity) Manifest(android.Manifest) UIUtils.getStyledKeyValue(io.github.muntashirakon.AppManager.utils.UIUtils.getStyledKeyValue) NoRootAccessibilityService(io.github.muntashirakon.AppManager.accessibility.NoRootAccessibilityService) UIUtils.displayLongToast(io.github.muntashirakon.AppManager.utils.UIUtils.displayLongToast) UIUtils.displayShortToast(io.github.muntashirakon.AppManager.utils.UIUtils.displayShortToast) Fragment(androidx.fragment.app.Fragment) ClipboardManager(android.content.ClipboardManager) UiThread(androidx.annotation.UiThread) ContextCompat(androidx.core.content.ContextCompat) R(io.github.muntashirakon.AppManager.R) ArrayMap(androidx.collection.ArrayMap) Runner(io.github.muntashirakon.AppManager.runner.Runner) PackageManagerCompat(io.github.muntashirakon.AppManager.servermanager.PackageManagerCompat) LinearProgressIndicator(com.google.android.material.progressindicator.LinearProgressIndicator) NetworkPolicyManager(android.net.NetworkPolicyManager) KeyStoreUtils(io.github.muntashirakon.AppManager.utils.KeyStoreUtils) FileUtils(io.github.muntashirakon.AppManager.utils.FileUtils) UIUtils(io.github.muntashirakon.AppManager.utils.UIUtils) Executors(java.util.concurrent.Executors) StringRes(androidx.annotation.StringRes) Nullable(androidx.annotation.Nullable) SearchableMultiChoiceDialogBuilder(io.github.muntashirakon.AppManager.types.SearchableMultiChoiceDialogBuilder) LangUtils(io.github.muntashirakon.AppManager.utils.LangUtils) UIUtils.getColoredText(io.github.muntashirakon.AppManager.utils.UIUtils.getColoredText) ActivityResultContracts(androidx.activity.result.contract.ActivityResultContracts) MagiskHide(io.github.muntashirakon.AppManager.magisk.MagiskHide) LinearLayoutManager(androidx.recyclerview.widget.LinearLayoutManager) UiThreadHandler(io.github.muntashirakon.AppManager.utils.UiThreadHandler) PackageInstallerActivity(io.github.muntashirakon.AppManager.apk.installer.PackageInstallerActivity) RunnerUtils(io.github.muntashirakon.AppManager.runner.RunnerUtils) ServiceHelper(io.github.muntashirakon.AppManager.logcat.helper.ServiceHelper) SsaidSettings(io.github.muntashirakon.AppManager.ssaid.SsaidSettings) TextInputLayout(com.google.android.material.textfield.TextInputLayout) PackageSizeInfo(io.github.muntashirakon.AppManager.types.PackageSizeInfo) HIDDEN_API_ENFORCEMENT_DISABLED(io.github.muntashirakon.AppManager.servermanager.ApplicationInfoCompat.HIDDEN_API_ENFORCEMENT_DISABLED) WorkerThread(androidx.annotation.WorkerThread) RemoteException(android.os.RemoteException) ArrayList(java.util.ArrayList) PermissionUtils(io.github.muntashirakon.AppManager.utils.PermissionUtils) SpannableStringBuilder(android.text.SpannableStringBuilder) Path(io.github.muntashirakon.io.Path) UIUtils.getSecondaryText(io.github.muntashirakon.AppManager.utils.UIUtils.getSecondaryText) MenuInflater(android.view.MenuInflater) Menu(android.view.Menu) Settings(android.provider.Settings) SearchCriteria(io.github.muntashirakon.AppManager.logcat.struct.SearchCriteria) DateUtils(io.github.muntashirakon.AppManager.utils.DateUtils) Formatter(android.text.format.Formatter) NetworkPolicyManagerCompat(io.github.muntashirakon.AppManager.servermanager.NetworkPolicyManagerCompat) ViewModelProvider(androidx.lifecycle.ViewModelProvider) ComponentName(android.content.ComponentName) PackageInfoCompat(androidx.core.content.pm.PackageInfoCompat) IOException(java.io.IOException) AnyThread(androidx.annotation.AnyThread) WhatsNewDialogFragment(io.github.muntashirakon.AppManager.apk.whatsnew.WhatsNewDialogFragment) HIDDEN_API_ENFORCEMENT_JUST_WARN(io.github.muntashirakon.AppManager.servermanager.ApplicationInfoCompat.HIDDEN_API_ENFORCEMENT_JUST_WARN) Utils(io.github.muntashirakon.AppManager.utils.Utils) File(java.io.File) AccessibilityMultiplexer(io.github.muntashirakon.AppManager.accessibility.AccessibilityMultiplexer) FastScrollerBuilder(me.zhanghai.android.fastscroll.FastScrollerBuilder) UIUtils.getSmallerText(io.github.muntashirakon.AppManager.utils.UIUtils.getSmallerText) DigestUtils(io.github.muntashirakon.AppManager.utils.DigestUtils) AppDetailsActivity(io.github.muntashirakon.AppManager.details.AppDetailsActivity) IntentUtils(io.github.muntashirakon.AppManager.utils.IntentUtils) ComponentsBlocker(io.github.muntashirakon.AppManager.rules.compontents.ComponentsBlocker) PackageInstallerCompat(io.github.muntashirakon.AppManager.apk.installer.PackageInstallerCompat) PackageUtils(io.github.muntashirakon.AppManager.utils.PackageUtils) FeatureController(io.github.muntashirakon.AppManager.settings.FeatureController) PackageManager(android.content.pm.PackageManager) ProfileManager(io.github.muntashirakon.AppManager.profiles.ProfileManager) Spannable(android.text.Spannable) MaterialAlertDialogBuilder(com.google.android.material.dialog.MaterialAlertDialogBuilder) UIUtils.getTitleText(io.github.muntashirakon.AppManager.utils.UIUtils.getTitleText) ManifestViewerActivity(io.github.muntashirakon.AppManager.details.ManifestViewerActivity) Log(io.github.muntashirakon.AppManager.logs.Log) DrawableRes(androidx.annotation.DrawableRes) ScannerActivity(io.github.muntashirakon.AppManager.scanner.ScannerActivity) HIDDEN_API_ENFORCEMENT_DEFAULT(io.github.muntashirakon.AppManager.servermanager.ApplicationInfoCompat.HIDDEN_API_ENFORCEMENT_DEFAULT) AppManager(io.github.muntashirakon.AppManager.AppManager) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) HIDDEN_API_ENFORCEMENT_ENABLED(io.github.muntashirakon.AppManager.servermanager.ApplicationInfoCompat.HIDDEN_API_ENFORCEMENT_ENABLED) GuardedBy(androidx.annotation.GuardedBy) Locale(java.util.Locale) View(android.view.View) Button(android.widget.Button) RecyclerView(androidx.recyclerview.widget.RecyclerView) AppUsageStatsManager(io.github.muntashirakon.AppManager.usage.AppUsageStatsManager) BetterActivityResult(io.github.muntashirakon.AppManager.utils.BetterActivityResult) ApkUtils(io.github.muntashirakon.AppManager.apk.ApkUtils) PermissionUtils.hasDumpPermission(io.github.muntashirakon.AppManager.utils.PermissionUtils.hasDumpPermission) AppDetailsViewModel(io.github.muntashirakon.AppManager.details.AppDetailsViewModel) Utils.openAsFolderInFM(io.github.muntashirakon.AppManager.utils.Utils.openAsFolderInFM) ViewGroup(android.view.ViewGroup) UserPackagePair(io.github.muntashirakon.AppManager.types.UserPackagePair) TERMUX_PERM_RUN_COMMAND(io.github.muntashirakon.AppManager.utils.PermissionUtils.TERMUX_PERM_RUN_COMMAND) List(java.util.List) TextView(android.widget.TextView) TextUtils(com.android.internal.util.TextUtils) SwipeRefreshLayout(io.github.muntashirakon.widget.SwipeRefreshLayout) ProfileMetaManager(io.github.muntashirakon.AppManager.profiles.ProfileMetaManager) ApplicationInfo(android.content.pm.ApplicationInfo) Signature(android.content.pm.Signature) ColorRes(androidx.annotation.ColorRes) AppDetailsItem(io.github.muntashirakon.AppManager.details.struct.AppDetailsItem) Typeface(android.graphics.Typeface) HIDDEN_API_ENFORCEMENT_BLACK(io.github.muntashirakon.AppManager.servermanager.ApplicationInfoCompat.HIDDEN_API_ENFORCEMENT_BLACK) Context(android.content.Context) TextInputEditText(com.google.android.material.textfield.TextInputEditText) AlertDialog(androidx.appcompat.app.AlertDialog) AppDetailsFragment(io.github.muntashirakon.AppManager.details.AppDetailsFragment) Pair(android.util.Pair) Intent(android.content.Intent) MainThread(androidx.annotation.MainThread) HashMap(java.util.HashMap) Ops(io.github.muntashirakon.AppManager.settings.Ops) PackageInfo(android.content.pm.PackageInfo) AtomicReference(java.util.concurrent.atomic.AtomicReference) FmProvider(io.github.muntashirakon.AppManager.fm.FmProvider) MenuItem(android.view.MenuItem) ClipData(android.content.ClipData) ApkFile(io.github.muntashirakon.AppManager.apk.ApkFile) MaterialButton(com.google.android.material.button.MaterialButton) SharedPrefsActivity(io.github.muntashirakon.AppManager.sharedpref.SharedPrefsActivity) ArrayUtils(io.github.muntashirakon.AppManager.utils.ArrayUtils) Build(android.os.Build) ExecutorService(java.util.concurrent.ExecutorService) OutputStream(java.io.OutputStream) LayoutInflater(android.view.LayoutInflater) ActivityCompat(androidx.core.app.ActivityCompat) RulesTypeSelectionDialogFragment(io.github.muntashirakon.AppManager.rules.RulesTypeSelectionDialogFragment) MagiskDenyList(io.github.muntashirakon.AppManager.magisk.MagiskDenyList) ScrollableDialogBuilder(io.github.muntashirakon.dialog.ScrollableDialogBuilder) ResolveInfo(android.content.pm.ResolveInfo) DialogTitleBuilder(io.github.muntashirakon.dialog.DialogTitleBuilder) Bitmap(android.graphics.Bitmap) MagiskProcess(io.github.muntashirakon.AppManager.magisk.MagiskProcess) Collections(java.util.Collections) MimeTypeMap(android.webkit.MimeTypeMap) ActivityResult(androidx.activity.result.ActivityResult) ArrayList(java.util.ArrayList) BetterActivityResult(io.github.muntashirakon.AppManager.utils.BetterActivityResult) ActivityResult(androidx.activity.result.ActivityResult) ResolveInfo(android.content.pm.ResolveInfo) PackageManager(android.content.pm.PackageManager) Context(android.content.Context) Path(io.github.muntashirakon.io.Path) Bundle(android.os.Bundle) ProxyFile(io.github.muntashirakon.io.ProxyFile) PackageInfo(android.content.pm.PackageInfo) Intent(android.content.Intent) WhatsNewDialogFragment(io.github.muntashirakon.AppManager.apk.whatsnew.WhatsNewDialogFragment) SharedPrefsActivity(io.github.muntashirakon.AppManager.sharedpref.SharedPrefsActivity) MaterialAlertDialogBuilder(com.google.android.material.dialog.MaterialAlertDialogBuilder) ImageView(android.widget.ImageView) View(android.view.View) RecyclerView(androidx.recyclerview.widget.RecyclerView) TextView(android.widget.TextView) RemoteException(android.os.RemoteException) IOException(java.io.IOException) NoRootAccessibilityService(io.github.muntashirakon.AppManager.accessibility.NoRootAccessibilityService) ScrollableDialogBuilder(io.github.muntashirakon.dialog.ScrollableDialogBuilder) RemoteException(android.os.RemoteException)

Aggregations

Manifest (android.Manifest)1 ClipData (android.content.ClipData)1 ClipboardManager (android.content.ClipboardManager)1 ComponentName (android.content.ComponentName)1 Context (android.content.Context)1 Intent (android.content.Intent)1 ApplicationInfo (android.content.pm.ApplicationInfo)1 PackageInfo (android.content.pm.PackageInfo)1 PackageManager (android.content.pm.PackageManager)1 ResolveInfo (android.content.pm.ResolveInfo)1 Signature (android.content.pm.Signature)1 Bitmap (android.graphics.Bitmap)1 Typeface (android.graphics.Typeface)1 Drawable (android.graphics.drawable.Drawable)1 NetworkPolicyManager (android.net.NetworkPolicyManager)1 Uri (android.net.Uri)1 Build (android.os.Build)1 Bundle (android.os.Bundle)1 RemoteException (android.os.RemoteException)1 Settings (android.provider.Settings)1