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

Commit db990e60 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Do not try to access service in DreamActivityCallbacks after destroy." into main

parents 0c493654 9e9b8ccf
Loading
Loading
Loading
Loading
+9 −1
Original line number Diff line number Diff line
@@ -1963,13 +1963,17 @@ public class DreamService extends Service implements Window.Callback {
        private final IBinder mActivityDreamToken;
        private WeakReference<DreamService> mService;

        DreamActivityCallbacks(IBinder token, WeakReference<DreamService> service)  {
        public DreamActivityCallbacks(IBinder token, WeakReference<DreamService> service)  {
            mActivityDreamToken = token;
            mService = service;
        }

        /** Callback when the {@link DreamActivity} has been created */
        public void onActivityCreated(DreamActivity activity) {
            if (mService == null) {
                return;
            }

            final DreamService service = mService.get();

            if (service == null) {
@@ -1981,6 +1985,10 @@ public class DreamService extends Service implements Window.Callback {

        /** Callback when the {@link DreamActivity} has been destroyed */
        public void onActivityDestroyed() {
            if (mService == null) {
                return;
            }

            final DreamService service = mService.get();

            if (service == null) {
+20 −0
Original line number Diff line number Diff line
@@ -23,6 +23,8 @@ import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.clearInvocations;
import static org.mockito.Mockito.mockingDetails;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -32,6 +34,8 @@ import android.content.Context;
import android.content.pm.PackageManager;
import android.content.pm.ServiceInfo;
import android.content.res.TypedArray;
import android.os.Binder;
import android.os.IBinder;
import android.os.Looper;
import android.platform.test.annotations.EnableFlags;
import android.platform.test.flag.junit.SetFlagsRule;
@@ -52,6 +56,8 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;

import java.lang.ref.WeakReference;

@SmallTest
@RunWith(AndroidJUnit4.class)
public class DreamServiceTest {
@@ -210,6 +216,20 @@ public class DreamServiceTest {
        verify(environment.getDreamOverlayClient()).onWakeRequested();
    }

    @Test
    public void testCallbackInvalidAfterDestroy() {
        final IBinder binder = new Binder();
        final DreamService service = Mockito.mock(DreamService.class);
        final WeakReference<DreamService> serviceRef = new WeakReference<>(service);
        DreamService.DreamActivityCallbacks callbacks = new DreamService.DreamActivityCallbacks(
                binder, serviceRef);
        callbacks.onActivityDestroyed();
        assertThat(mockingDetails(service).getInvocations().size()).isNotEqualTo(0);
        clearInvocations(service);
        callbacks.onActivityDestroyed();
        assertThat(mockingDetails(service).getInvocations().size()).isEqualTo(0);
    }

    @Test
    @EnableFlags(Flags.FLAG_DREAM_HANDLES_CONFIRM_KEYS)
    public void testPartialKeyHandling() throws Exception {