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

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

Merge changes from topic "yukawa-b27859687" into main

* changes:
  Clear additional subtypes upon background APK updates
  Remove an unnecessary null check
parents 807c423a 2501e749
Loading
Loading
Loading
Loading
+43 −29
Original line number Diff line number Diff line
@@ -1397,41 +1397,55 @@ public final class InputMethodManagerService extends IInputMethodManager.Stub

        private void onFinishPackageChangesInternal() {
            synchronized (ImfLock.class) {
                if (!isChangingPackagesOfCurrentUserLocked()) {
                    return;
                }
                if (!shouldRebuildInputMethodListLocked()) {
                    return;
                final int userId = getChangingUserId();
                final boolean isCurrentUser = (userId == mSettings.getUserId());
                AdditionalSubtypeMap additionalSubtypeMap;
                final InputMethodSettings settings;
                if (isCurrentUser) {
                    additionalSubtypeMap = mAdditionalSubtypeMap;
                    settings = mSettings;
                } else {
                    additionalSubtypeMap = AdditionalSubtypeUtils.load(userId);
                    settings = queryInputMethodServicesInternal(mContext, userId,
                            additionalSubtypeMap, DirectBootAwareness.AUTO);
                }

                InputMethodInfo curIm = null;
                String curInputMethodId = mSettings.getSelectedInputMethod();
                final List<InputMethodInfo> methodList = mSettings.getMethodList();
                String curInputMethodId = settings.getSelectedInputMethod();
                final List<InputMethodInfo> methodList = settings.getMethodList();
                final int numImes = methodList.size();
                if (curInputMethodId != null) {
                for (int i = 0; i < numImes; i++) {
                    InputMethodInfo imi = methodList.get(i);
                    final String imiId = imi.getId();
                    if (imiId.equals(curInputMethodId)) {
                        curIm = imi;
                    }

                    int change = isPackageDisappearing(imi.getPackageName());
                        if (change == PACKAGE_TEMPORARY_CHANGE
                                || change == PACKAGE_PERMANENT_CHANGE) {
                            Slog.i(TAG, "Input method uninstalled, disabling: "
                                    + imi.getComponent());
                    if (change == PACKAGE_TEMPORARY_CHANGE || change == PACKAGE_PERMANENT_CHANGE) {
                        Slog.i(TAG, "Input method uninstalled, disabling: " + imi.getComponent());
                        if (isCurrentUser) {
                            setInputMethodEnabledLocked(imi.getId(), false);
                        } else {
                            settings.buildAndPutEnabledInputMethodsStrRemovingId(
                                    new StringBuilder(),
                                    settings.getEnabledInputMethodsAndSubtypeList(),
                                    imi.getId());
                        }
                    } else if (change == PACKAGE_UPDATING) {
                            Slog.i(TAG,
                                    "Input method reinstalling, clearing additional subtypes: "
                        Slog.i(TAG, "Input method reinstalling, clearing additional subtypes: "
                                + imi.getComponent());
                            mAdditionalSubtypeMap =
                                    mAdditionalSubtypeMap.cloneWithRemoveOrSelf(imi.getId());
                            AdditionalSubtypeUtils.save(mAdditionalSubtypeMap,
                                    mSettings.getMethodMap(), mSettings.getUserId());
                        additionalSubtypeMap =
                                additionalSubtypeMap.cloneWithRemoveOrSelf(imi.getId());
                        AdditionalSubtypeUtils.save(additionalSubtypeMap,
                                settings.getMethodMap(), userId);
                        if (isCurrentUser) {
                            mAdditionalSubtypeMap = additionalSubtypeMap;
                        }
                    }
                }

                if (!isCurrentUser || !shouldRebuildInputMethodListLocked()) {
                    return;
                }

                buildInputMethodListLocked(false /* resetDefaultEnabledIme */);
@@ -1443,7 +1457,7 @@ public final class InputMethodManagerService extends IInputMethodManager.Stub
                    if (change == PACKAGE_TEMPORARY_CHANGE
                            || change == PACKAGE_PERMANENT_CHANGE) {
                        final PackageManager userAwarePackageManager =
                                getPackageManagerForUser(mContext, mSettings.getUserId());
                                getPackageManagerForUser(mContext, userId);
                        ServiceInfo si = null;
                        try {
                            si = userAwarePackageManager.getServiceInfo(curIm.getComponent(),