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

Commit b54d0df4 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Fixed custom permission ui not updating"

parents 2b70676c c2910ccb
Loading
Loading
Loading
Loading
+76 −44
Original line number Diff line number Diff line
@@ -43,6 +43,7 @@ import android.view.View;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.annotation.StringRes;
import androidx.fragment.app.Fragment;
import androidx.preference.Preference;
import androidx.preference.PreferenceCategory;
@@ -137,6 +138,10 @@ public final class AppPermissionsFragment extends SettingsWithLargeHeader {
    @Override
    public void onResume() {
        super.onResume();
        refreshAndUpdatePreferences();
    }

    private void refreshAndUpdatePreferences() {
        mAppPermissions.refresh();
        updatePreferences();
    }
@@ -216,14 +221,28 @@ public final class AppPermissionsFragment extends SettingsWithLargeHeader {

        findPreference(PREFERENCE_ALLOWED_FOREGROUND).setVisible(false);

        if (mExtraScreen != null) {
            mExtraScreen.removeAll();
        if (mExtraScreen == null) {
            mExtraScreen = getPreferenceManager().inflateFromResource(context,
                    R.xml.allowed_denied, mExtraScreen);
        }

        final Preference extraPerms = new Preference(context);
        extraPerms.setIcon(R.drawable.ic_toc);
        extraPerms.setTitle(R.string.additional_permissions);
        boolean extraPermsAreAllowed = false;
        PreferenceCategory allowedExtra =
                (PreferenceCategory) mExtraScreen.findPreference(PREFERENCE_ALLOWED);
        PreferenceCategory deniedExtra =
                (PreferenceCategory) mExtraScreen.findPreference(PREFERENCE_DENIED);

        allowedExtra.removeAll();
        deniedExtra.removeAll();

        mExtraScreen.findPreference(PREFERENCE_ALLOWED_FOREGROUND).setVisible(false);

        final Preference extraAllowPerms = new Preference(context);
        extraAllowPerms.setIcon(R.drawable.ic_toc);
        extraAllowPerms.setTitle(R.string.additional_permissions);

        final Preference extraDenyPerms = new Preference(context);
        extraDenyPerms.setIcon(R.drawable.ic_toc);
        extraDenyPerms.setTitle(R.string.additional_permissions);

        ArrayList<AppPermissionGroup> groups = new ArrayList<>(
                mAppPermissions.getPermissionGroups());
@@ -283,19 +302,40 @@ public final class AppPermissionsFragment extends SettingsWithLargeHeader {
                        group.areRuntimePermissionsGranted() ? allowed : denied;
                category.addPreference(preference);
            } else {
                if (mExtraScreen == null) {
                    mExtraScreen = getPreferenceManager().createPreferenceScreen(context);
                PreferenceCategory category =
                        group.areRuntimePermissionsGranted() ? allowedExtra : deniedExtra;
                category.addPreference(preference);
            }
                mExtraScreen.addPreference(preference);
                if (group.areRuntimePermissionsGranted()) {
                    extraPermsAreAllowed = true;
        }

        AdditionalPermissionsFragment frag = new AdditionalPermissionsFragment();
        if (allowedExtra.getPreferenceCount() > 0) {
            setUpCustomPermissionsScreen(extraAllowPerms, frag, allowedExtra.getPreferenceCount());
            allowed.addPreference(extraAllowPerms);
        } else {
            setNoPermissionPreference(allowedExtra, R.string.no_permissions_allowed, context);
        }

        if (deniedExtra.getPreferenceCount() > 0) {
            setUpCustomPermissionsScreen(extraDenyPerms, frag, deniedExtra.getPreferenceCount());
            denied.addPreference(extraDenyPerms);
        } else {
            setNoPermissionPreference(deniedExtra, R.string.no_permissions_denied, context);
        }

        if (allowed.getPreferenceCount() == 0) {
            setNoPermissionPreference(allowed, R.string.no_permissions_allowed, context);
        }
        if (denied.getPreferenceCount() == 0) {
            setNoPermissionPreference(denied, R.string.no_permissions_denied, context);
        }

        if (mExtraScreen != null) {
        setLoading(false /* loading */, true /* animate */);
    }

    private void setUpCustomPermissionsScreen(Preference extraPerms,
            AdditionalPermissionsFragment frag, int count) {
        extraPerms.setOnPreferenceClickListener(preference -> {
                AdditionalPermissionsFragment frag = new AdditionalPermissionsFragment();
            setPackageNameAndUserHandleAndSessionId(frag,
                    getArguments().getString(Intent.EXTRA_PACKAGE_NAME),
                    getArguments().getParcelable(Intent.EXTRA_USER),
@@ -307,27 +347,17 @@ public final class AppPermissionsFragment extends SettingsWithLargeHeader {
                    .commit();
            return true;
        });
            int count = mExtraScreen.getPreferenceCount();

        extraPerms.setSummary(getResources().getQuantityString(
                R.plurals.additional_permissions_more, count, count));
            PreferenceCategory category = extraPermsAreAllowed ? allowed : denied;
            category.addPreference(extraPerms);
    }

        if (allowed.getPreferenceCount() == 0) {
            Preference empty = new Preference(context);
            empty.setTitle(getString(R.string.no_permissions_allowed));
            empty.setSelectable(false);
            allowed.addPreference(empty);
        }
        if (denied.getPreferenceCount() == 0) {
    private void setNoPermissionPreference(PreferenceCategory category, @StringRes int stringId,
            Context context) {
        Preference empty = new Preference(context);
            empty.setTitle(getString(R.string.no_permissions_denied));
        empty.setTitle(getString(stringId));
        empty.setSelectable(false);
            denied.addPreference(empty);
        }

        setLoading(false /* loading */, true /* animate */);
        category.addPreference(empty);
    }

    private void logAppPermissionsFragmentView() {
@@ -408,14 +438,17 @@ public final class AppPermissionsFragment extends SettingsWithLargeHeader {
        public void onCreate(Bundle savedInstanceState) {
            mOuterFragment = (AppPermissionsFragment) getTargetFragment();
            super.onCreate(savedInstanceState);

            setHeader(mOuterFragment.mIcon, mOuterFragment.mLabel, null, null, false);
            setHasOptionsMenu(true);
            setPreferenceScreen(mOuterFragment.mExtraScreen);
        }

        @Override
        public void onViewCreated(View view, Bundle savedInstanceState) {
            super.onViewCreated(view, savedInstanceState);
        public void onResume() {
            super.onResume();

            mOuterFragment.refreshAndUpdatePreferences();
            String packageName = getArguments().getString(Intent.EXTRA_PACKAGE_NAME);
            UserHandle userHandle = getArguments().getParcelable(Intent.EXTRA_USER);
            bindUi(this, getPackageInfo(getActivity(), packageName, userHandle));
@@ -423,8 +456,7 @@ public final class AppPermissionsFragment extends SettingsWithLargeHeader {

        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            switch (item.getItemId()) {
            case android.R.id.home:
            if (item.getItemId() == android.R.id.home) {
                getFragmentManager().popBackStack();
                return true;
            }