Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f2eac489 authored by Isaac Katzenelson's avatar Isaac Katzenelson Committed by Android (Google) Code Review
Browse files

Merge "Read service package and intent action from resources"

parents dc6ec7e8 ca8e637b
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -1570,7 +1570,7 @@ public final class SystemServiceRegistry {
                new CachedServiceFetcher<SharedConnectivityManager>() {
                new CachedServiceFetcher<SharedConnectivityManager>() {
                    @Override
                    @Override
                    public SharedConnectivityManager createService(ContextImpl ctx) {
                    public SharedConnectivityManager createService(ContextImpl ctx) {
                        return new SharedConnectivityManager(ctx);
                        return SharedConnectivityManager.create(ctx);
                    }
                    }
                });
                });


+30 −27
Original line number Original line Diff line number Diff line
@@ -35,6 +35,8 @@ import android.os.IInterface;
import android.os.RemoteException;
import android.os.RemoteException;
import android.util.Log;
import android.util.Log;


import com.android.internal.R;

import java.util.HashMap;
import java.util.HashMap;
import java.util.List;
import java.util.List;
import java.util.Map;
import java.util.Map;
@@ -51,8 +53,6 @@ import java.util.concurrent.Executor;
public class SharedConnectivityManager {
public class SharedConnectivityManager {
    private static final String TAG = SharedConnectivityManager.class.getSimpleName();
    private static final String TAG = SharedConnectivityManager.class.getSimpleName();
    private static final boolean DEBUG = true;
    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
    private static final class SharedConnectivityCallbackProxy extends
            ISharedConnectivityCallback.Stub {
            ISharedConnectivityCallback.Stub {
@@ -101,7 +101,7 @@ public class SharedConnectivityManager {
                    Binder.restoreCallingIdentity(token);
                    Binder.restoreCallingIdentity(token);
                }
                }
            }
            }
        };
        }


        @Override
        @Override
        public void onTetherNetworkConnectionStatusChanged(
        public void onTetherNetworkConnectionStatusChanged(
@@ -115,7 +115,7 @@ public class SharedConnectivityManager {
                    Binder.restoreCallingIdentity(token);
                    Binder.restoreCallingIdentity(token);
                }
                }
            }
            }
        };
        }


        @Override
        @Override
        public void onKnownNetworkConnectionStatusChanged(
        public void onKnownNetworkConnectionStatusChanged(
@@ -129,7 +129,7 @@ public class SharedConnectivityManager {
                    Binder.restoreCallingIdentity(token);
                    Binder.restoreCallingIdentity(token);
                }
                }
            }
            }
        };
        }
    }
    }


    private ISharedConnectivityService mService;
    private ISharedConnectivityService mService;
