1 /* 2 * Copyright (C) 2010 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package android.speech; 18 19 import android.content.ComponentName; 20 import android.content.Intent; 21 import android.util.CloseGuard; 22 23 import androidx.annotation.NonNull; 24 import androidx.annotation.Nullable; 25 26 import java.lang.ref.Reference; 27 import java.util.concurrent.Executor; 28 29 /** 30 * @hide 31 */ 32 class SpeechRecognizerProxy extends SpeechRecognizer { 33 34 private final CloseGuard mCloseGuard = new CloseGuard(); 35 36 private final SpeechRecognizer mDelegate; 37 SpeechRecognizerProxy(final SpeechRecognizer delegate)38 SpeechRecognizerProxy(final SpeechRecognizer delegate) { 39 mDelegate = delegate; 40 mCloseGuard.open("SpeechRecognizer#destroy()"); 41 } 42 43 @Override setRecognitionListener(RecognitionListener listener)44 public void setRecognitionListener(RecognitionListener listener) { 45 mDelegate.setRecognitionListener(listener); 46 } 47 48 @Override startListening(Intent recognizerIntent)49 public void startListening(Intent recognizerIntent) { 50 mDelegate.startListening(recognizerIntent); 51 } 52 53 @Override stopListening()54 public void stopListening() { 55 mDelegate.stopListening(); 56 } 57 58 @Override cancel()59 public void cancel() { 60 mDelegate.cancel(); 61 } 62 63 @Override destroy()64 public void destroy() { 65 try { 66 mCloseGuard.close(); 67 mDelegate.destroy(); 68 } finally { 69 Reference.reachabilityFence(this); 70 } 71 } 72 73 @Override checkRecognitionSupport( @onNull Intent recognizerIntent, @NonNull Executor executor, @NonNull RecognitionSupportCallback supportListener)74 public void checkRecognitionSupport( 75 @NonNull Intent recognizerIntent, 76 @NonNull Executor executor, 77 @NonNull RecognitionSupportCallback supportListener) { 78 mDelegate.checkRecognitionSupport(recognizerIntent, executor, supportListener); 79 } 80 81 @Override triggerModelDownload(@onNull Intent recognizerIntent)82 public void triggerModelDownload(@NonNull Intent recognizerIntent) { 83 mDelegate.triggerModelDownload(recognizerIntent); 84 } 85 86 @Override triggerModelDownload( @onNull Intent recognizerIntent, @NonNull Executor executor, @NonNull ModelDownloadListener listener)87 public void triggerModelDownload( 88 @NonNull Intent recognizerIntent, 89 @NonNull Executor executor, 90 @NonNull ModelDownloadListener listener) { 91 mDelegate.triggerModelDownload(recognizerIntent, executor, listener); 92 } 93 94 @Override setTemporaryOnDeviceRecognizer(@ullable ComponentName componentName)95 public void setTemporaryOnDeviceRecognizer(@Nullable ComponentName componentName) { 96 mDelegate.setTemporaryOnDeviceRecognizer(componentName); 97 } 98 99 @Override finalize()100 protected void finalize() throws Throwable { 101 try { 102 mCloseGuard.warnIfOpen(); 103 destroy(); 104 } finally { 105 super.finalize(); 106 } 107 } 108 } 109