| /* |
| * Copyright (C) 2014 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 com.android.test.voiceinteraction; |
| |
| import android.app.Activity; |
| import android.app.VoiceInteractor; |
| import android.content.ComponentName; |
| import android.content.Intent; |
| import android.os.Bundle; |
| import android.provider.Settings; |
| import android.service.voice.VoiceInteractionService; |
| import android.util.Log; |
| import android.view.View; |
| import android.widget.Button; |
| import android.widget.TextView; |
| |
| public class TestInteractionActivity extends Activity implements View.OnClickListener { |
| static final String TAG = "TestInteractionActivity"; |
| |
| static final String REQUEST_ABORT = "abort"; |
| static final String REQUEST_COMPLETE = "complete"; |
| static final String REQUEST_COMMAND = "command"; |
| static final String REQUEST_PICK = "pick"; |
| static final String REQUEST_CONFIRM = "confirm"; |
| |
| VoiceInteractor mInteractor; |
| VoiceInteractor.Request mCurrentRequest = null; |
| TextView mLog; |
| Button mAirplaneButton; |
| Button mAbortButton; |
| Button mCompleteButton; |
| Button mCommandButton; |
| Button mPickButton; |
| Button mJumpOutButton; |
| Button mCancelButton; |
| |
| @Override |
| public void onCreate(Bundle savedInstanceState) { |
| super.onCreate(savedInstanceState); |
| |
| if (!isVoiceInteraction()) { |
| Log.w(TAG, "Not running as a voice interaction!"); |
| finish(); |
| return; |
| } |
| |
| if (!VoiceInteractionService.isActiveService(this, |
| new ComponentName(this, MainInteractionService.class))) { |
| Log.w(TAG, "Not current voice interactor!"); |
| finish(); |
| return; |
| } |
| |
| setContentView(R.layout.test_interaction); |
| mLog = (TextView)findViewById(R.id.log); |
| mAirplaneButton = (Button)findViewById(R.id.airplane); |
| mAirplaneButton.setOnClickListener(this); |
| mAbortButton = (Button)findViewById(R.id.abort); |
| mAbortButton.setOnClickListener(this); |
| mCompleteButton = (Button)findViewById(R.id.complete); |
| mCompleteButton.setOnClickListener(this); |
| mCommandButton = (Button)findViewById(R.id.command); |
| mCommandButton.setOnClickListener(this); |
| mPickButton = (Button)findViewById(R.id.pick); |
| mPickButton.setOnClickListener(this); |
| mJumpOutButton = (Button)findViewById(R.id.jump); |
| mJumpOutButton.setOnClickListener(this); |
| mCancelButton = (Button)findViewById(R.id.cancel); |
| mCancelButton.setOnClickListener(this); |
| |
| mInteractor = getVoiceInteractor(); |
| |
| VoiceInteractor.Request[] active = mInteractor.getActiveRequests(); |
| for (int i=0; i<active.length; i++) { |
| Log.i(TAG, "Active #" + i + " / " + active[i].getName() + ": " + active[i]); |
| } |
| |
| mCurrentRequest = mInteractor.getActiveRequest(REQUEST_CONFIRM); |
| if (mCurrentRequest == null) { |
| mCurrentRequest = new VoiceInteractor.ConfirmationRequest( |
| new VoiceInteractor.Prompt("This is a confirmation"), null) { |
| @Override |
| public void onCancel() { |
| Log.i(TAG, "Canceled!"); |
| getActivity().finish(); |
| } |
| |
| @Override |
| public void onConfirmationResult(boolean confirmed, Bundle result) { |
| Log.i(TAG, "Confirmation result: confirmed=" + confirmed + " result=" + result); |
| getActivity().finish(); |
| } |
| }; |
| mInteractor.submitRequest(mCurrentRequest, REQUEST_CONFIRM); |
| String[] cmds = new String[] { |
| "com.android.test.voiceinteraction.COMMAND", |
| "com.example.foo.bar" |
| }; |
| boolean sup[] = mInteractor.supportsCommands(cmds); |
| for (int i=0; i<cmds.length; i++) { |
| mLog.append(cmds[i] + ": " + (sup[i] ? "SUPPORTED" : "NOT SUPPORTED") + "\n"); |
| } |
| } else { |
| Log.i(TAG, "Restarting with active confirmation: " + mCurrentRequest); |
| } |
| } |
| |
| @Override |
| public void onResume() { |
| super.onResume(); |
| } |
| |
| @Override |
| public void onClick(View v) { |
| if (v == mAirplaneButton) { |
| Intent intent = new Intent(Settings.ACTION_VOICE_CONTROL_AIRPLANE_MODE); |
| intent.addCategory(Intent.CATEGORY_VOICE); |
| intent.putExtra(Settings.EXTRA_AIRPLANE_MODE_ENABLED, true); |
| startActivity(intent); |
| } else if (v == mAbortButton) { |
| VoiceInteractor.AbortVoiceRequest req = new TestAbortVoice(); |
| mInteractor.submitRequest(req, REQUEST_ABORT); |
| } else if (v == mCompleteButton) { |
| VoiceInteractor.CompleteVoiceRequest req = new TestCompleteVoice(); |
| mInteractor.submitRequest(req, REQUEST_COMPLETE); |
| } else if (v == mCommandButton) { |
| VoiceInteractor.CommandRequest req = new TestCommand("Some arg"); |
| mInteractor.submitRequest(req, REQUEST_COMMAND); |
| } else if (v == mPickButton) { |
| VoiceInteractor.PickOptionRequest.Option[] options = |
| new VoiceInteractor.PickOptionRequest.Option[5]; |
| options[0] = new VoiceInteractor.PickOptionRequest.Option("One"); |
| options[1] = new VoiceInteractor.PickOptionRequest.Option("Two"); |
| options[2] = new VoiceInteractor.PickOptionRequest.Option("Three"); |
| options[3] = new VoiceInteractor.PickOptionRequest.Option("Four"); |
| options[4] = new VoiceInteractor.PickOptionRequest.Option("Five"); |
| VoiceInteractor.PickOptionRequest req = new TestPickOption(options); |
| mInteractor.submitRequest(req, REQUEST_PICK); |
| } else if (v == mJumpOutButton) { |
| Log.i(TAG, "Jump out"); |
| Intent intent = new Intent(Intent.ACTION_MAIN); |
| intent.addCategory(Intent.CATEGORY_LAUNCHER); |
| intent.setComponent(new ComponentName(this, VoiceInteractionMain.class)); |
| intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); |
| startActivity(intent); |
| } else if (v == mCancelButton && mCurrentRequest != null) { |
| Log.i(TAG, "Cancel request"); |
| mCurrentRequest.cancel(); |
| } |
| } |
| |
| @Override |
| public void onDestroy() { |
| super.onDestroy(); |
| } |
| |
| static class TestAbortVoice extends VoiceInteractor.AbortVoiceRequest { |
| public TestAbortVoice() { |
| super(new VoiceInteractor.Prompt("Dammit, we suck :("), null); |
| } |
| @Override public void onCancel() { |
| Log.i(TAG, "Canceled!"); |
| ((TestInteractionActivity)getActivity()).mLog.append("Canceled abort\n"); |
| } |
| @Override public void onAbortResult(Bundle result) { |
| Log.i(TAG, "Abort result: result=" + result); |
| ((TestInteractionActivity)getActivity()).mLog.append("Abort: result=" + result + "\n"); |
| getActivity().finish(); |
| } |
| } |
| |
| static class TestCompleteVoice extends VoiceInteractor.CompleteVoiceRequest { |
| public TestCompleteVoice() { |
| super(new VoiceInteractor.Prompt("Woohoo, completed!"), null); |
| } |
| @Override public void onCancel() { |
| Log.i(TAG, "Canceled!"); |
| ((TestInteractionActivity)getActivity()).mLog.append("Canceled complete\n"); |
| } |
| @Override public void onCompleteResult(Bundle result) { |
| Log.i(TAG, "Complete result: result=" + result); |
| ((TestInteractionActivity)getActivity()).mLog.append("Complete: result=" |
| + result + "\n"); |
| getActivity().finish(); |
| } |
| } |
| |
| static class TestCommand extends VoiceInteractor.CommandRequest { |
| public TestCommand(String arg) { |
| super("com.android.test.voiceinteraction.COMMAND", makeBundle(arg)); |
| } |
| @Override public void onCancel() { |
| Log.i(TAG, "Canceled!"); |
| ((TestInteractionActivity)getActivity()).mLog.append("Canceled command\n"); |
| } |
| @Override |
| public void onCommandResult(boolean finished, Bundle result) { |
| Log.i(TAG, "Command result: finished=" + finished + " result=" + result); |
| StringBuilder sb = new StringBuilder(); |
| if (finished) { |
| sb.append("Command final result: "); |
| } else { |
| sb.append("Command intermediate result: "); |
| } |
| if (result != null) { |
| result.getString("key"); |
| } |
| sb.append(result); |
| sb.append("\n"); |
| ((TestInteractionActivity)getActivity()).mLog.append(sb.toString()); |
| } |
| static Bundle makeBundle(String arg) { |
| Bundle b = new Bundle(); |
| b.putString("key", arg); |
| return b; |
| } |
| } |
| |
| static class TestPickOption extends VoiceInteractor.PickOptionRequest { |
| public TestPickOption(Option[] options) { |
| super(new VoiceInteractor.Prompt("Need to pick something"), options, null); |
| } |
| @Override public void onCancel() { |
| Log.i(TAG, "Canceled!"); |
| ((TestInteractionActivity)getActivity()).mLog.append("Canceled pick\n"); |
| } |
| @Override |
| public void onPickOptionResult(boolean finished, Option[] selections, Bundle result) { |
| Log.i(TAG, "Pick result: finished=" + finished + " selections=" + selections |
| + " result=" + result); |
| StringBuilder sb = new StringBuilder(); |
| if (finished) { |
| sb.append("Pick final result: "); |
| } else { |
| sb.append("Pick intermediate result: "); |
| } |
| for (int i=0; i<selections.length; i++) { |
| if (i >= 1) { |
| sb.append(", "); |
| } |
| sb.append(selections[i].getLabel()); |
| } |
| sb.append("\n"); |
| ((TestInteractionActivity)getActivity()).mLog.append(sb.toString()); |
| } |
| } |
| } |