diff options
Diffstat (limited to 'src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java')
-rw-r--r-- | src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java | 71 |
1 files changed, 43 insertions, 28 deletions
diff --git a/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java b/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java index 102fd6ef..4ee76a18 100644 --- a/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java +++ b/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java @@ -25,13 +25,14 @@ import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.PermissionInfo; +import android.content.res.Configuration; import android.content.res.Resources; -import android.graphics.Typeface; import android.graphics.drawable.Icon; import android.hardware.camera2.utils.ArrayUtils; +import android.os.Build; import android.os.Bundle; -import android.text.SpannableString; -import android.text.style.StyleSpan; +import android.text.Html; +import android.text.Spanned; import android.util.Log; import android.view.KeyEvent; import android.view.MotionEvent; @@ -44,8 +45,8 @@ import com.android.packageinstaller.R; 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.ui.handheld.GrantPermissionsViewHandlerImpl; import com.android.packageinstaller.permission.utils.SafetyNetLogger; -import com.android.packageinstaller.permission.utils.Utils; import java.util.ArrayList; import java.util.LinkedHashMap; @@ -99,17 +100,27 @@ public class GrantPermissionsActivity extends OverlayTouchActivity PackageInfo callingPackageInfo = getCallingPackageInfo(); + if (callingPackageInfo == null || callingPackageInfo.requestedPermissions == null + || callingPackageInfo.requestedPermissions.length <= 0) { + setResultAndFinish(); + return; + } + + // Don't allow legacy apps to request runtime permissions. + if (callingPackageInfo.applicationInfo.targetSdkVersion < Build.VERSION_CODES.M) { + // Returning empty arrays means a cancellation. + mRequestedPermissions = new String[0]; + mGrantResults = new int[0]; + setResultAndFinish(); + return; + } + DevicePolicyManager devicePolicyManager = getSystemService(DevicePolicyManager.class); final int permissionPolicy = devicePolicyManager.getPermissionPolicy(null); // If calling package is null we default to deny all. updateDefaultResults(callingPackageInfo, permissionPolicy); - if (callingPackageInfo == null) { - setResultAndFinish(); - return; - } - mAppPermissions = new AppPermissions(this, callingPackageInfo, null, false, new Runnable() { @Override @@ -118,15 +129,15 @@ public class GrantPermissionsActivity extends OverlayTouchActivity } }); - for (AppPermissionGroup group : mAppPermissions.getPermissionGroups()) { - boolean groupHasRequestedPermission = false; - for (String requestedPermission : mRequestedPermissions) { - if (group.hasPermission(requestedPermission)) { - groupHasRequestedPermission = true; + for (String requestedPermission : mRequestedPermissions) { + AppPermissionGroup group = null; + for (AppPermissionGroup nextGroup : mAppPermissions.getPermissionGroups()) { + if (nextGroup.hasPermission(requestedPermission)) { + group = nextGroup; break; } } - if (!groupHasRequestedPermission) { + if (group == null) { continue; } // We allow the user to choose only non-fixed permissions. A permission @@ -176,6 +187,21 @@ public class GrantPermissionsActivity extends OverlayTouchActivity } @Override + public void onConfigurationChanged(Configuration newConfig) { + super.onConfigurationChanged(newConfig); + // We need to relayout the window as dialog width may be + // different in landscape vs portrait which affect the min + // window height needed to show all content. We have to + // re-add the window to force it to be resized if needed. + View decor = getWindow().getDecorView(); + getWindowManager().removeViewImmediate(decor); + getWindowManager().addView(decor, decor.getLayoutParams()); + if (mViewHandler instanceof GrantPermissionsViewHandlerImpl) { + ((GrantPermissionsViewHandlerImpl) mViewHandler).onConfigurationChanged(); + } + } + + @Override public boolean dispatchTouchEvent(MotionEvent ev) { View rootView = getWindow().getDecorView(); if (rootView.getTop() != 0) { @@ -204,16 +230,10 @@ public class GrantPermissionsActivity extends OverlayTouchActivity for (GroupState groupState : mRequestGrantPermissionGroups.values()) { if (groupState.mState == GroupState.STATE_UNKNOWN) { CharSequence appLabel = mAppPermissions.getAppLabel(); - SpannableString message = new SpannableString(getString( - R.string.permission_warning_template, appLabel, - groupState.mGroup.getDescription())); + Spanned message = Html.fromHtml(getString(R.string.permission_warning_template, + appLabel, groupState.mGroup.getDescription()), 0); // Set the permission message as the title so it can be announced. setTitle(message); - // Color the app name. - int appLabelStart = message.toString().indexOf(appLabel.toString(), 0); - int appLabelLength = appLabel.length(); - message.setSpan(new StyleSpan(Typeface.BOLD), appLabelStart, - appLabelStart + appLabelLength, 0); // Set the new grant view // TODO: Use a real message for the action. We need group action APIs @@ -241,11 +261,6 @@ public class GrantPermissionsActivity extends OverlayTouchActivity @Override public void onPermissionGrantResult(String name, boolean granted, boolean doNotAskAgain) { - if (isObscuredTouch()) { - showOverlayDialog(); - finish(); - return; - } GroupState groupState = mRequestGrantPermissionGroups.get(name); if (groupState.mGroup != null) { if (granted) { |