1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229
|
package android.app.assist;
import android.annotation.UnsupportedAppUsage;
import android.content.ClipData;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcelable;
/**
* Holds information about the content an application is viewing, to hand to an
* assistant at the user's request. This is filled in by
* {@link android.app.Activity#onProvideAssistContent Activity.onProvideAssistContent}.
*/
public class AssistContent implements Parcelable {
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023)
private boolean mIsAppProvidedIntent = false;
private boolean mIsAppProvidedWebUri = false;
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023)
private Intent mIntent;
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023)
private String mStructuredData;
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023)
private ClipData mClipData;
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023)
private Uri mUri;
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023)
private final Bundle mExtras;
public AssistContent() {
mExtras = new Bundle();
}
/**
* @hide
* Called by {@link android.app.ActivityThread} to set the default Intent based on
* {@link android.app.Activity#getIntent Activity.getIntent}.
*
* <p>Automatically populates {@link #mUri} if that Intent is an {@link Intent#ACTION_VIEW}
* of a web (http or https scheme) URI.</p>
*/
public void setDefaultIntent(Intent intent) {
mIntent = intent;
mIsAppProvidedIntent = false;
mIsAppProvidedWebUri = false;
mUri = null;
if (intent != null && Intent.ACTION_VIEW.equals(intent.getAction())) {
Uri uri = intent.getData();
if (uri != null) {
if ("http".equals(uri.getScheme()) || "https".equals(uri.getScheme())) {
mUri = uri;
}
}
}
}
/**
* Sets the Intent associated with the content, describing the current top-level context of
* the activity. If this contains a reference to a piece of data related to the activity,
* be sure to set {@link Intent#FLAG_GRANT_READ_URI_PERMISSION} so the accessibility
* service can access it.
*/
public void setIntent(Intent intent) {
mIsAppProvidedIntent = true;
mIntent = intent;
}
/**
* Returns the current {@link #setIntent} if one is set, else the default Intent obtained from
* {@link android.app.Activity#getIntent Activity.getIntent}. Can be modified in-place.
*/
public Intent getIntent() {
return mIntent;
}
/**
* Returns whether or not the current Intent was explicitly provided in
* {@link android.app.Activity#onProvideAssistContent Activity.onProvideAssistContent}. If not,
* the Intent was automatically set based on
* {@link android.app.Activity#getIntent Activity.getIntent}.
*/
public boolean isAppProvidedIntent() {
return mIsAppProvidedIntent;
}
/**
* Optional additional content items that are involved with
* the current UI. Access to this content will be granted to the assistant as if you
* are sending it through an Intent with {@link Intent#FLAG_GRANT_READ_URI_PERMISSION}.
*/
public void setClipData(ClipData clip) {
mClipData = clip;
}
/**
* Return the current {@link #setClipData}, which you can modify in-place.
*/
public ClipData getClipData() {
return mClipData;
}
/**
* Sets optional structured data regarding the content being viewed. The provided data
* must be a string represented with <a href="http://json-ld.org/">JSON-LD</a> using the
* <a href="http://schema.org/">schema.org</a> vocabulary.
*/
public void setStructuredData(String structuredData) {
mStructuredData = structuredData;
}
/**
* Returns the current {@link #setStructuredData}.
*/
public String getStructuredData() {
return mStructuredData;
}
/**
* Set a web URI associated with the current data being shown to the user.
* This URI could be opened in a web browser, or in the app as an
* {@link Intent#ACTION_VIEW} Intent, to show the same data that is currently
* being displayed by it. The URI here should be something that is transportable
* off the device into other environments to acesss the same data as is currently
* being shown in the app; if the app does not have such a representation, it should
* leave the null and only report the local intent and clip data.
*/
public void setWebUri(Uri uri) {
mIsAppProvidedWebUri = true;
mUri = uri;
}
/**
* Return the content's web URI as per {@link #setWebUri(android.net.Uri)}, or null if
* there is none.
*/
public Uri getWebUri() {
return mUri;
}
/**
* Returns whether or not the current {@link #getWebUri} was explicitly provided in
* {@link android.app.Activity#onProvideAssistContent Activity.onProvideAssistContent}. If not,
* the Intent was automatically set based on
* {@link android.app.Activity#getIntent Activity.getIntent}.
*/
public boolean isAppProvidedWebUri() {
return mIsAppProvidedWebUri;
}
/**
* Return Bundle for extra vendor-specific data that can be modified and examined.
*/
public Bundle getExtras() {
return mExtras;
}
@UnsupportedAppUsage
AssistContent(Parcel in) {
if (in.readInt() != 0) {
mIntent = Intent.CREATOR.createFromParcel(in);
}
if (in.readInt() != 0) {
mClipData = ClipData.CREATOR.createFromParcel(in);
}
if (in.readInt() != 0) {
mUri = Uri.CREATOR.createFromParcel(in);
}
if (in.readInt() != 0) {
mStructuredData = in.readString();
}
mIsAppProvidedIntent = in.readInt() == 1;
mExtras = in.readBundle();
mIsAppProvidedWebUri = in.readInt() == 1;
}
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023)
void writeToParcelInternal(Parcel dest, int flags) {
if (mIntent != null) {
dest.writeInt(1);
mIntent.writeToParcel(dest, flags);
} else {
dest.writeInt(0);
}
if (mClipData != null) {
dest.writeInt(1);
mClipData.writeToParcel(dest, flags);
} else {
dest.writeInt(0);
}
if (mUri != null) {
dest.writeInt(1);
mUri.writeToParcel(dest, flags);
} else {
dest.writeInt(0);
}
if (mStructuredData != null) {
dest.writeInt(1);
dest.writeString(mStructuredData);
} else {
dest.writeInt(0);
}
dest.writeInt(mIsAppProvidedIntent ? 1 : 0);
dest.writeBundle(mExtras);
dest.writeInt(mIsAppProvidedWebUri ? 1 : 0);
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
writeToParcelInternal(dest, flags);
}
public static final @android.annotation.NonNull Parcelable.Creator<AssistContent> CREATOR
= new Parcelable.Creator<AssistContent>() {
public AssistContent createFromParcel(Parcel in) {
return new AssistContent(in);
}
public AssistContent[] newArray(int size) {
return new AssistContent[size];
}
};
}
|