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