diff options
author | Jason Monk <jmonk@google.com> | 2015-05-13 13:59:30 -0400 |
---|---|---|
committer | Jason Monk <jmonk@google.com> | 2015-05-13 14:40:12 -0400 |
commit | c3582acfa0b9d65b29a7e19cc55551fbbdddbc4e (patch) | |
tree | 478dc2712b877652d390c9720f54991ec6a19ca4 | |
parent | 0430e255aebb6cf64f65eeaaf052786ee2834819 (diff) | |
download | android_packages_apps_PackageInstaller-c3582acfa0b9d65b29a7e19cc55551fbbdddbc4e.tar.gz android_packages_apps_PackageInstaller-c3582acfa0b9d65b29a7e19cc55551fbbdddbc4e.tar.bz2 android_packages_apps_PackageInstaller-c3582acfa0b9d65b29a7e19cc55551fbbdddbc4e.zip |
Add additional permissions to app perms screen
Bug: 20269176
Change-Id: Ibf77e352ebc8f0b7f16e839927d6df5a231c5c16
-rw-r--r-- | res/drawable/ic_toc.xml | 24 | ||||
-rw-r--r-- | res/values/strings.xml | 6 | ||||
-rw-r--r-- | src/com/android/packageinstaller/permission/ui/AppPermissionsFragment.java | 72 | ||||
-rw-r--r-- | src/com/android/packageinstaller/permission/ui/SettingsWithHeader.java | 6 |
4 files changed, 96 insertions, 12 deletions
diff --git a/res/drawable/ic_toc.xml b/res/drawable/ic_toc.xml new file mode 100644 index 00000000..66c476be --- /dev/null +++ b/res/drawable/ic_toc.xml @@ -0,0 +1,24 @@ +<!-- + 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> diff --git a/res/values/strings.xml b/res/values/strings.xml index 219ab431..4af162f1 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -206,4 +206,10 @@ <!-- Label when app requests no permissions --> <string name="no_permissions">No permissions</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> diff --git a/src/com/android/packageinstaller/permission/ui/AppPermissionsFragment.java b/src/com/android/packageinstaller/permission/ui/AppPermissionsFragment.java index 8fc78a54..8c026946 100644 --- a/src/com/android/packageinstaller/permission/ui/AppPermissionsFragment.java +++ b/src/com/android/packageinstaller/permission/ui/AppPermissionsFragment.java @@ -19,6 +19,7 @@ package com.android.packageinstaller.permission.ui; import android.annotation.Nullable; import android.app.ActionBar; import android.app.Activity; +import android.app.FragmentTransaction; import android.content.Intent; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; @@ -28,6 +29,7 @@ import android.net.Uri; import android.os.Bundle; import android.preference.Preference; import android.preference.Preference.OnPreferenceChangeListener; +import android.preference.Preference.OnPreferenceClickListener; import android.preference.PreferenceScreen; import android.preference.SwitchPreference; import android.provider.Settings; @@ -42,17 +44,21 @@ import android.widget.TextView; import android.widget.Toast; import com.android.packageinstaller.R; -import com.android.packageinstaller.permission.utils.Utils; import com.android.packageinstaller.permission.model.AppPermissions; import com.android.packageinstaller.permission.model.PermissionGroup; +import com.android.packageinstaller.permission.utils.Utils; public final class AppPermissionsFragment extends SettingsWithHeader implements OnPreferenceChangeListener { + private static final String LOG_TAG = "ManagePermsFragment"; + private static final String OS_PKG = "android"; + private static final String EXTRA_HIDE_INFO_BUTTON = "hideInfoButton"; private AppPermissions mAppPermissions; + private PreferenceScreen mExtraScreen; public static AppPermissionsFragment newInstance(String packageName) { AppPermissionsFragment instance = new AppPermissionsFragment(); @@ -153,6 +159,10 @@ public final class AppPermissionsFragment extends SettingsWithHeader } }); + final Preference extraPerms = new Preference(activity); + extraPerms.setIcon(R.drawable.ic_toc); + extraPerms.setTitle(R.string.additional_permissions); + for (PermissionGroup group : mAppPermissions.getPermissionGroups()) { // We currently will not show permissions fixed by the system // which is what the system does for system components. @@ -167,7 +177,31 @@ public final class AppPermissionsFragment extends SettingsWithHeader preference.setTitle(group.getLabel()); preference.setPersistent(false); preference.setEnabled(!group.isPolicyFixed()); - screen.addPreference(preference); + if (group.getIconPkg().equals(OS_PKG)) { + screen.addPreference(preference); + } else { + if (mExtraScreen == null) { + mExtraScreen = getPreferenceManager().createPreferenceScreen(activity); + } + mExtraScreen.addPreference(preference); + } + } + if (mExtraScreen != null) { + extraPerms.setOnPreferenceClickListener(new OnPreferenceClickListener() { + @Override + public boolean onPreferenceClick(Preference preference) { + AdditionalPermissionsFragment frag = new AdditionalPermissionsFragment(); + frag.setTargetFragment(AppPermissionsFragment.this, 0); + FragmentTransaction ft = getFragmentManager().beginTransaction(); + ft.replace(android.R.id.content, frag); + ft.addToBackStack("AdditionalPerms"); + ft.commit(); + return true; + } + }); + extraPerms.setSummary(getString(R.string.additional_permissions_more, + mExtraScreen.getPreferenceCount())); + screen.addPreference(extraPerms); } setPreferenceScreen(screen); @@ -194,14 +228,23 @@ public final class AppPermissionsFragment extends SettingsWithHeader private void updateUi() { mAppPermissions.refresh(); - final int preferenceCount = getPreferenceScreen().getPreferenceCount(); + updatePrefs(getPreferenceScreen()); + if (mExtraScreen != null) { + updatePrefs(mExtraScreen); + } + } + + private void updatePrefs(PreferenceScreen screen) { + final int preferenceCount = screen.getPreferenceCount(); for (int i = 0; i < preferenceCount; i++) { - SwitchPreference preference = (SwitchPreference) - getPreferenceScreen().getPreference(i); - PermissionGroup group = mAppPermissions - .getPermissionGroup(preference.getKey()); - if (group != null) { - preference.setChecked(group.areRuntimePermissionsGranted()); + Preference preference = screen.getPreference(i); + if (preference instanceof SwitchPreference) { + SwitchPreference switchPref = (SwitchPreference) preference; + PermissionGroup group = mAppPermissions + .getPermissionGroup(switchPref.getKey()); + if (group != null) { + switchPref.setChecked(group.areRuntimePermissionsGranted()); + } } } } @@ -215,4 +258,15 @@ public final class AppPermissionsFragment extends SettingsWithHeader return null; } } + + public static class AdditionalPermissionsFragment extends SettingsWithHeader { + @Override + public void onCreate(Bundle icicle) { + super.onCreate(icicle); + AppPermissionsFragment target = (AppPermissionsFragment) getTargetFragment(); + setPreferenceScreen(target.mExtraScreen); + // Copy the header. + setHeader(target.mIcon, target.mLabel, target.mInfoIntent); + } + } }
\ No newline at end of file diff --git a/src/com/android/packageinstaller/permission/ui/SettingsWithHeader.java b/src/com/android/packageinstaller/permission/ui/SettingsWithHeader.java index c0285cd4..d9def799 100644 --- a/src/com/android/packageinstaller/permission/ui/SettingsWithHeader.java +++ b/src/com/android/packageinstaller/permission/ui/SettingsWithHeader.java @@ -33,9 +33,9 @@ import com.android.packageinstaller.R; public abstract class SettingsWithHeader extends PreferenceFragment implements OnClickListener { private View mHeader; - private Intent mInfoIntent; - private Drawable mIcon; - private CharSequence mLabel; + protected Intent mInfoIntent; + protected Drawable mIcon; + protected CharSequence mLabel; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, |