Enable the filterTouchesWhenObscured in Special app access

- Enable the filterTouchesWhenObscured attribute on all toggle
  switches in all pages of the special app access

Bug: 155288585
Test: make RunSettingsRoboTests
Merged-In: I011cfe4b7e4e624a8338332ac47a353f7f3ab661
Merged-In: I0731057ec6e77c6a0867784c729c3f5812ef6170
Change-Id: I02c372423287366d0706bcdf7cdecff48db2e22a
(cherry picked from commit 9e4c753b3036d669eda6a5295018e1967a40ed9f)
diff --git a/res/xml/app_ops_permissions_details.xml b/res/xml/app_ops_permissions_details.xml
index cb8711c..cbf3e12 100644
--- a/res/xml/app_ops_permissions_details.xml
+++ b/res/xml/app_ops_permissions_details.xml
@@ -17,7 +17,7 @@
 <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:settings="http://schemas.android.com/apk/res-auto">
 
-    <SwitchPreference
+    <com.android.settings.widget.FilterTouchesSwitchPreference
         android:key="app_ops_settings_switch" />
 
     <Preference
diff --git a/res/xml/change_wifi_state_details.xml b/res/xml/change_wifi_state_details.xml
index 77fd063..e3b6755 100644
--- a/res/xml/change_wifi_state_details.xml
+++ b/res/xml/change_wifi_state_details.xml
@@ -18,7 +18,7 @@
     android:key="change_wifi_state"
     android:title="@string/change_wifi_state_title">
 
-  <SwitchPreference
+  <com.android.settings.widget.FilterTouchesSwitchPreference
       android:key="app_ops_settings_switch"
       android:title="@string/change_wifi_state_app_detail_switch"/>
 
diff --git a/res/xml/draw_overlay_permissions_details.xml b/res/xml/draw_overlay_permissions_details.xml
index 3e7bec5..d3397a7 100644
--- a/res/xml/draw_overlay_permissions_details.xml
+++ b/res/xml/draw_overlay_permissions_details.xml
@@ -18,7 +18,7 @@
     android:key="draw_overlay_permission_detail_settings"
     android:title="@string/draw_overlay">
 
-    <SwitchPreference
+    <com.android.settings.widget.FilterTouchesSwitchPreference
         android:key="app_ops_settings_switch"
         android:title="@string/permit_draw_overlay"/>
 
diff --git a/res/xml/external_sources_details.xml b/res/xml/external_sources_details.xml
index ea2abdc..57d5587 100644
--- a/res/xml/external_sources_details.xml
+++ b/res/xml/external_sources_details.xml
@@ -17,7 +17,7 @@
 <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
         android:title="@string/install_other_apps">
 
-    <com.android.settingslib.RestrictedSwitchPreference
+    <com.android.settings.widget.FilterTouchesRestrictedSwitchPreference
         android:key="external_sources_settings_switch"
         android:title="@string/external_source_switch_title" />
 
diff --git a/res/xml/picture_in_picture_permissions_details.xml b/res/xml/picture_in_picture_permissions_details.xml
index c215c9d..5f2a45a 100644
--- a/res/xml/picture_in_picture_permissions_details.xml
+++ b/res/xml/picture_in_picture_permissions_details.xml
@@ -18,7 +18,7 @@
     android:key="picture_in_picture_permission_detail_settings"
     android:title="@string/picture_in_picture_app_detail_title">
 
-    <SwitchPreference
+    <com.android.settings.widget.FilterTouchesSwitchPreference
         android:key="app_ops_settings_switch"
         android:title="@string/picture_in_picture_app_detail_switch"/>
 
diff --git a/res/xml/write_system_settings_permissions_details.xml b/res/xml/write_system_settings_permissions_details.xml
index 82a6931..21ea706 100644
--- a/res/xml/write_system_settings_permissions_details.xml
+++ b/res/xml/write_system_settings_permissions_details.xml
@@ -18,7 +18,7 @@
     android:key="write_system_settings_permission_detail_settings"
     android:title="@string/write_settings">
 
