diff options
Diffstat (limited to 'src')
7 files changed, 100 insertions, 13 deletions
diff --git a/src/com/android/packageinstaller/permission/model/AppPermissionGroup.java b/src/com/android/packageinstaller/permission/model/AppPermissionGroup.java index 7b2de19a..6bd15aff 100644 --- a/src/com/android/packageinstaller/permission/model/AppPermissionGroup.java +++ b/src/com/android/packageinstaller/permission/model/AppPermissionGroup.java @@ -459,6 +459,19 @@ public final class AppPermissionGroup implements Comparable<AppPermissionGroup> return true; } + public void setPolicyFixed() { + final int permissionCount = mPermissions.size(); + for (int i = 0; i < permissionCount; i++) { + Permission permission = mPermissions.valueAt(i); + permission.setPolicyFixed(true); + mPackageManager.updatePermissionFlags(permission.getName(), + mPackageInfo.packageName, + PackageManager.FLAG_PERMISSION_POLICY_FIXED, + PackageManager.FLAG_PERMISSION_POLICY_FIXED, + mUserHandle); + } + } + public List<Permission> getPermissions() { return new ArrayList<>(mPermissions.values()); } diff --git a/src/com/android/packageinstaller/permission/model/Permission.java b/src/com/android/packageinstaller/permission/model/Permission.java index 09c927be..da234bdb 100644 --- a/src/com/android/packageinstaller/permission/model/Permission.java +++ b/src/com/android/packageinstaller/permission/model/Permission.java @@ -96,6 +96,14 @@ public final class Permission { } } + public void setPolicyFixed(boolean policyFixed) { + if (policyFixed) { + mFlags |= PackageManager.FLAG_PERMISSION_POLICY_FIXED; + } else { + mFlags &= ~PackageManager.FLAG_PERMISSION_POLICY_FIXED; + } + } + public boolean shouldRevokeOnUpgrade() { return (mFlags & PackageManager.FLAG_PERMISSION_REVOKE_ON_UPGRADE) != 0; } diff --git a/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java b/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java index 98773f54..aa91b488 100644 --- a/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java +++ b/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java @@ -64,6 +64,8 @@ public class GrantPermissionsActivity extends Activity private GrantPermissionsViewHandler mViewHandler; private AppPermissions mAppPermissions; + boolean mResultSet; + @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); @@ -119,12 +121,14 @@ public class GrantPermissionsActivity extends Activity case DevicePolicyManager.PERMISSION_POLICY_AUTO_GRANT: { if (!group.areRuntimePermissionsGranted()) { group.grantRuntimePermissions(false); + group.setPolicyFixed(); } } break; case DevicePolicyManager.PERMISSION_POLICY_AUTO_DENY: { if (!group.areRuntimePermissionsGranted()) { group.revokeRuntimePermissions(false); + group.setPolicyFixed(); } } break; @@ -240,9 +244,9 @@ public class GrantPermissionsActivity extends Activity } @Override - public void onBackPressed() { - setResultAndFinish(); - super.onBackPressed(); + public void finish() { + setResultIfNeeded(RESULT_CANCELED); + super.finish(); } private int computePermissionGrantState(PackageInfo callingPackageInfo, @@ -304,12 +308,19 @@ public class GrantPermissionsActivity extends Activity } } + private void setResultIfNeeded(int resultCode) { + if (!mResultSet) { + mResultSet = true; + logRequestedPermissionGroups(); + Intent result = new Intent(PackageManager.ACTION_REQUEST_PERMISSIONS); + result.putExtra(PackageManager.EXTRA_REQUEST_PERMISSIONS_NAMES, mRequestedPermissions); + result.putExtra(PackageManager.EXTRA_REQUEST_PERMISSIONS_RESULTS, mGrantResults); + setResult(resultCode, result); + } + } + private void setResultAndFinish() { - logRequestedPermissionGroups(); - Intent result = new Intent(PackageManager.ACTION_REQUEST_PERMISSIONS); - result.putExtra(PackageManager.EXTRA_REQUEST_PERMISSIONS_NAMES, mRequestedPermissions); - result.putExtra(PackageManager.EXTRA_REQUEST_PERMISSIONS_RESULTS, mGrantResults); - setResult(RESULT_OK, result); + setResultIfNeeded(RESULT_OK); finish(); } diff --git a/src/com/android/packageinstaller/permission/ui/ManagePermissionsActivity.java b/src/com/android/packageinstaller/permission/ui/ManagePermissionsActivity.java index 2fc1a02b..934ed369 100644 --- a/src/com/android/packageinstaller/permission/ui/ManagePermissionsActivity.java +++ b/src/com/android/packageinstaller/permission/ui/ManagePermissionsActivity.java @@ -29,7 +29,7 @@ public final class ManagePermissionsActivity extends Activity { public void onCreate(Bundle icicle) { super.onCreate(icicle); - Fragment fragment = null; + Fragment fragment; String action = getIntent().getAction(); switch (action) { diff --git a/src/com/android/packageinstaller/permission/ui/ManagePermissionsFragment.java b/src/com/android/packageinstaller/permission/ui/ManagePermissionsFragment.java index 6dc5cda4..00d30d19 100644 --- a/src/com/android/packageinstaller/permission/ui/ManagePermissionsFragment.java +++ b/src/com/android/packageinstaller/permission/ui/ManagePermissionsFragment.java @@ -15,11 +15,13 @@ */ 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.ActivityNotFoundException; import android.content.Intent; +import android.graphics.drawable.Drawable; import android.os.Bundle; import android.preference.Preference; import android.preference.Preference.OnPreferenceClickListener; @@ -27,9 +29,15 @@ import android.preference.PreferenceFragment; import android.preference.PreferenceScreen; import android.util.ArraySet; import android.util.Log; +import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.ListView; +import android.widget.TextView; import com.android.packageinstaller.R; import com.android.packageinstaller.permission.model.PermissionApps; @@ -137,6 +145,27 @@ public final class ManagePermissionsFragment extends PreferenceFragment updatePermissionsUi(); } + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.permissions_frame, container, + false); + ViewGroup prefsContainer = (ViewGroup) rootView.findViewById(R.id.prefs_container); + if (prefsContainer == null) { + prefsContainer = rootView; + } + prefsContainer.addView(super.onCreateView(inflater, prefsContainer, savedInstanceState)); + View emptyView = rootView.findViewById(R.id.no_permissions); + ((ListView) rootView.findViewById(android.R.id.list)).setEmptyView(emptyView); + return rootView; + } + + @Override + public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + updatePermissionsUi(); + } + private void updatePermissionsUi() { Activity activity = getActivity(); @@ -144,6 +173,26 @@ public final class ManagePermissionsFragment extends PreferenceFragment return; } + final ViewGroup rootView = (ViewGroup) getView(); + if (rootView != null) { + final ImageView iconView = (ImageView) rootView.findViewById(R.id.lb_icon); + if (iconView != null) { + // Set the icon as the background instead of the image because ImageView + // doesn't properly scale vector drawables beyond their intrinsic size + Drawable icon = activity.getDrawable(R.drawable.ic_lock); + icon.setTint(activity.getColor(R.color.off_white)); + iconView.setBackground(icon); + } + final 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); + if (breadcrumbView != null) { + breadcrumbView.setText(R.string.app_permissions_breadcrumb); + } + } + List<PermissionGroup> groups = mPermissions.getGroups(); PreferenceScreen screen = getPreferenceScreen(); diff --git a/src/com/android/packageinstaller/permission/ui/PermissionAppsFragment.java b/src/com/android/packageinstaller/permission/ui/PermissionAppsFragment.java index 82494ec4..ae7560e8 100644 --- a/src/com/android/packageinstaller/permission/ui/PermissionAppsFragment.java +++ b/src/com/android/packageinstaller/permission/ui/PermissionAppsFragment.java @@ -161,7 +161,9 @@ public final class PermissionAppsFragment extends PreferenceFragment implements final ViewGroup rootView = (ViewGroup) getView(); final ImageView iconView = (ImageView) rootView.findViewById(R.id.lb_icon); if (iconView != null) { - iconView.setImageDrawable(icon); + // Set the icon as the background instead of the image because ImageView + // doesn't properly scale vector drawables beyond their intrinsic size + iconView.setBackground(icon); } final TextView titleView = (TextView) rootView.findViewById(R.id.lb_title); if (titleView != null) { diff --git a/src/com/android/packageinstaller/permission/ui/SettingsWithHeader.java b/src/com/android/packageinstaller/permission/ui/SettingsWithHeader.java index d9def799..74146fe6 100644 --- a/src/com/android/packageinstaller/permission/ui/SettingsWithHeader.java +++ b/src/com/android/packageinstaller/permission/ui/SettingsWithHeader.java @@ -17,6 +17,7 @@ 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.preference.PreferenceFragment; @@ -42,9 +43,12 @@ public abstract class SettingsWithHeader extends PreferenceFragment implements O Bundle savedInstanceState) { LinearLayout contentParent = (LinearLayout) super.onCreateView(inflater, container, savedInstanceState); - mHeader = inflater.inflate(R.layout.header, contentParent, false); - contentParent.addView(mHeader, 0); - updateHeader(); + int uiMode = getResources().getConfiguration().uiMode; + if ((uiMode & Configuration.UI_MODE_TYPE_MASK) != Configuration.UI_MODE_TYPE_TELEVISION) { + mHeader = inflater.inflate(R.layout.header, contentParent, false); + contentParent.addView(mHeader, 0); + updateHeader(); + } return contentParent; } |