Merge "Add API to notify the system_server when app is blocked on I/O" into sc-dev
diff --git a/core/api/test-current.txt b/core/api/test-current.txt
index ca261cd..1c54e84 100644
--- a/core/api/test-current.txt
+++ b/core/api/test-current.txt
@@ -564,6 +564,16 @@
}
+package android.app.contentsuggestions {
+
+ public final class ContentSuggestionsManager {
+ method @RequiresPermission(android.Manifest.permission.MANAGE_CONTENT_SUGGESTIONS) public void resetTemporaryService(int);
+ method @RequiresPermission(android.Manifest.permission.MANAGE_CONTENT_SUGGESTIONS) public void setDefaultServiceEnabled(int, boolean);
+ method @RequiresPermission(android.Manifest.permission.MANAGE_CONTENT_SUGGESTIONS) public void setTemporaryService(int, @NonNull String, int);
+ }
+
+}
+
package android.app.prediction {
public final class AppPredictor {
diff --git a/core/java/android/app/contentsuggestions/ContentSuggestionsManager.java b/core/java/android/app/contentsuggestions/ContentSuggestionsManager.java
index b3f9e31..33f8302 100644
--- a/core/java/android/app/contentsuggestions/ContentSuggestionsManager.java
+++ b/core/java/android/app/contentsuggestions/ContentSuggestionsManager.java
@@ -19,7 +19,9 @@
import android.annotation.CallbackExecutor;
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.RequiresPermission;
import android.annotation.SystemApi;
+import android.annotation.TestApi;
import android.annotation.UserIdInt;
import android.graphics.Bitmap;
import android.os.Binder;
@@ -220,6 +222,72 @@
}
/**
+ * Resets the temporary service implementation to the default component.
+ *
+ * @hide
+ */
+ @TestApi
+ @RequiresPermission(android.Manifest.permission.MANAGE_CONTENT_SUGGESTIONS)
+ public void resetTemporaryService(@UserIdInt int userId) {
+ if (mService == null) {
+ Log.e(TAG, "resetTemporaryService called, but no ContentSuggestionsManager "
+ + "configured");
+ return;
+ }
+ try {
+ mService.resetTemporaryService(userId);
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+
+ /**
+ * Temporarily sets the service implementation.
+ *
+ * @param userId user Id to set the temporary service on.
+ * @param serviceName name of the new component
+ * @param duration how long the change will be valid (the service will be automatically reset
+ * to the default component after this timeout expires).
+ *
+ * @hide
+ */
+ @TestApi
+ @RequiresPermission(android.Manifest.permission.MANAGE_CONTENT_SUGGESTIONS)
+ public void setTemporaryService(
+ @UserIdInt int userId, @NonNull String serviceName, int duration) {
+ if (mService == null) {
+ Log.e(TAG, "setTemporaryService called, but no ContentSuggestionsManager "
+ + "configured");
+ return;
+ }
+ try {
+ mService.setTemporaryService(userId, serviceName, duration);
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+
+ /**
+ * Sets whether the default service should be used.
+ *
+ * @hide
+ */
+ @TestApi
+ @RequiresPermission(android.Manifest.permission.MANAGE_CONTENT_SUGGESTIONS)
+ public void setDefaultServiceEnabled(@UserIdInt int userId, boolean enabled) {
+ if (mService == null) {
+ Log.e(TAG, "setDefaultServiceEnabled called, but no ContentSuggestionsManager "
+ + "configured");
+ return;
+ }
+ try {
+ mService.setDefaultServiceEnabled(userId, enabled);
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+
+ /**
* Callback to receive content selections from
* {@link #suggestContentSelections(SelectionsRequest, Executor, SelectionsCallback)}.
*/
diff --git a/core/java/android/app/contentsuggestions/IContentSuggestionsManager.aidl b/core/java/android/app/contentsuggestions/IContentSuggestionsManager.aidl
index 8e6338b..9350eeb 100644
--- a/core/java/android/app/contentsuggestions/IContentSuggestionsManager.aidl
+++ b/core/java/android/app/contentsuggestions/IContentSuggestionsManager.aidl
@@ -45,4 +45,7 @@
in IClassificationsCallback callback);
void notifyInteraction(int userId, in String requestId, in Bundle interaction);
void isEnabled(int userId, in IResultReceiver receiver);
+ void resetTemporaryService(int userId);
+ void setTemporaryService(int userId, in String serviceName, int duration);
+ void setDefaultServiceEnabled(int userId, boolean enabled);
}
diff --git a/services/contentsuggestions/java/com/android/server/contentsuggestions/ContentSuggestionsManagerService.java b/services/contentsuggestions/java/com/android/server/contentsuggestions/ContentSuggestionsManagerService.java
index 00c91fe..57c643b 100644
--- a/services/contentsuggestions/java/com/android/server/contentsuggestions/ContentSuggestionsManagerService.java
+++ b/services/contentsuggestions/java/com/android/server/contentsuggestions/ContentSuggestionsManagerService.java
@@ -21,6 +21,7 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.UserIdInt;
import android.app.contentsuggestions.ClassificationsRequest;
import android.app.contentsuggestions.ContentSuggestionsManager;
import android.app.contentsuggestions.IClassificationsCallback;
@@ -253,6 +254,23 @@
receiver.send(isDisabled ? 0 : 1, null);
}
+ @Override
+ public void resetTemporaryService(@UserIdInt int userId) {
+ ContentSuggestionsManagerService.this.resetTemporaryService(userId);
+ }
+
+ @Override
+ public void setTemporaryService(
+ @UserIdInt int userId, @NonNull String serviceName, int duration) {
+ ContentSuggestionsManagerService.this.setTemporaryService(
+ userId, serviceName, duration);
+ }
+
+ @Override
+ public void setDefaultServiceEnabled(@UserIdInt int userId, boolean enabled) {
+ ContentSuggestionsManagerService.this.setDefaultServiceEnabled(userId, enabled);
+ }
+
public void onShellCommand(@Nullable FileDescriptor in, @Nullable FileDescriptor out,
@Nullable FileDescriptor err,
@NonNull String[] args, @Nullable ShellCallback callback,
diff --git a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
index 7dcb3a8..0dc7445 100644
--- a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
+++ b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
@@ -3647,12 +3647,9 @@
hideCurrentInputLocked(mCurFocusedWindow, 0, null,
SoftInputShowHideReason.HIDE_SAME_WINDOW_FOCUSED_WITHOUT_EDITOR);
}
- res = startInputUncheckedLocked(cs, inputContext, missingMethods, attribute,
- startInputFlags, startInputReason);
- } else {
- res = startInputUncheckedLocked(cs, inputContext, missingMethods, attribute,
- startInputFlags, startInputReason);
}
+ res = startInputUncheckedLocked(cs, inputContext, missingMethods, attribute,
+ startInputFlags, startInputReason);
} else {
res = InputBindResult.NULL_EDITOR_INFO;
}