diff options
Diffstat (limited to 'src/com/android/packageinstaller/permission/ui')
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); |