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

Commit 78161c73 authored by Jason Monk's avatar Jason Monk Committed by Android (Google) Code Review
Browse files

Merge "Add additional permissions button to manage perms" into mnc-dev

parents 0c3d8f1c c25f1188
Loading
Loading
Loading
Loading
+24 −0
Original line number Diff line number Diff line
<!--
    Copyright (C) 2015 The Android Open Source Project

    Licensed under the Apache License, Version 2.0 (the "License");
    you may not use this file except in compliance with the License.
    You may obtain a copy of the License at

         http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
        android:width="24.0dp"
        android:height="24.0dp"
        android:viewportWidth="48.0"
        android:viewportHeight="48.0">
    <path
        android:fillColor="#FF000000"
        android:pathData="M6.0,18.0l28.0,0.0l0.0,-4.0L6.0,14.0l0.0,4.0zm0.0,8.0l28.0,0.0l0.0,-4.0L6.0,22.0l0.0,4.0zm0.0,8.0l28.0,0.0l0.0,-4.0L6.0,30.0l0.0,4.0zm32.0,0.0l4.0,0.0l0.0,-4.0l-4.0,0.0l0.0,4.0zm0.0,-20.0l0.0,4.0l4.0,0.0l0.0,-4.0l-4.0,0.0zm0.0,12.0l4.0,0.0l0.0,-4.0l-4.0,0.0l0.0,4.0z"/>
</vector>
+6 −0
Original line number Diff line number Diff line
@@ -6592,4 +6592,10 @@
    <!-- Turn on settings for system ui tuner [CHAR LIMIT=40] -->
    <string name="system_ui_settings">Show SystemUI Tuner</string>

    <!-- Label for button that leads to more permissions [CHAR LIMIT=40] -->
    <string name="additional_permissions">Additional permissions</string>

    <!-- Description of how many more permissions to view on next page [CHAR LIMIT=30] -->
    <string name="additional_permissions_more"><xliff:g id="count" example="2">%1$d</xliff:g> more</string>

</resources>
+79 −11
Original line number Diff line number Diff line
@@ -15,16 +15,22 @@
 */
package com.android.settings.applications;

import android.app.Activity;
import android.app.FragmentTransaction;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import android.content.res.Resources.Theme;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.Preference.OnPreferenceClickListener;
import android.preference.PreferenceScreen;
import android.util.Log;
import android.view.View;

import com.android.internal.logging.MetricsLogger;
import com.android.settings.AppHeader;
import com.android.settings.R;
import com.android.settings.SettingsPreferenceFragment;
import com.android.settingslib.applications.PermissionsInfo;
@@ -33,12 +39,16 @@ import com.android.settingslib.applications.PermissionsInfo.PermissionGroup;
import java.util.List;

public class ManagePermissions extends SettingsPreferenceFragment
        implements PermissionsInfo.Callback, OnPreferenceClickListener {
        implements PermissionsInfo.Callback {

    private static final String TAG = "ManagePermissions";

    private static final String OS_PKG = "android";

    private PermissionsInfo mPermissionsInfo;

    private PreferenceScreen mExtraScreen;

    @Override
    public void onResume() {
        super.onResume();
@@ -54,37 +64,73 @@ public class ManagePermissions extends SettingsPreferenceFragment
    }

    private void refreshUi() {
        Activity activity = getActivity();
        PreferenceScreen screen = getPreferenceScreen();
        if (screen == null) {
            screen = getPreferenceManager().createPreferenceScreen(getActivity());
            screen = getPreferenceManager().createPreferenceScreen(activity);
            setPreferenceScreen(screen);
        } else {
            screen.removeAll();
            if (mExtraScreen != null) {
                mExtraScreen.removeAll();
            }
        }
        final int count = screen.getPreferenceCount();
        if (count == 0) {
            final Preference extraScreenPreference = new Preference(activity);
            extraScreenPreference.setIcon(R.drawable.ic_toc);
            extraScreenPreference.setTitle(R.string.additional_permissions);
            List<PermissionGroup> groups = mPermissionsInfo.getGroups();
            for (PermissionGroup group : groups) {
                if (group.possibleApps.size() == 0) continue;
                PermissionPreference pref = new PermissionPreference(getActivity(), group);
                PermissionPreference pref = new PermissionPreference(activity, group);
                pref.refreshUi();
                if (group.packageName.equals(OS_PKG)) {
                    screen.addPreference(pref);
                } else {
                    if (mExtraScreen == null) {
                        mExtraScreen = getPreferenceManager().createPreferenceScreen(activity);
                    }
                    mExtraScreen.addPreference(pref);
                }
            }
            if (mExtraScreen != null) {
                extraScreenPreference.setOnPreferenceClickListener(new OnPreferenceClickListener() {
                    @Override
                    public boolean onPreferenceClick(Preference preference) {
                        AdditionalPermissionsFragment frag = new AdditionalPermissionsFragment();
                        frag.setTargetFragment(ManagePermissions.this, 0);
                        FragmentTransaction ft = getFragmentManager().beginTransaction();
                        ft.replace(R.id.main_content, frag);
                        ft.addToBackStack("AdditionalPerms");
                        ft.commit();
                        return true;
                    }
                });
                extraScreenPreference.setSummary(getString(R.string.additional_permissions_more,
                        mExtraScreen.getPreferenceCount()));
                screen.addPreference(extraScreenPreference);
            }
        } else {
            for (int i = 0; i < count; i++) {
                ((PermissionPreference) screen.getPreference(i)).refreshUi();
            updatePrefs(screen);
            if (mExtraScreen != null) {
                updatePrefs(mExtraScreen);
            }
        }
    }

    @Override
    public void onPermissionLoadComplete() {
        refreshUi();
    private void updatePrefs(PreferenceScreen screen) {
        for (int i = 0; i < screen.getPreferenceCount(); i++) {
            Preference pref = screen.getPreference(i);
            if (pref instanceof PermissionPreference) {
                ((PermissionPreference) pref).refreshUi();
            }
        }
    }

    @Override
    public boolean onPreferenceClick(Preference preference) {
        return true;
    public void onPermissionLoadComplete() {
        refreshUi();
    }

    @Override
@@ -121,4 +167,26 @@ public class ManagePermissions extends SettingsPreferenceFragment
        }
    }

    public static class AdditionalPermissionsFragment extends SettingsPreferenceFragment {
        @Override
        public void onCreate(Bundle icicle) {
            super.onCreate(icicle);
            setPreferenceScreen(((ManagePermissions) getTargetFragment()).mExtraScreen);
        }

        @Override
        public void onViewCreated(View view, Bundle savedInstanceState) {
            super.onViewCreated(view, savedInstanceState);
            Resources resources = getResources();
            Theme theme = getActivity().getTheme();
            AppHeader.createAppHeader(this, resources.getDrawable(R.drawable.ic_toc, theme),
                    getString(R.string.additional_permissions), null, android.R.color.white);
        }

        @Override
        protected int getMetricsCategory() {
            return MetricsLogger.MANAGE_PERMISSIONS;
        }
    }

}