109e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly/* 209e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * Copyright (c) 2008-2009, Motorola, Inc. 309e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * 409e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * All rights reserved. 509e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * 609e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * Redistribution and use in source and binary forms, with or without 709e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * modification, are permitted provided that the following conditions are met: 809e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * 909e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * - Redistributions of source code must retain the above copyright notice, 1009e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * this list of conditions and the following disclaimer. 1109e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * 1209e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * - Redistributions in binary form must reproduce the above copyright notice, 1309e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * this list of conditions and the following disclaimer in the documentation 1409e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * and/or other materials provided with the distribution. 1509e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * 1609e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * - Neither the name of the Motorola, Inc. nor the names of its contributors 1709e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * may be used to endorse or promote products derived from this software 1809e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * without specific prior written permission. 1909e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * 2009e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 2109e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 2209e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 2309e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 2409e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 2509e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 2609e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 2709e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 2809e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 2909e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 3009e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * POSSIBILITY OF SUCH DAMAGE. 3109e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly */ 3209e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 3309e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pellypackage com.android.bluetooth.opp; 3409e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 356769b59d715ea98bd72eafcfea9acd2714a887daTao Liejunimport com.android.bluetooth.R; 366769b59d715ea98bd72eafcfea9acd2714a887daTao Liejun 37b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yueimport android.content.BroadcastReceiver; 3809e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pellyimport android.content.ContentValues; 39b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yueimport android.content.Context; 4009e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pellyimport android.content.DialogInterface; 4109e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pellyimport android.content.Intent; 42b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yueimport android.content.IntentFilter; 4309e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pellyimport android.net.Uri; 4409e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pellyimport android.os.Bundle; 45b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yueimport android.os.Handler; 46b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yueimport android.os.Message; 4709e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pellyimport android.util.Log; 48b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yueimport android.view.KeyEvent; 4909e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pellyimport android.view.View; 5009e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pellyimport android.widget.TextView; 5109e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pellyimport android.widget.Toast; 5209e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pellyimport android.text.format.Formatter; 5309e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 5409e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pellyimport com.android.internal.app.AlertActivity; 5509e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pellyimport com.android.internal.app.AlertController; 5609e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 5709e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly/** 5809e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly * This class is designed to ask user to confirm if accept incoming file; 5909e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly */ 6009e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pellypublic class BluetoothOppIncomingFileConfirmActivity extends AlertActivity implements 6109e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly DialogInterface.OnClickListener { 6209e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly private static final String TAG = "BluetoothIncomingFileConfirmActivity"; 63ce4d93666275df294cb073fe41de5b85932570a8Nick Pelly private static final boolean D = Constants.DEBUG; 64ce4d93666275df294cb073fe41de5b85932570a8Nick Pelly private static final boolean V = Constants.VERBOSE; 6509e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 66b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue private static final int DISMISS_TIMEOUT_DIALOG = 0; 67b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue 68b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue private static final int DISMISS_TIMEOUT_DIALOG_VALUE = 2000; 69b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue 70b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue private static final String PREFERENCE_USER_TIMEOUT = "user_timeout"; 71b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue 7209e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly private BluetoothOppTransferInfo mTransInfo; 7309e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 7409e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly private Uri mUri; 7509e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 7609e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly private ContentValues mUpdateValues; 7709e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 78b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue private TextView mContentView; 79b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue 80b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue private boolean mTimeout = false; 81b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue 82b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue private BroadcastReceiver mReceiver = new BroadcastReceiver() { 83b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue @Override 84b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue public void onReceive(Context context, Intent intent) { 85b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue if (!BluetoothShare.USER_CONFIRMATION_TIMEOUT_ACTION.equals(intent.getAction())) { 86b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue return; 87b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue } 88b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue onTimeout(); 89b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue } 90b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue }; 9109e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 9209e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly @Override 9309e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly protected void onCreate(Bundle savedInstanceState) { 9409e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly super.onCreate(savedInstanceState); 9509e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 9609e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly Intent intent = getIntent(); 9709e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly mUri = intent.getData(); 9809e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly mTransInfo = new BluetoothOppTransferInfo(); 9909e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly mTransInfo = BluetoothOppUtility.queryRecord(this, mUri); 10009e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly if (mTransInfo == null) { 101ce4d93666275df294cb073fe41de5b85932570a8Nick Pelly if (V) Log.e(TAG, "Error: Can not get data from db"); 10209e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly finish(); 10309e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly return; 10409e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly } 10509e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 10609e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly // Set up the "dialog" 10709e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly final AlertController.AlertParams p = mAlertParams; 108464d9d216ab1a6cf192e3e526596073c7e35e4a7L.X.YUE p.mIconId = android.R.drawable.ic_dialog_info; 10909e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly p.mTitle = getString(R.string.incoming_file_confirm_title); 11009e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly p.mView = createView(); 11109e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly p.mPositiveButtonText = getString(R.string.incoming_file_confirm_ok); 11209e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly p.mPositiveButtonListener = this; 11309e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly p.mNegativeButtonText = getString(R.string.incoming_file_confirm_cancel); 11409e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly p.mNegativeButtonListener = this; 11509e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly setupAlert(); 116b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue if (V) Log.v(TAG, "mTimeout: " + mTimeout); 117b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue if (mTimeout) { 118b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue onTimeout(); 119b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue } 12009e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 121ce4d93666275df294cb073fe41de5b85932570a8Nick Pelly if (V) Log.v(TAG, "BluetoothIncomingFileConfirmActivity: Got uri:" + mUri); 122b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue 123b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue registerReceiver(mReceiver, new IntentFilter( 124b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue BluetoothShare.USER_CONFIRMATION_TIMEOUT_ACTION)); 12509e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly } 12609e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 12709e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly private View createView() { 12809e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly View view = getLayoutInflater().inflate(R.layout.confirm_dialog, null); 12909e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 130b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue mContentView = (TextView)view.findViewById(R.id.content); 13109e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 132239bc526513429995c61c4148c105725c395b1a9Jackson Fan String text = getString(R.string.incoming_file_confirm_content, mTransInfo.mDeviceName, 133239bc526513429995c61c4148c105725c395b1a9Jackson Fan mTransInfo.mFileName, Formatter.formatFileSize(this, mTransInfo.mTotalBytes)); 13409e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 135b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue mContentView.setText(text); 13609e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 13709e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly return view; 13809e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly } 13909e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 14009e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly public void onClick(DialogInterface dialog, int which) { 14109e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly switch (which) { 14209e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly case DialogInterface.BUTTON_POSITIVE: 143b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue if (!mTimeout) { 144b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue // Update database 145b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue mUpdateValues = new ContentValues(); 146b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue mUpdateValues.put(BluetoothShare.USER_CONFIRMATION, 147b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue BluetoothShare.USER_CONFIRMATION_CONFIRMED); 148b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue this.getContentResolver().update(mUri, mUpdateValues, null, null); 149b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue 150b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue Toast.makeText(this, getString(R.string.bt_toast_1), Toast.LENGTH_SHORT).show(); 151b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue } 15209e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly break; 15309e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 15409e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly case DialogInterface.BUTTON_NEGATIVE: 15509e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly // Update database 15609e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly mUpdateValues = new ContentValues(); 15709e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly mUpdateValues.put(BluetoothShare.USER_CONFIRMATION, 15809e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly BluetoothShare.USER_CONFIRMATION_DENIED); 15909e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly this.getContentResolver().update(mUri, mUpdateValues, null, null); 16009e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly break; 16109e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly } 162b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue } 163b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue 164b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue @Override 165b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue public boolean onKeyDown(int keyCode, KeyEvent event) { 166b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue if (keyCode == KeyEvent.KEYCODE_BACK) { 167b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue if (D) Log.d(TAG, "onKeyDown() called; Key: back key"); 168b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue mUpdateValues = new ContentValues(); 169b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue mUpdateValues.put(BluetoothShare.VISIBILITY, BluetoothShare.VISIBILITY_HIDDEN); 170b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue this.getContentResolver().update(mUri, mUpdateValues, null, null); 171b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue 172b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue Toast.makeText(this, getString(R.string.bt_toast_2), Toast.LENGTH_SHORT).show(); 173b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue finish(); 174453050fdaf7dcd488f399d3549ce257e7b9e7e79Wojciech Jowsa return true; 175b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue } 176453050fdaf7dcd488f399d3549ce257e7b9e7e79Wojciech Jowsa return false; 17709e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly } 17809e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 17909e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly @Override 18009e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly protected void onDestroy() { 18109e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly super.onDestroy(); 182b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue unregisterReceiver(mReceiver); 183b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue } 184b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue 185b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue @Override 186b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue protected void onRestoreInstanceState(Bundle savedInstanceState) { 187b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue super.onRestoreInstanceState(savedInstanceState); 188b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue mTimeout = savedInstanceState.getBoolean(PREFERENCE_USER_TIMEOUT); 189b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue if (V) Log.v(TAG, "onRestoreInstanceState() mTimeout: " + mTimeout); 190b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue if (mTimeout) { 191b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue onTimeout(); 19209e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly } 19309e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly } 194b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue 195b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue @Override 196b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue protected void onSaveInstanceState(Bundle outState) { 197b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue super.onSaveInstanceState(outState); 198b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue if (V) Log.v(TAG, "onSaveInstanceState() mTimeout: " + mTimeout); 199b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue outState.putBoolean(PREFERENCE_USER_TIMEOUT, mTimeout); 200b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue } 201b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue 202b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue private void onTimeout() { 203b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue mTimeout = true; 204b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue mContentView.setText(getString(R.string.incoming_file_confirm_timeout_content, 205b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue mTransInfo.mDeviceName)); 206b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue mAlert.getButton(DialogInterface.BUTTON_NEGATIVE).setVisibility(View.GONE); 207b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue mAlert.getButton(DialogInterface.BUTTON_POSITIVE).setText( 208b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue getString(R.string.incoming_file_confirm_timeout_ok)); 209b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue 210b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue mTimeoutHandler.sendMessageDelayed(mTimeoutHandler.obtainMessage(DISMISS_TIMEOUT_DIALOG), 211b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue DISMISS_TIMEOUT_DIALOG_VALUE); 212b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue } 213b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue 214b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue private final Handler mTimeoutHandler = new Handler() { 215b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue @Override 216b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue public void handleMessage(Message msg) { 217b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue switch (msg.what) { 218b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue case DISMISS_TIMEOUT_DIALOG: 219b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue if (V) Log.v(TAG, "Received DISMISS_TIMEOUT_DIALOG msg."); 220b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue finish(); 221b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue break; 222b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue default: 223b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue break; 224b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue } 225b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue } 226b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue }; 22709e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly} 228