diff options
author | Jason Monk <jmonk@google.com> | 2015-08-07 18:40:32 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2015-08-07 18:40:32 +0000 |
commit | 0c5d3ddf25ca46bf610608f2db8ae8f7371ba318 (patch) | |
tree | f6965edcf171365ef0d9f0831119a07dff4fb26c | |
parent | 51fc8c6e93aaa6e5c33a65a82a7c2dfd8de75caa (diff) | |
parent | 5c07dcb0698725e7949b030665d21f96c916f3b8 (diff) | |
download | android_packages_apps_PackageInstaller-0c5d3ddf25ca46bf610608f2db8ae8f7371ba318.tar.gz android_packages_apps_PackageInstaller-0c5d3ddf25ca46bf610608f2db8ae8f7371ba318.tar.bz2 android_packages_apps_PackageInstaller-0c5d3ddf25ca46bf610608f2db8ae8f7371ba318.zip |
Merge "Show warning when touches are being blocked by overlays" into mnc-dev
12 files changed, 130 insertions, 11 deletions
diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 072a1222..9120e7ec 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -89,6 +89,10 @@ </intent-filter> </activity> + <activity android:name=".permission.ui.OverlayWarningDialog" + android:excludeFromRecents="true" + android:theme="@android:style/Theme.DeviceDefault.Light.Dialog.NoActionBar" /> + <receiver android:name=".permission.model.PermissionStatusReceiver" android:permission="android.permission.GRANT_RUNTIME_PERMISSIONS"> <intent-filter> diff --git a/res/layout/grant_permissions.xml b/res/layout/grant_permissions.xml index 87b51d2b..b3565240 100644 --- a/res/layout/grant_permissions.xml +++ b/res/layout/grant_permissions.xml @@ -26,7 +26,6 @@ android:paddingBottom="8dip" android:paddingStart="22dip" android:paddingEnd="16dip" - android:filterTouchesWhenObscured="true" android:orientation="vertical"> <FrameLayout diff --git a/res/layout/header.xml b/res/layout/header.xml index f9b27af6..0e000a4d 100644 --- a/res/layout/header.xml +++ b/res/layout/header.xml @@ -35,7 +35,7 @@ android:layout_marginStart="@dimen/header_subsettings_margin_start" android:layout_alignWithParentIfMissing="true" android:layout_centerVertical="true" - android:textAppearance="@android:style/TextAppearance.Material.Medium" + android:textAppearance="?android:attr/textAppearanceMedium" android:textColor="@android:color/white" android:textAlignment="viewStart" /> diff --git a/res/layout/permissions_frame.xml b/res/layout/permissions_frame.xml index 5e0d9ec1..8f1f2789 100644 --- a/res/layout/permissions_frame.xml +++ b/res/layout/permissions_frame.xml @@ -22,8 +22,7 @@ <FrameLayout android:id="@+id/prefs_container" android:layout_width="match_parent" - android:layout_height="match_parent" - android:filterTouchesWhenObscured="true"> + android:layout_height="match_parent"> <TextView android:id="@+id/no_permissions" diff --git a/res/values/styles.xml b/res/values/styles.xml index 6d772910..9c166971 100755 --- a/res/values/styles.xml +++ b/res/values/styles.xml @@ -24,7 +24,7 @@ <item name="android:backgroundDimEnabled">true</item> </style> - <style name="Theme.Header.Settings" parent="@android:style/Theme.Material.Settings"> + <style name="Theme.Header.Settings" parent="@android:style/Theme.DeviceDefault.Settings"> </style> <style name="PreferenceThemeOverlay.v14.Permissions"> diff --git a/res/values/themes.xml b/res/values/themes.xml index 3f8f59d9..2f9c2b55 100644 --- a/res/values/themes.xml +++ b/res/values/themes.xml @@ -16,11 +16,11 @@ --> <resources> - <style name="Settings" parent="@android:style/Theme.Material.Settings"> + <style name="Settings" parent="@android:style/Theme.DeviceDefault.Settings"> <item name="android:actionBarStyle">@style/ActionBar</item> <item name="preferenceTheme">@style/PreferenceThemeOverlay.v14.Permissions</item> </style> <style name="GrantPermissions" - parent="@android:style/Theme.Material.Light.Dialog.NoActionBar" /> + parent="@android:style/Theme.DeviceDefault.Light.Dialog.NoActionBar" /> </resources> 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())) { |