Allow connecting to WiFi networks via Quick Settings
am: a3e8570867
Change-Id: I46046d9292fa343d6fd7f01f41fd20b71337374e
diff --git a/service/java/com/android/server/wifi/WifiStateMachine.java b/service/java/com/android/server/wifi/WifiStateMachine.java
index 799c21c..4032c84 100644
--- a/service/java/com/android/server/wifi/WifiStateMachine.java
+++ b/service/java/com/android/server/wifi/WifiStateMachine.java
@@ -990,6 +990,8 @@
private final BackupManagerProxy mBackupManagerProxy;
+ private int mSystemUiUid = -1;
+
public WifiStateMachine(Context context, FrameworkFacade facade, Looper looper,
UserManager userManager, WifiInjector wifiInjector,
BackupManagerProxy backupManagerProxy,
@@ -1201,6 +1203,13 @@
intent.putExtra(WifiManager.EXTRA_SCAN_AVAILABLE, WIFI_STATE_DISABLED);
mContext.sendStickyBroadcastAsUser(intent, UserHandle.ALL);
+ try {
+ mSystemUiUid = mContext.getPackageManager().getPackageUidAsUser("com.android.systemui",
+ PackageManager.MATCH_SYSTEM_ONLY, UserHandle.USER_SYSTEM);
+ } catch (PackageManager.NameNotFoundException e) {
+ loge("Unable to resolve SystemUI's UID.");
+ }
+
mVerboseLoggingLevel = mFacade.getIntegerSetting(
mContext, Settings.Global.WIFI_VERBOSE_LOGGING_ENABLED, 0);
updateLoggingLevel();
@@ -5816,9 +5825,11 @@
mWifiConfigManager.removeNetworksForUser(message.arg1);
break;
case WifiManager.CONNECT_NETWORK:
- // Only the current foreground user can modify networks.
+ // Only the current foreground user and System UI (which runs as user 0 but acts
+ // on behalf of the current foreground user) can modify networks.
if (!mWifiConfigManager.isCurrentUserProfile(
- UserHandle.getUserId(message.sendingUid))) {
+ UserHandle.getUserId(message.sendingUid)) &&
+ message.sendingUid != mSystemUiUid) {
loge("Only the current foreground user can modify networks "
+ " currentUserId=" + mWifiConfigManager.getCurrentUserId()
+ " sendingUserId=" + UserHandle.getUserId(message.sendingUid));