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