summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRoshan Pius <rpius@google.com>2019-08-13 11:23:28 -0700
committerRoshan Pius <rpius@google.com>2019-08-20 17:27:25 +0000
commitd8d7cbce404a262e453ce7d5beb2706410fa9734 (patch)
tree8edfadbf0065b743008c2f57c35dc02756e87164
parent5be4058e19d5b5244224c6d8580b801567cb9ac7 (diff)
downloadandroid_frameworks_opt_net_wifi-d8d7cbce404a262e453ce7d5beb2706410fa9734.tar.gz
android_frameworks_opt_net_wifi-d8d7cbce404a262e453ce7d5beb2706410fa9734.tar.bz2
android_frameworks_opt_net_wifi-d8d7cbce404a262e453ce7d5beb2706410fa9734.zip
WifiServiceImpl: Allow setWifiEnabled for system apps
This allows system apps to toggle wifi on/off during emergency calls to get user's location for example. Bug: 138091278 Test: atest com.android.server.wifi Change-Id: I095f9755c60034064e467dedcdb16b33dc63d9eb Merged-In: I095f9755c60034064e467dedcdb16b33dc63d9eb (cherry-picked from b46e815669ba3f376f7dda2a24479f84bad0b4a8) (cherry picked from commit 949a9784e43720aaf3710589565ef5d8e22e20ab) Change-Id: I57f11cb4545e6d6845504171ab37b737f0d1ec29
-rw-r--r--service/java/com/android/server/wifi/WifiServiceImpl.java3
-rw-r--r--tests/wifitests/src/com/android/server/wifi/WifiServiceImplTest.java37
2 files changed, 39 insertions, 1 deletions
diff --git a/service/java/com/android/server/wifi/WifiServiceImpl.java b/service/java/com/android/server/wifi/WifiServiceImpl.java
index 6bb36b3b9..a4639924b 100644
--- a/service/java/com/android/server/wifi/WifiServiceImpl.java
+++ b/service/java/com/android/server/wifi/WifiServiceImpl.java
@@ -875,7 +875,8 @@ public class WifiServiceImpl extends BaseWifiService {
}
boolean isPrivileged = isPrivileged(Binder.getCallingPid(), Binder.getCallingUid());
if (!isPrivileged
- && !mWifiPermissionsUtil.isTargetSdkLessThan(packageName, Build.VERSION_CODES.Q)) {
+ && !mWifiPermissionsUtil.isTargetSdkLessThan(packageName, Build.VERSION_CODES.Q)
+ && !isSystem(packageName)) {
mLog.info("setWifiEnabled not allowed for uid=%")
.c(Binder.getCallingUid()).flush();
return false;
diff --git a/tests/wifitests/src/com/android/server/wifi/WifiServiceImplTest.java b/tests/wifitests/src/com/android/server/wifi/WifiServiceImplTest.java
index b69fba78b..378d6cf2e 100644
--- a/tests/wifitests/src/com/android/server/wifi/WifiServiceImplTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/WifiServiceImplTest.java
@@ -600,6 +600,24 @@ public class WifiServiceImplTest {
}
/**
+ * Verify that wifi can be enabled by the system apps targeting Q SDK.
+ */
+ @Test
+ public void testSetWifiEnabledSuccessForSystemAppsTargetingQSDK() throws Exception {
+ doReturn(AppOpsManager.MODE_ALLOWED).when(mAppOpsManager)
+ .noteOp(AppOpsManager.OPSTR_CHANGE_WIFI_STATE, Process.myUid(), TEST_PACKAGE_NAME);
+ when(mWifiPermissionsUtil.isTargetSdkLessThan(anyString(),
+ eq(Build.VERSION_CODES.Q))).thenReturn(false);
+ mApplicationInfo.flags = ApplicationInfo.FLAG_SYSTEM;
+
+ when(mSettingsStore.handleWifiToggled(eq(true))).thenReturn(true);
+ when(mSettingsStore.isAirplaneModeOn()).thenReturn(false);
+ assertTrue(mWifiServiceImpl.setWifiEnabled(TEST_PACKAGE_NAME, true));
+
+ verify(mWifiController).sendMessage(eq(CMD_WIFI_TOGGLED));
+ }
+
+ /**
* Verify that wifi can be enabled by the apps targeting pre-Q SDK.
*/
@Test
@@ -812,6 +830,25 @@ public class WifiServiceImplTest {
}
/**
+ * Verify that wifi can be disabled by the system apps targeting Q SDK.
+ */
+ @Test
+ public void testSetWifiDisabledSuccessForSystemAppsTargetingQSDK() throws Exception {
+ doReturn(AppOpsManager.MODE_ALLOWED).when(mAppOpsManager)
+ .noteOp(AppOpsManager.OPSTR_CHANGE_WIFI_STATE, Process.myUid(), TEST_PACKAGE_NAME);
+ when(mWifiPermissionsUtil.isTargetSdkLessThan(anyString(),
+ eq(Build.VERSION_CODES.Q))).thenReturn(false);
+ mApplicationInfo.flags = ApplicationInfo.FLAG_SYSTEM;
+
+ when(mSettingsStore.handleWifiToggled(eq(false))).thenReturn(true);
+ when(mSettingsStore.isAirplaneModeOn()).thenReturn(false);
+ assertTrue(mWifiServiceImpl.setWifiEnabled(TEST_PACKAGE_NAME, false));
+
+ verify(mWifiController).sendMessage(eq(CMD_WIFI_TOGGLED));
+ }
+
+
+ /**
* Verify that wifi can be disabled by the apps targeting pre-Q SDK.
*/
@Test