Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c729d374 authored by Michael W's avatar Michael W
Browse files

AppOps: Refactor code

* Functions should be short
* Gain readability by moving around code

Change-Id: I227aaa8e0b259555fb74d9b52c3a69d72638ef10
parent e6e94627
Loading
Loading
Loading
Loading
+104 −70
Original line number Diff line number Diff line
@@ -167,8 +167,6 @@ public class AppOpsDetails extends SettingsPreferenceFragment {
            return false;
        }

        final Resources res = getActivity().getResources();

        mPreferenceScreen.removeAll();
        setAppHeader(mPackageInfo);

@@ -184,8 +182,6 @@ public class AppOpsDetails extends SettingsPreferenceFragment {
            List<AppOpsState.AppOpEntry> entries = mState.buildState(tpl,
                    mPackageInfo.applicationInfo.uid, mPackageInfo.packageName, true);
            for (final AppOpsState.AppOpEntry entry : entries) {
                final AppOpsManager.OpEntry firstOp = entry.getOpEntry(0);
                Drawable icon = null;
                String perm = null;
                int op = 0;
                // Find the first permission with a known name
@@ -193,6 +189,35 @@ public class AppOpsDetails extends SettingsPreferenceFragment {
                    op = entry.getOpEntry(i).getOp();
                    perm = AppOpsManager.opToPermission(op);
                }
                Drawable icon = getIconByPermission(perm);
                if (icon == null && op != 0 && OP_ICONS.containsKey(op)) {
                    icon = getActivity().getDrawable(OP_ICONS.get(op));
                }

                final AppOpsManager.OpEntry firstOp = entry.getOpEntry(0);
                final int switchOp = AppOpsManager.opToSwitch(firstOp.getOp());

                // ListPreference for 3 states: ask, allow, deny
                if (AppOpsManager.isStrictOp(switchOp)) {
                    ListPreference listPref = getListPrefForEntry(entry, icon);
                    mPreferenceScreen.addPreference(listPref);
                } else {
                    SwitchPreference switchPref = getSwitchPrefForEntry(entry, icon);
                    mPreferenceScreen.addPreference(switchPref);
                }
            }
        }

        if (mPreferenceScreen.getPreferenceCount() == 0) {
            Preference noBlockablePermissionsPref = getNoBlockablePermissionsPref();
            mPreferenceScreen.addPreference(noBlockablePermissionsPref);
        }

        return true;
    }

    private Drawable getIconByPermission(String perm) {
        Drawable icon = null;
        if (perm != null) {
            try {
                PermissionInfo pi = mPm.getPermissionInfo(perm, 0);
@@ -205,19 +230,20 @@ public class AppOpsDetails extends SettingsPreferenceFragment {
            } catch (NameNotFoundException e) {
            }
        }
                if (icon == null && op != 0 && OP_ICONS.containsKey(op)) {
                    icon = getActivity().getDrawable(OP_ICONS.get(op));
        return icon;
    }

    private ListPreference getListPrefForEntry(final AppOpsState.AppOpEntry entry, Drawable icon) {
        final Resources res = getActivity().getResources();

        final AppOpsManager.OpEntry firstOp = entry.getOpEntry(0);
        final AppOpsManager.PackageOps pkgOps = entry.getPackageOps();
        final int uid = pkgOps.getUid();
        final String pkgName = pkgOps.getPackageName();
        final int switchOp = AppOpsManager.opToSwitch(firstOp.getOp());
                int mode = mAppOps.checkOpNoThrow(switchOp, uid, pkgName);
        final int mode = mAppOps.checkOpNoThrow(switchOp, uid, pkgName);
        final CharSequence opName = entry.getSwitchText(mState);

                CharSequence opName = entry.getSwitchText(mState);
                // ListPreference for 3 states: ask, allow, deny
                if (AppOpsManager.isStrictOp(switchOp)) {
        ListPreference listPref = new ListPreference(getActivity());
        listPref.setLayoutResource(R.layout.preference_appops);
        listPref.setIcon(icon);
@@ -242,14 +268,27 @@ public class AppOpsDetails extends SettingsPreferenceFragment {
                return true;
            }
        });
                    mPreferenceScreen.addPreference(listPref);
                } else {

        return listPref;
    }

    private SwitchPreference getSwitchPrefForEntry(final AppOpsState.AppOpEntry entry,
                                                   Drawable icon) {
        final Resources res = getActivity().getResources();

        final AppOpsManager.OpEntry firstOp = entry.getOpEntry(0);
        final AppOpsManager.PackageOps pkgOps = entry.getPackageOps();
        final int uid = pkgOps.getUid();
        final String pkgName = pkgOps.getPackageName();
        final int switchOp = AppOpsManager.opToSwitch(firstOp.getOp());
        final int mode = mAppOps.checkOpNoThrow(switchOp, uid, pkgName);
        final CharSequence opName = entry.getSwitchText(mState);

        SwitchPreference switchPref = new SwitchPreference(getActivity());
        switchPref.setLayoutResource(R.layout.preference_appops);
        switchPref.setIcon(icon);
        switchPref.setTitle(opName);
                    String summary = getSummary(entry.getCountsText(res),
                            entry.getTimeText(res, true));
        String summary = getSummary(entry.getCountsText(res), entry.getTimeText(res, true));
        switchPref.setSummary(summary);
        switchPref.setChecked(mode == AppOpsManager.MODE_ALLOWED);
        switchPref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@@ -263,21 +302,16 @@ public class AppOpsDetails extends SettingsPreferenceFragment {
                return true;
            }
        });
                    mPreferenceScreen.addPreference(switchPref);
                }
            }

        return switchPref;
    }

        if (mPreferenceScreen.getPreferenceCount() == 0) {
    private Preference getNoBlockablePermissionsPref() {
        Preference emptyPref = new Preference(getActivity());
        emptyPref.setTitle(R.string.app_ops_no_blockable_permissions);
        emptyPref.setSelectable(false);
        emptyPref.setEnabled(false);

            mPreferenceScreen.addPreference(emptyPref);
        }

        return true;
        return emptyPref;
    }

    private void setIntentAndFinish(boolean finish, boolean appChanged) {