Merge "Expose task id and activity component in task snapshot and assist structure"

This commit is contained in:
Winson Chung
2018-11-12 17:56:22 +00:00
committed by Android (Google) Code Review
16 changed files with 145 additions and 109 deletions

View File

@@ -1751,6 +1751,8 @@ public class ActivityManager {
*/
public static class TaskSnapshot implements Parcelable {
// Top activity in task when snapshot was taken
private final ComponentName mTopActivityComponent;
private final GraphicBuffer mSnapshot;
private final int mOrientation;
private final Rect mContentInsets;
@@ -1765,9 +1767,11 @@ public class ActivityManager {
private final int mSystemUiVisibility;
private final boolean mIsTranslucent;
public TaskSnapshot(GraphicBuffer snapshot, int orientation, Rect contentInsets,
boolean reducedResolution, float scale, boolean isRealSnapshot, int windowingMode,
int systemUiVisibility, boolean isTranslucent) {
public TaskSnapshot(@NonNull ComponentName topActivityComponent, GraphicBuffer snapshot,
int orientation, Rect contentInsets, boolean reducedResolution, float scale,
boolean isRealSnapshot, int windowingMode, int systemUiVisibility,
boolean isTranslucent) {
mTopActivityComponent = topActivityComponent;
mSnapshot = snapshot;
mOrientation = orientation;
mContentInsets = new Rect(contentInsets);
@@ -1780,6 +1784,7 @@ public class ActivityManager {
}
private TaskSnapshot(Parcel source) {
mTopActivityComponent = ComponentName.readFromParcel(source);
mSnapshot = source.readParcelable(null /* classLoader */);
mOrientation = source.readInt();
mContentInsets = source.readParcelable(null /* classLoader */);
@@ -1791,6 +1796,13 @@ public class ActivityManager {
mIsTranslucent = source.readBoolean();
}
/**
* @return The top activity component for the task at the point this snapshot was taken.
*/
public ComponentName getTopActivityComponent() {
return mTopActivityComponent;
}
/**
* @return The graphic buffer representing the screenshot.
*/
@@ -1871,6 +1883,7 @@ public class ActivityManager {
@Override
public void writeToParcel(Parcel dest, int flags) {
ComponentName.writeToParcel(mTopActivityComponent, dest);
dest.writeParcelable(mSnapshot, 0);
dest.writeInt(mOrientation);
dest.writeParcelable(mContentInsets, 0);
@@ -1886,7 +1899,9 @@ public class ActivityManager {
public String toString() {
final int width = mSnapshot != null ? mSnapshot.getWidth() : 0;
final int height = mSnapshot != null ? mSnapshot.getHeight() : 0;
return "TaskSnapshot{mSnapshot=" + mSnapshot + " (" + width + "x" + height + ")"
return "TaskSnapshot{"
+ " mTopActivityComponent=" + mTopActivityComponent.flattenToShortString()
+ " mSnapshot=" + mSnapshot + " (" + width + "x" + height + ")"
+ " mOrientation=" + mOrientation
+ " mContentInsets=" + mContentInsets.toShortString()
+ " mReducedResolution=" + mReducedResolution + " mScale=" + mScale

View File

@@ -61,37 +61,39 @@ import java.util.List;
* <a href="/guide/topics/text/autofill">Autofill Framework</a> guides.
*/
public class AssistStructure implements Parcelable {
static final String TAG = "AssistStructure";
private static final String TAG = "AssistStructure";
static final boolean DEBUG_PARCEL = false;
static final boolean DEBUG_PARCEL_CHILDREN = false;
static final boolean DEBUG_PARCEL_TREE = false;
private static final boolean DEBUG_PARCEL = false;
private static final boolean DEBUG_PARCEL_CHILDREN = false;
private static final boolean DEBUG_PARCEL_TREE = false;
static final int VALIDATE_WINDOW_TOKEN = 0x11111111;
static final int VALIDATE_VIEW_TOKEN = 0x22222222;
private static final int VALIDATE_WINDOW_TOKEN = 0x11111111;
private static final int VALIDATE_VIEW_TOKEN = 0x22222222;
boolean mHaveData;
private boolean mHaveData;
ComponentName mActivityComponent;
// The task id and component of the activity which this assist structure is for
private int mTaskId;
private ComponentName mActivityComponent;
private boolean mIsHomeActivity;
private int mFlags;
private int mAutofillFlags;
final ArrayList<WindowNode> mWindowNodes = new ArrayList<>();
private final ArrayList<WindowNode> mWindowNodes = new ArrayList<>();
final ArrayList<ViewNodeBuilder> mPendingAsyncChildren = new ArrayList<>();
private final ArrayList<ViewNodeBuilder> mPendingAsyncChildren = new ArrayList<>();
SendChannel mSendChannel;
IBinder mReceiveChannel;
private SendChannel mSendChannel;
private IBinder mReceiveChannel;
Rect mTmpRect = new Rect();
private Rect mTmpRect = new Rect();
boolean mSanitizeOnWrite = false;
private boolean mSanitizeOnWrite = false;
private long mAcquisitionStartTime;
private long mAcquisitionEndTime;
static final int TRANSACTION_XFER = Binder.FIRST_CALL_TRANSACTION+1;
static final String DESCRIPTOR = "android.app.AssistStructure";
private static final int TRANSACTION_XFER = Binder.FIRST_CALL_TRANSACTION+1;
private static final String DESCRIPTOR = "android.app.AssistStructure";
/** @hide */
public void setAcquisitionStartTime(long acquisitionStartTime) {
@@ -197,7 +199,6 @@ public class AssistStructure implements Parcelable {
ParcelTransferWriter(AssistStructure as, Parcel out) {
mSanitizeOnWrite = as.mSanitizeOnWrite;
mWriteStructure = as.waitForReady();
ComponentName.writeToParcel(as.mActivityComponent, out);
out.writeInt(as.mFlags);
out.writeInt(as.mAutofillFlags);
out.writeLong(as.mAcquisitionStartTime);
@@ -353,7 +354,6 @@ public class AssistStructure implements Parcelable {
void go() {
fetchData();
mActivityComponent = ComponentName.readFromParcel(mCurParcel);
mFlags = mCurParcel.readInt();
mAutofillFlags = mCurParcel.readInt();
mAcquisitionStartTime = mCurParcel.readLong();
@@ -2129,7 +2129,6 @@ public class AssistStructure implements Parcelable {
/** @hide */
public AssistStructure(Activity activity, boolean forAutoFill, int flags) {
mHaveData = true;
mActivityComponent = activity.getComponentName();
mFlags = flags;
ArrayList<ViewRootImpl> views = WindowManagerGlobal.getInstance().getRootViews(
activity.getActivityToken());
@@ -2145,12 +2144,13 @@ public class AssistStructure implements Parcelable {
public AssistStructure() {
mHaveData = true;
mActivityComponent = null;
mFlags = 0;
}
/** @hide */
public AssistStructure(Parcel in) {
mTaskId = in.readInt();
mActivityComponent = ComponentName.readFromParcel(in);
mIsHomeActivity = in.readInt() == 1;
mReceiveChannel = in.readStrongBinder();
}
@@ -2171,7 +2171,10 @@ public class AssistStructure implements Parcelable {
Log.i(TAG, "dump(): calling ensureData() first");
ensureData();
}
Log.i(TAG, "Activity: " + mActivityComponent.flattenToShortString());
Log.i(TAG, "Task id: " + mTaskId);
Log.i(TAG, "Activity: " + (mActivityComponent != null
? mActivityComponent.flattenToShortString()
: null));
Log.i(TAG, "Sanitize on write: " + mSanitizeOnWrite);
Log.i(TAG, "Flags: " + mFlags);
final int N = getWindowNodeCount();
@@ -2283,23 +2286,37 @@ public class AssistStructure implements Parcelable {
}
/**
* Return the activity this AssistStructure came from.
* Sets the task id is associated with the activity from which this AssistStructure was
* generated.
* @hide
*/
public ComponentName getActivityComponent() {
ensureData();
return mActivityComponent;
public void setTaskId(int taskId) {
mTaskId = taskId;
}
/**
* Called by Autofill server when app forged a different value.
*
* @return The task id for the associated activity.
* @hide
*/
public int getTaskId() {
return mTaskId;
}
/**
* Sets the activity that is associated with this AssistStructure.
* @hide
*/
public void setActivityComponent(ComponentName componentName) {
ensureData();
mActivityComponent = componentName;
}
/**
* Return the activity this AssistStructure came from.
*/
public ComponentName getActivityComponent() {
return mActivityComponent;
}
/** @hide */
public int getFlags() {
return mFlags;
@@ -2393,6 +2410,8 @@ public class AssistStructure implements Parcelable {
@Override
public void writeToParcel(Parcel out, int flags) {
out.writeInt(mTaskId);
ComponentName.writeToParcel(mActivityComponent, out);
out.writeInt(mIsHomeActivity ? 1 : 0);
if (mHaveData) {
// This object holds its data. We want to write a send channel that the