Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3f04897a authored by xshu's avatar xshu
Browse files

Adding Wifi setting to special_access settings

In the settings app, allow users to override app permission for
CHANGE_WIFI_STATE for every application that declared that permission.

Bug: 70562620
Test: compile, robotests

Manual test:
Flash build to device (walleye)
Download iPass from playstore
Open iPass and try connect to a wifi network; verify success
Open settings -> Apps & notifications -> Advanced -> Special app access
-> Wifi access
Select iPass from the list
Toggle the switch to off
Open iPass and try connect to a wifi network; verify failure

Change-Id: Ib2be4c83988a81ba7831d096c9b1980462e66903
parent 87e71c96
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -9359,4 +9359,18 @@
    <!-- Title for item to go to old battery settings page when clicking [CHAR LIMIT=100] -->
    <string name="dev_android_o_battery_settings_title">See Android 8.0 battery settings</string>
    <!-- Title for Wifi Access settings [CHAR LIMIT=35] -->
    <string name="change_wifi_state_title">Toggle wifi on and off</string>
    <!-- Keywords for Wifi Access settings [CHAR LIMIT=35] -->
    <string name="keywords_change_wifi_state">toggle wifi on and off</string>
    <!-- Apps > App Details > Advanced section string title. [CHAR LIMIT=35] -->
    <string name="change_wifi_state_app_detail_title">Toggle wifi on and off</string>
    <!-- Apps > App Details > Wifi access > Switch title. [CHAR LIMIT=NONE] -->
    <string name="change_wifi_state_app_detail_switch">Allow toggle wifi</string>
    <!-- Apps > App Details > Wifi access > Description. [CHAR LIMIT=NONE] -->
    <string name="change_wifi_state_app_detail_summary">Allow this app to change wifi state including connecting to wifi and turing wifi on and off.</string>
</resources>
+30 −0
Original line number Diff line number Diff line
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2018 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"
    android:key="change_wifi_state"
    android:title="@string/change_wifi_state_app_detail_title">

  <SwitchPreference
      android:key="app_ops_settings_switch"
      android:title="@string/change_wifi_state_app_detail_switch"/>

  <Preference
      android:key="app_ops_settings_preference"
      android:summary="@string/change_wifi_state_app_detail_summary"
      android:selectable="false"/>

</PreferenceScreen>
+10 −0
Original line number Diff line number Diff line
@@ -121,4 +121,14 @@
            android:value="com.android.settings.Settings$DirectoryAccessSettingsActivity" />
    </Preference>

    <Preference
        android:key="change_wifi_state"
        android:title="@string/change_wifi_state_title"
        android:fragment="com.android.settings.applications.manageapplications.ManageApplications"
        settings:keywords="@string/keywords_change_wifi_state">
        <extra
            android:name="classname"
            android:value="com.android.settings.Settings$ChangeWifiStateActivity" />
    </Preference>

</PreferenceScreen>
+1 −0
Original line number Diff line number Diff line
@@ -128,6 +128,7 @@ public class Settings extends SettingsActivity {
    public static class AppMemoryUsageActivity extends SettingsActivity { /* empty */ }
    public static class OverlaySettingsActivity extends SettingsActivity { /* empty */ }
    public static class WriteSettingsActivity extends SettingsActivity { /* empty */ }
    public static class ChangeWifiStateActivity extends SettingsActivity { /* empty */ }
    public static class AppDrawOverlaySettingsActivity extends SettingsActivity { /* empty */ }
    public static class AppWriteSettingsActivity extends SettingsActivity { /* empty */ }
    public static class AdvancedAppsActivity extends SettingsActivity { /* empty */ }
+11 −2
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@ import com.android.settings.applications.AppStatePowerBridge;
import com.android.settings.applications.AppStateDirectoryAccessBridge;
import com.android.settings.applications.AppStateUsageBridge;
import com.android.settings.applications.AppStateWriteSettingsBridge;
import com.android.settings.wifi.AppStateChangeWifiStateBridge;
import com.android.settingslib.applications.ApplicationsState;

/**
@@ -67,14 +68,15 @@ public class AppFilterRegistry {
    public static final int FILTER_APPS_WRITE_SETTINGS = 11;
    public static final int FILTER_APPS_INSTALL_SOURCES = 12;
    public static final int FILTER_APP_HAS_DIRECTORY_ACCESS = 13;
    // Next id: 14
    public static final int FILTER_APP_CAN_CHANGE_WIFI_STATE = 14;
    // Next id: 15

    private static AppFilterRegistry sRegistry;

    private final AppFilterItem[] mFilters;

    private AppFilterRegistry() {
        mFilters = new AppFilterItem[14];
        mFilters = new AppFilterItem[15];

        // High power whitelist, on
        mFilters[FILTER_APPS_POWER_WHITELIST] = new AppFilterItem(
@@ -163,6 +165,11 @@ public class AppFilterRegistry {
                AppStateDirectoryAccessBridge.FILTER_APP_HAS_DIRECTORY_ACCESS,
                FILTER_APP_HAS_DIRECTORY_ACCESS,
                R.string.filter_install_sources_apps);

        mFilters[FILTER_APP_CAN_CHANGE_WIFI_STATE] = new AppFilterItem(
                AppStateChangeWifiStateBridge.FILTER_CHANGE_WIFI_STATE,
                FILTER_APP_CAN_CHANGE_WIFI_STATE,
                R.string.filter_write_settings_apps);
    }

    public static AppFilterRegistry getInstance() {
@@ -187,6 +194,8 @@ public class AppFilterRegistry {
                return FILTER_APPS_INSTALL_SOURCES;
            case ManageApplications.LIST_TYPE_DIRECTORY_ACCESS:
                return FILTER_APP_HAS_DIRECTORY_ACCESS;
            case ManageApplications.LIST_TYPE_WIFI_ACCESS:
                return FILTER_APP_CAN_CHANGE_WIFI_STATE;
            default:
                return FILTER_APPS_ALL;
        }
Loading