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 /src | |
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
Diffstat (limited to 'src')
-rw-r--r-- | src/com/android/packageinstaller/permission/ui/AppPermissionsFragment.java | 72 | ||||
-rw-r--r-- | src/com/android/packageinstaller/permission/ui/SettingsWithHeader.java | 6 |
2 files changed, 66 insertions, 12 deletions
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, |