summaryrefslogtreecommitdiffstats
path: root/src/com/android/packageinstaller/permission
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/packageinstaller/permission')
-rw-r--r--src/com/android/packageinstaller/permission/ui/AppPermissionsFragment.java169
-rw-r--r--src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java7
-rw-r--r--src/com/android/packageinstaller/permission/ui/ManagePermissionsFragment.java6
-rw-r--r--src/com/android/packageinstaller/permission/ui/PermissionAppsFragment.java4
-rw-r--r--src/com/android/packageinstaller/permission/ui/PermissionsFrameFragment.java5
-rw-r--r--src/com/android/packageinstaller/permission/ui/SettingsWithHeader.java5
-rw-r--r--src/com/android/packageinstaller/permission/utils/Utils.java6
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;
+ }
}