/* * Copyright (C) 2023 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.sdksandbox; import android.annotation.NonNull; import android.os.IBinder; import android.os.Parcel; import android.os.Parcelable; /** * Represents a channel for an SDK in the sandbox process to interact with the app. * *
The SDK and the app can agree on a binder interface to be implemented by the app and shared * via an object of {@link AppOwnedSdkSandboxInterface}. * *
The app registers the AppOwnedSdkSandboxInterfaces using {@link * SdkSandboxManager#registerAppOwnedSdkSandboxInterface}. * *
The SDK in sandbox process can then query the list of registered AppOwnedSdkSandboxInterfaces * using {@link * android.app.sdksandbox.sdkprovider.SdkSandboxController#getAppOwnedSdkSandboxInterfaces}. * *
Once SDK has the AppOwnedSdkSandboxInterface it wants to communicate with, it will have to
* cast the binder object from {@link #getInterface} to the prearranged interface before initiating
* the communication.
*/
public final class AppOwnedSdkSandboxInterface implements Parcelable {
private String mName;
private long mVersion;
private IBinder mInterface;
public static final @NonNull Creator App can register only one interface of given name.
*/
@NonNull
public String getName() {
return mName;
}
/**
* Returns the version used to register the AppOwnedSdkSandboxInterface.
*
* A version may be chosen by an app, and used to communicate any updates the app makes to
* this implementation.
*/
public long getVersion() {
return mVersion;
}
/**
* Returns binder object associated with AppOwnedSdkSandboxInterface.
*
* The SDK and the app can agree on a binder interface to be implemented by the app and
* shared via this object, see {@link AppOwnedSdkSandboxInterface}.
*
* The SDK in the sandbox will have to cast the binder object received from this method to
* the agreed upon interface before using it.
*/
@NonNull
public IBinder getInterface() {
return mInterface;
}
/** {@inheritDoc} */
@Override
public int describeContents() {
return 0;
}
/** {@inheritDoc} */
@Override
public void writeToParcel(@NonNull Parcel dest, int flags) {
dest.writeString(mName);
dest.writeLong(mVersion);
dest.writeStrongBinder(mInterface);
}
}