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/GrantPermissionsActivity.java12
-rw-r--r--src/com/android/packageinstaller/permission/ui/ManualLayoutFrame.java7
-rw-r--r--src/com/android/packageinstaller/permission/ui/OverlayTouchActivity.java2
-rw-r--r--src/com/android/packageinstaller/permission/ui/SecureButtonView.java56
-rwxr-xr-xsrc/com/android/packageinstaller/permission/ui/handheld/GrantPermissionsViewHandlerImpl.java2
-rw-r--r--src/com/android/packageinstaller/permission/ui/handheld/PermissionAppsFragment.java33
-rw-r--r--src/com/android/packageinstaller/permission/ui/television/PermissionAppsFragment.java23
7 files changed, 60 insertions, 75 deletions
diff --git a/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java b/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java
index fdb16484..48d8dbb3 100644
--- a/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java
+++ b/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java
@@ -49,6 +49,7 @@ import com.android.packageinstaller.permission.ui.handheld.GrantPermissionsViewH
import com.android.packageinstaller.permission.utils.SafetyNetLogger;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.List;
@@ -92,6 +93,7 @@ public class GrantPermissionsActivity extends OverlayTouchActivity
final int requestedPermCount = mRequestedPermissions.length;
mGrantResults = new int[requestedPermCount];
+ Arrays.fill(mGrantResults, PackageManager.PERMISSION_DENIED);
if (requestedPermCount == 0) {
setResultAndFinish();
@@ -207,10 +209,12 @@ public class GrantPermissionsActivity extends OverlayTouchActivity
// 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();
+ if (decor.getParent() != null) {
+ getWindowManager().removeViewImmediate(decor);
+ getWindowManager().addView(decor, decor.getLayoutParams());
+ if (mViewHandler instanceof GrantPermissionsViewHandlerImpl) {
+ ((GrantPermissionsViewHandlerImpl) mViewHandler).onConfigurationChanged();
+ }
}
}
diff --git a/src/com/android/packageinstaller/permission/ui/ManualLayoutFrame.java b/src/com/android/packageinstaller/permission/ui/ManualLayoutFrame.java
index a20c9523..0b07c806 100644
--- a/src/com/android/packageinstaller/permission/ui/ManualLayoutFrame.java
+++ b/src/com/android/packageinstaller/permission/ui/ManualLayoutFrame.java
@@ -61,8 +61,13 @@ public class ManualLayoutFrame extends ViewGroup {
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
+ // We want to keep the content bottom at the same place to avoid movement of the "Allow"
+ // button.
+ // Try to keep the content bottom at the same height. If this would move the dialog out of
+ // the top of the screen move it down as much as possible, then keep it at that position for
+ // the rest of the sequence of permission dialogs.
View content = getChildAt(0);
- if (mContentBottom == 0) {
+ if (mContentBottom == 0 || content.getMeasuredHeight() > mContentBottom) {
mContentBottom = (getMeasuredHeight() + content.getMeasuredHeight()) / 2;
}
final int contentLeft = (getMeasuredWidth() - content.getMeasuredWidth()) / 2;
diff --git a/src/com/android/packageinstaller/permission/ui/OverlayTouchActivity.java b/src/com/android/packageinstaller/permission/ui/OverlayTouchActivity.java
index b23ab2e2..a7800ca5 100644
--- a/src/com/android/packageinstaller/permission/ui/OverlayTouchActivity.java
+++ b/src/com/android/packageinstaller/permission/ui/OverlayTouchActivity.java
@@ -40,6 +40,8 @@ public class OverlayTouchActivity extends Activity {
if (appOpsManager != null) {
appOpsManager.setUserRestriction(AppOpsManager.OP_SYSTEM_ALERT_WINDOW,
!allowed, mToken);
+ appOpsManager.setUserRestriction(AppOpsManager.OP_TOAST_WINDOW,
+ !allowed, mToken);
}
}
}
diff --git a/src/com/android/packageinstaller/permission/ui/SecureButtonView.java b/src/com/android/packageinstaller/permission/ui/SecureButtonView.java
deleted file mode 100644
index 624744e5..00000000
--- a/src/com/android/packageinstaller/permission/ui/SecureButtonView.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.packageinstaller.permission.ui;
-
-import android.content.Context;
-import android.util.AttributeSet;
-import android.view.MotionEvent;
-import android.widget.Button;
-
-/**
- * Extension of Button that uses the hidden MotionEvent flag for partially obscured windows to
- * prevent tapjacking attacks.
- */
-public class SecureButtonView extends Button {
-
- public SecureButtonView(Context context) {
- this(context, null);
- }
-
- public SecureButtonView(Context context, AttributeSet attrs) {
- this(context, attrs, 0);
- }
-
- public SecureButtonView(Context context, AttributeSet attrs, int defStyleAttr) {
- this(context, attrs, defStyleAttr, 0);
- }
-
- public SecureButtonView(Context context, AttributeSet attrs, int defStyleAttr,
- int defStyleRes) {
- super(context, attrs, defStyleAttr, defStyleRes);
- }
-
- @Override
- public boolean onFilterTouchEventForSecurity(MotionEvent event) {
- if ((event.getFlags() & MotionEvent.FLAG_WINDOW_IS_OBSCURED) != 0
- || (event.getFlags() & MotionEvent.FLAG_WINDOW_IS_PARTIALLY_OBSCURED) != 0) {
- // Window is obscured, drop this touch.
- return false;
- }
- return true;
- }
-}
diff --git a/src/com/android/packageinstaller/permission/ui/handheld/GrantPermissionsViewHandlerImpl.java b/src/com/android/packageinstaller/permission/ui/handheld/GrantPermissionsViewHandlerImpl.java
index 3d677d63..713b3e27 100755
--- a/src/com/android/packageinstaller/permission/ui/handheld/GrantPermissionsViewHandlerImpl.java
+++ b/src/com/android/packageinstaller/permission/ui/handheld/GrantPermissionsViewHandlerImpl.java
@@ -339,7 +339,7 @@ public final class GrantPermissionsViewHandlerImpl
if (mResultListener != null) {
view.clearAccessibilityFocus();
mResultListener.onPermissionGrantResult(mGroupName, false,
- AppPermissionGroup.isStrictOpEnable()? false: mDoNotAskCheckbox.isChecked());
+ AppPermissionGroup.isStrictOpEnable()? false: mShowDonNotAsk && mDoNotAskCheckbox.isChecked());
}
break;
case R.id.do_not_ask_checkbox:
diff --git a/src/com/android/packageinstaller/permission/ui/handheld/PermissionAppsFragment.java b/src/com/android/packageinstaller/permission/ui/handheld/PermissionAppsFragment.java
index df0bdd46..8fe96c97 100644
--- a/src/com/android/packageinstaller/permission/ui/handheld/PermissionAppsFragment.java
+++ b/src/com/android/packageinstaller/permission/ui/handheld/PermissionAppsFragment.java
@@ -34,9 +34,6 @@ 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.TextView;
import com.android.packageinstaller.DeviceUtils;
import com.android.packageinstaller.R;
import com.android.packageinstaller.permission.model.AppPermissionGroup;
@@ -81,6 +78,7 @@ public final class PermissionAppsFragment extends PermissionsFrameFragment imple
private boolean mHasConfirmedRevoke;
private boolean mShowSystem;
+ private boolean mHasSystemApps;
private MenuItem mShowSystemMenu;
private MenuItem mHideSystemMenu;
@@ -110,13 +108,16 @@ public final class PermissionAppsFragment extends PermissionsFrameFragment imple
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
- mShowSystemMenu = menu.add(Menu.NONE, MENU_SHOW_SYSTEM, Menu.NONE,
- R.string.menu_show_system);
- mHideSystemMenu = menu.add(Menu.NONE, MENU_HIDE_SYSTEM, Menu.NONE,
- R.string.menu_hide_system);
+ if (mHasSystemApps) {
+ mShowSystemMenu = menu.add(Menu.NONE, MENU_SHOW_SYSTEM, Menu.NONE,
+ R.string.menu_show_system);
+ mHideSystemMenu = menu.add(Menu.NONE, MENU_HIDE_SYSTEM, Menu.NONE,
+ R.string.menu_hide_system);
+ updateMenu();
+ }
+
HelpUtils.prepareHelpMenuItem(getActivity(), menu, R.string.help_app_permissions,
getClass().getName());
- updateMenu();
}
@Override
@@ -176,6 +177,8 @@ public final class PermissionAppsFragment extends PermissionsFrameFragment imple
setPreferenceScreen(screen);
}
+ screen.setOrderingAsAdded(false);
+
ArraySet<String> preferencesToRemove = new ArraySet<>();
for (int i = 0, n = screen.getPreferenceCount(); i < n; i++) {
preferencesToRemove.add(screen.getPreference(i).getKey());
@@ -186,11 +189,18 @@ public final class PermissionAppsFragment extends PermissionsFrameFragment imple
}
}
+ mHasSystemApps = false;
+ boolean menuOptionsInvalided = false;
+
for (PermissionApp app : permissionApps.getApps()) {
if (!Utils.shouldShowPermission(app)) {
continue;
}
+ if (!app.getAppInfo().enabled) {
+ continue;
+ }
+
String key = app.getKey();
preferencesToRemove.remove(key);
Preference existingPref = screen.findPreference(key);
@@ -199,6 +209,13 @@ public final class PermissionAppsFragment extends PermissionsFrameFragment imple
}
boolean isSystemApp = Utils.isSystem(app, mLauncherPkgs);
+
+ if (isSystemApp && !menuOptionsInvalided) {
+ mHasSystemApps = true;
+ getActivity().invalidateOptionsMenu();
+ menuOptionsInvalided = true;
+ }
+
if (isSystemApp && !isTelevision && !mShowSystem) {
if (existingPref != null) {
screen.removePreference(existingPref);
diff --git a/src/com/android/packageinstaller/permission/ui/television/PermissionAppsFragment.java b/src/com/android/packageinstaller/permission/ui/television/PermissionAppsFragment.java
index 29839c14..ec320701 100644
--- a/src/com/android/packageinstaller/permission/ui/television/PermissionAppsFragment.java
+++ b/src/com/android/packageinstaller/permission/ui/television/PermissionAppsFragment.java
@@ -81,6 +81,7 @@ public final class PermissionAppsFragment extends SettingsWithHeader implements
private boolean mHasConfirmedRevoke;
private boolean mShowSystem;
+ private boolean mHasSystemApps;
private MenuItem mShowSystemMenu;
private MenuItem mHideSystemMenu;
@@ -110,11 +111,13 @@ public final class PermissionAppsFragment extends SettingsWithHeader implements
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
- mShowSystemMenu = menu.add(Menu.NONE, MENU_SHOW_SYSTEM, Menu.NONE,
- R.string.menu_show_system);
- mHideSystemMenu = menu.add(Menu.NONE, MENU_HIDE_SYSTEM, Menu.NONE,
- R.string.menu_hide_system);
- updateMenu();
+ if (mHasSystemApps) {
+ mShowSystemMenu = menu.add(Menu.NONE, MENU_SHOW_SYSTEM, Menu.NONE,
+ R.string.menu_show_system);
+ mHideSystemMenu = menu.add(Menu.NONE, MENU_HIDE_SYSTEM, Menu.NONE,
+ R.string.menu_hide_system);
+ updateMenu();
+ }
}
@Override
@@ -184,6 +187,9 @@ public final class PermissionAppsFragment extends SettingsWithHeader implements
}
}
+ mHasSystemApps = false;
+ boolean menuOptionsInvalided = false;
+
for (PermissionApp app : permissionApps.getApps()) {
if (!Utils.shouldShowPermission(app)) {
continue;
@@ -197,6 +203,13 @@ public final class PermissionAppsFragment extends SettingsWithHeader implements
}
boolean isSystemApp = Utils.isSystem(app, mLauncherPkgs);
+
+ if (isSystemApp && !menuOptionsInvalided) {
+ mHasSystemApps = true;
+ getActivity().invalidateOptionsMenu();
+ menuOptionsInvalided = true;
+ }
+
if (isSystemApp && !isTelevision && !mShowSystem) {
if (existingPref != null) {
screen.removePreference(existingPref);