import java.util.List;
import android.app.ActivityManager.AppTask;
+import android.app.ActivityManager.RecentTaskInfo;
import android.app.ActivityManager;
import android.app.ActivityOptions;
-import android.app.TaskInfo;
import android.content.Context;
import android.content.Intent;
getAttachmentToken ()
should return a token uniquely identifying a consumer, which, on API
- 29 and up, enables attributing the tasks of activities to the windows
+ 21 and up, enables attributing the tasks of activities to the windows
for which they were created, and with that, consistent interaction
between user-visible window state and their underlying frames. */
/* Intent.FLAG_ACTIVITY_NEW_DOCUMENT is lamentably unavailable on
older systems than Lolipop. */
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
- intent.addFlags (Intent.FLAG_ACTIVITY_NEW_DOCUMENT);
+ {
+ intent.addFlags (Intent.FLAG_ACTIVITY_NEW_DOCUMENT);
+
+ /* Bind this window to the activity in advance, i.e., before its
+ creation, so that its ID will be recorded in the RecentTasks
+ list. */
+ token = ++nextActivityToken;
+ }
+ else
+ /* APIs required for linking activities to windows are not
+ available in earlier Android versions. */
+ token = -2;
+
+ window.attachmentToken = token;
+ intent.putExtra (ACTIVITY_TOKEN, token);
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N)
EmacsService.SERVICE.startActivity (intent);
/* Specify the desired window size. */
options = ActivityOptions.makeBasic ();
options.setLaunchBounds (window.getGeometry ());
-
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q)
- /* Bind this window to the activity in advance, i.e., before
- its creation, so that its ID will be recorded in the
- RecentTasks list. */
- token = ++nextActivityToken;
- else
- /* APIs required for linking activities to windows are not
- available in earlier Android versions. */
- token = -2;
-
- window.attachmentToken = token;
- intent.putExtra (ACTIVITY_TOKEN, token);
EmacsService.SERVICE.startActivity (intent, options.toBundle ());
}
the system-started task. */
if (isFinishing
&& (!(consumer instanceof EmacsMultitaskActivity)
- || Build.VERSION.SDK_INT < Build.VERSION_CODES.Q))
+ || Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP))
window.onActivityDetached ();
}
private static long
getTaskToken (AppTask task)
{
- TaskInfo info;
+ RecentTaskInfo info;
+
+ info = task.getTaskInfo ();
- info = (TaskInfo) task.getTaskInfo ();
+ /* baseIntent is a member of info's superclass, TaskInfo, on Android
+ 10 and later. Prior to this release, it had been a member of
+ RecentTaskInfo since SDK 1, and whatever the misleading
+ documentation might suggest, a reference to `baseIntent' through
+ TaskInfo is just as good a reference to RecentTaskInfo. */
return (info.baseIntent != null
- ? info.baseIntent.getLongExtra (ACTIVITY_TOKEN,
- -1l)
+ ? info.baseIntent.getLongExtra (ACTIVITY_TOKEN, -1l)
: 0);
}
long taskToken;
boolean set;
- if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP
|| EmacsService.SERVICE == null)
return;