From 5c07dcb0698725e7949b030665d21f96c916f3b8 Mon Sep 17 00:00:00 2001 From: Jason Monk Date: Thu, 6 Aug 2015 16:08:03 -0400 Subject: Show warning when touches are being blocked by overlays Bug: 22317719 Change-Id: I5f6526bcce382ae6fabe32d3f8842567d8dc8701 --- .../permission/ui/AppPermissionsFragment.java | 6 +++ .../permission/ui/GrantPermissionsActivity.java | 8 ++- .../permission/ui/ManagePermissionsActivity.java | 3 +- .../permission/ui/OverlayTouchActivity.java | 39 ++++++++++++++ .../permission/ui/OverlayWarningDialog.java | 62 ++++++++++++++++++++++ .../permission/ui/PermissionAppsFragment.java | 7 +++ 6 files changed, 121 insertions(+), 4 deletions(-) create mode 100644 src/com/android/packageinstaller/permission/ui/OverlayTouchActivity.java create mode 100644 src/com/android/packageinstaller/permission/ui/OverlayWarningDialog.java (limited to 'src') diff --git a/src/com/android/packageinstaller/permission/ui/AppPermissionsFragment.java b/src/com/android/packageinstaller/permission/ui/AppPermissionsFragment.java index d78883a4..e4e904c8 100644 --- a/src/com/android/packageinstaller/permission/ui/AppPermissionsFragment.java +++ b/src/com/android/packageinstaller/permission/ui/AppPermissionsFragment.java @@ -268,6 +268,12 @@ public final class AppPermissionsFragment extends SettingsWithHeader return false; } + OverlayTouchActivity activity = (OverlayTouchActivity) getActivity(); + if (activity.isObscuredTouch()) { + activity.showOverlayDialog(); + return false; + } + addToggledGroup(group); if (LocationUtils.isLocked(group.getName(), group.getApp().packageName)) { diff --git a/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java b/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java index 4755e9bf..c451dd50 100644 --- a/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java +++ b/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java @@ -19,7 +19,6 @@ package com.android.packageinstaller.permission.ui; import static android.content.pm.PackageManager.PERMISSION_DENIED; import static android.content.pm.PackageManager.PERMISSION_GRANTED; -import android.app.Activity; import android.app.admin.DevicePolicyManager; import android.content.Intent; import android.content.pm.PackageInfo; @@ -50,7 +49,7 @@ import com.android.packageinstaller.permission.utils.Utils; import java.util.ArrayList; import java.util.List; -public class GrantPermissionsActivity extends Activity +public class GrantPermissionsActivity extends OverlayTouchActivity implements GrantPermissionsViewHandler.ResultListener { private static final String LOG_TAG = "GrantPermissionsActivity"; @@ -219,6 +218,11 @@ public class GrantPermissionsActivity extends Activity @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) { diff --git a/src/com/android/packageinstaller/permission/ui/ManagePermissionsActivity.java b/src/com/android/packageinstaller/permission/ui/ManagePermissionsActivity.java index bf0ebf3a..8ba6b127 100644 --- a/src/com/android/packageinstaller/permission/ui/ManagePermissionsActivity.java +++ b/src/com/android/packageinstaller/permission/ui/ManagePermissionsActivity.java @@ -16,13 +16,12 @@ package com.android.packageinstaller.permission.ui; -import android.app.Activity; import android.app.Fragment; import android.content.Intent; import android.os.Bundle; import android.util.Log; -public final class ManagePermissionsActivity extends Activity { +public final class ManagePermissionsActivity extends OverlayTouchActivity { private static final String LOG_TAG = "ManagePermissionsActivity"; @Override diff --git a/src/com/android/packageinstaller/permission/ui/OverlayTouchActivity.java b/src/com/android/packageinstaller/permission/ui/OverlayTouchActivity.java new file mode 100644 index 00000000..e4cbff3a --- /dev/null +++ b/src/com/android/packageinstaller/permission/ui/OverlayTouchActivity.java @@ -0,0 +1,39 @@ +/* + * Copyright (C) 2015 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.app.Activity; +import android.content.Intent; +import android.view.MotionEvent; + +public class OverlayTouchActivity extends Activity { + + private boolean mObscuredTouch; + + public boolean isObscuredTouch() { + return mObscuredTouch; + } + + @Override + public boolean dispatchTouchEvent(MotionEvent event) { + mObscuredTouch = (event.getFlags() & MotionEvent.FLAG_WINDOW_IS_OBSCURED) != 0; + return super.dispatchTouchEvent(event); + } + + public void showOverlayDialog() { + startActivity(new Intent(this, OverlayWarningDialog.class)); + } +} diff --git a/src/com/android/packageinstaller/permission/ui/OverlayWarningDialog.java b/src/com/android/packageinstaller/permission/ui/OverlayWarningDialog.java new file mode 100644 index 00000000..a7c1e2a1 --- /dev/null +++ b/src/com/android/packageinstaller/permission/ui/OverlayWarningDialog.java @@ -0,0 +1,62 @@ +/* + * Copyright (C) 2015 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.app.Activity; +import android.app.AlertDialog; +import android.content.ActivityNotFoundException; +import android.content.DialogInterface; +import android.content.DialogInterface.OnClickListener; +import android.content.DialogInterface.OnDismissListener; +import android.content.Intent; +import android.os.Bundle; +import android.provider.Settings; +import android.util.Log; + +import com.android.packageinstaller.R; + +public class OverlayWarningDialog extends Activity implements OnClickListener, OnDismissListener { + + private static final String TAG = "OverlayWarningDialog"; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + new AlertDialog.Builder(this) + .setTitle(R.string.screen_overlay_title) + .setMessage(R.string.screen_overlay_message) + .setPositiveButton(R.string.screen_overlay_button, this) + .setOnDismissListener(this) + .show(); + } + + @Override + public void onDismiss(DialogInterface dialog) { + finish(); + } + + @Override + public void onClick(DialogInterface dialog, int which) { + finish(); + try { + startActivity(new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION)); + } catch (ActivityNotFoundException e) { + Log.w(TAG, "No manage overlay settings", e); + } + } + +} diff --git a/src/com/android/packageinstaller/permission/ui/PermissionAppsFragment.java b/src/com/android/packageinstaller/permission/ui/PermissionAppsFragment.java index a1ef3ca3..2a5f7c7e 100644 --- a/src/com/android/packageinstaller/permission/ui/PermissionAppsFragment.java +++ b/src/com/android/packageinstaller/permission/ui/PermissionAppsFragment.java @@ -307,6 +307,13 @@ public final class PermissionAppsFragment extends PermissionsFrameFragment imple if (app == null) { return false; } + + OverlayTouchActivity activity = (OverlayTouchActivity) getActivity(); + if (activity.isObscuredTouch()) { + activity.showOverlayDialog(); + return false; + } + addToggledGroup(app.getPackageName(), app.getPermissionGroup()); if (LocationUtils.isLocked(mPermissionApps.getGroupName(), app.getPackageName())) { -- cgit v1.2.3