summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBeverly Tai <beverlyt@google.com>2017-09-14 16:46:42 +0000
committerandroid-build-merger <android-build-merger@google.com>2017-09-14 16:46:42 +0000
commit3be1269c0a1a2acd30527f0e0971c3aba910939b (patch)
tree37d2b766747b034e679ab4dbaabdb9eb35ecbe2a
parent9a74d618c2055f0e02e2d6b57745fa021a87b997 (diff)
parent0bdb7902d809c9789f1475e86327664bc760042d (diff)
downloadbase-3be1269c0a1a2acd30527f0e0971c3aba910939b.tar.gz
Merge "DO NOT MERGE Backporting potential usb tapjacking precaution." into nyc-dev
am: 0bdb7902d8 Change-Id: I67c6ceac68b57b9d2e619a25b5e08721b0385db8
-rw-r--r--packages/SystemUI/res/values/strings.xml5
-rw-r--r--packages/SystemUI/src/com/android/systemui/usb/UsbDebuggingActivity.java28
2 files changed, 33 insertions, 0 deletions
diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml
index 6c48b25a93da..6e83024a145b 100644
--- a/packages/SystemUI/res/values/strings.xml
+++ b/packages/SystemUI/res/values/strings.xml
@@ -1668,4 +1668,9 @@
<!-- accessibility label for paging indicator in quick settings [CHAR LIMITi=NONE] -->
<string name="accessibility_quick_settings_page">Page <xliff:g name="current_page" example="1">%1$d</xliff:g> of <xliff:g name="num_pages" example="2">%2$d</xliff:g></string>
+ <!-- Warning shown when user input has been blocked due to another app overlaying screen
+ content. Since we don't know what the app is showing on top of the input target, we
+ can't verify user consent. [CHAR LIMIT=NONE] -->
+ <string name="touch_filtered_warning">Because an app is obscuring a permission request, Settings
+ can’t verify your response.</string>
</resources>
diff --git a/packages/SystemUI/src/com/android/systemui/usb/UsbDebuggingActivity.java b/packages/SystemUI/src/com/android/systemui/usb/UsbDebuggingActivity.java
index f5447a293503..0ba8c08a8f18 100644
--- a/packages/SystemUI/src/com/android/systemui/usb/UsbDebuggingActivity.java
+++ b/packages/SystemUI/src/com/android/systemui/usb/UsbDebuggingActivity.java
@@ -31,8 +31,12 @@ import android.os.ServiceManager;
import android.os.SystemProperties;
import android.util.Log;
import android.view.LayoutInflater;
+import android.view.MotionEvent;
import android.view.View;
+import android.view.Window;
+import android.view.WindowManager;
import android.widget.CheckBox;
+import android.widget.Toast;
import com.android.internal.app.AlertActivity;
import com.android.internal.app.AlertController;
@@ -48,6 +52,10 @@ public class UsbDebuggingActivity extends AlertActivity
@Override
public void onCreate(Bundle icicle) {
+ Window window = getWindow();
+ window.addPrivateFlags(WindowManager.LayoutParams.PRIVATE_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS);
+ window.setType(WindowManager.LayoutParams.TYPE_SYSTEM_DIALOG);
+
super.onCreate(icicle);
if (SystemProperties.getInt("service.adb.tcp.port", 0) == 0) {
@@ -79,6 +87,26 @@ public class UsbDebuggingActivity extends AlertActivity
ap.mView = checkbox;
setupAlert();
+
+ // adding touch listener on affirmative button - checks if window is obscured
+ // if obscured, do not let user give permissions (could be tapjacking involved)
+ final View.OnTouchListener filterTouchListener = new View.OnTouchListener() {
+
+ public boolean onTouch(View v, MotionEvent event) {
+ // Filter obscured touches by consuming them.
+ if (((event.getFlags() & MotionEvent.FLAG_WINDOW_IS_OBSCURED) != 0)
+ || ((event.getFlags() & MotionEvent.FLAG_WINDOW_IS_PARTIALLY_OBSCURED) != 0)) {
+ if (event.getAction() == MotionEvent.ACTION_UP) {
+ Toast.makeText(v.getContext(),
+ R.string.touch_filtered_warning,
+ Toast.LENGTH_SHORT).show();
+ }
+ return true;
+ }
+ return false;
+ }
+ };
+ mAlert.getButton(BUTTON_POSITIVE).setOnTouchListener(filterTouchListener);
}
private class UsbDisconnectedReceiver extends BroadcastReceiver {