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 boolean mTimeout = false; 79b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue 80b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue private BroadcastReceiver mReceiver = new BroadcastReceiver() { 81b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue @Override 82b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue public void onReceive(Context context, Intent intent) { 83b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue if (!BluetoothShare.USER_CONFIRMATION_TIMEOUT_ACTION.equals(intent.getAction())) { 84b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue return; 85b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue } 86b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue onTimeout(); 87b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue } 88b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue }; 8909e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 9009e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly @Override 9109e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly protected void onCreate(Bundle savedInstanceState) { 92addfd25b639047e8463772b14f249758bdb20fbcPauloftheWest setTheme(R.style.Theme_Material_Settings_Floating); 9374ae04c73312403e89db0f8e9bd9601d403b4783fredc if (V) Log.d(TAG, "onCreate(): action = " + getIntent().getAction()); 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; 108addfd25b639047e8463772b14f249758bdb20fbcPauloftheWest p.mTitle = getString(R.string.incoming_file_confirm_content); 10909e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly p.mView = createView(); 11009e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly p.mPositiveButtonText = getString(R.string.incoming_file_confirm_ok); 11109e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly p.mPositiveButtonListener = this; 11209e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly p.mNegativeButtonText = getString(R.string.incoming_file_confirm_cancel); 11309e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly p.mNegativeButtonListener = this; 11409e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly setupAlert(); 115b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue if (V) Log.v(TAG, "mTimeout: " + mTimeout); 116b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue if (mTimeout) { 117b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue onTimeout(); 118b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue } 11909e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 120ce4d93666275df294cb073fe41de5b85932570a8Nick Pelly if (V) Log.v(TAG, "BluetoothIncomingFileConfirmActivity: Got uri:" + mUri); 121b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue 122b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue registerReceiver(mReceiver, new IntentFilter( 123b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue BluetoothShare.USER_CONFIRMATION_TIMEOUT_ACTION)); 12409e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly } 12509e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 12609e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly private View createView() { 127addfd25b639047e8463772b14f249758bdb20fbcPauloftheWest View view = getLayoutInflater().inflate(R.layout.incoming_dialog, null); 12809e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 129addfd25b639047e8463772b14f249758bdb20fbcPauloftheWest ((TextView)view.findViewById(R.id.from_content)).setText(mTransInfo.mDeviceName); 130addfd25b639047e8463772b14f249758bdb20fbcPauloftheWest ((TextView)view.findViewById(R.id.filename_content)).setText(mTransInfo.mFileName); 131addfd25b639047e8463772b14f249758bdb20fbcPauloftheWest ((TextView)view.findViewById(R.id.size_content)).setText( 132addfd25b639047e8463772b14f249758bdb20fbcPauloftheWest Formatter.formatFileSize(this, mTransInfo.mTotalBytes)); 13309e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 13409e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly return view; 13509e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly } 13609e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 13709e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly public void onClick(DialogInterface dialog, int which) { 13809e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly switch (which) { 13909e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly case DialogInterface.BUTTON_POSITIVE: 140b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue if (!mTimeout) { 141b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue // Update database 142b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue mUpdateValues = new ContentValues(); 143b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue mUpdateValues.put(BluetoothShare.USER_CONFIRMATION, 144b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue BluetoothShare.USER_CONFIRMATION_CONFIRMED); 145b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue this.getContentResolver().update(mUri, mUpdateValues, null, null); 146b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue 147b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue Toast.makeText(this, getString(R.string.bt_toast_1), Toast.LENGTH_SHORT).show(); 148b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue } 14909e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly break; 15009e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 15109e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly case DialogInterface.BUTTON_NEGATIVE: 15209e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly // Update database 15309e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly mUpdateValues = new ContentValues(); 15409e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly mUpdateValues.put(BluetoothShare.USER_CONFIRMATION, 15509e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly BluetoothShare.USER_CONFIRMATION_DENIED); 15609e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly this.getContentResolver().update(mUri, mUpdateValues, null, null); 15709e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly break; 15809e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly } 159b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue } 160b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue 161b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue @Override 162b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue public boolean onKeyDown(int keyCode, KeyEvent event) { 163b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue if (keyCode == KeyEvent.KEYCODE_BACK) { 164b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue if (D) Log.d(TAG, "onKeyDown() called; Key: back key"); 165b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue mUpdateValues = new ContentValues(); 166b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue mUpdateValues.put(BluetoothShare.VISIBILITY, BluetoothShare.VISIBILITY_HIDDEN); 167b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue this.getContentResolver().update(mUri, mUpdateValues, null, null); 168b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue 169b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue Toast.makeText(this, getString(R.string.bt_toast_2), Toast.LENGTH_SHORT).show(); 170b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue finish(); 171453050fdaf7dcd488f399d3549ce257e7b9e7e79Wojciech Jowsa return true; 172b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue } 173453050fdaf7dcd488f399d3549ce257e7b9e7e79Wojciech Jowsa return false; 17409e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly } 17509e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly 17609e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly @Override 17709e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly protected void onDestroy() { 17809e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly super.onDestroy(); 179b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue unregisterReceiver(mReceiver); 180b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue } 181b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue 182b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue @Override 183b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue protected void onRestoreInstanceState(Bundle savedInstanceState) { 184b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue super.onRestoreInstanceState(savedInstanceState); 185b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue mTimeout = savedInstanceState.getBoolean(PREFERENCE_USER_TIMEOUT); 186b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue if (V) Log.v(TAG, "onRestoreInstanceState() mTimeout: " + mTimeout); 187b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue if (mTimeout) { 188b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue onTimeout(); 18909e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly } 19009e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly } 191b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue 192b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue @Override 193b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue protected void onSaveInstanceState(Bundle outState) { 194b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue super.onSaveInstanceState(outState); 195b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue if (V) Log.v(TAG, "onSaveInstanceState() mTimeout: " + mTimeout); 196b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue outState.putBoolean(PREFERENCE_USER_TIMEOUT, mTimeout); 197b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue } 198b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue 199b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue private void onTimeout() { 200b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue mTimeout = true; 2019c031dab027f0e0e5400437fa4ce8be9491a34e7Michal Labedzki mAlert.setTitle(getString(R.string.incoming_file_confirm_timeout_content, 202b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue mTransInfo.mDeviceName)); 203b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue mAlert.getButton(DialogInterface.BUTTON_NEGATIVE).setVisibility(View.GONE); 204b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue mAlert.getButton(DialogInterface.BUTTON_POSITIVE).setText( 205b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue getString(R.string.incoming_file_confirm_timeout_ok)); 206b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue 207b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue mTimeoutHandler.sendMessageDelayed(mTimeoutHandler.obtainMessage(DISMISS_TIMEOUT_DIALOG), 208b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue DISMISS_TIMEOUT_DIALOG_VALUE); 209b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue } 210b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue 211b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue private final Handler mTimeoutHandler = new Handler() { 212b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue @Override 213b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue public void handleMessage(Message msg) { 214b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue switch (msg.what) { 215b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue case DISMISS_TIMEOUT_DIALOG: 216b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue if (V) Log.v(TAG, "Received DISMISS_TIMEOUT_DIALOG msg."); 217b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue finish(); 218b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue break; 219b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue default: 220b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue break; 221b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue } 222b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue } 223b0fa09caef6a0748a568dc2a89f5d94b85423bb2Lixin Yue }; 22409e9cba205af60b3f42e7a4d891a7d1392e1f2a5Nick Pelly} 225