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

Commit ede29999 authored by Joanne Chung's avatar Joanne Chung Committed by Automerger Merge Worker
Browse files

Merge "Fix Assistant breaks after stopping the app." into tm-dev am:...

Merge "Fix Assistant breaks after stopping the app." into tm-dev am: 4c419129 am: 7031a781 am: 2cfc23e4

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/17651837



Change-Id: Iaf7eaf79ae5de088ff9ac46a97ca55c05f0db128
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 94851613 2cfc23e4
Loading
Loading
Loading
Loading
+17 −0
Original line number Original line Diff line number Diff line
@@ -323,6 +323,16 @@ public class VoiceInteractionManagerService extends SystemService {
            new RoleObserver(mContext.getMainExecutor());
            new RoleObserver(mContext.getMainExecutor());
        }
        }


        void handleUserStop(String packageName, int userHandle) {
            synchronized (VoiceInteractionManagerServiceStub.this) {
                ComponentName curInteractor = getCurInteractor(userHandle);
                if (curInteractor != null && packageName.equals(curInteractor.getPackageName())) {
                    Slog.d(TAG, "switchImplementation for user stop.");
                    switchImplementationIfNeededLocked(true);
                }
            }
        }

        @Override
        @Override
        public @NonNull IVoiceInteractionSoundTriggerSession createSoundTriggerSessionAsOriginator(
        public @NonNull IVoiceInteractionSoundTriggerSession createSoundTriggerSessionAsOriginator(
                @NonNull Identity originatorIdentity, IBinder client) {
                @NonNull Identity originatorIdentity, IBinder client) {
@@ -2071,6 +2081,7 @@ public class VoiceInteractionManagerService extends SystemService {
        }
        }


        PackageMonitor mPackageMonitor = new PackageMonitor() {
        PackageMonitor mPackageMonitor = new PackageMonitor() {

            @Override
            @Override
            public boolean onHandleForceStop(Intent intent, String[] packages, int uid, boolean doit) {
            public boolean onHandleForceStop(Intent intent, String[] packages, int uid, boolean doit) {
                if (DEBUG) Slog.d(TAG, "onHandleForceStop uid=" + uid + " doit=" + doit);
                if (DEBUG) Slog.d(TAG, "onHandleForceStop uid=" + uid + " doit=" + doit);
@@ -2103,11 +2114,17 @@ public class VoiceInteractionManagerService extends SystemService {
                        }
                        }


                        setCurInteractor(null, userHandle);
                        setCurInteractor(null, userHandle);
                        // TODO: should not reset null here. But even remove this line, the
                        // initForUser() still reset it because the interactor will be null. Keep
                        // it now but we should still need to fix it.
                        setCurRecognizer(null, userHandle);
                        setCurRecognizer(null, userHandle);
                        resetCurAssistant(userHandle);
                        resetCurAssistant(userHandle);
                        initForUser(userHandle);
                        initForUser(userHandle);
                        switchImplementationIfNeededLocked(true);
                        switchImplementationIfNeededLocked(true);


                        // When resetting the interactor, the recognizer and the assistant settings
                        // value, we also need to reset the assistant role to keep the values
                        // consistent. Clear the assistant role will reset to the default value.
                        Context context = getContext();
                        Context context = getContext();
                        context.getSystemService(RoleManager.class).clearRoleHoldersAsUser(
                        context.getSystemService(RoleManager.class).clearRoleHoldersAsUser(
                                RoleManager.ROLE_ASSISTANT, 0, UserHandle.of(userHandle),
                                RoleManager.ROLE_ASSISTANT, 0, UserHandle.of(userHandle),
+28 −0
Original line number Original line Diff line number Diff line
@@ -29,6 +29,7 @@ import android.app.ActivityManager;
import android.app.ActivityOptions;
import android.app.ActivityOptions;
import android.app.ActivityTaskManager;
import android.app.ActivityTaskManager;
import android.app.AppGlobals;
import android.app.AppGlobals;
import android.app.ApplicationExitInfo;
import android.app.IActivityManager;
import android.app.IActivityManager;
import android.app.IActivityTaskManager;
import android.app.IActivityTaskManager;
import android.content.BroadcastReceiver;
import android.content.BroadcastReceiver;
@@ -38,6 +39,7 @@ import android.content.Intent;
import android.content.IntentFilter;
import android.content.IntentFilter;
import android.content.ServiceConnection;
import android.content.ServiceConnection;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager;
import android.content.pm.ParceledListSlice;
import android.content.pm.ServiceInfo;
import android.content.pm.ServiceInfo;
import android.hardware.soundtrigger.IRecognitionStatusCallback;
import android.hardware.soundtrigger.IRecognitionStatusCallback;
import android.hardware.soundtrigger.SoundTrigger;
import android.hardware.soundtrigger.SoundTrigger;
@@ -149,6 +151,32 @@ class VoiceInteractionManagerServiceImpl implements VoiceInteractionSessionConne
                resetHotwordDetectionConnectionLocked();
                resetHotwordDetectionConnectionLocked();
            }
            }
        }
        }

        @Override
        public void onBindingDied(ComponentName name) {
            Slog.d(TAG, "onBindingDied to " + name);
            String packageName = name.getPackageName();
            ParceledListSlice<ApplicationExitInfo> plistSlice = null;
            try {
                plistSlice = mAm.getHistoricalProcessExitReasons(packageName, 0, 1, mUser);
            } catch (RemoteException e) {
                // do nothing. The local binder so it can not throw it.
            }
            if (plistSlice == null) {
                return;
            }
            List<ApplicationExitInfo> list = plistSlice.getList();
            if (list.isEmpty()) {
                return;
            }
            // TODO(b/229956310): Refactor the logic of PackageMonitor and onBindingDied
            ApplicationExitInfo info = list.get(0);
            if (info.getReason() == ApplicationExitInfo.REASON_USER_REQUESTED
                    && info.getSubReason() == ApplicationExitInfo.SUBREASON_STOP_APP) {
                // only handle user stopped the application from the task manager
                mServiceStub.handleUserStop(packageName, mUser);
            }
        }
    };
    };


    VoiceInteractionManagerServiceImpl(Context context, Handler handler,
    VoiceInteractionManagerServiceImpl(Context context, Handler handler,