summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Isaac Katzenelson <isaack@android.com> 2023-02-14 02:12:44 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2023-02-14 02:12:44 +0000
commitf2eac489a65b77fa6116446c19aa30871b864aa9 (patch)
tree3836cc7be5cfd895a6fe113ee0b9128b6e957eb4
parentdc6ec7e86d42dc2521d8a7c4e136336fa7f07610 (diff)
parentca8e637bac317faac7cff384815812ee054f6c42 (diff)
Merge "Read service package and intent action from resources"
-rw-r--r--core/java/android/app/SystemServiceRegistry.java2
-rw-r--r--wifi/java/src/android/net/wifi/sharedconnectivity/app/SharedConnectivityManager.java57
-rw-r--r--wifi/tests/src/android/net/wifi/sharedconnectivity/app/SharedConnectivityManagerTest.java34
3 files changed, 48 insertions, 45 deletions
diff --git a/core/java/android/app/SystemServiceRegistry.java b/core/java/android/app/SystemServiceRegistry.java
index 64538ec132de..6d80a44d3d60 100644
--- a/core/java/android/app/SystemServiceRegistry.java
+++ b/core/java/android/app/SystemServiceRegistry.java
@@ -1570,7 +1570,7 @@ public final class SystemServiceRegistry {
new CachedServiceFetcher<SharedConnectivityManager>() {
@Override
public SharedConnectivityManager createService(ContextImpl ctx) {
- return new SharedConnectivityManager(ctx);
+ return SharedConnectivityManager.create(ctx);
}
});
diff --git a/wifi/java/src/android/net/wifi/sharedconnectivity/app/SharedConnectivityManager.java b/wifi/java/src/android/net/wifi/sharedconnectivity/app/SharedConnectivityManager.java
index c2981899d2ab..8aa369e31ce8 100644
--- a/wifi/java/src/android/net/wifi/sharedconnectivity/app/SharedConnectivityManager.java
+++ b/wifi/java/src/android/net/wifi/sharedconnectivity/app/SharedConnectivityManager.java
@@ -35,6 +35,8 @@ import android.os.IInterface;
import android.os.RemoteException;
import android.util.Log;
+import com.android.internal.R;
+
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -51,8 +53,6 @@ import java.util.concurrent.Executor;
public class SharedConnectivityManager {
private static final String TAG = SharedConnectivityManager.class.getSimpleName();
private static final boolean DEBUG = true;
- private static final String SERVICE_PACKAGE_NAME = "sharedconnectivity_service_package";
- private static final String SERVICE_CLASS_NAME = "sharedconnectivity_service_class";
private static final class SharedConnectivityCallbackProxy extends
ISharedConnectivityCallback.Stub {
@@ -101,7 +101,7 @@ public class SharedConnectivityManager {
Binder.restoreCallingIdentity(token);
}
}
- };
+ }
@Override
public void onTetherNetworkConnectionStatusChanged(
@@ -115,7 +115,7 @@ public class SharedConnectivityManager {
Binder.restoreCallingIdentity(token);
}
}
- };
+ }
@Override
public void onKnownNetworkConnectionStatusChanged(
@@ -129,7 +129,7 @@ public class SharedConnectivityManager {
Binder.restoreCallingIdentity(token);
}
}
- };
+ }
}
private ISharedConnectivityService mService;
@@ -137,14 +137,33 @@ public class SharedConnectivityManager {
mProxyMap = new HashMap<>();
/**
- * Constructor for new instance of {@link SharedConnectivityManager}.
+ * Creates a new instance of {@link SharedConnectivityManager}.
*
* Automatically binds to implementation of {@link SharedConnectivityService} specified in
* device overlay.
*
+ * @return An instance of {@link SharedConnectivityManager} or null if the shared connectivity
+ * service is not found.
* @hide
*/
- public SharedConnectivityManager(@NonNull Context context) {
+ @Nullable
+ public static SharedConnectivityManager create(@NonNull Context context) {
+ Resources resources = context.getResources();
+ try {
+ String servicePackageName = resources.getString(
+ R.string.shared_connectivity_service_package);
+ String serviceIntentAction = resources.getString(
+ R.string.shared_connectivity_service_intent_action);
+ return new SharedConnectivityManager(context, servicePackageName, serviceIntentAction);
+ } catch (Resources.NotFoundException e) {
+ Log.e(TAG, "To support shared connectivity service on this device, the service's"
+ + " package name and intent action string must be defined");
+ }
+ return null;
+ }
+
+ private SharedConnectivityManager(@NonNull Context context, String servicePackageName,
+ String serviceIntentAction) {
ServiceConnection serviceConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
@@ -158,7 +177,10 @@ public class SharedConnectivityManager {
mProxyMap.clear();
}
};
- bind(context, serviceConnection);
+
+ context.bindService(
+ new Intent().setPackage(servicePackageName).setAction(serviceIntentAction),
+ serviceConnection, Context.BIND_AUTO_CREATE);
}
/**
@@ -169,25 +191,6 @@ public class SharedConnectivityManager {
mService = (ISharedConnectivityService) service;
}
- private void bind(Context context, ServiceConnection serviceConnection) {
- Resources resources = context.getResources();
- int packageNameId = resources.getIdentifier(SERVICE_PACKAGE_NAME, "string",
- context.getPackageName());
- int classNameId = resources.getIdentifier(SERVICE_CLASS_NAME, "string",
- context.getPackageName());
- if (packageNameId == 0 || classNameId == 0) {
- throw new Resources.NotFoundException("Package and class names for"
- + " shared connectivity service must be defined");
- }
-
- Intent intent = new Intent();
- intent.setComponent(new ComponentName(resources.getString(packageNameId),
- resources.getString(classNameId)));
- context.bindService(
- intent,
- serviceConnection, Context.BIND_AUTO_CREATE);
- }
-
/**
* Registers a callback for receiving updates to the list of Tether Networks and Known Networks.
*
diff --git a/wifi/tests/src/android/net/wifi/sharedconnectivity/app/SharedConnectivityManagerTest.java b/wifi/tests/src/android/net/wifi/sharedconnectivity/app/SharedConnectivityManagerTest.java
index 9aeccac1968e..784e9c4731ee 100644
--- a/wifi/tests/src/android/net/wifi/sharedconnectivity/app/SharedConnectivityManagerTest.java
+++ b/wifi/tests/src/android/net/wifi/sharedconnectivity/app/SharedConnectivityManagerTest.java
@@ -89,7 +89,7 @@ public class SharedConnectivityManagerTest {
*/
@Test
public void testBindingToService() {
- new SharedConnectivityManager(mContext);
+ SharedConnectivityManager.create(mContext);
verify(mContext).bindService(any(), any(), anyInt());
}
@@ -98,22 +98,22 @@ public class SharedConnectivityManagerTest {
*/
@Test
public void testRegisterCallback() throws Exception {
- SharedConnectivityManager manager = new SharedConnectivityManager(mContext);
+ SharedConnectivityManager manager = SharedConnectivityManager.create(mContext);
manager.setService(null);
assertFalse(manager.registerCallback(mExecutor, mClientCallback));
- manager = new SharedConnectivityManager(mContext);
+ manager = SharedConnectivityManager.create(mContext);
manager.setService(mService);
assertTrue(manager.registerCallback(mExecutor, mClientCallback));
verify(mService).registerCallback(any());
// Registering the same callback twice should fail.
- manager = new SharedConnectivityManager(mContext);
+ manager = SharedConnectivityManager.create(mContext);
manager.setService(mService);
manager.registerCallback(mExecutor, mClientCallback);
assertFalse(manager.registerCallback(mExecutor, mClientCallback));
- manager = new SharedConnectivityManager(mContext);
+ manager = SharedConnectivityManager.create(mContext);
manager.setService(mService);
doThrow(new RemoteException()).when(mService).registerCallback(any());
assertFalse(manager.registerCallback(mExecutor, mClientCallback));
@@ -125,24 +125,24 @@ public class SharedConnectivityManagerTest {
*/
@Test
public void testUnregisterCallback() throws Exception {
- SharedConnectivityManager manager = new SharedConnectivityManager(mContext);
+ SharedConnectivityManager manager = SharedConnectivityManager.create(mContext);
manager.setService(null);
assertFalse(manager.unregisterCallback(mClientCallback));
- manager = new SharedConnectivityManager(mContext);
+ manager = SharedConnectivityManager.create(mContext);
manager.setService(mService);
manager.registerCallback(mExecutor, mClientCallback);
assertTrue(manager.unregisterCallback(mClientCallback));
verify(mService).unregisterCallback(any());
- manager = new SharedConnectivityManager(mContext);
+ manager = SharedConnectivityManager.create(mContext);
manager.setService(mService);
manager.registerCallback(mExecutor, mClientCallback);
manager.unregisterCallback(mClientCallback);
assertFalse(manager.unregisterCallback(mClientCallback));
- manager = new SharedConnectivityManager(mContext);
+ manager = SharedConnectivityManager.create(mContext);
manager.setService(mService);
doThrow(new RemoteException()).when(mService).unregisterCallback(any());
assertFalse(manager.unregisterCallback(mClientCallback));
@@ -156,11 +156,11 @@ public class SharedConnectivityManagerTest {
public void testConnectTetherNetwork() throws RemoteException {
TetherNetwork network = buildTetherNetwork();
- SharedConnectivityManager manager = new SharedConnectivityManager(mContext);
+ SharedConnectivityManager manager = SharedConnectivityManager.create(mContext);
manager.setService(null);
assertFalse(manager.connectTetherNetwork(network));
- manager = new SharedConnectivityManager(mContext);
+ manager = SharedConnectivityManager.create(mContext);
manager.setService(mService);
manager.connectTetherNetwork(network);
verify(mService).connectTetherNetwork(network);
@@ -175,11 +175,11 @@ public class SharedConnectivityManagerTest {
*/
@Test
public void testDisconnectTetherNetwork() throws RemoteException {
- SharedConnectivityManager manager = new SharedConnectivityManager(mContext);
+ SharedConnectivityManager manager = SharedConnectivityManager.create(mContext);
manager.setService(null);
assertFalse(manager.disconnectTetherNetwork());
- manager = new SharedConnectivityManager(mContext);
+ manager = SharedConnectivityManager.create(mContext);
manager.setService(mService);
manager.disconnectTetherNetwork();
verify(mService).disconnectTetherNetwork();
@@ -196,11 +196,11 @@ public class SharedConnectivityManagerTest {
public void testConnectKnownNetwork() throws RemoteException {
KnownNetwork network = buildKnownNetwork();
- SharedConnectivityManager manager = new SharedConnectivityManager(mContext);
+ SharedConnectivityManager manager = SharedConnectivityManager.create(mContext);
manager.setService(null);
assertFalse(manager.connectKnownNetwork(network));
- manager = new SharedConnectivityManager(mContext);
+ manager = SharedConnectivityManager.create(mContext);
manager.setService(mService);
manager.connectKnownNetwork(network);
verify(mService).connectKnownNetwork(network);
@@ -217,11 +217,11 @@ public class SharedConnectivityManagerTest {
public void testForgetKnownNetwork() throws RemoteException {
KnownNetwork network = buildKnownNetwork();
- SharedConnectivityManager manager = new SharedConnectivityManager(mContext);
+ SharedConnectivityManager manager = SharedConnectivityManager.create(mContext);
manager.setService(null);
assertFalse(manager.forgetKnownNetwork(network));
- manager = new SharedConnectivityManager(mContext);
+ manager = SharedConnectivityManager.create(mContext);
manager.setService(mService);
manager.forgetKnownNetwork(network);
verify(mService).forgetKnownNetwork(network);