@@ -137,14 +137,33 @@ public class SharedConnectivityManager {
            mProxyMap = new HashMap<>();
            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
     * Automatically binds to implementation of {@link SharedConnectivityService} specified in
     * device overlay.
     * device overlay.
     *
     *
     * @return An instance of {@link SharedConnectivityManager} or null if the shared connectivity
     * service is not found.
     * @hide
     * @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() {
        ServiceConnection serviceConnection = new ServiceConnection() {
            @Override
            @Override
            public void onServiceConnected(ComponentName name, IBinder service) {
            public void onServiceConnected(ComponentName name, IBinder service) {
@@ -158,7 +177,10 @@ public class SharedConnectivityManager {
                mProxyMap.clear();
                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;
        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.
     * Registers a callback for receiving updates to the list of Tether Networks and Known Networks.
     *
     *
+17 −17
Original line number Original line Diff line number Diff line
@@ -89,7 +89,7 @@ public class SharedConnectivityManagerTest {
     */
     */
    @Test
    @Test
    public void testBindingToService() {
    public void testBindingToService() {
        new SharedConnectivityManager(mContext);
        SharedConnectivityManager.create(mContext);
        verify(mContext).bindService(any(), any(), anyInt());
        verify(mContext).bindService(any(), any(), anyInt());
    }
    }


@@ -98,22 +98,22 @@ public class SharedConnectivityManagerTest {
     */
     */
    @Test
    @Test
    public void testRegisterCallback() throws Exception {
    public void testRegisterCallback() throws Exception {
        SharedConnectivityManager manager = new SharedConnectivityManager(mContext);
        SharedConnectivityManager manager = SharedConnectivityManager.create(mContext);
        manager.setService(null);
        manager.setService(null);
        assertFalse(manager.registerCallback(mExecutor, mClientCallback));
        assertFalse(manager.registerCallback(mExecutor, mClientCallback));


        manager = new SharedConnectivityManager(mContext);
        manager = SharedConnectivityManager.create(mContext);
        manager.setService(mService);
        manager.setService(mService);
        assertTrue(manager.registerCallback(mExecutor, mClientCallback));
        assertTrue(manager.registerCallback(mExecutor, mClientCallback));
        verify(mService).registerCallback(any());
        verify(mService).registerCallback(any());


        // Registering the same callback twice should fail.
        // Registering the same callback twice should fail.
        manager = new SharedConnectivityManager(mContext);
        manager = SharedConnectivityManager.create(mContext);
        manager.setService(mService);
        manager.setService(mService);
        manager.registerCallback(mExecutor, mClientCallback);
        manager.registerCallback(mExecutor, mClientCallback);
        assertFalse(manager.registerCallback(mExecutor, mClientCallback));
        assertFalse(manager.registerCallback(mExecutor, mClientCallback));


        manager = new SharedConnectivityManager(mContext);
        manager = SharedConnectivityManager.create(mContext);
        manager.setService(mService);
        manager.setService(mService);
        doThrow(new RemoteException()).when(mService).registerCallback(any());
        doThrow(new RemoteException()).when(mService).registerCallback(any());
        assertFalse(manager.registerCallback(mExecutor, mClientCallback));
        assertFalse(manager.registerCallback(mExecutor, mClientCallback));
@@ -125,24 +125,24 @@ public class SharedConnectivityManagerTest {
     */
     */
    @Test
    @Test
    public void testUnregisterCallback() throws Exception {
    public void testUnregisterCallback() throws Exception {
        SharedConnectivityManager manager = new SharedConnectivityManager(mContext);
        SharedConnectivityManager manager = SharedConnectivityManager.create(mContext);
        manager.setService(null);
        manager.setService(null);
        assertFalse(manager.unregisterCallback(mClientCallback));
        assertFalse(manager.unregisterCallback(mClientCallback));


        manager = new SharedConnectivityManager(mContext);
        manager = SharedConnectivityManager.create(mContext);
        manager.setService(mService);
        manager.setService(mService);
        manager.registerCallback(mExecutor, mClientCallback);
        manager.registerCallback(mExecutor, mClientCallback);
        assertTrue(manager.unregisterCallback(mClientCallback));
        assertTrue(manager.unregisterCallback(mClientCallback));
        verify(mService).unregisterCallback(any());
        verify(mService).unregisterCallback(any());




        manager = new SharedConnectivityManager(mContext);
        manager = SharedConnectivityManager.create(mContext);
        manager.setService(mService);
        manager.setService(mService);
        manager.registerCallback(mExecutor, mClientCallback);
        manager.registerCallback(mExecutor, mClientCallback);
        manager.unregisterCallback(mClientCallback);
        manager.unregisterCallback(mClientCallback);
        assertFalse(manager.unregisterCallback(mClientCallback));
        assertFalse(manager.unregisterCallback(mClientCallback));


        manager = new SharedConnectivityManager(mContext);
        manager = SharedConnectivityManager.create(mContext);
        manager.setService(mService);
        manager.setService(mService);
        doThrow(new RemoteException()).when(mService).unregisterCallback(any());
        doThrow(new RemoteException()).when(mService).unregisterCallback(any());
        assertFalse(manager.unregisterCallback(mClientCallback));
        assertFalse(manager.unregisterCallback(mClientCallback));
@@ -156,11 +156,11 @@ public class SharedConnectivityManagerTest {
    public void testConnectTetherNetwork() throws RemoteException {
    public void testConnectTetherNetwork() throws RemoteException {
        TetherNetwork network = buildTetherNetwork();
        TetherNetwork network = buildTetherNetwork();


        SharedConnectivityManager manager = new SharedConnectivityManager(mContext);
        SharedConnectivityManager manager = SharedConnectivityManager.create(mContext);
        manager.setService(null);
        manager.setService(null);
        assertFalse(manager.connectTetherNetwork(network));
        assertFalse(manager.connectTetherNetwork(network));


        manager = new SharedConnectivityManager(mContext);
        manager = SharedConnectivityManager.create(mContext);
        manager.setService(mService);
        manager.setService(mService);
        manager.connectTetherNetwork(network);
        manager.connectTetherNetwork(network);
        verify(mService).connectTetherNetwork(network);
        verify(mService).connectTetherNetwork(network);
@@ -175,11 +175,11 @@ public class SharedConnectivityManagerTest {
     */
     */
    @Test
    @Test
    public void testDisconnectTetherNetwork() throws RemoteException {
    public void testDisconnectTetherNetwork() throws RemoteException {
        SharedConnectivityManager manager = new SharedConnectivityManager(mContext);
        SharedConnectivityManager manager = SharedConnectivityManager.create(mContext);
        manager.setService(null);
        manager.setService(null);
        assertFalse(manager.disconnectTetherNetwork());
        assertFalse(manager.disconnectTetherNetwork());


        manager = new SharedConnectivityManager(mContext);
        manager = SharedConnectivityManager.create(mContext);
        manager.setService(mService);
        manager.setService(mService);
        manager.disconnectTetherNetwork();
        manager.disconnectTetherNetwork();
        verify(mService).disconnectTetherNetwork();
        verify(mService).disconnectTetherNetwork();
@@ -196,11 +196,11 @@ public class SharedConnectivityManagerTest {
    public void testConnectKnownNetwork() throws RemoteException {
    public void testConnectKnownNetwork() throws RemoteException {
        KnownNetwork network = buildKnownNetwork();
        KnownNetwork network = buildKnownNetwork();


        SharedConnectivityManager manager = new SharedConnectivityManager(mContext);
        SharedConnectivityManager manager = SharedConnectivityManager.create(mContext);
        manager.setService(null);
        manager.setService(null);
        assertFalse(manager.connectKnownNetwork(network));
        assertFalse(manager.connectKnownNetwork(network));


        manager = new SharedConnectivityManager(mContext);
        manager = SharedConnectivityManager.create(mContext);
        manager.setService(mService);
        manager.setService(mService);
        manager.connectKnownNetwork(network);
        manager.connectKnownNetwork(network);
        verify(mService).connectKnownNetwork(network);
        verify(mService).connectKnownNetwork(network);
@@ -217,11 +217,11 @@ public class SharedConnectivityManagerTest {
    public void testForgetKnownNetwork() throws RemoteException {
    public void testForgetKnownNetwork() throws RemoteException {
        KnownNetwork network = buildKnownNetwork();
        KnownNetwork network = buildKnownNetwork();


        SharedConnectivityManager manager = new SharedConnectivityManager(mContext);
        SharedConnectivityManager manager = SharedConnectivityManager.create(mContext);
        manager.setService(null);
        manager.setService(null);
        assertFalse(manager.forgetKnownNetwork(network));
        assertFalse(manager.forgetKnownNetwork(network));


        manager = new SharedConnectivityManager(mContext);
        manager = SharedConnectivityManager.create(mContext);
        manager.setService(mService);
        manager.setService(mService);
        manager.forgetKnownNetwork(network);
        manager.forgetKnownNetwork(network);
        verify(mService).forgetKnownNetwork(network);
        verify(mService).forgetKnownNetwork(network);