All Downloads are FREE. Search and download functionalities are using the official Maven repository.

src.android.media.voice.KeyphraseModelManager Maven / Gradle / Ivy

Go to download

A library jar that provides APIs for Applications written for the Google Android Platform.

There is a newer version: 15-robolectric-12650502
Show newest version
/*
 * Copyright (C) 2020 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.media.voice;

import android.Manifest;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.RequiresPermission;
import android.annotation.SystemApi;
import android.hardware.soundtrigger.SoundTrigger;
import android.os.RemoteException;
import android.os.ServiceSpecificException;
import android.util.Slog;

import com.android.internal.app.IVoiceInteractionManagerService;

import java.util.Locale;
import java.util.Objects;

/**
 * This class provides management of voice based sound recognition models. Usage of this class is
 * restricted to system or signature applications only. This allows OEMs to write apps that can
 * manage voice based sound trigger models.
 * Callers of this class are expected to have whitelist manifest permission MANAGE_VOICE_KEYPHRASES.
 * Callers of this class are expected to be the designated voice interaction service via
 * {@link Settings.Secure.VOICE_INTERACTION_SERVICE} or a bundled voice model enrollment application
 * detected by {@link android.hardware.soundtrigger.KeyphraseEnrollmentInfo}.
 * @hide
 */
@SystemApi
public final class KeyphraseModelManager {
    private static final boolean DBG = false;
    private static final String TAG = "KeyphraseModelManager";

    private final IVoiceInteractionManagerService mVoiceInteractionManagerService;

    /**
     * @hide
     */
    public KeyphraseModelManager(
            IVoiceInteractionManagerService voiceInteractionManagerService) {
        if (DBG) {
            Slog.i(TAG, "KeyphraseModelManager created.");
        }
        mVoiceInteractionManagerService = voiceInteractionManagerService;
    }


    /**
     * Gets the registered sound model for keyphrase detection for the current user.
     * The keyphraseId and locale passed must match a supported model passed in via
     * {@link #updateKeyphraseSoundModel}.
     * If the active voice interaction service changes from the current user, all requests will be
     * rejected, and any registered models will be unregistered.
     * Caller must either be the active voice interaction service via
     * {@link Settings.Secure.VOICE_INTERACTION_SERVICE}, or the caller must be a voice model
     * enrollment application detected by
     * {@link android.hardware.soundtrigger.KeyphraseEnrollmentInfo}.
     *
     * @param keyphraseId The unique identifier for the keyphrase.
     * @param locale The locale language tag supported by the desired model.
     * @return Registered keyphrase sound model matching the keyphrase ID and locale. May be null if
     * no matching sound model exists.
     * @throws SecurityException Thrown when caller does not have MANAGE_VOICE_KEYPHRASES permission
     *                           or if the caller is not the active voice interaction service.
     */
    @RequiresPermission(Manifest.permission.MANAGE_VOICE_KEYPHRASES)
    @Nullable
    public SoundTrigger.KeyphraseSoundModel getKeyphraseSoundModel(int keyphraseId,
            @NonNull Locale locale) {
        Objects.requireNonNull(locale);
        try {
            return mVoiceInteractionManagerService.getKeyphraseSoundModel(keyphraseId,
                    locale.toLanguageTag());
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
    }

    /**
     * Add or update the given keyphrase sound model to the registered models pool for the current
     * user.
     * If a model exists with the same Keyphrase ID, locale, and user list. The registered model
     * will be overwritten with the new model.
     * If the active voice interaction service changes from the current user, all requests will be
     * rejected, and any registered models will be unregistered.
     * Caller must either be the active voice interaction service via
     * {@link Settings.Secure.VOICE_INTERACTION_SERVICE}, or the caller must be a voice model
     * enrollment application detected by
     * {@link android.hardware.soundtrigger.KeyphraseEnrollmentInfo}.
     *
     * @param model Keyphrase sound model to be updated.
     * @throws ServiceSpecificException Thrown with error code if failed to update the keyphrase
     *                           sound model.
     * @throws SecurityException Thrown when caller does not have MANAGE_VOICE_KEYPHRASES permission
     *                           or if the caller is not the active voice interaction service.
     */
    @RequiresPermission(Manifest.permission.MANAGE_VOICE_KEYPHRASES)
    public void updateKeyphraseSoundModel(@NonNull SoundTrigger.KeyphraseSoundModel model) {
        Objects.requireNonNull(model);
        try {
            int status = mVoiceInteractionManagerService.updateKeyphraseSoundModel(model);
            if (status != SoundTrigger.STATUS_OK) {
                throw new ServiceSpecificException(status);
            }
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
    }

    /**
     * Delete keyphrase sound model from the registered models pool for the current user matching\
     * the keyphrase ID and locale.
     * The keyphraseId and locale passed must match a supported model passed in via
     * {@link #updateKeyphraseSoundModel}.
     * If the active voice interaction service changes from the current user, all requests will be
     * rejected, and any registered models will be unregistered.
     * Caller must either be the active voice interaction service via
     * {@link Settings.Secure.VOICE_INTERACTION_SERVICE}, or the caller must be a voice model
     * enrollment application detected by
     * {@link android.hardware.soundtrigger.KeyphraseEnrollmentInfo}.
     *
     * @param keyphraseId The unique identifier for the keyphrase.
     * @param locale The locale language tag supported by the desired model.
     * @throws ServiceSpecificException Thrown with error code if failed to delete the keyphrase
     *                           sound model.
     * @throws SecurityException Thrown when caller does not have MANAGE_VOICE_KEYPHRASES permission
     *                           or if the caller is not the active voice interaction service.
     */
    @RequiresPermission(Manifest.permission.MANAGE_VOICE_KEYPHRASES)
    public void deleteKeyphraseSoundModel(int keyphraseId, @NonNull Locale locale) {
        Objects.requireNonNull(locale);
        try {
            int status = mVoiceInteractionManagerService.deleteKeyphraseSoundModel(keyphraseId,
                    locale.toLanguageTag());
            if (status != SoundTrigger.STATUS_OK) {
                throw new ServiceSpecificException(status);
            }
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy