Added methods to check shared connectivity features availablility.

Added methods and flags to check what level of funcionality
the service supports.
Added flags to enable instant tether and nearby Wi-Fi. The flags
will be enabled in an overlay file based on the level of UI
support by the OEM. The service checks the flags and provides
an API to allow the API's client to decide what level
of functionality to provide.
Also fixed the naming of flags.

Bug: 271934662
Test: atest SharedConnectivityServiceTest
Change-Id: Ifba6b73904862dfdc58741856e8b940ae6d6634b
This commit is contained in:
Isaac Katzenelson
2023-03-07 17:31:24 +00:00
committed by Isaac Katzenelson
parent 3fd4802dad
commit 6d035f93e2
6 changed files with 93 additions and 6 deletions

View File

@@ -10158,6 +10158,8 @@ package android.net.wifi.sharedconnectivity.service {
public abstract class SharedConnectivityService extends android.app.Service {
ctor public SharedConnectivityService();
method public static boolean areHotspotNetworksEnabledForService(@NonNull android.content.Context);
method public static boolean areKnownNetworksEnabledForService(@NonNull android.content.Context);
method @Nullable public final android.os.IBinder onBind(@NonNull android.content.Intent);
method public abstract void onConnectHotspotNetwork(@NonNull android.net.wifi.sharedconnectivity.app.HotspotNetwork);
method public abstract void onConnectKnownNetwork(@NonNull android.net.wifi.sharedconnectivity.app.KnownNetwork);

View File

@@ -3020,10 +3020,18 @@
>com.android.systemui/com.android.systemui.wifi.WifiDebuggingSecondaryUserActivity</string>
<!-- Package name of the system service that implements the shared connectivity service -->
<string translatable="false" name="shared_connectivity_service_package"></string>
<string translatable="false" name="config_sharedConnectivityServicePackage"></string>
<!-- Intent action used when binding to the shared connectivity service -->
<string translatable="false" name="shared_connectivity_service_intent_action"></string>
<string translatable="false" name="config_sharedConnectivityServiceIntentAction"></string>
<!-- The system and settings UI can support all the features of instant tether. If set to false,
instant tether will run in notifications mode -->
<bool name="config_hotspotNetworksEnabledForService">false</bool>
<!-- The system and settings UI can support all the features of known networks. If set to false,
known networks will run in notifications mode -->
<bool name="config_knownNetworksEnabledForService">false</bool>
<!-- Component name of the activity that shows the usb containment status. -->
<string name="config_usbContaminantActivity" translatable="false"

View File

@@ -4960,8 +4960,10 @@
<java-symbol type="bool" name="config_stopSystemPackagesByDefault"/>
<java-symbol type="string" name="config_wearServiceComponent" />
<java-symbol type="string" name="shared_connectivity_service_package" />
<java-symbol type="string" name="shared_connectivity_service_intent_action" />
<java-symbol type="string" name="config_sharedConnectivityServicePackage" />
<java-symbol type="string" name="config_sharedConnectivityServiceIntentAction" />
<java-symbol type="bool" name="config_hotspotNetworksEnabledForService"/>
<java-symbol type="bool" name="config_knownNetworksEnabledForService"/>
<!-- Whether to show weather on the lockscreen by default. -->
<java-symbol type="bool" name="config_lockscreenWeatherEnabledByDefault" />

View File

@@ -161,9 +161,9 @@ public class SharedConnectivityManager {
Resources resources = context.getResources();
try {
String servicePackageName = resources.getString(
R.string.shared_connectivity_service_package);
R.string.config_sharedConnectivityServicePackage);
String serviceIntentAction = resources.getString(
R.string.shared_connectivity_service_intent_action);
R.string.config_sharedConnectivityServiceIntentAction);
return new SharedConnectivityManager(context, servicePackageName, serviceIntentAction);
} catch (Resources.NotFoundException e) {
Log.e(TAG, "To support shared connectivity service on this device, the service's"

View File

@@ -25,6 +25,7 @@ import android.annotation.RequiresPermission;
import android.annotation.SystemApi;
import android.annotation.TestApi;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.wifi.sharedconnectivity.app.HotspotNetwork;
@@ -40,8 +41,11 @@ import android.os.RemoteCallbackList;
import android.os.RemoteException;
import android.util.Log;
import com.android.internal.R;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
/**
@@ -381,6 +385,30 @@ public abstract class SharedConnectivityService extends Service {
mRemoteCallbackList.finishBroadcast();
}
/**
* System and settings UI support on the device for instant tether.
* @return True if the UI can display Instant Tether network data. False otherwise.
*/
public static boolean areHotspotNetworksEnabledForService(@NonNull Context context) {
String servicePackage = context.getResources()
.getString(R.string.config_sharedConnectivityServicePackage);
return Objects.equals(context.getPackageName(), servicePackage)
&& context.getResources()
.getBoolean(R.bool.config_hotspotNetworksEnabledForService);
}
/**
* System and settings UI support on the device for known networks.
* @return True if the UI can display known networks data. False otherwise.
*/
public static boolean areKnownNetworksEnabledForService(@NonNull Context context) {
String servicePackage = context.getResources()
.getString(R.string.config_sharedConnectivityServicePackage);
return Objects.equals(context.getPackageName(), servicePackage)
&& context.getResources()
.getBoolean(R.bool.config_knownNetworksEnabledForService);
}
/**
* Implementing application should implement this method.
*

View File

@@ -26,10 +26,12 @@ import static android.net.wifi.sharedconnectivity.app.NetworkProviderInfo.DEVICE
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.when;
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import android.net.wifi.sharedconnectivity.app.HotspotNetwork;
import android.net.wifi.sharedconnectivity.app.HotspotNetworkConnectionStatus;
import android.net.wifi.sharedconnectivity.app.KnownNetwork;
@@ -86,6 +88,9 @@ public class SharedConnectivityServiceTest {
@Mock
Context mContext;
@Mock
Resources mResources;
static class FakeSharedConnectivityService extends SharedConnectivityService {
public void attachBaseContext(Context context) {
super.attachBaseContext(context);
@@ -180,6 +185,48 @@ public class SharedConnectivityServiceTest {
.isEqualTo(KNOWN_NETWORK_CONNECTION_STATUS);
}
@Test
public void areHotspotNetworksEnabledForService() {
when(mContext.getResources()).thenReturn(mResources);
when(mContext.getPackageName()).thenReturn("package");
when(mResources.getString(anyInt())).thenReturn("package");
when(mResources.getBoolean(anyInt())).thenReturn(true);
assertThat(SharedConnectivityService.areHotspotNetworksEnabledForService(mContext))
.isTrue();
}
@Test
public void areHotspotNetworksEnabledForService_notSamePackage_shouldReturnFalse() {
when(mContext.getResources()).thenReturn(mResources);
when(mContext.getPackageName()).thenReturn("package");
when(mResources.getString(anyInt())).thenReturn("other_package");
when(mResources.getBoolean(anyInt())).thenReturn(true);
assertThat(SharedConnectivityService.areHotspotNetworksEnabledForService(mContext))
.isFalse();
}
@Test
public void areKnownNetworksEnabledForService() {
when(mContext.getResources()).thenReturn(mResources);
when(mContext.getPackageName()).thenReturn("package");
when(mResources.getString(anyInt())).thenReturn("package");
when(mResources.getBoolean(anyInt())).thenReturn(true);
assertThat(SharedConnectivityService.areKnownNetworksEnabledForService(mContext)).isTrue();
}
@Test
public void areKnownNetworksEnabledForService_notSamePackage_shouldReturnFalse() {
when(mContext.getResources()).thenReturn(mResources);
when(mContext.getPackageName()).thenReturn("package");
when(mResources.getString(anyInt())).thenReturn("other_package");
when(mResources.getBoolean(anyInt())).thenReturn(true);
assertThat(SharedConnectivityService.areKnownNetworksEnabledForService(mContext)).isFalse();
}
private SharedConnectivityService createService() {
FakeSharedConnectivityService service = new FakeSharedConnectivityService();
service.attachBaseContext(mContext);