-    <SwitchPreference
+    <com.android.settings.widget.FilterTouchesSwitchPreference
         android:key="app_ops_settings_switch"
         android:title="@string/permit_write_settings"/>
 
diff --git a/src/com/android/settings/widget/AppSwitchPreference.java b/src/com/android/settings/widget/AppSwitchPreference.java
index d67e895..96f0e7b 100644
--- a/src/com/android/settings/widget/AppSwitchPreference.java
+++ b/src/com/android/settings/widget/AppSwitchPreference.java
@@ -37,5 +37,11 @@
 
         view.findViewById(R.id.summary_container)
                 .setVisibility(TextUtils.isEmpty(getSummary()) ? View.GONE : View.VISIBLE);
+
+        final View switchView = view.findViewById(android.R.id.switch_widget);
+        if (switchView != null) {
+            final View rootView = switchView.getRootView();
+            rootView.setFilterTouchesWhenObscured(true);
+        }
     }
 }
diff --git a/src/com/android/settings/widget/FilterTouchesRestrictedSwitchPreference.java b/src/com/android/settings/widget/FilterTouchesRestrictedSwitchPreference.java
new file mode 100644
index 0000000..bd694bc
--- /dev/null
+++ b/src/com/android/settings/widget/FilterTouchesRestrictedSwitchPreference.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2020 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.settings.widget;
+
+import android.content.Context;
+import android.support.v7.preference.PreferenceViewHolder;
+import android.util.AttributeSet;
+import android.view.View;
+
+import com.android.settingslib.RestrictedSwitchPreference;
+
+/**
+ * This widget with enabled filterTouchesWhenObscured attribute use to replace
+ * the {@link RestrictedSwitchPreference} in the Special access app pages for
+ * security.
+ */
+public class FilterTouchesRestrictedSwitchPreference extends RestrictedSwitchPreference {
+    public FilterTouchesRestrictedSwitchPreference(Context context, AttributeSet attrs,
+            int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+    }
+
+    public FilterTouchesRestrictedSwitchPreference(Context context, AttributeSet attrs,
+            int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
+    }
+
+    public FilterTouchesRestrictedSwitchPreference(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    public FilterTouchesRestrictedSwitchPreference(Context context) {
+        super(context);
+    }
+
+    @Override
+    public void onBindViewHolder(PreferenceViewHolder holder) {
+        super.onBindViewHolder(holder);
+        final View switchView = holder.findViewById(android.R.id.switch_widget);
+        if (switchView != null) {
+            final View rootView = switchView.getRootView();
+            rootView.setFilterTouchesWhenObscured(true);
+        }
+    }
+}
diff --git a/src/com/android/settings/widget/FilterTouchesSwitchPreference.java b/src/com/android/settings/widget/FilterTouchesSwitchPreference.java
new file mode 100644
index 0000000..7ffa196
--- /dev/null
+++ b/src/com/android/settings/widget/FilterTouchesSwitchPreference.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2020 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.settings.widget;
+
+import android.content.Context;
+import android.support.v14.preference.SwitchPreference;
+import android.support.v7.preference.PreferenceViewHolder;
+import android.util.AttributeSet;
+import android.view.View;
+
+/**
+ *  This widget with enabled filterTouchesWhenObscured attribute use to replace
+ *  the {@link SwitchPreference} in the Special access app pages for security.
+ */
+public class FilterTouchesSwitchPreference extends SwitchPreference {
+
+    public FilterTouchesSwitchPreference(Context context, AttributeSet attrs, int defStyleAttr,
+            int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+    }
+
+    public FilterTouchesSwitchPreference(Context context, AttributeSet attrs, int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
+    }
+
+    public FilterTouchesSwitchPreference(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    public FilterTouchesSwitchPreference(Context context) {
+        super(context);
+    }
+
+    @Override
+    public void onBindViewHolder(PreferenceViewHolder holder) {
+        super.onBindViewHolder(holder);
+        final View switchView = holder.findViewById(android.R.id.switch_widget);
+        if (switchView != null) {
+            final View rootView = switchView.getRootView();
+            rootView.setFilterTouchesWhenObscured(true);
+        }
+    }
+}