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

Commit ddc77fb7 authored by lumark's avatar lumark
Browse files

Add logs for debugging IME onConfigurationChanged

To help clarify why IME service client didn't receive
onConfigurationChanged callback.

Bug: 135719017
Test: manual
Change-Id: I2c17e2290f6cefd49ed5c30a8a524dcb48d6ee40
parent 60bb23b1
Loading
Loading
Loading
Loading
+31 −1
Original line number Diff line number Diff line
@@ -80,6 +80,7 @@ import android.graphics.Canvas;
import android.graphics.HardwareRenderer;
import android.graphics.ImageDecoder;
import android.hardware.display.DisplayManagerGlobal;
import android.inputmethodservice.InputMethodService;
import android.net.ConnectivityManager;
import android.net.IConnectivityManager;
import android.net.Proxy;
@@ -455,6 +456,8 @@ public final class ActivityThread extends ClientTransactionHandler {

    Bundle mCoreSettings = null;

    boolean mHasImeComponent = false;

    /** Activity client record, used for bookkeeping for the real {@link Activity} instance. */
    public static final class ActivityClientRecord {
        @UnsupportedAppUsage
@@ -5360,7 +5363,11 @@ public final class ActivityThread extends ClientTransactionHandler {
            }
            final int NSVC = mServices.size();
            for (int i=0; i<NSVC; i++) {
                callbacks.add(mServices.valueAt(i));
                final ComponentCallbacks2 serviceComp = mServices.valueAt(i);
                if (serviceComp instanceof InputMethodService) {
                    mHasImeComponent = true;
                }
                callbacks.add(serviceComp);
            }
        }
        synchronized (mProviderMap) {
@@ -5600,6 +5607,10 @@ public final class ActivityThread extends ClientTransactionHandler {
            }

            if (config == null) {
                // TODO (b/135719017): Temporary log for debugging IME service.
                if (Build.IS_DEBUGGABLE && mHasImeComponent) {
                    Log.w(TAG, "handleConfigurationChanged for IME app but config is null");
                }
                return;
            }

@@ -5621,6 +5632,12 @@ public final class ActivityThread extends ClientTransactionHandler {
                mConfiguration = new Configuration();
            }
            if (!mConfiguration.isOtherSeqNewer(config) && compat == null) {
                // TODO (b/135719017): Temporary log for debugging IME service.
                if (Build.IS_DEBUGGABLE && mHasImeComponent) {
                    Log.w(TAG, "handleConfigurationChanged for IME app but config seq is obsolete "
                            + ", config=" + config
                            + ", mConfiguration=" + mConfiguration);
                }
                return;
            }

@@ -5652,6 +5669,13 @@ public final class ActivityThread extends ClientTransactionHandler {
                            config);
                } else if (!equivalent) {
                    performConfigurationChanged(cb, config);
                } else {
                    // TODO (b/135719017): Temporary log for debugging IME service.
                    if (Build.IS_DEBUGGABLE && cb instanceof InputMethodService) {
                        Log.w(TAG, "performConfigurationChanged didn't callback to IME "
                                + ", configDiff=" + configDiff
                                + ", mConfiguration=" + mConfiguration);
                    }
                }
            }
        }
@@ -7142,6 +7166,12 @@ public final class ActivityThread extends ClientTransactionHandler {
        ViewRootImpl.ConfigChangedCallback configChangedCallback
                = (Configuration globalConfig) -> {
            synchronized (mResourcesManager) {
                // TODO (b/135719017): Temporary log for debugging IME service.
                if (Build.IS_DEBUGGABLE && mHasImeComponent) {
                    Log.d(TAG, "ViewRootImpl.ConfigChangedCallback for IME, "
                            + "config=" + globalConfig);
                }

                // We need to apply this change to the resources immediately, because upon returning
                // the view hierarchy will be informed about it.
                if (mResourcesManager.applyConfigurationToResourcesLocked(globalConfig,
+1 −0
Original line number Diff line number Diff line
@@ -6506,6 +6506,7 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
                    }
                    return;
                }
                process.mIsImeProcess = true;
                process.registerDisplayConfigurationListenerLocked(activityDisplay);
            }
        }
+18 −0
Original line number Diff line number Diff line
@@ -50,6 +50,7 @@ import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.pm.ApplicationInfo;
import android.content.res.Configuration;
import android.os.Build;
import android.os.Message;
import android.os.RemoteException;
import android.os.SystemClock;
@@ -160,6 +161,8 @@ public class WindowProcessController extends ConfigurationContainer<Configuratio
    // Thread currently set for VR scheduling
    int mVrThreadTid;

    boolean mIsImeProcess;

    // all activities running in the process
    private final ArrayList<ActivityRecord> mActivities = new ArrayList<>();
    // any tasks this process had run root activities in
@@ -949,17 +952,32 @@ public class WindowProcessController extends ConfigurationContainer<Configuratio
        final Configuration config = getConfiguration();
        if (mLastReportedConfiguration.diff(config) == 0) {
            // Nothing changed.
            if (Build.IS_DEBUGGABLE && mIsImeProcess) {
                // TODO (b/135719017): Temporary log for debugging IME service.
                Slog.w(TAG_CONFIGURATION, "Current config: " + config
                        + " unchanged for IME proc " + mName);
            }
            return;
        }

        try {
            if (mThread == null) {
                if (Build.IS_DEBUGGABLE && mIsImeProcess) {
                    // TODO (b/135719017): Temporary log for debugging IME service.
                    Slog.w(TAG_CONFIGURATION, "Unable to send config for IME proc " + mName
                            + ": no app thread");
                }
                return;
            }
            if (DEBUG_CONFIGURATION) {
                Slog.v(TAG_CONFIGURATION, "Sending to proc " + mName
                        + " new config " + config);
            }
            if (Build.IS_DEBUGGABLE && mIsImeProcess) {
                // TODO (b/135719017): Temporary log for debugging IME service.
                Slog.v(TAG_CONFIGURATION, "Sending to IME proc " + mName
                        + " new config " + config);
            }
            config.seq = mAtm.increaseConfigurationSeqLocked();
            mAtm.getLifecycleManager().scheduleTransaction(mThread,
                    ConfigurationChangeItem.obtain(config));