Enable the filterTouchesWhenObscured in Special app access

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

Fixes: 155288585
Test: make RunSettingsRoboTests
Change-Id: I011cfe4b7e4e624a8338332ac47a353f7f3ab661
This commit is contained in:
Sunny Shao
2020-05-27 17:21:24 +08:00
parent 1e0789355e
commit ee4ec4b33f
14 changed files with 157 additions and 33 deletions

View File

@@ -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

View File

@@ -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"/>

View File

@@ -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"/>

View File

@@ -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" />

View File

@@ -1,19 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
~ 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.
-->
<!-- 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.
-->
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
@@ -29,7 +28,7 @@
android:icon="@drawable/ic_download_for_offline"
android:gravity="top"/>
<com.android.settingslib.RestrictedSwitchPreference
<com.android.settings.widget.FilterTouchesRestrictedSwitchPreference
android:key="interact_across_profiles_settings_switch" />
<Preference

View File

@@ -20,7 +20,7 @@
android:key="manage_external_storage_permission_details"
android:title="@string/manage_external_storage_title">
<SwitchPreference
<com.android.settings.widget.FilterTouchesSwitchPreference
android:key="app_ops_settings_switch"
android:title="@string/permit_manage_external_storage"/>

View File

@@ -20,7 +20,7 @@
android:key="notification_access_permission_detail_settings"
android:title="@string/manage_notification_access_title">
<SwitchPreference
<com.android.settings.widget.FilterTouchesSwitchPreference
android:key="notification_access_switch"
android:title="@string/notification_access_detail_switch"/>

View File

@@ -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"/>

View File

@@ -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"/>

View File

@@ -20,7 +20,7 @@
android:key="zen_access_permission_detail_settings"
android:title="@string/manage_zen_access_title">
<SwitchPreference
<com.android.settings.widget.FilterTouchesSwitchPreference
android:key="zen_access_switch"
android:title="@string/zen_access_detail_switch"/>

View File

@@ -43,10 +43,10 @@ import androidx.annotation.VisibleForTesting;
import androidx.preference.Preference;
import androidx.preference.PreferenceGroup;
import androidx.preference.PreferenceScreen;
import androidx.preference.SwitchPreference;
import com.android.settings.core.BasePreferenceController;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.widget.FilterTouchesSwitchPreference;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnStart;
@@ -168,32 +168,32 @@ public class DeviceAdminListPreferenceController extends BasePreferenceControlle
if (mFooterPreference != null) {
mFooterPreference.setVisible(mAdmins.isEmpty());
}
final Map<String, SwitchPreference> preferenceCache = new ArrayMap<>();
final Map<String, FilterTouchesSwitchPreference> preferenceCache = new ArrayMap<>();
final Context prefContext = mPreferenceGroup.getContext();
final int childrenCount = mPreferenceGroup.getPreferenceCount();
for (int i = 0; i < childrenCount; i++) {
final Preference pref = mPreferenceGroup.getPreference(i);
if (!(pref instanceof SwitchPreference)) {
if (!(pref instanceof FilterTouchesSwitchPreference)) {
continue;
}
final SwitchPreference appSwitch = (SwitchPreference) pref;
final FilterTouchesSwitchPreference appSwitch = (FilterTouchesSwitchPreference) pref;
preferenceCache.put(appSwitch.getKey(), appSwitch);
}
for (DeviceAdminListItem item : mAdmins) {
final String key = item.getKey();
SwitchPreference pref = preferenceCache.remove(key);
FilterTouchesSwitchPreference pref = preferenceCache.remove(key);
if (pref == null) {
pref = new SwitchPreference(prefContext);
pref = new FilterTouchesSwitchPreference(prefContext);
mPreferenceGroup.addPreference(pref);
}
bindPreference(item, pref);
}
for (SwitchPreference unusedCacheItem : preferenceCache.values()) {
for (FilterTouchesSwitchPreference unusedCacheItem : preferenceCache.values()) {
mPreferenceGroup.removePreference(unusedCacheItem);
}
}
private void bindPreference(DeviceAdminListItem item, SwitchPreference pref) {
private void bindPreference(DeviceAdminListItem item, FilterTouchesSwitchPreference pref) {
pref.setKey(item.getKey());
pref.setTitle(item.getName());
pref.setIcon(item.getIcon());

View File

@@ -17,7 +17,9 @@
package com.android.settings.widget;
import android.content.Context;
import android.view.View;
import androidx.preference.PreferenceViewHolder;
import androidx.preference.SwitchPreference;
import com.android.settings.R;
@@ -28,4 +30,13 @@ public class AppSwitchPreference extends SwitchPreference {
super(context);
setLayoutResource(R.layout.preference_app);
}
@Override
public void onBindViewHolder(PreferenceViewHolder holder) {
super.onBindViewHolder(holder);
final View switchView = holder.findViewById(android.R.id.switch_widget);
if (switchView != null) {
switchView.setFilterTouchesWhenObscured(true);
}
}
}

View File

@@ -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.util.AttributeSet;
import android.view.View;
import androidx.preference.PreferenceViewHolder;
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) {
switchView.setFilterTouchesWhenObscured(true);
}
}
}

View File

@@ -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.util.AttributeSet;
import android.view.View;
import androidx.preference.PreferenceViewHolder;
import androidx.preference.SwitchPreference;
/**
* 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) {
switchView.setFilterTouchesWhenObscured(true);
}
}
}