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

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

Merge "Add logs for debugging IME onConfigurationChanged"

parents f7cb0263 ddc77fb7
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
@@ -6487,6 +6487,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
@@ -954,17 +957,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));