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

Commit e3d1e4ca authored by Isaac Katzenelson's avatar Isaac Katzenelson Committed by Andrew Sapperstein
Browse files

Remove constructors and defer creating the Handler to onBind.

Previously, the Handler couldn't be built because we tried to call
getMainLooper() before the Service's base context was attached.

Bug: 268741053
API-Coverage-Bug: 265968015
Test: atest SharedConnectivityServiceTest
Change-Id: I70caac89ca69545e62b177872ef144b031cc4846
parent 7137d916
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -10152,7 +10152,6 @@ package android.net.wifi.sharedconnectivity.service {
  public abstract class SharedConnectivityService extends android.app.Service {
    ctor public SharedConnectivityService();
    ctor public SharedConnectivityService(@NonNull android.os.Handler);
    method @Nullable public final android.os.IBinder onBind(@NonNull android.content.Intent);
    method public abstract void onConnectKnownNetwork(@NonNull android.net.wifi.sharedconnectivity.app.KnownNetwork);
    method public abstract void onConnectTetherNetwork(@NonNull android.net.wifi.sharedconnectivity.app.TetherNetwork);
+2 −9
Original line number Diff line number Diff line
@@ -59,7 +59,7 @@ public abstract class SharedConnectivityService extends Service {
    private static final String TAG = SharedConnectivityService.class.getSimpleName();
    private static final boolean DEBUG = true;

    private  final Handler mHandler;
    private  Handler mHandler;
    private final List<ISharedConnectivityCallback> mCallbacks = new ArrayList<>();
    // Used to find DeathRecipient when unregistering a callback to call unlinkToDeath.
    private final Map<ISharedConnectivityCallback, DeathRecipient> mDeathRecipientMap =
@@ -71,14 +71,6 @@ public abstract class SharedConnectivityService extends Service {
    private TetherNetworkConnectionStatus mTetherNetworkConnectionStatus;
    private KnownNetworkConnectionStatus mKnownNetworkConnectionStatus;

    public SharedConnectivityService() {
        mHandler = new Handler(getMainLooper());
    }

    public SharedConnectivityService(@NonNull Handler handler) {
        mHandler = handler;
    }

    private final class DeathRecipient implements IBinder.DeathRecipient {
        ISharedConnectivityCallback mCallback;

@@ -97,6 +89,7 @@ public abstract class SharedConnectivityService extends Service {
    @Nullable
    public final IBinder onBind(@NonNull Intent intent) {
        if (DEBUG) Log.i(TAG, "onBind intent=" + intent);
        mHandler = new Handler(getMainLooper());
        return new ISharedConnectivityService.Stub() {
            @Override
            public void registerCallback(ISharedConnectivityCallback callback) {
+37 −15
Original line number Diff line number Diff line
@@ -17,16 +17,21 @@
package android.net.wifi.sharedconnectivity.service;

import static org.junit.Assert.assertNotNull;
import static org.mockito.Mockito.when;

import android.content.Context;
import android.content.Intent;
import android.net.wifi.sharedconnectivity.app.KnownNetwork;
import android.net.wifi.sharedconnectivity.app.TetherNetwork;
import android.os.Handler;
import android.os.test.TestLooper;
import android.os.Looper;

import androidx.annotation.NonNull;
import androidx.test.filters.SmallTest;

import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;

/**
 * Unit tests for {@link android.net.wifi.sharedconnectivity.service.SharedConnectivityService}.
@@ -34,6 +39,33 @@ import org.junit.Test;
@SmallTest
public class SharedConnectivityServiceTest {

    @Mock
    Context mContext;

    static class FakeSharedConnectivityService extends SharedConnectivityService {
        public void attachBaseContext(Context context) {
            super.attachBaseContext(context);
        }

        @Override
        public void onConnectTetherNetwork(@NonNull TetherNetwork network) {}

        @Override
        public void onDisconnectTetherNetwork(@NonNull TetherNetwork network) {}

        @Override
        public void onConnectKnownNetwork(@NonNull KnownNetwork network) {}

        @Override
        public void onForgetKnownNetwork(@NonNull KnownNetwork network) {}
    }

    @Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);
        when(mContext.getMainLooper()).thenReturn(Looper.getMainLooper());
    }

    /**
     * Verifies service returns
     */
@@ -51,18 +83,8 @@ public class SharedConnectivityServiceTest {
    }

    private SharedConnectivityService createService() {
        return new SharedConnectivityService(new Handler(new TestLooper().getLooper())) {
            @Override
            public void onConnectTetherNetwork(TetherNetwork network) {}

            @Override
            public void onDisconnectTetherNetwork(TetherNetwork network) {}

            @Override
            public void onConnectKnownNetwork(KnownNetwork network) {}

            @Override
            public void onForgetKnownNetwork(KnownNetwork network) {}
        };
        FakeSharedConnectivityService service = new FakeSharedConnectivityService();
        service.attachBaseContext(mContext);
        return service;
    }
}