blob: d20906e7368a04eae3022d788f2f71cfad0cf983 [file] [log] [blame]
Dianne Hackborn91097de2014-04-04 18:02:06 -07001/*
2 * Copyright (C) 2014 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
17package com.android.test.voiceinteraction;
18
19import android.content.Context;
Dianne Hackbornc03c9162014-05-02 10:45:59 -070020import android.content.Intent;
Dianne Hackborn91097de2014-04-04 18:02:06 -070021import android.os.Bundle;
22import android.service.voice.VoiceInteractionSession;
23import android.util.Log;
Dianne Hackbornc03c9162014-05-02 10:45:59 -070024import android.view.View;
25import android.widget.Button;
26import android.widget.TextView;
Dianne Hackborn91097de2014-04-04 18:02:06 -070027
Dianne Hackbornc03c9162014-05-02 10:45:59 -070028public class MainInteractionSession extends VoiceInteractionSession
29 implements View.OnClickListener {
Dianne Hackborn91097de2014-04-04 18:02:06 -070030 static final String TAG = "MainInteractionSession";
31
Dianne Hackbornc03c9162014-05-02 10:45:59 -070032 Intent mStartIntent;
33 View mContentView;
34 TextView mText;
35 Button mStartButton;
Dianne Hackborna2c076d2014-05-30 16:42:57 -070036 Button mConfirmButton;
Barnaby Jamesd3fdb8b2014-07-07 10:51:06 -070037 Button mCompleteButton;
Dianne Hackborna2c076d2014-05-30 16:42:57 -070038 Button mAbortButton;
Dianne Hackborn18f0d352014-04-25 17:06:18 -070039
Dianne Hackborna2c076d2014-05-30 16:42:57 -070040 static final int STATE_IDLE = 0;
41 static final int STATE_LAUNCHING = 1;
42 static final int STATE_CONFIRM = 2;
43 static final int STATE_COMMAND = 3;
44 static final int STATE_ABORT_VOICE = 4;
Barnaby Jamesd3fdb8b2014-07-07 10:51:06 -070045 static final int STATE_COMPLETE_VOICE = 5;
Dianne Hackborna2c076d2014-05-30 16:42:57 -070046
47 int mState = STATE_IDLE;
Dianne Hackbornc03c9162014-05-02 10:45:59 -070048 Request mPendingRequest;
Dianne Hackbornc03c9162014-05-02 10:45:59 -070049
50 MainInteractionSession(Context context) {
Dianne Hackborn91097de2014-04-04 18:02:06 -070051 super(context);
Dianne Hackbornc03c9162014-05-02 10:45:59 -070052 }
53
54 @Override
55 public void onCreate(Bundle args) {
56 super.onCreate(args);
57 showWindow();
58 mStartIntent = args.getParcelable("intent");
59 }
60
61 @Override
62 public View onCreateContentView() {
63 mContentView = getLayoutInflater().inflate(R.layout.voice_interaction_session, null);
64 mText = (TextView)mContentView.findViewById(R.id.text);
65 mStartButton = (Button)mContentView.findViewById(R.id.start);
66 mStartButton.setOnClickListener(this);
Dianne Hackborna2c076d2014-05-30 16:42:57 -070067 mConfirmButton = (Button)mContentView.findViewById(R.id.confirm);
68 mConfirmButton.setOnClickListener(this);
Barnaby Jamesd3fdb8b2014-07-07 10:51:06 -070069 mCompleteButton = (Button)mContentView.findViewById(R.id.complete);
70 mCompleteButton.setOnClickListener(this);
Dianne Hackborna2c076d2014-05-30 16:42:57 -070071 mAbortButton = (Button)mContentView.findViewById(R.id.abort);
72 mAbortButton.setOnClickListener(this);
73 updateState();
Dianne Hackbornc03c9162014-05-02 10:45:59 -070074 return mContentView;
75 }
76
Dianne Hackborna2c076d2014-05-30 16:42:57 -070077 void updateState() {
78 mStartButton.setEnabled(mState == STATE_IDLE);
79 mConfirmButton.setEnabled(mState == STATE_CONFIRM || mState == STATE_COMMAND);
80 mAbortButton.setEnabled(mState == STATE_ABORT_VOICE);
Barnaby Jamesd3fdb8b2014-07-07 10:51:06 -070081 mCompleteButton.setEnabled(mState == STATE_COMPLETE_VOICE);
Dianne Hackborna2c076d2014-05-30 16:42:57 -070082 }
83
Dianne Hackbornc03c9162014-05-02 10:45:59 -070084 public void onClick(View v) {
Dianne Hackborna2c076d2014-05-30 16:42:57 -070085 if (v == mStartButton) {
86 mState = STATE_LAUNCHING;
87 updateState();
Dianne Hackbornc03c9162014-05-02 10:45:59 -070088 startVoiceActivity(mStartIntent);
Dianne Hackborna2c076d2014-05-30 16:42:57 -070089 } else if (v == mConfirmButton) {
90 if (mState == STATE_CONFIRM) {
Dianne Hackbornc03c9162014-05-02 10:45:59 -070091 mPendingRequest.sendConfirmResult(true, null);
92 } else {
93 mPendingRequest.sendCommandResult(true, null);
94 }
95 mPendingRequest = null;
Dianne Hackborna2c076d2014-05-30 16:42:57 -070096 mState = STATE_IDLE;
97 updateState();
98 } else if (v == mAbortButton) {
99 mPendingRequest.sendAbortVoiceResult(null);
100 mPendingRequest = null;
101 mState = STATE_IDLE;
102 updateState();
Barnaby Jamesd3fdb8b2014-07-07 10:51:06 -0700103 } else if (v== mCompleteButton) {
104 mPendingRequest.sendCompleteVoiceResult(null);
105 mPendingRequest = null;
106 mState = STATE_IDLE;
107 updateState();
Dianne Hackbornc03c9162014-05-02 10:45:59 -0700108 }
Dianne Hackborn91097de2014-04-04 18:02:06 -0700109 }
110
111 @Override
112 public boolean[] onGetSupportedCommands(Caller caller, String[] commands) {
113 return new boolean[commands.length];
114 }
115
116 @Override
Dianne Hackborna2c076d2014-05-30 16:42:57 -0700117 public void onConfirm(Caller caller, Request request, CharSequence prompt, Bundle extras) {
Dianne Hackbornc03c9162014-05-02 10:45:59 -0700118 Log.i(TAG, "onConfirm: prompt=" + prompt + " extras=" + extras);
119 mText.setText(prompt);
Dianne Hackbornc03c9162014-05-02 10:45:59 -0700120 mStartButton.setText("Confirm");
121 mPendingRequest = request;
Dianne Hackborna2c076d2014-05-30 16:42:57 -0700122 mState = STATE_CONFIRM;
123 updateState();
124 }
125
126 @Override
Barnaby Jamesd3fdb8b2014-07-07 10:51:06 -0700127 public void onCompleteVoice(Caller caller, Request request, CharSequence message, Bundle extras) {
128 Log.i(TAG, "onCompleteVoice: message=" + message + " extras=" + extras);
129 mText.setText(message);
130 mPendingRequest = request;
131 mState = STATE_COMPLETE_VOICE;
132 updateState();
133 }
134
135 @Override
Dianne Hackborna2c076d2014-05-30 16:42:57 -0700136 public void onAbortVoice(Caller caller, Request request, CharSequence message, Bundle extras) {
137 Log.i(TAG, "onAbortVoice: message=" + message + " extras=" + extras);
138 mText.setText(message);
139 mPendingRequest = request;
140 mState = STATE_ABORT_VOICE;
141 updateState();
Dianne Hackborn91097de2014-04-04 18:02:06 -0700142 }
143
144 @Override
145 public void onCommand(Caller caller, Request request, String command, Bundle extras) {
146 Log.i(TAG, "onCommand: command=" + command + " extras=" + extras);
Dianne Hackbornc03c9162014-05-02 10:45:59 -0700147 mText.setText("Command: " + command);
Dianne Hackbornc03c9162014-05-02 10:45:59 -0700148 mStartButton.setText("Finish Command");
149 mPendingRequest = request;
Dianne Hackborna2c076d2014-05-30 16:42:57 -0700150 mState = STATE_COMMAND;
151 updateState();
Dianne Hackborn91097de2014-04-04 18:02:06 -0700152 }
153
154 @Override
155 public void onCancel(Request request) {
156 Log.i(TAG, "onCancel");
157 request.sendCancelResult();
158 }
159}