diff options
| author | 2023-02-14 02:12:44 +0000 | |
|---|---|---|
| committer | 2023-02-14 02:12:44 +0000 | |
| commit | f2eac489a65b77fa6116446c19aa30871b864aa9 (patch) | |
| tree | 3836cc7be5cfd895a6fe113ee0b9128b6e957eb4 | |
| parent | dc6ec7e86d42dc2521d8a7c4e136336fa7f07610 (diff) | |
| parent | ca8e637bac317faac7cff384815812ee054f6c42 (diff) | |
Merge "Read service package and intent action from resources"
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); |