summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/api/current.txt2
-rw-r--r--core/java/android/app/Activity.java29
-rw-r--r--core/java/android/app/IActivityTaskManager.aidl4
-rw-r--r--core/java/android/app/TaskInfo.java16
-rw-r--r--services/core/java/com/android/server/wm/ActivityRecord.java9
-rw-r--r--services/core/java/com/android/server/wm/ActivityTaskManagerService.java5
-rw-r--r--services/core/java/com/android/server/wm/Task.java5
7 files changed, 32 insertions, 38 deletions
diff --git a/core/api/current.txt b/core/api/current.txt
index 6cf572bd3019..5a7f2bdb2949 100644
--- a/core/api/current.txt
+++ b/core/api/current.txt
@@ -4614,6 +4614,7 @@ package android.app {
method public void reportFullyDrawn();
method public android.view.DragAndDropPermissions requestDragAndDropPermissions(android.view.DragEvent);
method public void requestFullscreenMode(int, @Nullable android.os.OutcomeReceiver<java.lang.Void,java.lang.Throwable>);
+ method @FlaggedApi("com.android.window.flags.enable_desktop_windowing_app_to_web_education") public final void requestOpenInBrowserEducation();
method public final void requestPermissions(@NonNull String[], int);
method @FlaggedApi("android.permission.flags.device_aware_permission_apis_enabled") public final void requestPermissions(@NonNull String[], int, int);
method public final void requestShowKeyboardShortcuts();
@@ -4639,7 +4640,6 @@ package android.app {
method public void setInheritShowWhenLocked(boolean);
method public void setIntent(android.content.Intent);
method @FlaggedApi("android.security.content_uri_permission_apis") public void setIntent(@Nullable android.content.Intent, @Nullable android.app.ComponentCaller);
- method @FlaggedApi("com.android.window.flags.enable_desktop_windowing_app_to_web_education") public final void setLimitSystemEducationDialogs(boolean);
method public void setLocusContext(@Nullable android.content.LocusId, @Nullable android.os.Bundle);
method public final void setMediaController(android.media.session.MediaController);
method public void setPictureInPictureParams(@NonNull android.app.PictureInPictureParams);
diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java
index 419eb7dac5f0..38aea64386a0 100644
--- a/core/java/android/app/Activity.java
+++ b/core/java/android/app/Activity.java
@@ -1270,27 +1270,22 @@ public class Activity extends ContextThemeWrapper
}
/**
- * To make users aware of system features such as the app header menu and its various
- * functionalities, educational dialogs are shown to demonstrate how to find and utilize these
- * features. Using this method, an activity can specify if it wants these educational dialogs to
- * be shown. When set to {@code true}, these dialogs are not completely blocked; however, the
- * system will be notified that they should not be shown unless necessary. If this API is not
- * called, the system's educational dialogs are not limited by default.
- *
- * <p>This method can be utilized when activities have states where showing an
- * educational dialog would be disruptive to the user. For example, if a game application is
- * expecting prompt user input, this method can be used to limit educational dialogs such as the
- * dialogs that showcase the app header's features which, in this instance, would disrupt the
- * user's experience if shown.</p>
- *
- * <p>Note that educational dialogs may be shown soon after this activity is launched, so
- * this method must be called early if the intent is to limit the dialogs from the start.</p>
+ * Requests to show the “Open in browser” education. “Open in browser” is a feature
+ * within the app header that allows users to switch from an app to the web. The feature
+ * is made available when an application is opened by a user clicking a link or when a
+ * link is provided by an application. Links can be provided by utilizing
+ * {@link AssistContent#EXTRA_AUTHENTICATING_USER_WEB_URI} or
+ * {@link AssistContent#setWebUri}.
+ *
+ * <p>This method should be utilized when an activity wants to nudge the user to switch
+ * to the web application in cases where the web may provide the user with a better
+ * experience. Note that this method does not guarantee that the education will be shown.</p>
*/
@FlaggedApi(com.android.window.flags.Flags.FLAG_ENABLE_DESKTOP_WINDOWING_APP_TO_WEB_EDUCATION)
- public final void setLimitSystemEducationDialogs(boolean limitSystemEducationDialogs) {
+ public final void requestOpenInBrowserEducation() {
try {
ActivityTaskManager
- .getService().setLimitSystemEducationDialogs(mToken, limitSystemEducationDialogs);
+ .getService().requestOpenInBrowserEducation(mToken);
} catch (RemoteException e) {
// Empty
}
diff --git a/core/java/android/app/IActivityTaskManager.aidl b/core/java/android/app/IActivityTaskManager.aidl
index ec7b72ec677e..c6f62a21641d 100644
--- a/core/java/android/app/IActivityTaskManager.aidl
+++ b/core/java/android/app/IActivityTaskManager.aidl
@@ -242,8 +242,8 @@ interface IActivityTaskManager {
boolean supportsLocalVoiceInteraction();
- // Sets whether system educational dialogs should be limited
- void setLimitSystemEducationDialogs(IBinder appToken, boolean limitSystemEducationDialogs);
+ // Requests the "Open in browser" education to be shown
+ void requestOpenInBrowserEducation(IBinder appToken);
// Get device configuration
ConfigurationInfo getDeviceConfigurationInfo();
diff --git a/core/java/android/app/TaskInfo.java b/core/java/android/app/TaskInfo.java
index aac963ade726..01cc9d82d56d 100644
--- a/core/java/android/app/TaskInfo.java
+++ b/core/java/android/app/TaskInfo.java
@@ -340,10 +340,10 @@ public class TaskInfo {
public int requestedVisibleTypes;
/**
- * Whether the top activity has requested to limit educational dialogs shown by the system.
+ * The timestamp of the top activity's last request to show the "Open in Browser" education.
* @hide
*/
- public boolean isTopActivityLimitSystemEducationDialogs;
+ public long topActivityRequestOpenInBrowserEducationTimestamp;
/**
* Encapsulate specific App Compat information.
@@ -493,8 +493,8 @@ public class TaskInfo {
&& Objects.equals(capturedLink, that.capturedLink)
&& capturedLinkTimestamp == that.capturedLinkTimestamp
&& requestedVisibleTypes == that.requestedVisibleTypes
- && isTopActivityLimitSystemEducationDialogs
- == that.isTopActivityLimitSystemEducationDialogs
+ && topActivityRequestOpenInBrowserEducationTimestamp
+ == that.topActivityRequestOpenInBrowserEducationTimestamp
&& appCompatTaskInfo.equalsForTaskOrganizer(that.appCompatTaskInfo)
&& Objects.equals(topActivityMainWindowFrame, that.topActivityMainWindowFrame);
}
@@ -571,7 +571,7 @@ public class TaskInfo {
capturedLink = source.readTypedObject(Uri.CREATOR);
capturedLinkTimestamp = source.readLong();
requestedVisibleTypes = source.readInt();
- isTopActivityLimitSystemEducationDialogs = source.readBoolean();
+ topActivityRequestOpenInBrowserEducationTimestamp = source.readLong();
appCompatTaskInfo = source.readTypedObject(AppCompatTaskInfo.CREATOR);
topActivityMainWindowFrame = source.readTypedObject(Rect.CREATOR);
}
@@ -627,7 +627,7 @@ public class TaskInfo {
dest.writeTypedObject(capturedLink, flags);
dest.writeLong(capturedLinkTimestamp);
dest.writeInt(requestedVisibleTypes);
- dest.writeBoolean(isTopActivityLimitSystemEducationDialogs);
+ dest.writeLong(topActivityRequestOpenInBrowserEducationTimestamp);
dest.writeTypedObject(appCompatTaskInfo, flags);
dest.writeTypedObject(topActivityMainWindowFrame, flags);
}
@@ -672,8 +672,8 @@ public class TaskInfo {
+ " capturedLink=" + capturedLink
+ " capturedLinkTimestamp=" + capturedLinkTimestamp
+ " requestedVisibleTypes=" + requestedVisibleTypes
- + " isTopActivityLimitSystemEducationDialogs="
- + isTopActivityLimitSystemEducationDialogs
+ + " topActivityRequestOpenInBrowserEducationTimestamp="
+ + topActivityRequestOpenInBrowserEducationTimestamp
+ " appCompatTaskInfo=" + appCompatTaskInfo
+ " topActivityMainWindowFrame=" + topActivityMainWindowFrame
+ "}";
diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java
index bf93f73cd3bc..f70dec175c06 100644
--- a/services/core/java/com/android/server/wm/ActivityRecord.java
+++ b/services/core/java/com/android/server/wm/ActivityRecord.java
@@ -630,8 +630,8 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
// The locusId associated with this activity, if set.
private LocusId mLocusId;
- // Whether the activity is requesting to limit the system's educational dialogs
- public boolean mShouldLimitSystemEducationDialogs;
+ // The timestamp of the last request to show the "Open in browser" education
+ public long mRequestOpenInBrowserEducationTimestamp;
// Whether the activity was launched from a bubble.
private boolean mLaunchedFromBubble;
@@ -7342,9 +7342,8 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
return mLocusId;
}
- void setLimitSystemEducationDialogs(boolean limitSystemEducationDialogs) {
- if (mShouldLimitSystemEducationDialogs == limitSystemEducationDialogs) return;
- mShouldLimitSystemEducationDialogs = limitSystemEducationDialogs;
+ void requestOpenInBrowserEducation() {
+ mRequestOpenInBrowserEducationTimestamp = System.currentTimeMillis();
final Task task = getTask();
if (task != null) {
final boolean force = isVisibleRequested() && this == task.getTopNonFinishingActivity();
diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
index 198e14a16500..8ff08187c698 100644
--- a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
+++ b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
@@ -3915,12 +3915,11 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
}
@Override
- public void setLimitSystemEducationDialogs(
- IBinder appToken, boolean limitSystemEducationDialogs) {
+ public void requestOpenInBrowserEducation(IBinder appToken) {
synchronized (mGlobalLock) {
final ActivityRecord r = ActivityRecord.isInRootTaskLocked(appToken);
if (r != null) {
- r.setLimitSystemEducationDialogs(limitSystemEducationDialogs);
+ r.requestOpenInBrowserEducation();
}
}
}
diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java
index dbc3b76c22a1..e8ae28008c89 100644
--- a/services/core/java/com/android/server/wm/Task.java
+++ b/services/core/java/com/android/server/wm/Task.java
@@ -3423,8 +3423,8 @@ class Task extends TaskFragment {
? top.getLastParentBeforePip().mTaskId : INVALID_TASK_ID;
info.shouldDockBigOverlays = top != null && top.shouldDockBigOverlays;
info.mTopActivityLocusId = top != null ? top.getLocusId() : null;
- info.isTopActivityLimitSystemEducationDialogs = top != null
- ? top.mShouldLimitSystemEducationDialogs : false;
+ info.topActivityRequestOpenInBrowserEducationTimestamp = top != null
+ ? top.mRequestOpenInBrowserEducationTimestamp : 0;
final Task parentTask = getParent() != null ? getParent().asTask() : null;
info.parentTaskId = parentTask != null && parentTask.mCreatedByOrganizer
? parentTask.mTaskId
@@ -3523,6 +3523,7 @@ class Task extends TaskFragment {
info.capturedLink = null;
info.capturedLinkTimestamp = 0;
+ info.topActivityRequestOpenInBrowserEducationTimestamp = 0;
}
@Nullable PictureInPictureParams getPictureInPictureParams() {