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

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

Merge "Add logShowImePostLayoutState" into main

parents 623394b5 1202866b
Loading
Loading
Loading
Loading
+57 −7
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ import android.annotation.NonNull;
import android.annotation.Nullable;
import android.graphics.Rect;
import android.os.Trace;
import android.util.Slog;
import android.util.proto.ProtoOutputStream;
import android.view.InsetsSource;
import android.view.InsetsSourceConsumer;
@@ -50,6 +51,8 @@ import java.io.PrintWriter;
 */
final class ImeInsetsSourceProvider extends InsetsSourceProvider {

    private static final String TAG = ImeInsetsSourceProvider.class.getSimpleName();

    /** The token tracking the current IME request or {@code null} otherwise. */
    @Nullable
    private ImeTracker.Token mImeRequesterStatsToken;
@@ -220,12 +223,16 @@ final class ImeInsetsSourceProvider extends InsetsSourceProvider {
     */
    void scheduleShowImePostLayout(InsetsControlTarget imeTarget,
            @NonNull ImeTracker.Token statsToken) {
        boolean targetChanged = isTargetChangedWithinActivity(imeTarget);
        mImeRequester = imeTarget;
        if (mImeRequesterStatsToken != null) {
            // Cancel the pre-existing stats token, if any.
            // Log state on pre-existing request cancel.
            logShowImePostLayoutState();
            ImeTracker.forLogging().onCancelled(
                    mImeRequesterStatsToken, ImeTracker.PHASE_WM_SHOW_IME_RUNNER);
        }
        mImeRequesterStatsToken = statsToken;
        boolean targetChanged = isTargetChangedWithinActivity(imeTarget);
        mImeRequester = imeTarget;
        if (targetChanged) {
            // target changed, check if new target can show IME.
            ProtoLog.d(WM_DEBUG_IME, "IME target changed within ActivityRecord");
@@ -297,13 +304,17 @@ final class ImeInsetsSourceProvider extends InsetsSourceProvider {
     */
    void abortShowImePostLayout() {
        ProtoLog.d(WM_DEBUG_IME, "abortShowImePostLayout");
        mImeRequester = null;
        mIsImeLayoutDrawn = false;
        mShowImeRunner = null;
        if (mImeRequesterStatsToken != null) {
            // Log state on abort.
            logShowImePostLayoutState();
            ImeTracker.forLogging().onFailed(
                    mImeRequesterStatsToken, ImeTracker.PHASE_WM_ABORT_SHOW_IME_POST_LAYOUT);
            mImeRequesterStatsToken = null;
        }
        mImeRequester = null;
        mIsImeLayoutDrawn = false;
        mShowImeRunner = null;
    }

    @VisibleForTesting
    boolean isReadyToShowIme() {
@@ -337,6 +348,41 @@ final class ImeInsetsSourceProvider extends InsetsSourceProvider {
                || sameAsImeControlTarget();
    }

    /**
     * Logs the current state required for scheduleShowImePostLayout's runnable to be triggered.
     */
    private void logShowImePostLayoutState() {
        final var windowState = mWindowContainer != null ? mWindowContainer.asWindowState() : null;
        final var dcTarget = mDisplayContent.getImeTarget(IME_TARGET_LAYERING);
        final var controlTarget = mDisplayContent.getImeTarget(IME_TARGET_CONTROL);
        final var sb = new StringBuilder();
        sb.append("mWindowContainer: ").append(mWindowContainer);
        sb.append(" windowState: ").append(windowState);
        if (windowState != null) {
            sb.append(" windowState.isDrawn(): ").append(windowState.isDrawn());
            sb.append(" windowState.mGivenInsetsPending: ").append(windowState.mGivenInsetsPending);
        }
        sb.append(" mIsImeLayoutDrawn: ").append(mIsImeLayoutDrawn);
        sb.append(" mShowImeRunner: ").append(mShowImeRunner);
        sb.append(" mImeRequester: ").append(mImeRequester);
        sb.append(" dcTarget: ").append(dcTarget);
        sb.append(" controlTarget: ").append(controlTarget);
        sb.append(" isReadyToShowIme(): ").append(isReadyToShowIme());
        if (mImeRequester != null && dcTarget != null && controlTarget != null) {
            sb.append(" isImeLayeringTarget: ");
            sb.append(isImeLayeringTarget(mImeRequester, dcTarget));
            sb.append(" isAboveImeLayeringTarget: ");
            sb.append(isAboveImeLayeringTarget(mImeRequester, dcTarget));
            sb.append(" isImeFallbackTarget: ");
            sb.append(isImeFallbackTarget(mImeRequester));
            sb.append(" isImeInputTarget: ");
            sb.append(isImeInputTarget(mImeRequester));
            sb.append(" sameAsImeControlTarget: ");
            sb.append(sameAsImeControlTarget());
        }
        Slog.d(TAG, sb.toString());
    }

    // ---------------------------------------------------------------------------------------
    // Methods for checking IME insets target changing state.
    //
@@ -399,6 +445,10 @@ final class ImeInsetsSourceProvider extends InsetsSourceProvider {
            pw.print("showImePostLayout pending for mImeRequester=");
            pw.print(mImeRequester);
            pw.println();
        } else {
            pw.print(prefix);
            pw.print("showImePostLayout not scheduled, mImeRequester=null");
            pw.println();
        }
        pw.println();
    }