191097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn/* 291097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn * Copyright (C) 2014 The Android Open Source Project 391097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn * 491097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn * Licensed under the Apache License, Version 2.0 (the "License"); 591097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn * you may not use this file except in compliance with the License. 691097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn * You may obtain a copy of the License at 791097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn * 891097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn * http://www.apache.org/licenses/LICENSE-2.0 991097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn * 1091097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn * Unless required by applicable law or agreed to in writing, software 1191097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn * distributed under the License is distributed on an "AS IS" BASIS, 1291097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1391097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn * See the License for the specific language governing permissions and 1491097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn * limitations under the License. 1591097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn */ 1691097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn 1791097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackbornpackage com.android.test.voiceinteraction; 1891097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn 1991097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackbornimport android.app.Activity; 2091097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackbornimport android.app.VoiceInteractor; 21cb188253572f0b07325c2c6e2c2d7ec7e3d2c7c6Barnaby Jamesimport android.content.ComponentName; 22d59a5d59df920d743723521a2afed9de1da3373bDianne Hackbornimport android.content.Intent; 2391097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackbornimport android.os.Bundle; 24fb81d09d359480f9e43bbf300877b60de05f4816Dianne Hackbornimport android.provider.Settings; 25cb188253572f0b07325c2c6e2c2d7ec7e3d2c7c6Barnaby Jamesimport android.service.voice.VoiceInteractionService; 2691097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackbornimport android.util.Log; 27a2c076d54048258cf88ab14551ce5fdf5a09c6e8Dianne Hackbornimport android.view.View; 28a2c076d54048258cf88ab14551ce5fdf5a09c6e8Dianne Hackbornimport android.widget.Button; 293d07c94c393831091958fe6a98811843db8973bdDianne Hackbornimport android.widget.TextView; 3091097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn 31a2c076d54048258cf88ab14551ce5fdf5a09c6e8Dianne Hackbornpublic class TestInteractionActivity extends Activity implements View.OnClickListener { 3291097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn static final String TAG = "TestInteractionActivity"; 3391097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn 34a3acdb33df7c7be7ff3d9f376ff833e4b0c1d897Dianne Hackborn static final String REQUEST_ABORT = "abort"; 35a3acdb33df7c7be7ff3d9f376ff833e4b0c1d897Dianne Hackborn static final String REQUEST_COMPLETE = "complete"; 36593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn static final String REQUEST_COMMAND = "command"; 37a3acdb33df7c7be7ff3d9f376ff833e4b0c1d897Dianne Hackborn static final String REQUEST_PICK = "pick"; 38a3acdb33df7c7be7ff3d9f376ff833e4b0c1d897Dianne Hackborn static final String REQUEST_CONFIRM = "confirm"; 39a3acdb33df7c7be7ff3d9f376ff833e4b0c1d897Dianne Hackborn 4091097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn VoiceInteractor mInteractor; 41ffeecb1bfb9b71f4b62c9ef1fbf7b58a7a63f655Dianne Hackborn VoiceInteractor.Request mCurrentRequest = null; 423d07c94c393831091958fe6a98811843db8973bdDianne Hackborn TextView mLog; 43fb81d09d359480f9e43bbf300877b60de05f4816Dianne Hackborn Button mAirplaneButton; 44a2c076d54048258cf88ab14551ce5fdf5a09c6e8Dianne Hackborn Button mAbortButton; 45d3fdb8bed8e836786253f9cd5ab640c7c5ed8501Barnaby James Button mCompleteButton; 46593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn Button mCommandButton; 473d07c94c393831091958fe6a98811843db8973bdDianne Hackborn Button mPickButton; 48d59a5d59df920d743723521a2afed9de1da3373bDianne Hackborn Button mJumpOutButton; 49ffeecb1bfb9b71f4b62c9ef1fbf7b58a7a63f655Dianne Hackborn Button mCancelButton; 5091097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn 5191097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn @Override 5291097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn public void onCreate(Bundle savedInstanceState) { 5391097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn super.onCreate(savedInstanceState); 5491097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn 5591097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn if (!isVoiceInteraction()) { 5691097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn Log.w(TAG, "Not running as a voice interaction!"); 5791097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn finish(); 5891097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn return; 5991097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn } 6091097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn 61cb188253572f0b07325c2c6e2c2d7ec7e3d2c7c6Barnaby James if (!VoiceInteractionService.isActiveService(this, 62cb188253572f0b07325c2c6e2c2d7ec7e3d2c7c6Barnaby James new ComponentName(this, MainInteractionService.class))) { 63cb188253572f0b07325c2c6e2c2d7ec7e3d2c7c6Barnaby James Log.w(TAG, "Not current voice interactor!"); 64cb188253572f0b07325c2c6e2c2d7ec7e3d2c7c6Barnaby James finish(); 65cb188253572f0b07325c2c6e2c2d7ec7e3d2c7c6Barnaby James return; 66cb188253572f0b07325c2c6e2c2d7ec7e3d2c7c6Barnaby James } 67cb188253572f0b07325c2c6e2c2d7ec7e3d2c7c6Barnaby James 6818f0d357f9693fe787a3e3777d8fdf01357a6e3fDianne Hackborn setContentView(R.layout.test_interaction); 693d07c94c393831091958fe6a98811843db8973bdDianne Hackborn mLog = (TextView)findViewById(R.id.log); 70fb81d09d359480f9e43bbf300877b60de05f4816Dianne Hackborn mAirplaneButton = (Button)findViewById(R.id.airplane); 71fb81d09d359480f9e43bbf300877b60de05f4816Dianne Hackborn mAirplaneButton.setOnClickListener(this); 72a2c076d54048258cf88ab14551ce5fdf5a09c6e8Dianne Hackborn mAbortButton = (Button)findViewById(R.id.abort); 73a2c076d54048258cf88ab14551ce5fdf5a09c6e8Dianne Hackborn mAbortButton.setOnClickListener(this); 74d3fdb8bed8e836786253f9cd5ab640c7c5ed8501Barnaby James mCompleteButton = (Button)findViewById(R.id.complete); 75d3fdb8bed8e836786253f9cd5ab640c7c5ed8501Barnaby James mCompleteButton.setOnClickListener(this); 76593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn mCommandButton = (Button)findViewById(R.id.command); 77593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn mCommandButton.setOnClickListener(this); 783d07c94c393831091958fe6a98811843db8973bdDianne Hackborn mPickButton = (Button)findViewById(R.id.pick); 793d07c94c393831091958fe6a98811843db8973bdDianne Hackborn mPickButton.setOnClickListener(this); 80d59a5d59df920d743723521a2afed9de1da3373bDianne Hackborn mJumpOutButton = (Button)findViewById(R.id.jump); 81d59a5d59df920d743723521a2afed9de1da3373bDianne Hackborn mJumpOutButton.setOnClickListener(this); 82ffeecb1bfb9b71f4b62c9ef1fbf7b58a7a63f655Dianne Hackborn mCancelButton = (Button)findViewById(R.id.cancel); 83ffeecb1bfb9b71f4b62c9ef1fbf7b58a7a63f655Dianne Hackborn mCancelButton.setOnClickListener(this); 8418f0d357f9693fe787a3e3777d8fdf01357a6e3fDianne Hackborn 8591097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn mInteractor = getVoiceInteractor(); 86a3acdb33df7c7be7ff3d9f376ff833e4b0c1d897Dianne Hackborn 87a3acdb33df7c7be7ff3d9f376ff833e4b0c1d897Dianne Hackborn VoiceInteractor.Request[] active = mInteractor.getActiveRequests(); 88a3acdb33df7c7be7ff3d9f376ff833e4b0c1d897Dianne Hackborn for (int i=0; i<active.length; i++) { 89a3acdb33df7c7be7ff3d9f376ff833e4b0c1d897Dianne Hackborn Log.i(TAG, "Active #" + i + " / " + active[i].getName() + ": " + active[i]); 90a3acdb33df7c7be7ff3d9f376ff833e4b0c1d897Dianne Hackborn } 91a3acdb33df7c7be7ff3d9f376ff833e4b0c1d897Dianne Hackborn 92a3acdb33df7c7be7ff3d9f376ff833e4b0c1d897Dianne Hackborn mCurrentRequest = mInteractor.getActiveRequest(REQUEST_CONFIRM); 93a3acdb33df7c7be7ff3d9f376ff833e4b0c1d897Dianne Hackborn if (mCurrentRequest == null) { 94a3acdb33df7c7be7ff3d9f376ff833e4b0c1d897Dianne Hackborn mCurrentRequest = new VoiceInteractor.ConfirmationRequest( 95a3acdb33df7c7be7ff3d9f376ff833e4b0c1d897Dianne Hackborn new VoiceInteractor.Prompt("This is a confirmation"), null) { 96a3acdb33df7c7be7ff3d9f376ff833e4b0c1d897Dianne Hackborn @Override 97a3acdb33df7c7be7ff3d9f376ff833e4b0c1d897Dianne Hackborn public void onCancel() { 98a3acdb33df7c7be7ff3d9f376ff833e4b0c1d897Dianne Hackborn Log.i(TAG, "Canceled!"); 99a3acdb33df7c7be7ff3d9f376ff833e4b0c1d897Dianne Hackborn getActivity().finish(); 100a3acdb33df7c7be7ff3d9f376ff833e4b0c1d897Dianne Hackborn } 101a3acdb33df7c7be7ff3d9f376ff833e4b0c1d897Dianne Hackborn 102a3acdb33df7c7be7ff3d9f376ff833e4b0c1d897Dianne Hackborn @Override 103a3acdb33df7c7be7ff3d9f376ff833e4b0c1d897Dianne Hackborn public void onConfirmationResult(boolean confirmed, Bundle result) { 104a3acdb33df7c7be7ff3d9f376ff833e4b0c1d897Dianne Hackborn Log.i(TAG, "Confirmation result: confirmed=" + confirmed + " result=" + result); 105a3acdb33df7c7be7ff3d9f376ff833e4b0c1d897Dianne Hackborn getActivity().finish(); 106a3acdb33df7c7be7ff3d9f376ff833e4b0c1d897Dianne Hackborn } 107a3acdb33df7c7be7ff3d9f376ff833e4b0c1d897Dianne Hackborn }; 108a3acdb33df7c7be7ff3d9f376ff833e4b0c1d897Dianne Hackborn mInteractor.submitRequest(mCurrentRequest, REQUEST_CONFIRM); 109d0a159025a06a7400ab3dfca1d754494947092e0Dianne Hackborn String[] cmds = new String[] { 110d0a159025a06a7400ab3dfca1d754494947092e0Dianne Hackborn "com.android.test.voiceinteraction.COMMAND", 111d0a159025a06a7400ab3dfca1d754494947092e0Dianne Hackborn "com.example.foo.bar" 112d0a159025a06a7400ab3dfca1d754494947092e0Dianne Hackborn }; 113d0a159025a06a7400ab3dfca1d754494947092e0Dianne Hackborn boolean sup[] = mInteractor.supportsCommands(cmds); 114d0a159025a06a7400ab3dfca1d754494947092e0Dianne Hackborn for (int i=0; i<cmds.length; i++) { 115d0a159025a06a7400ab3dfca1d754494947092e0Dianne Hackborn mLog.append(cmds[i] + ": " + (sup[i] ? "SUPPORTED" : "NOT SUPPORTED") + "\n"); 116d0a159025a06a7400ab3dfca1d754494947092e0Dianne Hackborn } 117a3acdb33df7c7be7ff3d9f376ff833e4b0c1d897Dianne Hackborn } else { 118a3acdb33df7c7be7ff3d9f376ff833e4b0c1d897Dianne Hackborn Log.i(TAG, "Restarting with active confirmation: " + mCurrentRequest); 119a3acdb33df7c7be7ff3d9f376ff833e4b0c1d897Dianne Hackborn } 12091097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn } 12191097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn 12291097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn @Override 12391097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn public void onResume() { 12491097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn super.onResume(); 12591097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn } 12691097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn 12791097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn @Override 128a2c076d54048258cf88ab14551ce5fdf5a09c6e8Dianne Hackborn public void onClick(View v) { 129fb81d09d359480f9e43bbf300877b60de05f4816Dianne Hackborn if (v == mAirplaneButton) { 130fb81d09d359480f9e43bbf300877b60de05f4816Dianne Hackborn Intent intent = new Intent(Settings.ACTION_VOICE_CONTROL_AIRPLANE_MODE); 131fb81d09d359480f9e43bbf300877b60de05f4816Dianne Hackborn intent.addCategory(Intent.CATEGORY_VOICE); 132fb81d09d359480f9e43bbf300877b60de05f4816Dianne Hackborn intent.putExtra(Settings.EXTRA_AIRPLANE_MODE_ENABLED, true); 133fb81d09d359480f9e43bbf300877b60de05f4816Dianne Hackborn startActivity(intent); 134fb81d09d359480f9e43bbf300877b60de05f4816Dianne Hackborn } else if (v == mAbortButton) { 13516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn VoiceInteractor.AbortVoiceRequest req = new TestAbortVoice(); 136a3acdb33df7c7be7ff3d9f376ff833e4b0c1d897Dianne Hackborn mInteractor.submitRequest(req, REQUEST_ABORT); 137d3fdb8bed8e836786253f9cd5ab640c7c5ed8501Barnaby James } else if (v == mCompleteButton) { 13816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn VoiceInteractor.CompleteVoiceRequest req = new TestCompleteVoice(); 139a3acdb33df7c7be7ff3d9f376ff833e4b0c1d897Dianne Hackborn mInteractor.submitRequest(req, REQUEST_COMPLETE); 140593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn } else if (v == mCommandButton) { 141593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn VoiceInteractor.CommandRequest req = new TestCommand("Some arg"); 142593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn mInteractor.submitRequest(req, REQUEST_COMMAND); 1433d07c94c393831091958fe6a98811843db8973bdDianne Hackborn } else if (v == mPickButton) { 1443d07c94c393831091958fe6a98811843db8973bdDianne Hackborn VoiceInteractor.PickOptionRequest.Option[] options = 1453d07c94c393831091958fe6a98811843db8973bdDianne Hackborn new VoiceInteractor.PickOptionRequest.Option[5]; 1463d07c94c393831091958fe6a98811843db8973bdDianne Hackborn options[0] = new VoiceInteractor.PickOptionRequest.Option("One"); 1473d07c94c393831091958fe6a98811843db8973bdDianne Hackborn options[1] = new VoiceInteractor.PickOptionRequest.Option("Two"); 1483d07c94c393831091958fe6a98811843db8973bdDianne Hackborn options[2] = new VoiceInteractor.PickOptionRequest.Option("Three"); 1493d07c94c393831091958fe6a98811843db8973bdDianne Hackborn options[3] = new VoiceInteractor.PickOptionRequest.Option("Four"); 1503d07c94c393831091958fe6a98811843db8973bdDianne Hackborn options[4] = new VoiceInteractor.PickOptionRequest.Option("Five"); 15116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn VoiceInteractor.PickOptionRequest req = new TestPickOption(options); 152a3acdb33df7c7be7ff3d9f376ff833e4b0c1d897Dianne Hackborn mInteractor.submitRequest(req, REQUEST_PICK); 153d59a5d59df920d743723521a2afed9de1da3373bDianne Hackborn } else if (v == mJumpOutButton) { 154d59a5d59df920d743723521a2afed9de1da3373bDianne Hackborn Log.i(TAG, "Jump out"); 155d59a5d59df920d743723521a2afed9de1da3373bDianne Hackborn Intent intent = new Intent(Intent.ACTION_MAIN); 156d59a5d59df920d743723521a2afed9de1da3373bDianne Hackborn intent.addCategory(Intent.CATEGORY_LAUNCHER); 157d59a5d59df920d743723521a2afed9de1da3373bDianne Hackborn intent.setComponent(new ComponentName(this, VoiceInteractionMain.class)); 158d59a5d59df920d743723521a2afed9de1da3373bDianne Hackborn intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 159d59a5d59df920d743723521a2afed9de1da3373bDianne Hackborn startActivity(intent); 160ffeecb1bfb9b71f4b62c9ef1fbf7b58a7a63f655Dianne Hackborn } else if (v == mCancelButton && mCurrentRequest != null) { 161ffeecb1bfb9b71f4b62c9ef1fbf7b58a7a63f655Dianne Hackborn Log.i(TAG, "Cancel request"); 162ffeecb1bfb9b71f4b62c9ef1fbf7b58a7a63f655Dianne Hackborn mCurrentRequest.cancel(); 163a2c076d54048258cf88ab14551ce5fdf5a09c6e8Dianne Hackborn } 164a2c076d54048258cf88ab14551ce5fdf5a09c6e8Dianne Hackborn } 165a2c076d54048258cf88ab14551ce5fdf5a09c6e8Dianne Hackborn 166a2c076d54048258cf88ab14551ce5fdf5a09c6e8Dianne Hackborn @Override 16791097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn public void onDestroy() { 16891097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn super.onDestroy(); 16991097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn } 17016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 17116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn static class TestAbortVoice extends VoiceInteractor.AbortVoiceRequest { 17216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public TestAbortVoice() { 17316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn super(new VoiceInteractor.Prompt("Dammit, we suck :("), null); 17416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 17516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn @Override public void onCancel() { 17616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn Log.i(TAG, "Canceled!"); 17716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn ((TestInteractionActivity)getActivity()).mLog.append("Canceled abort\n"); 17816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 17916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn @Override public void onAbortResult(Bundle result) { 18016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn Log.i(TAG, "Abort result: result=" + result); 18116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn ((TestInteractionActivity)getActivity()).mLog.append("Abort: result=" + result + "\n"); 18216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn getActivity().finish(); 18316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 18416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 18516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 18616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn static class TestCompleteVoice extends VoiceInteractor.CompleteVoiceRequest { 18716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public TestCompleteVoice() { 18816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn super(new VoiceInteractor.Prompt("Woohoo, completed!"), null); 18916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 19016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn @Override public void onCancel() { 19116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn Log.i(TAG, "Canceled!"); 19216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn ((TestInteractionActivity)getActivity()).mLog.append("Canceled complete\n"); 19316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 19416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn @Override public void onCompleteResult(Bundle result) { 19516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn Log.i(TAG, "Complete result: result=" + result); 19616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn ((TestInteractionActivity)getActivity()).mLog.append("Complete: result=" 19716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn + result + "\n"); 19816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn getActivity().finish(); 19916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 20016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 20116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn 202593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn static class TestCommand extends VoiceInteractor.CommandRequest { 203593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn public TestCommand(String arg) { 204593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn super("com.android.test.voiceinteraction.COMMAND", makeBundle(arg)); 205593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn } 206593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn @Override public void onCancel() { 207593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn Log.i(TAG, "Canceled!"); 208593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn ((TestInteractionActivity)getActivity()).mLog.append("Canceled command\n"); 209593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn } 210593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn @Override 211593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn public void onCommandResult(boolean finished, Bundle result) { 212593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn Log.i(TAG, "Command result: finished=" + finished + " result=" + result); 213593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn StringBuilder sb = new StringBuilder(); 214593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn if (finished) { 215593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn sb.append("Command final result: "); 216593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn } else { 217593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn sb.append("Command intermediate result: "); 218593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn } 219593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn if (result != null) { 220593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn result.getString("key"); 221593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn } 222593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn sb.append(result); 223593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn sb.append("\n"); 224593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn ((TestInteractionActivity)getActivity()).mLog.append(sb.toString()); 225593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn } 226593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn static Bundle makeBundle(String arg) { 227593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn Bundle b = new Bundle(); 228593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn b.putString("key", arg); 229593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn return b; 230593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn } 231593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn } 232593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn 23316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn static class TestPickOption extends VoiceInteractor.PickOptionRequest { 23416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public TestPickOption(Option[] options) { 23516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn super(new VoiceInteractor.Prompt("Need to pick something"), options, null); 23616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 23716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn @Override public void onCancel() { 23816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn Log.i(TAG, "Canceled!"); 23916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn ((TestInteractionActivity)getActivity()).mLog.append("Canceled pick\n"); 24016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 24116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn @Override 24216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn public void onPickOptionResult(boolean finished, Option[] selections, Bundle result) { 24316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn Log.i(TAG, "Pick result: finished=" + finished + " selections=" + selections 24416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn + " result=" + result); 24516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn StringBuilder sb = new StringBuilder(); 24616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn if (finished) { 24716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn sb.append("Pick final result: "); 24816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } else { 24916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn sb.append("Pick intermediate result: "); 25016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 25116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn for (int i=0; i<selections.length; i++) { 25216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn if (i >= 1) { 25316036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn sb.append(", "); 25416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 25516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn sb.append(selections[i].getLabel()); 25616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 257593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn sb.append("\n"); 25816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn ((TestInteractionActivity)getActivity()).mLog.append(sb.toString()); 25916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 26016036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn } 26191097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn} 262