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
19d59a5d59df920d743723521a2afed9de1da3373bDianne Hackbornimport android.app.ActivityManager;
2069c6adc96eecfde74ceb83cf9177428dc08b6067Dianne Hackbornimport android.app.VoiceInteractor;
2116036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackbornimport android.app.assist.AssistContent;
2216036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackbornimport android.app.assist.AssistStructure;
2391097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackbornimport android.content.Context;
24c03c9167c2d9a1e22fb2b176b00a0524177fb037Dianne Hackbornimport android.content.Intent;
2527eac1d58fe0b7ca3a2e27f5ed64eff232745f45Dianne Hackbornimport android.graphics.Bitmap;
26a3acdb33df7c7be7ff3d9f376ff833e4b0c1d897Dianne Hackbornimport android.net.Uri;
2791097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackbornimport android.os.Bundle;
2891097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackbornimport android.service.voice.VoiceInteractionSession;
2991097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackbornimport android.util.Log;
30c03c9167c2d9a1e22fb2b176b00a0524177fb037Dianne Hackbornimport android.view.View;
31c03c9167c2d9a1e22fb2b176b00a0524177fb037Dianne Hackbornimport android.widget.Button;
321de1186d28f0ca7c0b6298edfa8ae497e651ba87Dianne Hackbornimport android.widget.CheckBox;
3327eac1d58fe0b7ca3a2e27f5ed64eff232745f45Dianne Hackbornimport android.widget.ImageView;
34c03c9167c2d9a1e22fb2b176b00a0524177fb037Dianne Hackbornimport android.widget.TextView;
3591097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn
36c03c9167c2d9a1e22fb2b176b00a0524177fb037Dianne Hackbornpublic class MainInteractionSession extends VoiceInteractionSession
37c03c9167c2d9a1e22fb2b176b00a0524177fb037Dianne Hackborn        implements View.OnClickListener {
3891097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn    static final String TAG = "MainInteractionSession";
3991097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn
40c03c9167c2d9a1e22fb2b176b00a0524177fb037Dianne Hackborn    Intent mStartIntent;
41c03c9167c2d9a1e22fb2b176b00a0524177fb037Dianne Hackborn    View mContentView;
42ae6688b09649447e57468b3e7935691bc09ec9b9Dianne Hackborn    AssistVisualizer mAssistVisualizer;
43ae6688b09649447e57468b3e7935691bc09ec9b9Dianne Hackborn    View mTopContent;
44ae6688b09649447e57468b3e7935691bc09ec9b9Dianne Hackborn    View mBottomContent;
45c03c9167c2d9a1e22fb2b176b00a0524177fb037Dianne Hackborn    TextView mText;
4670d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn    Button mTreeButton;
4770d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn    Button mTextButton;
48c03c9167c2d9a1e22fb2b176b00a0524177fb037Dianne Hackborn    Button mStartButton;
491de1186d28f0ca7c0b6298edfa8ae497e651ba87Dianne Hackborn    CheckBox mOptionsCheck;
501de1186d28f0ca7c0b6298edfa8ae497e651ba87Dianne Hackborn    View mOptionsContainer;
511de1186d28f0ca7c0b6298edfa8ae497e651ba87Dianne Hackborn    CheckBox mDisallowAssist;
521de1186d28f0ca7c0b6298edfa8ae497e651ba87Dianne Hackborn    CheckBox mDisallowScreenshot;
5317f693520da8977c4a60f5b4be3be035cba7146cDianne Hackborn    TextView mOptionsText;
5427eac1d58fe0b7ca3a2e27f5ed64eff232745f45Dianne Hackborn    ImageView mScreenshot;
5570d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn    ImageView mFullScreenshot;
56a2c076d54048258cf88ab14551ce5fdf5a09c6e8Dianne Hackborn    Button mConfirmButton;
57d3fdb8bed8e836786253f9cd5ab640c7c5ed8501Barnaby James    Button mCompleteButton;
58a2c076d54048258cf88ab14551ce5fdf5a09c6e8Dianne Hackborn    Button mAbortButton;
5918f0d357f9693fe787a3e3777d8fdf01357a6e3fDianne Hackborn
60dec475649aceb419c496b56748aaf5d600f904bbDianne Hackborn    Bundle mAssistData;
61a83ce1dd2ad3a6b71e90ff4845afc1299fe17b9dDianne Hackborn    AssistStructure mAssistStructure;
62dec475649aceb419c496b56748aaf5d600f904bbDianne Hackborn    AssistContent mAssistContent;
63ae6688b09649447e57468b3e7935691bc09ec9b9Dianne Hackborn
64a2c076d54048258cf88ab14551ce5fdf5a09c6e8Dianne Hackborn    static final int STATE_IDLE = 0;
65a2c076d54048258cf88ab14551ce5fdf5a09c6e8Dianne Hackborn    static final int STATE_LAUNCHING = 1;
66a2c076d54048258cf88ab14551ce5fdf5a09c6e8Dianne Hackborn    static final int STATE_CONFIRM = 2;
673d07c94c393831091958fe6a98811843db8973bdDianne Hackborn    static final int STATE_PICK_OPTION = 3;
683d07c94c393831091958fe6a98811843db8973bdDianne Hackborn    static final int STATE_COMMAND = 4;
693d07c94c393831091958fe6a98811843db8973bdDianne Hackborn    static final int STATE_ABORT_VOICE = 5;
703d07c94c393831091958fe6a98811843db8973bdDianne Hackborn    static final int STATE_COMPLETE_VOICE = 6;
71593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn    static final int STATE_DONE = 7;
72a2c076d54048258cf88ab14551ce5fdf5a09c6e8Dianne Hackborn
73a2c076d54048258cf88ab14551ce5fdf5a09c6e8Dianne Hackborn    int mState = STATE_IDLE;
743d07c94c393831091958fe6a98811843db8973bdDianne Hackborn    VoiceInteractor.PickOptionRequest.Option[] mPendingOptions;
753d07c94c393831091958fe6a98811843db8973bdDianne Hackborn    CharSequence mPendingPrompt;
76c03c9167c2d9a1e22fb2b176b00a0524177fb037Dianne Hackborn    Request mPendingRequest;
7757dd737443a174379eb638450e4888500d8e4a23Dianne Hackborn    int mCurrentTask = -1;
780af6fa7015cd9da08bf52c1efb13641d30fd6bd7Amith Yamasani    int mShowFlags;
79c03c9167c2d9a1e22fb2b176b00a0524177fb037Dianne Hackborn
80c03c9167c2d9a1e22fb2b176b00a0524177fb037Dianne Hackborn    MainInteractionSession(Context context) {
8191097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn        super(context);
82c03c9167c2d9a1e22fb2b176b00a0524177fb037Dianne Hackborn    }
83c03c9167c2d9a1e22fb2b176b00a0524177fb037Dianne Hackborn
84c03c9167c2d9a1e22fb2b176b00a0524177fb037Dianne Hackborn    @Override
85593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn    public void onCreate() {
86593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn        super.onCreate();
87d59a5d59df920d743723521a2afed9de1da3373bDianne Hackborn        ActivityManager am = getContext().getSystemService(ActivityManager.class);
8869c6adc96eecfde74ceb83cf9177428dc08b6067Dianne Hackborn        am.setWatchHeapLimit(40 * 1024 * 1024);
89ffeecb1bfb9b71f4b62c9ef1fbf7b58a7a63f655Dianne Hackborn    }
90ffeecb1bfb9b71f4b62c9ef1fbf7b58a7a63f655Dianne Hackborn
91ffeecb1bfb9b71f4b62c9ef1fbf7b58a7a63f655Dianne Hackborn    @Override
92ffeecb1bfb9b71f4b62c9ef1fbf7b58a7a63f655Dianne Hackborn    public void onShow(Bundle args, int showFlags) {
93ffeecb1bfb9b71f4b62c9ef1fbf7b58a7a63f655Dianne Hackborn        super.onShow(args, showFlags);
940af6fa7015cd9da08bf52c1efb13641d30fd6bd7Amith Yamasani        mShowFlags = showFlags;
9517f693520da8977c4a60f5b4be3be035cba7146cDianne Hackborn        Log.i(TAG, "onShow: flags=0x" + Integer.toHexString(showFlags) + " args=" + args);
96ffeecb1bfb9b71f4b62c9ef1fbf7b58a7a63f655Dianne Hackborn        mState = STATE_IDLE;
9717f693520da8977c4a60f5b4be3be035cba7146cDianne Hackborn        mStartIntent = args != null ? (Intent)args.getParcelable("intent") : null;
98a3acdb33df7c7be7ff3d9f376ff833e4b0c1d897Dianne Hackborn        if (mStartIntent == null) {
99a3acdb33df7c7be7ff3d9f376ff833e4b0c1d897Dianne Hackborn            mStartIntent = new Intent(getContext(), TestInteractionActivity.class);
100a3acdb33df7c7be7ff3d9f376ff833e4b0c1d897Dianne Hackborn        }
101a83ce1dd2ad3a6b71e90ff4845afc1299fe17b9dDianne Hackborn        if (mAssistVisualizer != null) {
102a83ce1dd2ad3a6b71e90ff4845afc1299fe17b9dDianne Hackborn            mAssistVisualizer.clearAssistData();
103a83ce1dd2ad3a6b71e90ff4845afc1299fe17b9dDianne Hackborn        }
10427eac1d58fe0b7ca3a2e27f5ed64eff232745f45Dianne Hackborn        onHandleScreenshot(null);
105ffeecb1bfb9b71f4b62c9ef1fbf7b58a7a63f655Dianne Hackborn        updateState();
10617f693520da8977c4a60f5b4be3be035cba7146cDianne Hackborn        refreshOptions();
107ffeecb1bfb9b71f4b62c9ef1fbf7b58a7a63f655Dianne Hackborn    }
108ffeecb1bfb9b71f4b62c9ef1fbf7b58a7a63f655Dianne Hackborn
109ffeecb1bfb9b71f4b62c9ef1fbf7b58a7a63f655Dianne Hackborn    @Override
110ffeecb1bfb9b71f4b62c9ef1fbf7b58a7a63f655Dianne Hackborn    public void onHide() {
111ffeecb1bfb9b71f4b62c9ef1fbf7b58a7a63f655Dianne Hackborn        super.onHide();
112ffeecb1bfb9b71f4b62c9ef1fbf7b58a7a63f655Dianne Hackborn        if (mAssistVisualizer != null) {
113ffeecb1bfb9b71f4b62c9ef1fbf7b58a7a63f655Dianne Hackborn            mAssistVisualizer.clearAssistData();
114ae6688b09649447e57468b3e7935691bc09ec9b9Dianne Hackborn        }
115ffeecb1bfb9b71f4b62c9ef1fbf7b58a7a63f655Dianne Hackborn        mState = STATE_DONE;
116ffeecb1bfb9b71f4b62c9ef1fbf7b58a7a63f655Dianne Hackborn        updateState();
117c03c9167c2d9a1e22fb2b176b00a0524177fb037Dianne Hackborn    }
118c03c9167c2d9a1e22fb2b176b00a0524177fb037Dianne Hackborn
119c03c9167c2d9a1e22fb2b176b00a0524177fb037Dianne Hackborn    @Override
120c03c9167c2d9a1e22fb2b176b00a0524177fb037Dianne Hackborn    public View onCreateContentView() {
121c03c9167c2d9a1e22fb2b176b00a0524177fb037Dianne Hackborn        mContentView = getLayoutInflater().inflate(R.layout.voice_interaction_session, null);
122ae6688b09649447e57468b3e7935691bc09ec9b9Dianne Hackborn        mAssistVisualizer = (AssistVisualizer)mContentView.findViewById(R.id.assist_visualizer);
123a83ce1dd2ad3a6b71e90ff4845afc1299fe17b9dDianne Hackborn        if (mAssistStructure != null) {
124a83ce1dd2ad3a6b71e90ff4845afc1299fe17b9dDianne Hackborn            mAssistVisualizer.setAssistStructure(mAssistStructure);
125ae6688b09649447e57468b3e7935691bc09ec9b9Dianne Hackborn        }
126ae6688b09649447e57468b3e7935691bc09ec9b9Dianne Hackborn        mTopContent = mContentView.findViewById(R.id.top_content);
127ae6688b09649447e57468b3e7935691bc09ec9b9Dianne Hackborn        mBottomContent = mContentView.findViewById(R.id.bottom_content);
128c03c9167c2d9a1e22fb2b176b00a0524177fb037Dianne Hackborn        mText = (TextView)mContentView.findViewById(R.id.text);
12970d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn        mTreeButton = (Button)mContentView.findViewById(R.id.do_tree);
13070d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn        mTreeButton.setOnClickListener(this);
13170d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn        mTextButton = (Button)mContentView.findViewById(R.id.do_text);
13270d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn        mTextButton.setOnClickListener(this);
133c03c9167c2d9a1e22fb2b176b00a0524177fb037Dianne Hackborn        mStartButton = (Button)mContentView.findViewById(R.id.start);
134c03c9167c2d9a1e22fb2b176b00a0524177fb037Dianne Hackborn        mStartButton.setOnClickListener(this);
13527eac1d58fe0b7ca3a2e27f5ed64eff232745f45Dianne Hackborn        mScreenshot = (ImageView)mContentView.findViewById(R.id.screenshot);
13670d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn        mScreenshot.setOnClickListener(this);
13770d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn        mFullScreenshot = (ImageView)mContentView.findViewById(R.id.full_screenshot);
1381de1186d28f0ca7c0b6298edfa8ae497e651ba87Dianne Hackborn        mOptionsCheck = (CheckBox)mContentView.findViewById(R.id.show_options);
1391de1186d28f0ca7c0b6298edfa8ae497e651ba87Dianne Hackborn        mOptionsCheck.setOnClickListener(this);
1401de1186d28f0ca7c0b6298edfa8ae497e651ba87Dianne Hackborn        mOptionsContainer = mContentView.findViewById(R.id.options);
1411de1186d28f0ca7c0b6298edfa8ae497e651ba87Dianne Hackborn        mDisallowAssist = (CheckBox)mContentView.findViewById(R.id.disallow_structure);
1421de1186d28f0ca7c0b6298edfa8ae497e651ba87Dianne Hackborn        mDisallowAssist.setOnClickListener(this);
1431de1186d28f0ca7c0b6298edfa8ae497e651ba87Dianne Hackborn        mDisallowScreenshot = (CheckBox)mContentView.findViewById(R.id.disallow_screenshot);
1441de1186d28f0ca7c0b6298edfa8ae497e651ba87Dianne Hackborn        mDisallowScreenshot.setOnClickListener(this);
14517f693520da8977c4a60f5b4be3be035cba7146cDianne Hackborn        mOptionsText = (TextView)mContentView.findViewById(R.id.options_text);
146a2c076d54048258cf88ab14551ce5fdf5a09c6e8Dianne Hackborn        mConfirmButton = (Button)mContentView.findViewById(R.id.confirm);
147a2c076d54048258cf88ab14551ce5fdf5a09c6e8Dianne Hackborn        mConfirmButton.setOnClickListener(this);
148d3fdb8bed8e836786253f9cd5ab640c7c5ed8501Barnaby James        mCompleteButton = (Button)mContentView.findViewById(R.id.complete);
149d3fdb8bed8e836786253f9cd5ab640c7c5ed8501Barnaby James        mCompleteButton.setOnClickListener(this);
150a2c076d54048258cf88ab14551ce5fdf5a09c6e8Dianne Hackborn        mAbortButton = (Button)mContentView.findViewById(R.id.abort);
151a2c076d54048258cf88ab14551ce5fdf5a09c6e8Dianne Hackborn        mAbortButton.setOnClickListener(this);
1521de1186d28f0ca7c0b6298edfa8ae497e651ba87Dianne Hackborn        refreshOptions();
153c03c9167c2d9a1e22fb2b176b00a0524177fb037Dianne Hackborn        return mContentView;
154c03c9167c2d9a1e22fb2b176b00a0524177fb037Dianne Hackborn    }
155c03c9167c2d9a1e22fb2b176b00a0524177fb037Dianne Hackborn
1561de1186d28f0ca7c0b6298edfa8ae497e651ba87Dianne Hackborn    void refreshOptions() {
15717f693520da8977c4a60f5b4be3be035cba7146cDianne Hackborn        if (mOptionsContainer != null) {
15817f693520da8977c4a60f5b4be3be035cba7146cDianne Hackborn            if (mOptionsCheck.isChecked()) {
15917f693520da8977c4a60f5b4be3be035cba7146cDianne Hackborn                mOptionsContainer.setVisibility(View.VISIBLE);
16017f693520da8977c4a60f5b4be3be035cba7146cDianne Hackborn                int flags = getDisabledShowContext();
16117f693520da8977c4a60f5b4be3be035cba7146cDianne Hackborn                mDisallowAssist.setChecked((flags & SHOW_WITH_ASSIST) != 0);
16217f693520da8977c4a60f5b4be3be035cba7146cDianne Hackborn                mDisallowScreenshot.setChecked((flags & SHOW_WITH_SCREENSHOT) != 0);
16317f693520da8977c4a60f5b4be3be035cba7146cDianne Hackborn                int disabled = getUserDisabledShowContext();
16417f693520da8977c4a60f5b4be3be035cba7146cDianne Hackborn                mOptionsText.setText("Disabled: 0x" + Integer.toHexString(disabled));
16517f693520da8977c4a60f5b4be3be035cba7146cDianne Hackborn            } else {
16617f693520da8977c4a60f5b4be3be035cba7146cDianne Hackborn                mOptionsContainer.setVisibility(View.GONE);
16717f693520da8977c4a60f5b4be3be035cba7146cDianne Hackborn            }
1681de1186d28f0ca7c0b6298edfa8ae497e651ba87Dianne Hackborn        }
1691de1186d28f0ca7c0b6298edfa8ae497e651ba87Dianne Hackborn    }
1701de1186d28f0ca7c0b6298edfa8ae497e651ba87Dianne Hackborn
17169c6adc96eecfde74ceb83cf9177428dc08b6067Dianne Hackborn    public void onHandleAssist(Bundle assistBundle) {
17269c6adc96eecfde74ceb83cf9177428dc08b6067Dianne Hackborn    }
17369c6adc96eecfde74ceb83cf9177428dc08b6067Dianne Hackborn
174dec475649aceb419c496b56748aaf5d600f904bbDianne Hackborn    private void logAssistContentAndData(AssistContent content, Bundle data) {
17509d57fe9b357495b7bc62be39a8befa00d9d7ffbDianne Hackborn        if (content != null) {
17609d57fe9b357495b7bc62be39a8befa00d9d7ffbDianne Hackborn            Log.i(TAG, "Assist intent: " + content.getIntent());
177dec475649aceb419c496b56748aaf5d600f904bbDianne Hackborn            Log.i(TAG, "Assist intent from app: " + content.isAppProvidedIntent());
17809d57fe9b357495b7bc62be39a8befa00d9d7ffbDianne Hackborn            Log.i(TAG, "Assist clipdata: " + content.getClipData());
179dec475649aceb419c496b56748aaf5d600f904bbDianne Hackborn            Log.i(TAG, "Assist structured data: " + content.getStructuredData());
180dec475649aceb419c496b56748aaf5d600f904bbDianne Hackborn            Log.i(TAG, "Assist web uri: " + content.getWebUri());
181dec475649aceb419c496b56748aaf5d600f904bbDianne Hackborn            Log.i(TAG, "Assist web uri from app: " + content.isAppProvidedWebUri());
182dec475649aceb419c496b56748aaf5d600f904bbDianne Hackborn            Log.i(TAG, "Assist extras: " + content.getExtras());
183ae6688b09649447e57468b3e7935691bc09ec9b9Dianne Hackborn        }
18416036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn        if (data != null) {
18516036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn            Uri referrer = data.getParcelable(Intent.EXTRA_REFERRER);
18616036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn            if (referrer != null) {
18716036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn                Log.i(TAG, "Referrer: " + referrer);
18816036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn            }
18916036f26847f3f1a88a093fb776bf081008ff8d8Dianne Hackborn        }
190ae6688b09649447e57468b3e7935691bc09ec9b9Dianne Hackborn    }
191ae6688b09649447e57468b3e7935691bc09ec9b9Dianne Hackborn
19227eac1d58fe0b7ca3a2e27f5ed64eff232745f45Dianne Hackborn    @Override
193dec475649aceb419c496b56748aaf5d600f904bbDianne Hackborn    public void onHandleAssist(Bundle data, AssistStructure structure, AssistContent content) {
194dec475649aceb419c496b56748aaf5d600f904bbDianne Hackborn        mAssistData = data;
195dec475649aceb419c496b56748aaf5d600f904bbDianne Hackborn        mAssistStructure = structure;
196dec475649aceb419c496b56748aaf5d600f904bbDianne Hackborn        mAssistContent = content;
197dec475649aceb419c496b56748aaf5d600f904bbDianne Hackborn        if (mAssistVisualizer != null) {
198dec475649aceb419c496b56748aaf5d600f904bbDianne Hackborn            if (mAssistStructure != null) {
199dec475649aceb419c496b56748aaf5d600f904bbDianne Hackborn                mAssistVisualizer.setAssistStructure(mAssistStructure);
200dec475649aceb419c496b56748aaf5d600f904bbDianne Hackborn            } else {
201dec475649aceb419c496b56748aaf5d600f904bbDianne Hackborn                mAssistVisualizer.clearAssistData();
202dec475649aceb419c496b56748aaf5d600f904bbDianne Hackborn            }
203dec475649aceb419c496b56748aaf5d600f904bbDianne Hackborn        }
204dec475649aceb419c496b56748aaf5d600f904bbDianne Hackborn        logAssistContentAndData(content, data);
205dec475649aceb419c496b56748aaf5d600f904bbDianne Hackborn    }
206dec475649aceb419c496b56748aaf5d600f904bbDianne Hackborn
207dec475649aceb419c496b56748aaf5d600f904bbDianne Hackborn    @Override
208e8222e551f8abd2d82ca4f77ddb275e2e509751eAmith Yamasani    public void onHandleAssistSecondary(final Bundle data, final AssistStructure structure,
209e8222e551f8abd2d82ca4f77ddb275e2e509751eAmith Yamasani            final AssistContent content, int index, int count) {
210e8222e551f8abd2d82ca4f77ddb275e2e509751eAmith Yamasani        Log.i(TAG, "Got secondary activity assist data " + index + " of " + count);
211e8222e551f8abd2d82ca4f77ddb275e2e509751eAmith Yamasani        Log.i(TAG, "Showing assist structure after a few seconds...");
212e8222e551f8abd2d82ca4f77ddb275e2e509751eAmith Yamasani        mContentView.postDelayed(new Runnable() {
213e8222e551f8abd2d82ca4f77ddb275e2e509751eAmith Yamasani            public void run() {
214e8222e551f8abd2d82ca4f77ddb275e2e509751eAmith Yamasani                onHandleAssist(data, structure, content);
215e8222e551f8abd2d82ca4f77ddb275e2e509751eAmith Yamasani            }
216e8222e551f8abd2d82ca4f77ddb275e2e509751eAmith Yamasani        }, 2000 * index);
217e8222e551f8abd2d82ca4f77ddb275e2e509751eAmith Yamasani    }
218e8222e551f8abd2d82ca4f77ddb275e2e509751eAmith Yamasani
219e8222e551f8abd2d82ca4f77ddb275e2e509751eAmith Yamasani    @Override
22027eac1d58fe0b7ca3a2e27f5ed64eff232745f45Dianne Hackborn    public void onHandleScreenshot(Bitmap screenshot) {
22159da805846034a4939b014f469d7383285c75aabDianne Hackborn        if (mScreenshot != null) {
22259da805846034a4939b014f469d7383285c75aabDianne Hackborn            if (screenshot != null) {
22359da805846034a4939b014f469d7383285c75aabDianne Hackborn                mScreenshot.setImageBitmap(screenshot);
22459da805846034a4939b014f469d7383285c75aabDianne Hackborn                mScreenshot.setAdjustViewBounds(true);
22559da805846034a4939b014f469d7383285c75aabDianne Hackborn                mScreenshot.setMaxWidth(screenshot.getWidth() / 3);
22659da805846034a4939b014f469d7383285c75aabDianne Hackborn                mScreenshot.setMaxHeight(screenshot.getHeight() / 3);
22759da805846034a4939b014f469d7383285c75aabDianne Hackborn                mFullScreenshot.setImageBitmap(screenshot);
22859da805846034a4939b014f469d7383285c75aabDianne Hackborn            } else {
22959da805846034a4939b014f469d7383285c75aabDianne Hackborn                mScreenshot.setImageDrawable(null);
23059da805846034a4939b014f469d7383285c75aabDianne Hackborn                mFullScreenshot.setImageDrawable(null);
23159da805846034a4939b014f469d7383285c75aabDianne Hackborn            }
23227eac1d58fe0b7ca3a2e27f5ed64eff232745f45Dianne Hackborn        }
23327eac1d58fe0b7ca3a2e27f5ed64eff232745f45Dianne Hackborn    }
23427eac1d58fe0b7ca3a2e27f5ed64eff232745f45Dianne Hackborn
235a2c076d54048258cf88ab14551ce5fdf5a09c6e8Dianne Hackborn    void updateState() {
23659da805846034a4939b014f469d7383285c75aabDianne Hackborn        if (mTopContent == null) {
23759da805846034a4939b014f469d7383285c75aabDianne Hackborn            return;
23859da805846034a4939b014f469d7383285c75aabDianne Hackborn        }
239ae6688b09649447e57468b3e7935691bc09ec9b9Dianne Hackborn        if (mState == STATE_IDLE) {
240ae6688b09649447e57468b3e7935691bc09ec9b9Dianne Hackborn            mTopContent.setVisibility(View.VISIBLE);
241ae6688b09649447e57468b3e7935691bc09ec9b9Dianne Hackborn            mBottomContent.setVisibility(View.GONE);
242ffeecb1bfb9b71f4b62c9ef1fbf7b58a7a63f655Dianne Hackborn            mAssistVisualizer.setVisibility(View.VISIBLE);
243ffeecb1bfb9b71f4b62c9ef1fbf7b58a7a63f655Dianne Hackborn        } else if (mState == STATE_DONE) {
244ffeecb1bfb9b71f4b62c9ef1fbf7b58a7a63f655Dianne Hackborn            mTopContent.setVisibility(View.GONE);
245ffeecb1bfb9b71f4b62c9ef1fbf7b58a7a63f655Dianne Hackborn            mBottomContent.setVisibility(View.GONE);
246ffeecb1bfb9b71f4b62c9ef1fbf7b58a7a63f655Dianne Hackborn            mAssistVisualizer.setVisibility(View.GONE);
247ae6688b09649447e57468b3e7935691bc09ec9b9Dianne Hackborn        } else {
248ae6688b09649447e57468b3e7935691bc09ec9b9Dianne Hackborn            mTopContent.setVisibility(View.GONE);
249ae6688b09649447e57468b3e7935691bc09ec9b9Dianne Hackborn            mBottomContent.setVisibility(View.VISIBLE);
250ffeecb1bfb9b71f4b62c9ef1fbf7b58a7a63f655Dianne Hackborn            mAssistVisualizer.setVisibility(View.GONE);
251ae6688b09649447e57468b3e7935691bc09ec9b9Dianne Hackborn        }
252a2c076d54048258cf88ab14551ce5fdf5a09c6e8Dianne Hackborn        mStartButton.setEnabled(mState == STATE_IDLE);
2533d07c94c393831091958fe6a98811843db8973bdDianne Hackborn        mConfirmButton.setEnabled(mState == STATE_CONFIRM || mState == STATE_PICK_OPTION
2543d07c94c393831091958fe6a98811843db8973bdDianne Hackborn                || mState == STATE_COMMAND);
255a2c076d54048258cf88ab14551ce5fdf5a09c6e8Dianne Hackborn        mAbortButton.setEnabled(mState == STATE_ABORT_VOICE);
256d3fdb8bed8e836786253f9cd5ab640c7c5ed8501Barnaby James        mCompleteButton.setEnabled(mState == STATE_COMPLETE_VOICE);
257a2c076d54048258cf88ab14551ce5fdf5a09c6e8Dianne Hackborn    }
258a2c076d54048258cf88ab14551ce5fdf5a09c6e8Dianne Hackborn
259c03c9167c2d9a1e22fb2b176b00a0524177fb037Dianne Hackborn    public void onClick(View v) {
26070d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn        if (v == mTreeButton) {
26170d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn            if (mAssistVisualizer != null) {
262dec475649aceb419c496b56748aaf5d600f904bbDianne Hackborn                logAssistContentAndData(mAssistContent, mAssistData);
26370d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn                mAssistVisualizer.logTree();
26470d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn            }
26570d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn        } else if (v == mTextButton) {
26670d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn            if (mAssistVisualizer != null) {
26770d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn                mAssistVisualizer.logText();
26870d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn            }
2691de1186d28f0ca7c0b6298edfa8ae497e651ba87Dianne Hackborn        } else if (v == mOptionsCheck) {
2701de1186d28f0ca7c0b6298edfa8ae497e651ba87Dianne Hackborn            refreshOptions();
2711de1186d28f0ca7c0b6298edfa8ae497e651ba87Dianne Hackborn        } else if (v == mDisallowAssist) {
2721de1186d28f0ca7c0b6298edfa8ae497e651ba87Dianne Hackborn            int flags = getDisabledShowContext();
2731de1186d28f0ca7c0b6298edfa8ae497e651ba87Dianne Hackborn            if (mDisallowAssist.isChecked()) {
2741de1186d28f0ca7c0b6298edfa8ae497e651ba87Dianne Hackborn                flags |= SHOW_WITH_ASSIST;
2751de1186d28f0ca7c0b6298edfa8ae497e651ba87Dianne Hackborn            } else {
2761de1186d28f0ca7c0b6298edfa8ae497e651ba87Dianne Hackborn                flags &= ~SHOW_WITH_ASSIST;
2771de1186d28f0ca7c0b6298edfa8ae497e651ba87Dianne Hackborn            }
2781de1186d28f0ca7c0b6298edfa8ae497e651ba87Dianne Hackborn            setDisabledShowContext(flags);
2791de1186d28f0ca7c0b6298edfa8ae497e651ba87Dianne Hackborn        } else if (v == mDisallowScreenshot) {
2801de1186d28f0ca7c0b6298edfa8ae497e651ba87Dianne Hackborn            int flags = getDisabledShowContext();
2811de1186d28f0ca7c0b6298edfa8ae497e651ba87Dianne Hackborn            if (mDisallowScreenshot.isChecked()) {
2821de1186d28f0ca7c0b6298edfa8ae497e651ba87Dianne Hackborn                flags |= SHOW_WITH_SCREENSHOT;
2831de1186d28f0ca7c0b6298edfa8ae497e651ba87Dianne Hackborn            } else {
2841de1186d28f0ca7c0b6298edfa8ae497e651ba87Dianne Hackborn                flags &= ~SHOW_WITH_SCREENSHOT;
2851de1186d28f0ca7c0b6298edfa8ae497e651ba87Dianne Hackborn            }
2861de1186d28f0ca7c0b6298edfa8ae497e651ba87Dianne Hackborn            setDisabledShowContext(flags);
28770d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn        } else if (v == mStartButton) {
288a2c076d54048258cf88ab14551ce5fdf5a09c6e8Dianne Hackborn            mState = STATE_LAUNCHING;
289a2c076d54048258cf88ab14551ce5fdf5a09c6e8Dianne Hackborn            updateState();
290c03c9167c2d9a1e22fb2b176b00a0524177fb037Dianne Hackborn            startVoiceActivity(mStartIntent);
291a2c076d54048258cf88ab14551ce5fdf5a09c6e8Dianne Hackborn        } else if (v == mConfirmButton) {
292593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn            if (mPendingRequest instanceof ConfirmationRequest) {
293593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn                ((ConfirmationRequest)mPendingRequest).sendConfirmationResult(true, null);
2943d07c94c393831091958fe6a98811843db8973bdDianne Hackborn                mPendingRequest = null;
2953d07c94c393831091958fe6a98811843db8973bdDianne Hackborn                mState = STATE_LAUNCHING;
296593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn            } else if (mPendingRequest instanceof PickOptionRequest) {
297593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn                PickOptionRequest pick = (PickOptionRequest)mPendingRequest;
2983d07c94c393831091958fe6a98811843db8973bdDianne Hackborn                int numReturn = mPendingOptions.length/2;
2993d07c94c393831091958fe6a98811843db8973bdDianne Hackborn                if (numReturn <= 0) {
3003d07c94c393831091958fe6a98811843db8973bdDianne Hackborn                    numReturn = 1;
3013d07c94c393831091958fe6a98811843db8973bdDianne Hackborn                }
3023d07c94c393831091958fe6a98811843db8973bdDianne Hackborn                VoiceInteractor.PickOptionRequest.Option[] picked
3033d07c94c393831091958fe6a98811843db8973bdDianne Hackborn                        = new VoiceInteractor.PickOptionRequest.Option[numReturn];
3043d07c94c393831091958fe6a98811843db8973bdDianne Hackborn                for (int i=0; i<picked.length; i++) {
3053d07c94c393831091958fe6a98811843db8973bdDianne Hackborn                    picked[i] = mPendingOptions[i*2];
3063d07c94c393831091958fe6a98811843db8973bdDianne Hackborn                }
3073d07c94c393831091958fe6a98811843db8973bdDianne Hackborn                mPendingOptions = picked;
3083d07c94c393831091958fe6a98811843db8973bdDianne Hackborn                if (picked.length <= 1) {
309593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn                    pick.sendPickOptionResult(picked, null);
3103d07c94c393831091958fe6a98811843db8973bdDianne Hackborn                    mPendingRequest = null;
3113d07c94c393831091958fe6a98811843db8973bdDianne Hackborn                    mState = STATE_LAUNCHING;
3123d07c94c393831091958fe6a98811843db8973bdDianne Hackborn                } else {
313593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn                    pick.sendIntermediatePickOptionResult(picked, null);
3143d07c94c393831091958fe6a98811843db8973bdDianne Hackborn                    updatePickText();
3153d07c94c393831091958fe6a98811843db8973bdDianne Hackborn                }
316593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn            } else if (mPendingRequest instanceof CommandRequest) {
317593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn                Bundle result = new Bundle();
318593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn                result.putString("key", "a result!");
319593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn                ((CommandRequest)mPendingRequest).sendResult(result);
3203d07c94c393831091958fe6a98811843db8973bdDianne Hackborn                mPendingRequest = null;
3213d07c94c393831091958fe6a98811843db8973bdDianne Hackborn                mState = STATE_LAUNCHING;
322c03c9167c2d9a1e22fb2b176b00a0524177fb037Dianne Hackborn            }
323593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn        } else if (v == mAbortButton && mPendingRequest instanceof AbortVoiceRequest) {
324593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn            ((AbortVoiceRequest)mPendingRequest).sendAbortResult(null);
325a2c076d54048258cf88ab14551ce5fdf5a09c6e8Dianne Hackborn            mPendingRequest = null;
326593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn        } else if (v == mCompleteButton && mPendingRequest instanceof CompleteVoiceRequest) {
327593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn            ((CompleteVoiceRequest)mPendingRequest).sendCompleteResult(null);
328d3fdb8bed8e836786253f9cd5ab640c7c5ed8501Barnaby James            mPendingRequest = null;
32970d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn        } else if (v == mScreenshot) {
33070d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn            if (mFullScreenshot.getVisibility() != View.VISIBLE) {
33170d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn                mFullScreenshot.setVisibility(View.VISIBLE);
33270d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn            } else {
33370d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn                mFullScreenshot.setVisibility(View.INVISIBLE);
33470d8be7616a450e9b7ef09c8bda5a8b25936a29aDianne Hackborn            }
335c03c9167c2d9a1e22fb2b176b00a0524177fb037Dianne Hackborn        }
3363d07c94c393831091958fe6a98811843db8973bdDianne Hackborn        updateState();
33791097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn    }
33891097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn
33991097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn    @Override
340ae6688b09649447e57468b3e7935691bc09ec9b9Dianne Hackborn    public void onComputeInsets(Insets outInsets) {
341ae6688b09649447e57468b3e7935691bc09ec9b9Dianne Hackborn        super.onComputeInsets(outInsets);
342ae6688b09649447e57468b3e7935691bc09ec9b9Dianne Hackborn        if (mState != STATE_IDLE) {
343ae6688b09649447e57468b3e7935691bc09ec9b9Dianne Hackborn            outInsets.contentInsets.top = mBottomContent.getTop();
344ae6688b09649447e57468b3e7935691bc09ec9b9Dianne Hackborn            outInsets.touchableInsets = Insets.TOUCHABLE_INSETS_CONTENT;
3450af6fa7015cd9da08bf52c1efb13641d30fd6bd7Amith Yamasani        } else if ((mShowFlags & SHOW_SOURCE_ACTIVITY) != 0) {
3460af6fa7015cd9da08bf52c1efb13641d30fd6bd7Amith Yamasani            outInsets.touchableInsets = Insets.TOUCHABLE_INSETS_CONTENT;
347ae6688b09649447e57468b3e7935691bc09ec9b9Dianne Hackborn        }
348ae6688b09649447e57468b3e7935691bc09ec9b9Dianne Hackborn    }
349ae6688b09649447e57468b3e7935691bc09ec9b9Dianne Hackborn
350ae6688b09649447e57468b3e7935691bc09ec9b9Dianne Hackborn    @Override
35157dd737443a174379eb638450e4888500d8e4a23Dianne Hackborn    public void onTaskStarted(Intent intent, int taskId) {
35257dd737443a174379eb638450e4888500d8e4a23Dianne Hackborn        super.onTaskStarted(intent, taskId);
35357dd737443a174379eb638450e4888500d8e4a23Dianne Hackborn        mCurrentTask = taskId;
35457dd737443a174379eb638450e4888500d8e4a23Dianne Hackborn    }
35557dd737443a174379eb638450e4888500d8e4a23Dianne Hackborn
35657dd737443a174379eb638450e4888500d8e4a23Dianne Hackborn    @Override
35757dd737443a174379eb638450e4888500d8e4a23Dianne Hackborn    public void onTaskFinished(Intent intent, int taskId) {
35857dd737443a174379eb638450e4888500d8e4a23Dianne Hackborn        super.onTaskFinished(intent, taskId);
35957dd737443a174379eb638450e4888500d8e4a23Dianne Hackborn        if (mCurrentTask == taskId) {
36057dd737443a174379eb638450e4888500d8e4a23Dianne Hackborn            mCurrentTask = -1;
36157dd737443a174379eb638450e4888500d8e4a23Dianne Hackborn        }
36257dd737443a174379eb638450e4888500d8e4a23Dianne Hackborn    }
36357dd737443a174379eb638450e4888500d8e4a23Dianne Hackborn
36457dd737443a174379eb638450e4888500d8e4a23Dianne Hackborn    @Override
36557dd737443a174379eb638450e4888500d8e4a23Dianne Hackborn    public void onLockscreenShown() {
36657dd737443a174379eb638450e4888500d8e4a23Dianne Hackborn        if (mCurrentTask < 0) {
36757dd737443a174379eb638450e4888500d8e4a23Dianne Hackborn            hide();
36857dd737443a174379eb638450e4888500d8e4a23Dianne Hackborn        }
36957dd737443a174379eb638450e4888500d8e4a23Dianne Hackborn    }
37057dd737443a174379eb638450e4888500d8e4a23Dianne Hackborn
37157dd737443a174379eb638450e4888500d8e4a23Dianne Hackborn    @Override
372593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn    public boolean[] onGetSupportedCommands(String[] commands) {
373593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn        boolean[] res = new boolean[commands.length];
374593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn        for (int i=0; i<commands.length; i++) {
375593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn            if ("com.android.test.voiceinteraction.COMMAND".equals(commands[i])) {
376593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn                res[i] = true;
377593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn            }
378593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn        }
379593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn        return res;
38091097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn    }
38191097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn
382593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn    void setPrompt(VoiceInteractor.Prompt prompt) {
383593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn        if (prompt == null) {
384593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn            mText.setText("(null)");
385593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn            mPendingPrompt = "";
386593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn        } else {
387593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn            mText.setText(prompt.getVisualPrompt());
388593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn            mPendingPrompt = prompt.getVisualPrompt();
389593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn        }
390593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn    }
3910af6fa7015cd9da08bf52c1efb13641d30fd6bd7Amith Yamasani
39291097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn    @Override
393593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn    public void onRequestConfirmation(ConfirmationRequest request) {
394593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn        Log.i(TAG, "onConfirm: prompt=" + request.getVoicePrompt() + " extras="
395593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn                + request.getExtras());
396593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn        setPrompt(request.getVoicePrompt());
3973d07c94c393831091958fe6a98811843db8973bdDianne Hackborn        mConfirmButton.setText("Confirm");
398c03c9167c2d9a1e22fb2b176b00a0524177fb037Dianne Hackborn        mPendingRequest = request;
399a2c076d54048258cf88ab14551ce5fdf5a09c6e8Dianne Hackborn        mState = STATE_CONFIRM;
400a2c076d54048258cf88ab14551ce5fdf5a09c6e8Dianne Hackborn        updateState();
401a2c076d54048258cf88ab14551ce5fdf5a09c6e8Dianne Hackborn    }
402a2c076d54048258cf88ab14551ce5fdf5a09c6e8Dianne Hackborn
403a2c076d54048258cf88ab14551ce5fdf5a09c6e8Dianne Hackborn    @Override
404593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn    public void onRequestPickOption(PickOptionRequest request) {
405593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn        Log.i(TAG, "onPickOption: prompt=" + request.getVoicePrompt() + " options="
406593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn                + request.getOptions() + " extras=" + request.getExtras());
4073d07c94c393831091958fe6a98811843db8973bdDianne Hackborn        mConfirmButton.setText("Pick Option");
4083d07c94c393831091958fe6a98811843db8973bdDianne Hackborn        mPendingRequest = request;
409593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn        setPrompt(request.getVoicePrompt());
410593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn        mPendingOptions = request.getOptions();
4113d07c94c393831091958fe6a98811843db8973bdDianne Hackborn        mState = STATE_PICK_OPTION;
4123d07c94c393831091958fe6a98811843db8973bdDianne Hackborn        updatePickText();
4133d07c94c393831091958fe6a98811843db8973bdDianne Hackborn        updateState();
4143d07c94c393831091958fe6a98811843db8973bdDianne Hackborn    }
4153d07c94c393831091958fe6a98811843db8973bdDianne Hackborn
4163d07c94c393831091958fe6a98811843db8973bdDianne Hackborn    void updatePickText() {
4173d07c94c393831091958fe6a98811843db8973bdDianne Hackborn        StringBuilder sb = new StringBuilder();
4183d07c94c393831091958fe6a98811843db8973bdDianne Hackborn        sb.append(mPendingPrompt);
4193d07c94c393831091958fe6a98811843db8973bdDianne Hackborn        sb.append(": ");
4203d07c94c393831091958fe6a98811843db8973bdDianne Hackborn        for (int i=0; i<mPendingOptions.length; i++) {
4213d07c94c393831091958fe6a98811843db8973bdDianne Hackborn            if (i > 0) {
4223d07c94c393831091958fe6a98811843db8973bdDianne Hackborn                sb.append(", ");
4233d07c94c393831091958fe6a98811843db8973bdDianne Hackborn            }
4243d07c94c393831091958fe6a98811843db8973bdDianne Hackborn            sb.append(mPendingOptions[i].getLabel());
4253d07c94c393831091958fe6a98811843db8973bdDianne Hackborn        }
4263d07c94c393831091958fe6a98811843db8973bdDianne Hackborn        mText.setText(sb.toString());
4273d07c94c393831091958fe6a98811843db8973bdDianne Hackborn    }
4283d07c94c393831091958fe6a98811843db8973bdDianne Hackborn
4293d07c94c393831091958fe6a98811843db8973bdDianne Hackborn    @Override
430593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn    public void onRequestCompleteVoice(CompleteVoiceRequest request) {
431593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn        Log.i(TAG, "onCompleteVoice: message=" + request.getVoicePrompt() + " extras="
432593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn                + request.getExtras());
433593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn        setPrompt(request.getVoicePrompt());
434d3fdb8bed8e836786253f9cd5ab640c7c5ed8501Barnaby James        mPendingRequest = request;
435d3fdb8bed8e836786253f9cd5ab640c7c5ed8501Barnaby James        mState = STATE_COMPLETE_VOICE;
436d3fdb8bed8e836786253f9cd5ab640c7c5ed8501Barnaby James        updateState();
437d3fdb8bed8e836786253f9cd5ab640c7c5ed8501Barnaby James    }
438d3fdb8bed8e836786253f9cd5ab640c7c5ed8501Barnaby James
439d3fdb8bed8e836786253f9cd5ab640c7c5ed8501Barnaby James    @Override
440593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn    public void onRequestAbortVoice(AbortVoiceRequest request) {
441593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn        Log.i(TAG, "onAbortVoice: message=" + request.getVoicePrompt() + " extras="
442593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn                + request.getExtras());
443593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn        setPrompt(request.getVoicePrompt());
444a2c076d54048258cf88ab14551ce5fdf5a09c6e8Dianne Hackborn        mPendingRequest = request;
445a2c076d54048258cf88ab14551ce5fdf5a09c6e8Dianne Hackborn        mState = STATE_ABORT_VOICE;
446a2c076d54048258cf88ab14551ce5fdf5a09c6e8Dianne Hackborn        updateState();
44791097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn    }
44891097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn
44991097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn    @Override
450593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn    public void onRequestCommand(CommandRequest request) {
451593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn        Bundle extras = request.getExtras();
452593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn        if (extras != null) {
453593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn            extras.getString("arg");
454593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn        }
455593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn        Log.i(TAG, "onCommand: command=" + request.getCommand() + " extras=" + extras);
456593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn        mText.setText("Command: " + request.getCommand() + ", " + extras);
4573d07c94c393831091958fe6a98811843db8973bdDianne Hackborn        mConfirmButton.setText("Finish Command");
458c03c9167c2d9a1e22fb2b176b00a0524177fb037Dianne Hackborn        mPendingRequest = request;
459a2c076d54048258cf88ab14551ce5fdf5a09c6e8Dianne Hackborn        mState = STATE_COMMAND;
460a2c076d54048258cf88ab14551ce5fdf5a09c6e8Dianne Hackborn        updateState();
46191097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn    }
46291097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn
46391097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn    @Override
464593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn    public void onCancelRequest(Request request) {
46591097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn        Log.i(TAG, "onCancel");
466593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn        if (mPendingRequest == request) {
467593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn            mPendingRequest = null;
468593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn            mState = STATE_LAUNCHING;
469593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn            updateState();
470593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn        }
471593334ab70a8341c7d24d71a377ab5617e3f4ab7Dianne Hackborn        request.cancel();
47291097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn    }
47391097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn}
474