Loading core/java/android/view/inputmethod/IInputMethodManagerGlobalInvoker.java +12 −1 Original line number Diff line number Diff line Loading @@ -29,9 +29,11 @@ import android.os.IBinder; import android.os.RemoteException; import android.os.ResultReceiver; import android.os.ServiceManager; import android.util.ExceptionUtils; import android.view.WindowManager; import android.window.ImeOnBackInvokedDispatcher; import com.android.internal.infra.AndroidFuture; import com.android.internal.inputmethod.DirectBootAwareness; import com.android.internal.inputmethod.IBooleanListener; import com.android.internal.inputmethod.IConnectionlessHandwritingCallback; Loading @@ -48,6 +50,7 @@ import com.android.internal.view.IInputMethodManager; import java.util.ArrayList; import java.util.List; import java.util.concurrent.TimeUnit; import java.util.function.Consumer; /** Loading @@ -62,6 +65,10 @@ import java.util.function.Consumer; * a wrapper method in {@link InputMethodManagerGlobal} instead of making this class public.</p> */ final class IInputMethodManagerGlobalInvoker { /** The threshold in milliseconds for an {@link AndroidFuture} completion signal. */ private static final long TIMEOUT_MS = 10_000; @Nullable private static volatile IInputMethodManager sServiceCache = null; Loading Loading @@ -801,9 +808,13 @@ final class IInputMethodManagerGlobalInvoker { return; } try { service.finishTrackingPendingImeVisibilityRequests(); final var completionSignal = new AndroidFuture<Void>(); service.finishTrackingPendingImeVisibilityRequests(completionSignal); completionSignal.get(TIMEOUT_MS, TimeUnit.MILLISECONDS); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } catch (Exception e) { throw ExceptionUtils.propagate(e); } } Loading core/java/com/android/internal/inputmethod/IImeTracker.aidl +6 −1 Original line number Diff line number Diff line Loading @@ -18,6 +18,8 @@ package com.android.internal.inputmethod; import android.view.inputmethod.ImeTracker; import com.android.internal.infra.AndroidFuture; /** * Interface to the global IME tracker service, used by all client applications. * {@hide} Loading Loading @@ -98,9 +100,12 @@ interface IImeTracker { /** * Finishes the tracking of any pending IME visibility requests. This won't stop the actual * requests, but allows resetting the state when starting up test runs. * * @param completionSignal used to signal when the tracking has been finished. */ @EnforcePermission("TEST_INPUT_METHOD") @JavaPassthrough(annotation="@android.annotation.RequiresPermission(value = " + "android.Manifest.permission.TEST_INPUT_METHOD)") oneway void finishTrackingPendingImeVisibilityRequests(); oneway void finishTrackingPendingImeVisibilityRequests( in AndroidFuture completionSignal /* T=Void */); } services/core/java/com/android/server/inputmethod/ImeTrackerService.java +12 −3 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ import android.util.Log; import android.view.inputmethod.ImeTracker; import com.android.internal.annotations.GuardedBy; import com.android.internal.infra.AndroidFuture; import com.android.internal.inputmethod.IImeTracker; import com.android.internal.inputmethod.InputMethodDebug; import com.android.internal.inputmethod.SoftInputShowHideReason; Loading Loading @@ -174,11 +175,19 @@ public final class ImeTrackerService extends IImeTracker.Stub { @EnforcePermission(Manifest.permission.TEST_INPUT_METHOD) @Override public void finishTrackingPendingImeVisibilityRequests() { public void finishTrackingPendingImeVisibilityRequests( @NonNull AndroidFuture completionSignal /* T=Void */) { super.finishTrackingPendingImeVisibilityRequests_enforcePermission(); @SuppressWarnings("unchecked") final AndroidFuture<Void> typedCompletionSignal = completionSignal; try { synchronized (mLock) { mHistory.mLiveEntries.clear(); } typedCompletionSignal.complete(null); } catch (Throwable e) { typedCompletionSignal.completeExceptionally(e); } } /** Loading Loading
core/java/android/view/inputmethod/IInputMethodManagerGlobalInvoker.java +12 −1 Original line number Diff line number Diff line Loading @@ -29,9 +29,11 @@ import android.os.IBinder; import android.os.RemoteException; import android.os.ResultReceiver; import android.os.ServiceManager; import android.util.ExceptionUtils; import android.view.WindowManager; import android.window.ImeOnBackInvokedDispatcher; import com.android.internal.infra.AndroidFuture; import com.android.internal.inputmethod.DirectBootAwareness; import com.android.internal.inputmethod.IBooleanListener; import com.android.internal.inputmethod.IConnectionlessHandwritingCallback; Loading @@ -48,6 +50,7 @@ import com.android.internal.view.IInputMethodManager; import java.util.ArrayList; import java.util.List; import java.util.concurrent.TimeUnit; import java.util.function.Consumer; /** Loading @@ -62,6 +65,10 @@ import java.util.function.Consumer; * a wrapper method in {@link InputMethodManagerGlobal} instead of making this class public.</p> */ final class IInputMethodManagerGlobalInvoker { /** The threshold in milliseconds for an {@link AndroidFuture} completion signal. */ private static final long TIMEOUT_MS = 10_000; @Nullable private static volatile IInputMethodManager sServiceCache = null; Loading Loading @@ -801,9 +808,13 @@ final class IInputMethodManagerGlobalInvoker { return; } try { service.finishTrackingPendingImeVisibilityRequests(); final var completionSignal = new AndroidFuture<Void>(); service.finishTrackingPendingImeVisibilityRequests(completionSignal); completionSignal.get(TIMEOUT_MS, TimeUnit.MILLISECONDS); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } catch (Exception e) { throw ExceptionUtils.propagate(e); } } Loading
core/java/com/android/internal/inputmethod/IImeTracker.aidl +6 −1 Original line number Diff line number Diff line Loading @@ -18,6 +18,8 @@ package com.android.internal.inputmethod; import android.view.inputmethod.ImeTracker; import com.android.internal.infra.AndroidFuture; /** * Interface to the global IME tracker service, used by all client applications. * {@hide} Loading Loading @@ -98,9 +100,12 @@ interface IImeTracker { /** * Finishes the tracking of any pending IME visibility requests. This won't stop the actual * requests, but allows resetting the state when starting up test runs. * * @param completionSignal used to signal when the tracking has been finished. */ @EnforcePermission("TEST_INPUT_METHOD") @JavaPassthrough(annotation="@android.annotation.RequiresPermission(value = " + "android.Manifest.permission.TEST_INPUT_METHOD)") oneway void finishTrackingPendingImeVisibilityRequests(); oneway void finishTrackingPendingImeVisibilityRequests( in AndroidFuture completionSignal /* T=Void */); }
services/core/java/com/android/server/inputmethod/ImeTrackerService.java +12 −3 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ import android.util.Log; import android.view.inputmethod.ImeTracker; import com.android.internal.annotations.GuardedBy; import com.android.internal.infra.AndroidFuture; import com.android.internal.inputmethod.IImeTracker; import com.android.internal.inputmethod.InputMethodDebug; import com.android.internal.inputmethod.SoftInputShowHideReason; Loading Loading @@ -174,11 +175,19 @@ public final class ImeTrackerService extends IImeTracker.Stub { @EnforcePermission(Manifest.permission.TEST_INPUT_METHOD) @Override public void finishTrackingPendingImeVisibilityRequests() { public void finishTrackingPendingImeVisibilityRequests( @NonNull AndroidFuture completionSignal /* T=Void */) { super.finishTrackingPendingImeVisibilityRequests_enforcePermission(); @SuppressWarnings("unchecked") final AndroidFuture<Void> typedCompletionSignal = completionSignal; try { synchronized (mLock) { mHistory.mLiveEntries.clear(); } typedCompletionSignal.complete(null); } catch (Throwable e) { typedCompletionSignal.completeExceptionally(e); } } /** Loading