Loading res/drawable/ic_toc.xml 0 → 100644 +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> res/values/strings.xml +6 −0 Original line number Diff line number Diff line Loading @@ -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> src/com/android/settings/applications/ManagePermissions.java +79 −11 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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(); Loading @@ -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 Loading Loading @@ -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; } } } Loading
res/drawable/ic_toc.xml 0 → 100644 +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>
res/values/strings.xml +6 −0 Original line number Diff line number Diff line Loading @@ -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>
src/com/android/settings/applications/ManagePermissions.java +79 −11 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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(); Loading @@ -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 Loading Loading @@ -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; } } }