diff options
-rw-r--r-- | service/java/com/android/server/wifi/WifiNetworkFactory.java | 19 | ||||
-rw-r--r-- | tests/wifitests/src/com/android/server/wifi/WifiNetworkFactoryTest.java | 32 |
2 files changed, 45 insertions, 6 deletions
diff --git a/service/java/com/android/server/wifi/WifiNetworkFactory.java b/service/java/com/android/server/wifi/WifiNetworkFactory.java index 46a640aeb..e3a8d5c32 100644 --- a/service/java/com/android/server/wifi/WifiNetworkFactory.java +++ b/service/java/com/android/server/wifi/WifiNetworkFactory.java @@ -23,6 +23,7 @@ import android.annotation.NonNull; import android.app.ActivityManager; import android.app.AlarmManager; import android.content.Context; +import android.content.Intent; import android.net.MacAddress; import android.net.NetworkCapabilities; import android.net.NetworkFactory; @@ -42,6 +43,7 @@ import android.os.Message; import android.os.Messenger; import android.os.Process; import android.os.RemoteException; +import android.os.UserHandle; import android.os.WorkSource; import android.text.TextUtils; import android.util.Log; @@ -70,6 +72,10 @@ public class WifiNetworkFactory extends NetworkFactory { public static final int NETWORK_CONNECTION_TIMEOUT_MS = 30 * 1000; // 30 seconds @VisibleForTesting public static final int USER_SELECTED_NETWORK_CONNECT_RETRY_MAX = 3; // max of 3 retries. + @VisibleForTesting + public static final String UI_START_INTENT_ACTION = "com.android.settings.wifi.NETWORK_REQUEST"; + @VisibleForTesting + public static final String UI_START_INTENT_CATEGORY = "android.intent.category.DEFAULT"; private final Context mContext; private final ActivityManager mActivityManager; @@ -380,7 +386,8 @@ public class WifiNetworkFactory extends NetworkFactory { wns.ssidPatternMatcher, wns.bssidPatternMatcher, wns.wifiConfiguration, wns.requestorUid); - // TODO(b/113878056): Start UI flow here. + // Start UI to let the user grant/disallow this request from the app. + startUi(); // Trigger periodic scans for finding a network in the request. startPeriodicScans(); } @@ -785,5 +792,15 @@ public class WifiNetworkFactory extends NetworkFactory { TAG, mConnectionTimeoutAlarmListener, mHandler); mConnectionTimeoutSet = true; } + + private void startUi() { + Intent intent = new Intent(); + intent.setAction(UI_START_INTENT_ACTION); + intent.addCategory(UI_START_INTENT_CATEGORY); + intent.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT | Intent.FLAG_ACTIVITY_NEW_TASK); + mContext.startActivityAsUser(intent, + UserHandle.getUserHandleForUid( + mActiveSpecificNetworkRequestSpecifier.requestorUid)); + } } diff --git a/tests/wifitests/src/com/android/server/wifi/WifiNetworkFactoryTest.java b/tests/wifitests/src/com/android/server/wifi/WifiNetworkFactoryTest.java index d96247300..6a3b83ddc 100644 --- a/tests/wifitests/src/com/android/server/wifi/WifiNetworkFactoryTest.java +++ b/tests/wifitests/src/com/android/server/wifi/WifiNetworkFactoryTest.java @@ -30,6 +30,7 @@ import android.app.ActivityManager; import android.app.AlarmManager; import android.app.AlarmManager.OnAlarmListener; import android.content.Context; +import android.content.Intent; import android.content.pm.PackageManager; import android.net.MacAddress; import android.net.NetworkCapabilities; @@ -49,6 +50,7 @@ import android.os.Messenger; import android.os.PatternMatcher; import android.os.Process; import android.os.RemoteException; +import android.os.UserHandle; import android.os.WorkSource; import android.os.test.TestLooper; import android.test.suitebuilder.annotation.SmallTest; @@ -350,10 +352,20 @@ public class WifiNetworkFactoryTest { mNetworkRequest.networkCapabilities.setNetworkSpecifier(specifier); mWifiNetworkFactory.needNetworkFor(mNetworkRequest, 0); - verify(mWifiScanner).startScan(mScanSettingsArgumentCaptor.capture(), any(), - mWorkSourceArgumentCaptor.capture()); + // Verify UI start. + ArgumentCaptor<Intent> intentArgumentCaptor = ArgumentCaptor.forClass(Intent.class); + verify(mContext).startActivityAsUser( + intentArgumentCaptor.capture(), eq(UserHandle.getUserHandleForUid(TEST_UID_1))); + Intent intent = intentArgumentCaptor.getValue(); + assertNotNull(intent); + assertEquals(intent.getAction(), WifiNetworkFactory.UI_START_INTENT_ACTION); + assertTrue(intent.getCategories().contains(WifiNetworkFactory.UI_START_INTENT_CATEGORY)); + assertTrue((intent.getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0); + assertTrue((intent.getFlags() & Intent.FLAG_ACTIVITY_NEW_TASK) != 0); // Verify scan settings. + verify(mWifiScanner).startScan(mScanSettingsArgumentCaptor.capture(), any(), + mWorkSourceArgumentCaptor.capture()); ScanSettings scanSettings = mScanSettingsArgumentCaptor.getValue(); assertNotNull(scanSettings); assertEquals(WifiScanner.WIFI_BAND_BOTH_WITH_DFS, scanSettings.band); @@ -374,10 +386,20 @@ public class WifiNetworkFactoryTest { mNetworkRequest.networkCapabilities.setNetworkSpecifier(specifier); mWifiNetworkFactory.needNetworkFor(mNetworkRequest, 0); - verify(mWifiScanner).startScan(mScanSettingsArgumentCaptor.capture(), any(), - mWorkSourceArgumentCaptor.capture()); + // Verify UI start. + ArgumentCaptor<Intent> intentArgumentCaptor = ArgumentCaptor.forClass(Intent.class); + verify(mContext).startActivityAsUser( + intentArgumentCaptor.capture(), eq(UserHandle.getUserHandleForUid(TEST_UID_1))); + Intent intent = intentArgumentCaptor.getValue(); + assertNotNull(intent); + assertEquals(intent.getAction(), WifiNetworkFactory.UI_START_INTENT_ACTION); + assertTrue(intent.getCategories().contains(WifiNetworkFactory.UI_START_INTENT_CATEGORY)); + assertTrue((intent.getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0); + assertTrue((intent.getFlags() & Intent.FLAG_ACTIVITY_NEW_TASK) != 0); // Verify scan settings. + verify(mWifiScanner).startScan(mScanSettingsArgumentCaptor.capture(), any(), + mWorkSourceArgumentCaptor.capture()); ScanSettings scanSettings = mScanSettingsArgumentCaptor.getValue(); assertNotNull(scanSettings); assertEquals(WifiScanner.WIFI_BAND_BOTH_WITH_DFS, scanSettings.band); @@ -402,7 +424,7 @@ public class WifiNetworkFactoryTest { public void testHandleNetworkRequestWithSpecifierAfterPreviousHiddenNetworkRequest() { testHandleNetworkRequestWithSpecifierForHiddenNetwork(); mWifiNetworkFactory.releaseNetworkFor(mNetworkRequest); - reset(mWifiScanner, mWifiConnectivityManager); + reset(mWifiScanner, mWifiConnectivityManager, mContext); testHandleNetworkRequestWithSpecifier(); } |