summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--service/java/com/android/server/wifi/WifiNetworkFactory.java19
-rw-r--r--tests/wifitests/src/com/android/server/wifi/WifiNetworkFactoryTest.java32
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();
}