120 lines
4.4 KiB
Java
120 lines
4.4 KiB
Java
![]() |
/*
|
|||
|
* Copyright (C) 2022 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.service.voice;
|
|||
|
|
|||
|
import android.annotation.DurationMillisLong;
|
|||
|
import android.annotation.Nullable;
|
|||
|
import android.annotation.SystemApi;
|
|||
|
import android.os.Bundle;
|
|||
|
import android.os.IRemoteCallback;
|
|||
|
import android.os.PersistableBundle;
|
|||
|
import android.os.RemoteException;
|
|||
|
import android.os.SharedMemory;
|
|||
|
|
|||
|
import java.util.function.IntConsumer;
|
|||
|
|
|||
|
/**
|
|||
|
* Provides common initialzation methods for sandboxed detection services.
|
|||
|
*
|
|||
|
* @hide
|
|||
|
*/
|
|||
|
@SystemApi
|
|||
|
public interface SandboxedDetectionInitializer {
|
|||
|
|
|||
|
/**
|
|||
|
* Indicates that the updated status is successful.
|
|||
|
*/
|
|||
|
int INITIALIZATION_STATUS_SUCCESS = 0;
|
|||
|
|
|||
|
/**
|
|||
|
* Indicates that the callback wasn’t invoked within the timeout.
|
|||
|
* This is used by system.
|
|||
|
*/
|
|||
|
int INITIALIZATION_STATUS_UNKNOWN = 100;
|
|||
|
|
|||
|
/** @hide */
|
|||
|
String KEY_INITIALIZATION_STATUS = "initialization_status";
|
|||
|
|
|||
|
/**
|
|||
|
* The maximum number of initialization status for some application specific failed reasons.
|
|||
|
*
|
|||
|
* @hide
|
|||
|
*/
|
|||
|
int MAXIMUM_NUMBER_OF_INITIALIZATION_STATUS_CUSTOM_ERROR = 2;
|
|||
|
|
|||
|
/**
|
|||
|
* Returns the maximum number of initialization status for some application specific failed
|
|||
|
* reasons.
|
|||
|
*
|
|||
|
* Note: The value 0 is reserved for success.
|
|||
|
*/
|
|||
|
static int getMaxCustomInitializationStatus() {
|
|||
|
return MAXIMUM_NUMBER_OF_INITIALIZATION_STATUS_CUSTOM_ERROR;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* Creates a {@link IntConsumer} that sends the initialization status to the
|
|||
|
* {@link VoiceInteractionService} via {@link IRemoteCallback}.
|
|||
|
*
|
|||
|
* @hide
|
|||
|
*/
|
|||
|
static IntConsumer createInitializationStatusConsumer(IRemoteCallback callback) {
|
|||
|
IntConsumer intConsumer = null;
|
|||
|
if (callback != null) {
|
|||
|
intConsumer =
|
|||
|
value -> {
|
|||
|
if (value > SandboxedDetectionInitializer
|
|||
|
.getMaxCustomInitializationStatus()) {
|
|||
|
throw new IllegalArgumentException(
|
|||
|
"The initialization status is invalid for " + value);
|
|||
|
}
|
|||
|
try {
|
|||
|
Bundle status = new Bundle();
|
|||
|
status.putInt(KEY_INITIALIZATION_STATUS, value);
|
|||
|
callback.sendResult(status);
|
|||
|
} catch (RemoteException e) {
|
|||
|
throw e.rethrowFromSystemServer();
|
|||
|
}
|
|||
|
};
|
|||
|
}
|
|||
|
return intConsumer;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* Called when sandboxed detectors that extend {@link HotwordDetector} are created or
|
|||
|
* {@link HotwordDetector#updateState(PersistableBundle, SharedMemory)} requests an
|
|||
|
* update of the sandboxed detection parameters.
|
|||
|
*
|
|||
|
* @param options Application configuration data to provide to sandboxed detection services.
|
|||
|
* PersistableBundle does not allow any remotable objects or other contents that can be used to
|
|||
|
* communicate with other processes.
|
|||
|
* @param sharedMemory The unrestricted data blob to provide to sandboxed detection services.
|
|||
|
* Use this to provide model data or other such data to the trusted process.
|
|||
|
* @param callbackTimeoutMillis Timeout in milliseconds for the operation to invoke the
|
|||
|
* statusCallback.
|
|||
|
* @param statusCallback Use this to return the updated result; the allowed values are
|
|||
|
* {@link #INITIALIZATION_STATUS_SUCCESS}, 1<->{@link #getMaxCustomInitializationStatus()}.
|
|||
|
* This is non-null only when sandboxed detection services are being initialized; and it
|
|||
|
* is null if the state is updated after that.
|
|||
|
*/
|
|||
|
void onUpdateState(
|
|||
|
@Nullable PersistableBundle options,
|
|||
|
@Nullable SharedMemory sharedMemory,
|
|||
|
@DurationMillisLong long callbackTimeoutMillis,
|
|||
|
@Nullable IntConsumer statusCallback);
|
|||
|
}
|