summaryrefslogtreecommitdiffstats
path: root/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java')
-rw-r--r--src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java71
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) {