Merge "Add logs for debugging IME onConfigurationChanged"
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java
index 2b4d4f8b..50f945b 100644
--- a/core/java/android/app/ActivityThread.java
+++ b/core/java/android/app/ActivityThread.java
@@ -80,6 +80,7 @@
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 @@
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 @@
}
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 @@
}
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 @@
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 @@
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 @@
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,
diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
index b351faf..079e982 100644
--- a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
+++ b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
@@ -6487,6 +6487,7 @@
}
return;
}
+ process.mIsImeProcess = true;
process.registerDisplayConfigurationListenerLocked(activityDisplay);
}
}
diff --git a/services/core/java/com/android/server/wm/WindowProcessController.java b/services/core/java/com/android/server/wm/WindowProcessController.java
index 4a91dac..d7a519c 100644
--- a/services/core/java/com/android/server/wm/WindowProcessController.java
+++ b/services/core/java/com/android/server/wm/WindowProcessController.java
@@ -50,6 +50,7 @@
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 @@
// 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 @@
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));