From 088bc504db7d501f87b8d7c0c4e4b2134d2b5da0 Mon Sep 17 00:00:00 2001 From: Beverly Date: Thu, 31 Aug 2017 15:32:36 -0400 Subject: DO NOT MERGE Backporting potential usb tapjacking precaution. Bug: 62187985 Test: manual, backport Change-Id: I52e27f84338fdcf63cad0ee7436233736499d87b --- packages/SystemUI/res/values/strings.xml | 6 +++++ .../android/systemui/usb/UsbDebuggingActivity.java | 26 ++++++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml index 71b9b61566f1..aa369f74d063 100644 --- a/packages/SystemUI/res/values/strings.xml +++ b/packages/SystemUI/res/values/strings.xml @@ -911,4 +911,10 @@ %1$s. %2$s + + + Because an app is obscuring a permission request, Settings + can’t verify your response. diff --git a/packages/SystemUI/src/com/android/systemui/usb/UsbDebuggingActivity.java b/packages/SystemUI/src/com/android/systemui/usb/UsbDebuggingActivity.java index f5447a293503..bb5c8a62f3fd 100644 --- a/packages/SystemUI/src/com/android/systemui/usb/UsbDebuggingActivity.java +++ b/packages/SystemUI/src/com/android/systemui/usb/UsbDebuggingActivity.java @@ -33,6 +33,10 @@ import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.widget.CheckBox; +import android.widget.Toast; +import android.view.Window; +import android.view.WindowManager; +import android.view.MotionEvent; 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,24 @@ 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) { + 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 { -- cgit v1.2.3-59-g8ed1b