diff options
Diffstat (limited to 'src')
7 files changed, 111 insertions, 91 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 +} diff --git a/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java b/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java index 4a733160..cc96bec9 100644 --- a/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java +++ b/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java @@ -18,8 +18,6 @@ package com.android.packageinstaller.permission.ui; import static android.content.pm.PackageManager.PERMISSION_DENIED; import static android.content.pm.PackageManager.PERMISSION_GRANTED; -import static android.content.res.Configuration.UI_MODE_TYPE_MASK; -import static android.content.res.Configuration.UI_MODE_TYPE_TELEVISION; import android.app.Activity; import android.app.admin.DevicePolicyManager; @@ -36,7 +34,6 @@ import android.text.SpannableString; import android.text.style.ForegroundColorSpan; import android.util.ArrayMap; import android.util.Log; -import android.view.KeyEvent; import android.view.MotionEvent; import android.view.View; import android.view.Window; @@ -47,6 +44,7 @@ import com.android.packageinstaller.permission.model.AppPermissionGroup; import com.android.packageinstaller.permission.model.AppPermissions; import com.android.packageinstaller.permission.model.Permission; import com.android.packageinstaller.permission.utils.SafetyNetLogger; +import com.android.packageinstaller.permission.utils.Utils; import java.util.ArrayList; import java.util.List; @@ -73,8 +71,7 @@ public class GrantPermissionsActivity extends Activity setTitle(R.string.permission_request_title); - int uiMode = getResources().getConfiguration().uiMode & UI_MODE_TYPE_MASK; - if (uiMode == UI_MODE_TYPE_TELEVISION) { + if (Utils.isTelevision(this)) { mViewHandler = new GrantPermissionsTvViewHandler(this).setResultListener(this); } else { mViewHandler = new GrantPermissionsDefaultViewHandler(this).setResultListener(this); diff --git a/src/com/android/packageinstaller/permission/ui/ManagePermissionsFragment.java b/src/com/android/packageinstaller/permission/ui/ManagePermissionsFragment.java index 9cea63af..60d8a678 100644 --- a/src/com/android/packageinstaller/permission/ui/ManagePermissionsFragment.java +++ b/src/com/android/packageinstaller/permission/ui/ManagePermissionsFragment.java @@ -21,7 +21,6 @@ import android.app.FragmentTransaction; import android.content.ActivityNotFoundException; import android.content.Context; import android.content.Intent; -import android.content.res.Configuration; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.support.v7.preference.Preference; @@ -180,8 +179,7 @@ public final class ManagePermissionsFragment extends PermissionsFrameFragment List<PermissionGroup> groups = mPermissions.getGroups(); PreferenceScreen screen = getPreferenceScreen(); - int uiModeType = getResources().getConfiguration().uiMode & Configuration.UI_MODE_TYPE_MASK; - boolean isTelevision = uiModeType == Configuration.UI_MODE_TYPE_TELEVISION; + boolean isTelevision = Utils.isTelevision(context); // Use this to speed up getting the info for all of the PermissionApps below. // Create a new one for each refresh to make sure it has fresh data. @@ -249,7 +247,7 @@ public final class ManagePermissionsFragment extends PermissionsFrameFragment frag.setTargetFragment(ManagePermissionsFragment.this, 0); FragmentTransaction ft = getFragmentManager().beginTransaction(); ft.replace(android.R.id.content, frag); - ft.addToBackStack("AdditionalPerms"); + ft.addToBackStack(null); ft.commit(); return true; } diff --git a/src/com/android/packageinstaller/permission/ui/PermissionAppsFragment.java b/src/com/android/packageinstaller/permission/ui/PermissionAppsFragment.java index 33462aef..54ddde3d 100644 --- a/src/com/android/packageinstaller/permission/ui/PermissionAppsFragment.java +++ b/src/com/android/packageinstaller/permission/ui/PermissionAppsFragment.java @@ -23,7 +23,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; import android.content.Intent; -import android.content.res.Configuration; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.support.v14.preference.SwitchPreference; @@ -187,8 +186,7 @@ public final class PermissionAppsFragment extends PermissionsFrameFragment imple return; } - int uiModeType = getResources().getConfiguration().uiMode & Configuration.UI_MODE_TYPE_MASK; - boolean isTelevision = uiModeType == Configuration.UI_MODE_TYPE_TELEVISION; + boolean isTelevision = Utils.isTelevision(context); PreferenceScreen screen = getPreferenceScreen(); ArraySet<String> preferencesToRemove = new ArraySet<>(); diff --git a/src/com/android/packageinstaller/permission/ui/PermissionsFrameFragment.java b/src/com/android/packageinstaller/permission/ui/PermissionsFrameFragment.java index e6b18944..a494732d 100644 --- a/src/com/android/packageinstaller/permission/ui/PermissionsFrameFragment.java +++ b/src/com/android/packageinstaller/permission/ui/PermissionsFrameFragment.java @@ -1,7 +1,6 @@ package com.android.packageinstaller.permission.ui; import android.annotation.Nullable; -import android.content.res.Configuration; import android.os.Bundle; import android.support.v14.preference.PreferenceFragment; import android.support.v17.leanback.widget.VerticalGridView; @@ -17,6 +16,7 @@ import android.view.animation.AnimationUtils; import android.widget.TextView; import com.android.packageinstaller.R; +import com.android.packageinstaller.permission.utils.Utils; public abstract class PermissionsFrameFragment extends PreferenceFragment { @@ -113,8 +113,7 @@ public abstract class PermissionsFrameFragment extends PreferenceFragment { @Override public RecyclerView onCreateRecyclerView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) { - int uiMode = getResources().getConfiguration().uiMode; - if ((uiMode & Configuration.UI_MODE_TYPE_MASK) == Configuration.UI_MODE_TYPE_TELEVISION) { + if (Utils.isTelevision(getContext())) { mGridView = (VerticalGridView) inflater.inflate( R.layout.leanback_preferences_list, parent, false); mGridView.setWindowAlignmentOffset(0); diff --git a/src/com/android/packageinstaller/permission/ui/SettingsWithHeader.java b/src/com/android/packageinstaller/permission/ui/SettingsWithHeader.java index 4135af97..7b58fed1 100644 --- a/src/com/android/packageinstaller/permission/ui/SettingsWithHeader.java +++ b/src/com/android/packageinstaller/permission/ui/SettingsWithHeader.java @@ -17,7 +17,6 @@ package com.android.packageinstaller.permission.ui; import android.content.Intent; -import android.content.res.Configuration; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.view.LayoutInflater; @@ -28,6 +27,7 @@ import android.widget.ImageView; import android.widget.TextView; import com.android.packageinstaller.R; +import com.android.packageinstaller.permission.utils.Utils; public abstract class SettingsWithHeader extends PermissionsFrameFragment implements OnClickListener { @@ -42,8 +42,7 @@ public abstract class SettingsWithHeader extends PermissionsFrameFragment Bundle savedInstanceState) { ViewGroup root = (ViewGroup) super.onCreateView(inflater, container, savedInstanceState); - int uiMode = getResources().getConfiguration().uiMode; - if ((uiMode & Configuration.UI_MODE_TYPE_MASK) != Configuration.UI_MODE_TYPE_TELEVISION) { + if (!Utils.isTelevision(getContext())) { mHeader = inflater.inflate(R.layout.header, root, false); getPreferencesContainer().addView(mHeader, 0); updateHeader(); diff --git a/src/com/android/packageinstaller/permission/utils/Utils.java b/src/com/android/packageinstaller/permission/utils/Utils.java index 940e3597..422fdae1 100644 --- a/src/com/android/packageinstaller/permission/utils/Utils.java +++ b/src/com/android/packageinstaller/permission/utils/Utils.java @@ -22,6 +22,7 @@ import android.content.Intent; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; +import android.content.res.Configuration; import android.content.res.Resources; import android.content.res.Resources.Theme; import android.graphics.drawable.Drawable; @@ -142,4 +143,9 @@ public class Utils { return info.isSystemApp() && (info.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) == 0 && !launcherPkgs.contains(info.packageName); } + + public static boolean isTelevision(Context context) { + int uiMode = context.getResources().getConfiguration().uiMode; + return (uiMode & Configuration.UI_MODE_TYPE_MASK) == Configuration.UI_MODE_TYPE_TELEVISION; + } } |