diff options
author | Todd Volkert <tvolkert@google.com> | 2015-07-14 11:19:48 -0700 |
---|---|---|
committer | Todd Volkert <tvolkert@google.com> | 2015-07-14 12:20:32 -0700 |
commit | f5f6b1b113bb39a268948c19a39833d3ff839d32 (patch) | |
tree | 0fab132103c53399e24642fce5e242c8631e663c /src/com/android/packageinstaller/permission/ui/AppPermissionsFragment.java | |
parent | b9b20815315d35ed2d10edcbbae4913da36f4107 (diff) | |
download | android_packages_apps_PackageInstaller-f5f6b1b113bb39a268948c19a39833d3ff839d32.tar.gz android_packages_apps_PackageInstaller-f5f6b1b113bb39a268948c19a39833d3ff839d32.tar.bz2 android_packages_apps_PackageInstaller-f5f6b1b113bb39a268948c19a39833d3ff839d32.zip |
Add "show additional permissions" screen to app permissions for TV.
This also cleans up some code:
1) Factor out isTelevision into Utils.isTelevision() and call
it where we were previously inlining that code
2) Make AppPermissionsFragment work better with config changes
and screen rotation changes (the extra screen wasn't working
at all with such changes)
b/22045242
Change-Id: I937eaa67f19f44b5e1a76a58e3fdd799ae36e73b
Diffstat (limited to 'src/com/android/packageinstaller/permission/ui/AppPermissionsFragment.java')
-rw-r--r-- | src/com/android/packageinstaller/permission/ui/AppPermissionsFragment.java | 169 |
1 files changed, 96 insertions, 73 deletions
diff --git a/src/com/android/packageinstaller/permission/ui/AppPermissionsFragment.java b/src/com/android/packageinstaller/permission/ui/AppPermissionsFragment.java index e942ab60..eed23f94 100644 --- a/src/com/android/packageinstaller/permission/ui/AppPermissionsFragment.java +++ b/src/com/android/packageinstaller/permission/ui/AppPermissionsFragment.java @@ -21,7 +21,6 @@ import android.app.ActionBar; import android.app.Activity; import android.app.AlertDialog; import android.app.Fragment; -import android.app.FragmentTransaction; import android.content.Context; import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; @@ -75,33 +74,49 @@ public final class AppPermissionsFragment extends SettingsWithHeader private boolean mShowLegacyPermissions; public static AppPermissionsFragment newInstance(String packageName) { - AppPermissionsFragment instance = new AppPermissionsFragment(); + return setPackageName(new AppPermissionsFragment(), packageName); + } + + private static <T extends Fragment> T setPackageName(T fragment, String packageName) { Bundle arguments = new Bundle(); arguments.putString(Intent.EXTRA_PACKAGE_NAME, packageName); - instance.setArguments(arguments); - return instance; + fragment.setArguments(arguments); + return fragment; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setLoading(true /* loading */, false /* animate */); - mHasConfirmedRevoke = false; setHasOptionsMenu(true); final ActionBar ab = getActivity().getActionBar(); if (ab != null) { ab.setDisplayHomeAsUpEnabled(true); } + + String packageName = getArguments().getString(Intent.EXTRA_PACKAGE_NAME); + Activity activity = getActivity(); + PackageInfo packageInfo = getPackageInfo(activity, packageName); + if (packageInfo == null) { + Toast.makeText(activity, R.string.app_not_found_dlg_title, Toast.LENGTH_LONG).show(); + activity.finish(); + return; + } + + mAppPermissions = new AppPermissions(activity, packageInfo, null, true, new Runnable() { + @Override + public void run() { + getActivity().finish(); + } + }); + mAppPermissions.refresh(); + loadPreferences(); } @Override public void onResume() { super.onResume(); - final ActionBar ab = getActivity().getActionBar(); - if (ab != null) { - ab.setTitle(R.string.app_permissions); - } - updateUi(); + setPreferencesCheckedState(); } @Override @@ -114,17 +129,17 @@ public final class AppPermissionsFragment extends SettingsWithHeader case R.id.toggle_legacy_permissions: { mShowLegacyPermissions = !mShowLegacyPermissions; - bindPermissionsUi(); + loadPreferences(); return true; } case MENU_ALL_PERMS: { Fragment frag = AllAppPermissionsFragment.newInstance( getArguments().getString(Intent.EXTRA_PACKAGE_NAME)); - FragmentTransaction ft = getFragmentManager().beginTransaction(); - ft.replace(android.R.id.content, frag); - ft.addToBackStack("AllPerms"); - ft.commit(); + getFragmentManager().beginTransaction() + .replace(android.R.id.content, frag) + .addToBackStack("AllPerms") + .commit(); return true; } } @@ -134,7 +149,9 @@ public final class AppPermissionsFragment extends SettingsWithHeader @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); - bindUi(); + if (mAppPermissions != null) { + bindUi(this, mAppPermissions.getPackageInfo()); + } } @Override @@ -154,54 +171,41 @@ public final class AppPermissionsFragment extends SettingsWithHeader } } - private void bindUi() { - String packageName = getArguments().getString(Intent.EXTRA_PACKAGE_NAME); - - final Activity activity = getActivity(); - PackageInfo packageInfo = getPackageInfo(packageName); - if (packageInfo == null) { - Toast.makeText(activity, R.string.app_not_found_dlg_title, Toast.LENGTH_LONG) - .show(); - activity.finish(); - return; - } - final PackageManager pm = activity.getPackageManager(); + private static void bindUi(SettingsWithHeader fragment, PackageInfo packageInfo) { + Activity activity = fragment.getActivity(); + PackageManager pm = activity.getPackageManager(); ApplicationInfo appInfo = packageInfo.applicationInfo; - final Drawable icon = appInfo.loadIcon(pm); - final CharSequence label = appInfo.loadLabel(pm); Intent infoIntent = null; - if (!getActivity().getIntent().getBooleanExtra(EXTRA_HIDE_INFO_BUTTON, false)) { + if (!activity.getIntent().getBooleanExtra(EXTRA_HIDE_INFO_BUTTON, false)) { infoIntent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS) - .setData(Uri.fromParts("package", packageName, null)); + .setData(Uri.fromParts("package", packageInfo.packageName, null)); } - setHeader(icon, label, infoIntent); - final ViewGroup rootView = (ViewGroup) getView(); - final ImageView iconView = (ImageView) rootView.findViewById(R.id.lb_icon); + Drawable icon = appInfo.loadIcon(pm); + CharSequence label = appInfo.loadLabel(pm); + fragment.setHeader(icon, label, infoIntent); + + ActionBar ab = activity.getActionBar(); + if (ab != null) { + ab.setTitle(R.string.app_permissions); + } + + ViewGroup rootView = (ViewGroup) fragment.getView(); + ImageView iconView = (ImageView) rootView.findViewById(R.id.lb_icon); if (iconView != null) { iconView.setImageDrawable(icon); } - final TextView titleView = (TextView) rootView.findViewById(R.id.lb_title); + TextView titleView = (TextView) rootView.findViewById(R.id.lb_title); if (titleView != null) { titleView.setText(R.string.app_permissions); } - final TextView breadcrumbView = (TextView) rootView.findViewById(R.id.lb_breadcrumb); + TextView breadcrumbView = (TextView) rootView.findViewById(R.id.lb_breadcrumb); if (breadcrumbView != null) { breadcrumbView.setText(label); } - - mAppPermissions = new AppPermissions(activity, packageInfo, null, true, - new Runnable() { - @Override - public void run() { - getActivity().finish(); - } - }); - - bindPermissionsUi(); } - private void bindPermissionsUi() { + private void loadPreferences() { Context context = getPreferenceManager().getContext(); if (context == null) { return; @@ -219,8 +223,16 @@ public final class AppPermissionsFragment extends SettingsWithHeader extraPerms.setTitle(R.string.additional_permissions); for (AppPermissionGroup group : mAppPermissions.getPermissionGroups()) { - final boolean isPlatformPermission = group.getDeclaringPackage().equals(Utils.OS_PKG); - if (!Utils.shouldShowPermission(group, mShowLegacyPermissions)) { + if (!Utils.shouldShowPermission(group, true /* showLegacy */)) { + continue; + } + + boolean isPlatform = group.getDeclaringPackage().equals(Utils.OS_PKG); + boolean isLegacy = isPlatform && !Utils.isModernPermissionGroup(group.getName()); + boolean isTelevision = Utils.isTelevision(context); + + if (isLegacy && !mShowLegacyPermissions && !isTelevision) { + // Television shows legacy on the extra screen continue; } @@ -239,7 +251,7 @@ public final class AppPermissionsFragment extends SettingsWithHeader preference.setEnabled(!group.isPolicyFixed()); preference.setChecked(group.areRuntimePermissionsGranted()); - if (isPlatformPermission) { + if (isPlatform && (!isLegacy || !isTelevision)) { screen.addPreference(preference); } else { if (mExtraScreen == null) { @@ -254,11 +266,12 @@ public final class AppPermissionsFragment extends SettingsWithHeader @Override public boolean onPreferenceClick(Preference preference) { AdditionalPermissionsFragment frag = new AdditionalPermissionsFragment(); + setPackageName(frag, getArguments().getString(Intent.EXTRA_PACKAGE_NAME)); frag.setTargetFragment(AppPermissionsFragment.this, 0); - FragmentTransaction ft = getFragmentManager().beginTransaction(); - ft.replace(android.R.id.content, frag); - ft.addToBackStack("AdditionalPerms"); - ft.commit(); + getFragmentManager().beginTransaction() + .replace(android.R.id.content, frag) + .addToBackStack(null) + .commit(); return true; } }); @@ -342,23 +355,20 @@ public final class AppPermissionsFragment extends SettingsWithHeader } } - private void updateUi() { - mAppPermissions.refresh(); - - updatePrefs(getPreferenceScreen()); + private void setPreferencesCheckedState() { + setPreferencesCheckedState(getPreferenceScreen()); if (mExtraScreen != null) { - updatePrefs(mExtraScreen); + setPreferencesCheckedState(mExtraScreen); } } - private void updatePrefs(PreferenceScreen screen) { - final int preferenceCount = screen.getPreferenceCount(); + private void setPreferencesCheckedState(PreferenceScreen screen) { + int preferenceCount = screen.getPreferenceCount(); for (int i = 0; i < preferenceCount; i++) { Preference preference = screen.getPreference(i); if (preference instanceof SwitchPreference) { SwitchPreference switchPref = (SwitchPreference) preference; - AppPermissionGroup group = mAppPermissions - .getPermissionGroup(switchPref.getKey()); + AppPermissionGroup group = mAppPermissions.getPermissionGroup(switchPref.getKey()); if (group != null) { switchPref.setChecked(group.areRuntimePermissionsGranted()); } @@ -366,27 +376,40 @@ public final class AppPermissionsFragment extends SettingsWithHeader } } - private PackageInfo getPackageInfo(String packageName) { + private static PackageInfo getPackageInfo(Activity activity, String packageName) { try { - return getActivity().getPackageManager().getPackageInfo( + return activity.getPackageManager().getPackageInfo( packageName, PackageManager.GET_PERMISSIONS); } catch (PackageManager.NameNotFoundException e) { - Log.i(LOG_TAG, "No package:" + getActivity().getCallingPackage(), e); + Log.i(LOG_TAG, "No package:" + activity.getCallingPackage(), e); return null; } } public static class AdditionalPermissionsFragment extends SettingsWithHeader { + AppPermissionsFragment mOuterFragment; + @Override - public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { - AppPermissionsFragment target = (AppPermissionsFragment) getTargetFragment(); - setPreferenceScreen(target.mExtraScreen); - // Copy the header. - setHeader(target.mIcon, target.mLabel, target.mInfoIntent); + public void onCreate(Bundle savedInstanceState) { + mOuterFragment = (AppPermissionsFragment) getTargetFragment(); + super.onCreate(savedInstanceState); + setHeader(mOuterFragment.mIcon, mOuterFragment.mLabel, mOuterFragment.mInfoIntent); setHasOptionsMenu(true); } @Override + public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { + setPreferenceScreen(mOuterFragment.mExtraScreen); + } + + @Override + public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + String packageName = getArguments().getString(Intent.EXTRA_PACKAGE_NAME); + bindUi(this, getPackageInfo(getActivity(), packageName)); + } + + @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: @@ -396,4 +419,4 @@ public final class AppPermissionsFragment extends SettingsWithHeader return super.onOptionsItemSelected(item); } } -}
\ No newline at end of file +} |