blob: f01ae55d05b6e991b04c06f9413a4ac7a978e2fc [file] [log] [blame]
/*
* Copyright (C) 2024 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.app.contextualsearch;
import android.annotation.FlaggedApi;
import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.app.assist.AssistContent;
import android.app.assist.AssistStructure;
import android.app.contextualsearch.flags.Flags;
import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcelable;
import androidx.annotation.NonNull;
/**
* {@link ContextualSearchState} contains additional data a contextual search handler can request
* via {@link ContextualSearchManager#getContextualSearchState} method.
*
* It provides the caller of {@link ContextualSearchManager#getContextualSearchState} with an
* {@link AssistStructure}, {@link AssistContent} and a {@link Bundle} extras containing any
* relevant data added by th system server. When invoked via the Launcher, this bundle is empty.
*
* @hide
*/
@FlaggedApi(Flags.FLAG_ENABLE_SERVICE)
@SystemApi
public final class ContextualSearchState implements Parcelable {
private final @NonNull Bundle mExtras;
private final @Nullable AssistStructure mStructure;
private final @Nullable AssistContent mContent;
/**
* {@link ContextualSearchState} contains non-essential data which can be requested by the
* Contextual Search activity.
* The activity can request an instance of {@link ContextualSearchState} by calling
* {@link CallbackToken#getContextualSearchState} and passing a valid token as an argument.
*/
public ContextualSearchState(@Nullable AssistStructure structure,
@Nullable AssistContent content, @NonNull Bundle extras) {
mStructure = structure;
mContent = content;
mExtras = extras;
}
private ContextualSearchState(Parcel source) {
this.mStructure = source.readTypedObject(AssistStructure.CREATOR);
this.mContent = source.readTypedObject(AssistContent.CREATOR);
Bundle extras = source.readBundle(getClass().getClassLoader());
this.mExtras = extras != null ? extras : Bundle.EMPTY;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(@NonNull Parcel dest, int flags) {
dest.writeTypedObject(this.mStructure, flags);
dest.writeTypedObject(this.mContent, flags);
dest.writeBundle(this.mExtras);
}
/** Gets an instance of {@link AssistContent}. */
@Nullable
public AssistContent getContent() {
return mContent;
}
/** Gets an instance of {@link AssistStructure}. */
@Nullable
public AssistStructure getStructure() {
return mStructure;
}
/**
* Gets an instance of {@link Bundle} containing the extras added by the system server.
* The contents of this bundle vary by usecase. When Contextual is invoked via Launcher, this
* bundle is empty.
*/
@NonNull
public Bundle getExtras() {
return mExtras;
}
@NonNull
public static final Creator<ContextualSearchState> CREATOR = new Creator<>() {
@Override
public ContextualSearchState createFromParcel(Parcel source) {
return new ContextualSearchState(source);
}
@Override
public ContextualSearchState[] newArray(int size) {
return new ContextualSearchState[size];
}
};
}