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) { 94addfd25b639047e8463772b14f249758bdb20fbcPauloftheWest setTheme(R.style.Theme_Material_Settings_Floating); 9574ae04c73312403e89db0f8e9bd9601d403b4783fredc if (V) Log.d(TAG, "onCreate(): action = " + getIntent().getAction()); 9609e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly super.onCreate(savedInstanceState); 9709e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 9809e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly Intent intent = getIntent(); 9909e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly mUri = intent.getData(); 10009e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly mTransInfo = new BluetoothOppTransferInfo(); 10109e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly mTransInfo = BluetoothOppUtility.queryRecord(this, mUri); 10209e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly if (mTransInfo == null) { 103ce4d93666275df294cb073fe41de5b85932570a8Nick Pelly if (V) Log.e(TAG, "Error: Can not get data from db"); 10409e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly finish(); 10509e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly return; 10609e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly } 10709e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 10809e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly // Set up the "dialog" 10909e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly final AlertController.AlertParams p = mAlertParams; 110addfd25b639047e8463772b14f249758bdb20fbcPauloftheWest p.mTitle = getString(R.string.incoming_file_confirm_content); 11109e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly p.mView = createView(); 11209e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly p.mPositiveButtonText = getString(R.string.incoming_file_confirm_ok); 11309e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly p.mPositiveButtonListener = this; 11409e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly p.mNegativeButtonText = getString(R.string.incoming_file_confirm_cancel); 11509e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly p.mNegativeButtonListener = this; 11609e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly setupAlert(); 117b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue if (V) Log.v(TAG, "mTimeout: " + mTimeout); 118b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue if (mTimeout) { 119b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue onTimeout(); 120b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue } 12109e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 122ce4d93666275df294cb073fe41de5b85932570a8Nick Pelly if (V) Log.v(TAG, "BluetoothIncomingFileConfirmActivity: Got uri:" + mUri); 123b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue 124b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue registerReceiver(mReceiver, new IntentFilter( 125b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue BluetoothShare.USER_CONFIRMATION_TIMEOUT_ACTION)); 12609e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly } 12709e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 12809e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly private View createView() { 129addfd25b639047e8463772b14f249758bdb20fbcPauloftheWest View view = getLayoutInflater().inflate(R.layout.incoming_dialog, null); 13009e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 131addfd25b639047e8463772b14f249758bdb20fbcPauloftheWest ((TextView)view.findViewById(R.id.from_content)).setText(mTransInfo.mDeviceName); 132addfd25b639047e8463772b14f249758bdb20fbcPauloftheWest ((TextView)view.findViewById(R.id.filename_content)).setText(mTransInfo.mFileName); 133addfd25b639047e8463772b14f249758bdb20fbcPauloftheWest ((TextView)view.findViewById(R.id.size_content)).setText( 134addfd25b639047e8463772b14f249758bdb20fbcPauloftheWest Formatter.formatFileSize(this, mTransInfo.mTotalBytes)); 13509e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 13609e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly return view; 13709e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly } 13809e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 13909e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly public void onClick(DialogInterface dialog, int which) { 14009e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly switch (which) { 14109e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly case DialogInterface.BUTTON_POSITIVE: 142b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue if (!mTimeout) { 143b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue // Update database 144b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue mUpdateValues = new ContentValues(); 145b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue mUpdateValues.put(BluetoothShare.USER_CONFIRMATION, 146b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue BluetoothShare.USER_CONFIRMATION_CONFIRMED); 147b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue this.getContentResolver().update(mUri, mUpdateValues, null, null); 148b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue 149b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue Toast.makeText(this, getString(R.string.bt_toast_1), Toast.LENGTH_SHORT).show(); 150b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue } 15109e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly break; 15209e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 15309e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly case DialogInterface.BUTTON_NEGATIVE: 15409e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly // Update database 15509e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly mUpdateValues = new ContentValues(); 15609e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly mUpdateValues.put(BluetoothShare.USER_CONFIRMATION, 15709e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly BluetoothShare.USER_CONFIRMATION_DENIED); 15809e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly this.getContentResolver().update(mUri, mUpdateValues, null, null); 15909e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly break; 16009e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly } 161b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue } 162b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue 163b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue @Override 164b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue public boolean onKeyDown(int keyCode, KeyEvent event) { 165b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue if (keyCode == KeyEvent.KEYCODE_BACK) { 166b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue if (D) Log.d(TAG, "onKeyDown() called; Key: back key"); 167b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue mUpdateValues = new ContentValues(); 168b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue mUpdateValues.put(BluetoothShare.VISIBILITY, BluetoothShare.VISIBILITY_HIDDEN); 169b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue this.getContentResolver().update(mUri, mUpdateValues, null, null); 170b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue 171b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue Toast.makeText(this, getString(R.string.bt_toast_2), Toast.LENGTH_SHORT).show(); 172b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue finish(); 173453050fdaf7dcd488f399d3549ce257e7b9e7e79Wojciech Jowsa return true; 174b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue } 175453050fdaf7dcd488f399d3549ce257e7b9e7e79Wojciech Jowsa return false; 17609e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly } 17709e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 17809e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly @Override 17909e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly protected void onDestroy() { 18009e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly super.onDestroy(); 181b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue unregisterReceiver(mReceiver); 182b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue } 183b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue 184b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue @Override 185b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue protected void onRestoreInstanceState(Bundle savedInstanceState) { 186b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue super.onRestoreInstanceState(savedInstanceState); 187b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue mTimeout = savedInstanceState.getBoolean(PREFERENCE_USER_TIMEOUT); 188b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue if (V) Log.v(TAG, "onRestoreInstanceState() mTimeout: " + mTimeout); 189b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue if (mTimeout) { 190b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue onTimeout(); 19109e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly } 19209e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly } 193b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue 194b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue @Override 195b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue protected void onSaveInstanceState(Bundle outState) { 196b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue super.onSaveInstanceState(outState); 197b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue if (V) Log.v(TAG, "onSaveInstanceState() mTimeout: " + mTimeout); 198b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue outState.putBoolean(PREFERENCE_USER_TIMEOUT, mTimeout); 199b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue } 200b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue 201b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue private void onTimeout() { 202b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue mTimeout = true; 203b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue mContentView.setText(getString(R.string.incoming_file_confirm_timeout_content, 204b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue mTransInfo.mDeviceName)); 205b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue mAlert.getButton(DialogInterface.BUTTON_NEGATIVE).setVisibility(View.GONE); 206b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue mAlert.getButton(DialogInterface.BUTTON_POSITIVE).setText( 207b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue getString(R.string.incoming_file_confirm_timeout_ok)); 208b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue 209b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue mTimeoutHandler.sendMessageDelayed(mTimeoutHandler.obtainMessage(DISMISS_TIMEOUT_DIALOG), 210b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue DISMISS_TIMEOUT_DIALOG_VALUE); 211b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue } 212b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue 213b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue private final Handler mTimeoutHandler = new Handler() { 214b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue @Override 215b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue public void handleMessage(Message msg) { 216b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue switch (msg.what) { 217b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue case DISMISS_TIMEOUT_DIALOG: 218b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue if (V) Log.v(TAG, "Received DISMISS_TIMEOUT_DIALOG msg."); 219b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue finish(); 220b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue break; 221b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue default: 222b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue break; 223b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue } 224b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue } 225b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue }; 22609e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly} 227