1 /* 2 * Copyright (C) 2016 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 com.android.test.voiceinteraction; 18 19 import android.app.Activity; 20 import android.app.VoiceInteractor; 21 import android.os.Bundle; 22 import android.util.Log; 23 import android.view.View; 24 import android.widget.Button; 25 import android.widget.TextView; 26 27 public class StartVoiceInteractionActivity extends Activity implements View.OnClickListener { 28 static final String TAG = "LocalVoiceInteractionActivity"; 29 30 static final String REQUEST_ABORT = "abort"; 31 static final String REQUEST_COMPLETE = "complete"; 32 static final String REQUEST_COMMAND = "command"; 33 static final String REQUEST_PICK = "pick"; 34 static final String REQUEST_CONFIRM = "confirm"; 35 36 VoiceInteractor mInteractor; 37 VoiceInteractor.Request mCurrentRequest = null; 38 TextView mLog; 39 Button mCommandButton; 40 Button mPickButton; 41 Button mCancelButton; 42 Button mStartButton; 43 Button mStopButton; 44 45 @Override 46 public void onCreate(Bundle savedInstanceState) { 47 super.onCreate(savedInstanceState); 48 49 setContentView(R.layout.local_interaction_app); 50 51 mLog = (TextView)findViewById(R.id.log); 52 mCommandButton = (Button)findViewById(R.id.command); 53 mCommandButton.setOnClickListener(this); 54 mPickButton = (Button)findViewById(R.id.pick); 55 mPickButton.setOnClickListener(this); 56 mCancelButton = (Button)findViewById(R.id.cancel); 57 mCancelButton.setOnClickListener(this); 58 mStartButton = (Button) findViewById(R.id.start); 59 mStartButton.setOnClickListener(this); 60 mStopButton = (Button) findViewById(R.id.stop); 61 mStopButton.setOnClickListener(this); 62 63 mLog.append("Local Voice Interaction Supported = " + isLocalVoiceInteractionSupported()); 64 } 65 66 @Override 67 public void onResume() { 68 super.onResume(); 69 } 70 71 @Override 72 public void onClick(View v) { 73 if (v == mCommandButton) { 74 VoiceInteractor.CommandRequest req = new TestCommand("Some arg"); 75 mInteractor.submitRequest(req, REQUEST_COMMAND); 76 } else if (v == mPickButton) { 77 VoiceInteractor.PickOptionRequest.Option[] options = 78 new VoiceInteractor.PickOptionRequest.Option[5]; 79 options[0] = new VoiceInteractor.PickOptionRequest.Option("One"); 80 options[1] = new VoiceInteractor.PickOptionRequest.Option("Two"); 81 options[2] = new VoiceInteractor.PickOptionRequest.Option("Three"); 82 options[3] = new VoiceInteractor.PickOptionRequest.Option("Four"); 83 options[4] = new VoiceInteractor.PickOptionRequest.Option("Five"); 84 VoiceInteractor.PickOptionRequest req = new TestPickOption(options); 85 mInteractor.submitRequest(req, REQUEST_PICK); 86 } else if (v == mCancelButton && mCurrentRequest != null) { 87 Log.i(TAG, "Cancel request"); 88 mCurrentRequest.cancel(); 89 } else if (v == mStartButton) { 90 Bundle args = new Bundle(); 91 args.putString("Foo", "Bar"); 92 startLocalVoiceInteraction(args); 93 } else if (v == mStopButton) { 94 stopLocalVoiceInteraction(); 95 } 96 } 97 98 @Override 99 public void onLocalVoiceInteractionStarted() { 100 mInteractor = getVoiceInteractor(); 101 mLog.append("\nLocalVoiceInteraction started!"); 102 mStopButton.setEnabled(true); 103 } 104 105 @Override 106 public void onLocalVoiceInteractionStopped() { 107 mInteractor = getVoiceInteractor(); 108 mLog.append("\nLocalVoiceInteraction stopped!"); 109 mStopButton.setEnabled(false); 110 } 111 112 @Override 113 public void onDestroy() { 114 super.onDestroy(); 115 } 116 117 static class TestAbortVoice extends VoiceInteractor.AbortVoiceRequest { 118 public TestAbortVoice() { 119 super(new VoiceInteractor.Prompt("Dammit, we suck :("), null); 120 } 121 @Override public void onCancel() { 122 Log.i(TAG, "Canceled!"); 123 ((StartVoiceInteractionActivity)getActivity()).mLog.append("Canceled abort\n"); 124 } 125 @Override public void onAbortResult(Bundle result) { 126 Log.i(TAG, "Abort result: result=" + result); 127 ((StartVoiceInteractionActivity)getActivity()).mLog.append( 128 "Abort: result=" + result + "\n"); 129 getActivity().finish(); 130 } 131 } 132 133 static class TestCompleteVoice extends VoiceInteractor.CompleteVoiceRequest { 134 public TestCompleteVoice() { 135 super(new VoiceInteractor.Prompt("Woohoo, completed!"), null); 136 } 137 @Override public void onCancel() { 138 Log.i(TAG, "Canceled!"); 139 ((StartVoiceInteractionActivity)getActivity()).mLog.append("Canceled complete\n"); 140 } 141 @Override public void onCompleteResult(Bundle result) { 142 Log.i(TAG, "Complete result: result=" + result); 143 ((StartVoiceInteractionActivity)getActivity()).mLog.append("Complete: result=" 144 + result + "\n"); 145 getActivity().finish(); 146 } 147 } 148 149 static class TestCommand extends VoiceInteractor.CommandRequest { 150 public TestCommand(String arg) { 151 super("com.android.test.voiceinteraction.COMMAND", makeBundle(arg)); 152 } 153 @Override public void onCancel() { 154 Log.i(TAG, "Canceled!"); 155 ((StartVoiceInteractionActivity)getActivity()).mLog.append("Canceled command\n"); 156 } 157 @Override 158 public void onCommandResult(boolean finished, Bundle result) { 159 Log.i(TAG, "Command result: finished=" + finished + " result=" + result); 160 StringBuilder sb = new StringBuilder(); 161 if (finished) { 162 sb.append("Command final result: "); 163 } else { 164 sb.append("Command intermediate result: "); 165 } 166 if (result != null) { 167 result.getString("key"); 168 } 169 sb.append(result); 170 sb.append("\n"); 171 ((StartVoiceInteractionActivity)getActivity()).mLog.append(sb.toString()); 172 } 173 static Bundle makeBundle(String arg) { 174 Bundle b = new Bundle(); 175 b.putString("key", arg); 176 return b; 177 } 178 } 179 180 static class TestPickOption extends VoiceInteractor.PickOptionRequest { 181 public TestPickOption(Option[] options) { 182 super(new VoiceInteractor.Prompt("Need to pick something"), options, null); 183 } 184 @Override public void onCancel() { 185 Log.i(TAG, "Canceled!"); 186 ((StartVoiceInteractionActivity)getActivity()).mLog.append("Canceled pick\n"); 187 } 188 @Override 189 public void onPickOptionResult(boolean finished, Option[] selections, Bundle result) { 190 Log.i(TAG, "Pick result: finished=" + finished + " selections=" + selections 191 + " result=" + result); 192 StringBuilder sb = new StringBuilder(); 193 if (finished) { 194 sb.append("Pick final result: "); 195 } else { 196 sb.append("Pick intermediate result: "); 197 } 198 for (int i=0; i<selections.length; i++) { 199 if (i >= 1) { 200 sb.append(", "); 201 } 202 sb.append(selections[i].getLabel()); 203 } 204 sb.append("\n"); 205 ((StartVoiceInteractionActivity)getActivity()).mLog.append(sb.toString()); 206 } 207 } 208 } 209