172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project/* 272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * Copyright (C) 2008 Esmertec AG. 372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * 572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * you may not use this file except in compliance with the License. 772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * You may obtain a copy of the License at 872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * 972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 1072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * 1172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 1272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 1372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * See the License for the specific language governing permissions and 1572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * limitations under the License. 1672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project */ 1772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 1872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectpackage com.android.mms.ui; 1972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 206d0646916bac17a1ee627a0aa15d3345ff9b5479Tom Taylorimport android.app.ActionBar; 2172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.app.Activity; 2272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.app.AlertDialog; 2372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.content.AsyncQueryHandler; 246cc9ffec5ce3fb72b5049a2e1dfd1ed0b802a2c4Arun Ravindranimport android.content.BroadcastReceiver; 2572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.content.ContentResolver; 266cc9ffec5ce3fb72b5049a2e1dfd1ed0b802a2c4Arun Ravindranimport android.content.Context; 2772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.content.DialogInterface; 2872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.content.DialogInterface.OnClickListener; 29d64419030e1fec1e751695dab3bd7236e2fb0214Roger Chenimport android.content.Intent; 306cc9ffec5ce3fb72b5049a2e1dfd1ed0b802a2c4Arun Ravindranimport android.content.IntentFilter; 3172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.database.ContentObserver; 3272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.database.Cursor; 3372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.database.sqlite.SQLiteException; 34d64419030e1fec1e751695dab3bd7236e2fb0214Roger Chenimport android.database.sqlite.SqliteWrapper; 3572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.net.Uri; 3672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.os.Bundle; 3772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.os.Handler; 38f7e8281a223af6228e6399055a6197a1edd9bc3aTom Taylorimport android.provider.Telephony.Sms; 3937321876549776417f035118f157d9531f73de6bWink Savilleimport android.telephony.SmsManager; 4072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.util.Log; 4172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.view.ContextMenu; 4272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.view.Menu; 4372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.view.MenuItem; 4472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.view.View; 4572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.view.Window; 4672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.widget.AdapterView; 4772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.widget.ListView; 4872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.widget.TextView; 4972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 506cc9ffec5ce3fb72b5049a2e1dfd1ed0b802a2c4Arun Ravindranimport com.android.internal.telephony.IccCardConstants; 516cc9ffec5ce3fb72b5049a2e1dfd1ed0b802a2c4Arun Ravindranimport com.android.internal.telephony.TelephonyIntents; 52ab845dee6565a8dfc384186bc8f2e801a2b087e1Ye Wenimport com.android.mms.LogTag; 53d64419030e1fec1e751695dab3bd7236e2fb0214Roger Chenimport com.android.mms.R; 54d64419030e1fec1e751695dab3bd7236e2fb0214Roger Chenimport com.android.mms.transaction.MessagingNotification; 55d64419030e1fec1e751695dab3bd7236e2fb0214Roger Chen 5672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project/** 5737321876549776417f035118f157d9531f73de6bWink Saville * Displays a list of the SMS messages stored on the ICC. 5872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project */ 5972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectpublic class ManageSimMessages extends Activity 6072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project implements View.OnCreateContextMenuListener { 6137321876549776417f035118f157d9531f73de6bWink Saville private static final Uri ICC_URI = Uri.parse("content://sms/icc"); 62ab845dee6565a8dfc384186bc8f2e801a2b087e1Ye Wen private static final String TAG = LogTag.TAG; 6372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private static final int MENU_COPY_TO_PHONE_MEMORY = 0; 6472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private static final int MENU_DELETE_FROM_SIM = 1; 6572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private static final int MENU_VIEW = 2; 6672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private static final int OPTION_MENU_DELETE_ALL = 0; 6772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 6872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private static final int SHOW_LIST = 0; 6972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private static final int SHOW_EMPTY = 1; 7072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private static final int SHOW_BUSY = 2; 7172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private int mState; 7272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 7372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 7472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private ContentResolver mContentResolver; 7572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private Cursor mCursor = null; 7672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private ListView mSimList; 7772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private TextView mMessage; 7872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private MessageListAdapter mListAdapter = null; 7972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private AsyncQueryHandler mQueryHandler = null; 8072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 8172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public static final int SIM_FULL_NOTIFICATION_ID = 234; 8272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 836cc9ffec5ce3fb72b5049a2e1dfd1ed0b802a2c4Arun Ravindran protected BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() { 846cc9ffec5ce3fb72b5049a2e1dfd1ed0b802a2c4Arun Ravindran public void onReceive(Context context, Intent intent) { 856cc9ffec5ce3fb72b5049a2e1dfd1ed0b802a2c4Arun Ravindran if (TelephonyIntents.ACTION_SIM_STATE_CHANGED.equals(intent.getAction())) { 866cc9ffec5ce3fb72b5049a2e1dfd1ed0b802a2c4Arun Ravindran String stateExtra = intent.getStringExtra(IccCardConstants.INTENT_KEY_ICC_STATE); 876cc9ffec5ce3fb72b5049a2e1dfd1ed0b802a2c4Arun Ravindran if (stateExtra != null 886cc9ffec5ce3fb72b5049a2e1dfd1ed0b802a2c4Arun Ravindran && ((IccCardConstants.INTENT_VALUE_ICC_ABSENT.equals(stateExtra) 896cc9ffec5ce3fb72b5049a2e1dfd1ed0b802a2c4Arun Ravindran || IccCardConstants.INTENT_VALUE_ICC_UNKNOWN.equals(stateExtra)))) { 906cc9ffec5ce3fb72b5049a2e1dfd1ed0b802a2c4Arun Ravindran updateState(SHOW_EMPTY); 916cc9ffec5ce3fb72b5049a2e1dfd1ed0b802a2c4Arun Ravindran } 926cc9ffec5ce3fb72b5049a2e1dfd1ed0b802a2c4Arun Ravindran } 936cc9ffec5ce3fb72b5049a2e1dfd1ed0b802a2c4Arun Ravindran } 946cc9ffec5ce3fb72b5049a2e1dfd1ed0b802a2c4Arun Ravindran }; 956cc9ffec5ce3fb72b5049a2e1dfd1ed0b802a2c4Arun Ravindran 9672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private final ContentObserver simChangeObserver = 9772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project new ContentObserver(new Handler()) { 9872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project @Override 9972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public void onChange(boolean selfUpdate) { 10072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project refreshMessageList(); 10172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 10272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project }; 10372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 10472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project @Override 10572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project protected void onCreate(Bundle icicle) { 10672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project super.onCreate(icicle); 10772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); 10872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 10972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mContentResolver = getContentResolver(); 11072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mQueryHandler = new QueryHandler(mContentResolver, this); 11172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project setContentView(R.layout.sim_list); 11272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mSimList = (ListView) findViewById(R.id.messages); 11372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mMessage = (TextView) findViewById(R.id.empty_message); 11472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 1156d0646916bac17a1ee627a0aa15d3345ff9b5479Tom Taylor ActionBar actionBar = getActionBar(); 1166d0646916bac17a1ee627a0aa15d3345ff9b5479Tom Taylor actionBar.setDisplayHomeAsUpEnabled(true); 1176d0646916bac17a1ee627a0aa15d3345ff9b5479Tom Taylor 11872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project init(); 11972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 12072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 12172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project @Override 12272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project protected void onNewIntent(Intent intent) { 12372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project setIntent(intent); 12472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 12572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project init(); 12672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 12772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 12872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private void init() { 12972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project MessagingNotification.cancelNotification(getApplicationContext(), 13072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project SIM_FULL_NOTIFICATION_ID); 13172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 13272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project updateState(SHOW_BUSY); 13372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project startQuery(); 13472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 13572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 13672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private class QueryHandler extends AsyncQueryHandler { 13772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private final ManageSimMessages mParent; 13872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 13972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public QueryHandler( 14072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project ContentResolver contentResolver, ManageSimMessages parent) { 14172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project super(contentResolver); 14272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mParent = parent; 14372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 14472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 14572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project @Override 14672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project protected void onQueryComplete( 14772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project int token, Object cookie, Cursor cursor) { 14872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mCursor = cursor; 14972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (mCursor != null) { 15072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (!mCursor.moveToFirst()) { 15172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // Let user know the SIM is empty 15272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project updateState(SHOW_EMPTY); 15372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } else if (mListAdapter == null) { 154f1ab045ff991e1ec3e4161d213627b8629971c0eTom Taylor // Note that the MessageListAdapter doesn't support auto-requeries. If we 155f1ab045ff991e1ec3e4161d213627b8629971c0eTom Taylor // want to respond to changes we'd need to add a line like: 156f1ab045ff991e1ec3e4161d213627b8629971c0eTom Taylor // mListAdapter.setOnDataSetChangedListener(mDataSetChangedListener); 157f1ab045ff991e1ec3e4161d213627b8629971c0eTom Taylor // See ComposeMessageActivity for an example. 15872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mListAdapter = new MessageListAdapter( 159f1ab045ff991e1ec3e4161d213627b8629971c0eTom Taylor mParent, mCursor, mSimList, false, null); 16072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mSimList.setAdapter(mListAdapter); 16172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mSimList.setOnCreateContextMenuListener(mParent); 16272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project updateState(SHOW_LIST); 16372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } else { 16472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mListAdapter.changeCursor(mCursor); 16572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project updateState(SHOW_LIST); 16672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 16772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project startManagingCursor(mCursor); 168408675a7ccd78345d68bd7d1d3b56b7d40b96d11Tom Taylor } else { 169408675a7ccd78345d68bd7d1d3b56b7d40b96d11Tom Taylor // Let user know the SIM is empty 170408675a7ccd78345d68bd7d1d3b56b7d40b96d11Tom Taylor updateState(SHOW_EMPTY); 17172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 1724e268daeda88400462b6cf56a30bf7547442e158Suresh Koleti // Show option menu when query complete. 1734e268daeda88400462b6cf56a30bf7547442e158Suresh Koleti invalidateOptionsMenu(); 17472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 17572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 17672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 17772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private void startQuery() { 17872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project try { 17937321876549776417f035118f157d9531f73de6bWink Saville mQueryHandler.startQuery(0, null, ICC_URI, null, null, null, null); 18072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } catch (SQLiteException e) { 18172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project SqliteWrapper.checkSQLiteException(this, e); 18272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 18372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 18472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 18572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private void refreshMessageList() { 18672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project updateState(SHOW_BUSY); 18772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (mCursor != null) { 18872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project stopManagingCursor(mCursor); 18972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mCursor.close(); 19072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 19172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project startQuery(); 19272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 19372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 19472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project @Override 19572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public void onCreateContextMenu( 19672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project ContextMenu menu, View v, 19772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project ContextMenu.ContextMenuInfo menuInfo) { 19872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project menu.add(0, MENU_COPY_TO_PHONE_MEMORY, 0, 19972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project R.string.sim_copy_to_phone_memory); 20072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project menu.add(0, MENU_DELETE_FROM_SIM, 0, R.string.sim_delete); 20172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 20272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // TODO: Enable this once viewMessage is written. 20372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // menu.add(0, MENU_VIEW, 0, R.string.sim_view); 20472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 20572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 20672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project @Override 20772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public boolean onContextItemSelected(MenuItem item) { 20872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project AdapterView.AdapterContextMenuInfo info; 20972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project try { 21072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo(); 21172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } catch (ClassCastException exception) { 21272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project Log.e(TAG, "Bad menuInfo.", exception); 21372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return false; 21472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 21572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 2162f56791329cefc49ce79663b8d3aff50594cc1f3The Android Open Source Project final Cursor cursor = (Cursor) mListAdapter.getItem(info.position); 21772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 21872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project switch (item.getItemId()) { 21972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project case MENU_COPY_TO_PHONE_MEMORY: 22072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project copyToPhoneMemory(cursor); 22172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return true; 22272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project case MENU_DELETE_FROM_SIM: 2232f56791329cefc49ce79663b8d3aff50594cc1f3The Android Open Source Project confirmDeleteDialog(new OnClickListener() { 2242f56791329cefc49ce79663b8d3aff50594cc1f3The Android Open Source Project public void onClick(DialogInterface dialog, int which) { 2252f56791329cefc49ce79663b8d3aff50594cc1f3The Android Open Source Project updateState(SHOW_BUSY); 2262f56791329cefc49ce79663b8d3aff50594cc1f3The Android Open Source Project deleteFromSim(cursor); 227c4a34a0ccd414e2bba937e8abd105a0383afff35Tom Taylor dialog.dismiss(); 2282f56791329cefc49ce79663b8d3aff50594cc1f3The Android Open Source Project } 2292f56791329cefc49ce79663b8d3aff50594cc1f3The Android Open Source Project }, R.string.confirm_delete_SIM_message); 23072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return true; 23172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project case MENU_VIEW: 23272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project viewMessage(cursor); 23372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return true; 23472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 23572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return super.onContextItemSelected(item); 23672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 23772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 23872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project @Override 23972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public void onResume() { 24072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project super.onResume(); 24172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project registerSimChangeObserver(); 24272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 24372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 24472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project @Override 24572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public void onPause() { 24672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project super.onPause(); 2476cc9ffec5ce3fb72b5049a2e1dfd1ed0b802a2c4Arun Ravindran unregisterReceiver(mBroadcastReceiver); 24872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mContentResolver.unregisterContentObserver(simChangeObserver); 24972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 25072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 25172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private void registerSimChangeObserver() { 25272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mContentResolver.registerContentObserver( 25337321876549776417f035118f157d9531f73de6bWink Saville ICC_URI, true, simChangeObserver); 2546cc9ffec5ce3fb72b5049a2e1dfd1ed0b802a2c4Arun Ravindran final IntentFilter intentFilter = 2556cc9ffec5ce3fb72b5049a2e1dfd1ed0b802a2c4Arun Ravindran new IntentFilter(TelephonyIntents.ACTION_SIM_STATE_CHANGED); 2566cc9ffec5ce3fb72b5049a2e1dfd1ed0b802a2c4Arun Ravindran registerReceiver(mBroadcastReceiver, intentFilter); 25772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 25872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 25972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private void copyToPhoneMemory(Cursor cursor) { 26072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project String address = cursor.getString( 26172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project cursor.getColumnIndexOrThrow("address")); 26272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project String body = cursor.getString(cursor.getColumnIndexOrThrow("body")); 26372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project Long date = cursor.getLong(cursor.getColumnIndexOrThrow("date")); 26472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 26572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project try { 26672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (isIncomingMessage(cursor)) { 267627007213deb59ef938c80353c8f3598b01478b3Wei Huang Sms.Inbox.addMessage(mContentResolver, address, body, null, date, true /* read */); 26872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } else { 26972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project Sms.Sent.addMessage(mContentResolver, address, body, null, date); 27072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 27172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } catch (SQLiteException e) { 27272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project SqliteWrapper.checkSQLiteException(this, e); 27372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 27472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 27572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 27672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private boolean isIncomingMessage(Cursor cursor) { 27772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project int messageStatus = cursor.getInt( 27872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project cursor.getColumnIndexOrThrow("status")); 27972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 28037321876549776417f035118f157d9531f73de6bWink Saville return (messageStatus == SmsManager.STATUS_ON_ICC_READ) || 28137321876549776417f035118f157d9531f73de6bWink Saville (messageStatus == SmsManager.STATUS_ON_ICC_UNREAD); 28272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 28372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 28472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private void deleteFromSim(Cursor cursor) { 28572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project String messageIndexString = 28637321876549776417f035118f157d9531f73de6bWink Saville cursor.getString(cursor.getColumnIndexOrThrow("index_on_icc")); 28737321876549776417f035118f157d9531f73de6bWink Saville Uri simUri = ICC_URI.buildUpon().appendPath(messageIndexString).build(); 28872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 28972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project SqliteWrapper.delete(this, mContentResolver, simUri, null, null); 29072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 29172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 29272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private void deleteAllFromSim() { 29372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project Cursor cursor = (Cursor) mListAdapter.getCursor(); 29472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 29572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (cursor != null) { 29672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (cursor.moveToFirst()) { 29772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project int count = cursor.getCount(); 29872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 29972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project for (int i = 0; i < count; ++i) { 30072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project deleteFromSim(cursor); 30172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project cursor.moveToNext(); 30272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 30372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 30472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 30572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 30672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 30772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project @Override 30872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public boolean onPrepareOptionsMenu(Menu menu) { 30972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project menu.clear(); 31072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 31169d8b665c2af926031b0b13b0deb63ec17a41ea0Roger Chen if (mState == SHOW_LIST && (null != mCursor) && (mCursor.getCount() > 0)) { 31272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project menu.add(0, OPTION_MENU_DELETE_ALL, 0, R.string.menu_delete_messages).setIcon( 31372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project android.R.drawable.ic_menu_delete); 31472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 31572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 31672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return true; 31772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 31872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 31972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project @Override 32072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public boolean onOptionsItemSelected(MenuItem item) { 32172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project switch (item.getItemId()) { 32272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project case OPTION_MENU_DELETE_ALL: 32372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project confirmDeleteDialog(new OnClickListener() { 32472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public void onClick(DialogInterface dialog, int which) { 32572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project updateState(SHOW_BUSY); 32672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project deleteAllFromSim(); 327c4a34a0ccd414e2bba937e8abd105a0383afff35Tom Taylor dialog.dismiss(); 32872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 3292f56791329cefc49ce79663b8d3aff50594cc1f3The Android Open Source Project }, R.string.confirm_delete_all_SIM_messages); 33072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project break; 3316d0646916bac17a1ee627a0aa15d3345ff9b5479Tom Taylor 3326d0646916bac17a1ee627a0aa15d3345ff9b5479Tom Taylor case android.R.id.home: 3336d0646916bac17a1ee627a0aa15d3345ff9b5479Tom Taylor // The user clicked on the Messaging icon in the action bar. Take them back from 3346d0646916bac17a1ee627a0aa15d3345ff9b5479Tom Taylor // wherever they came from 3356d0646916bac17a1ee627a0aa15d3345ff9b5479Tom Taylor finish(); 3366d0646916bac17a1ee627a0aa15d3345ff9b5479Tom Taylor break; 33772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 33872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 33972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return true; 34072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 34172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 3422f56791329cefc49ce79663b8d3aff50594cc1f3The Android Open Source Project private void confirmDeleteDialog(OnClickListener listener, int messageId) { 34372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project AlertDialog.Builder builder = new AlertDialog.Builder(this); 34472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project builder.setTitle(R.string.confirm_dialog_title); 3457ad0a61f99867ac19cabd31b0d8db2ef4c234d24Björn Lundén builder.setIconAttribute(android.R.attr.alertDialogIcon); 34672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project builder.setCancelable(true); 34772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project builder.setPositiveButton(R.string.yes, listener); 34872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project builder.setNegativeButton(R.string.no, null); 3492f56791329cefc49ce79663b8d3aff50594cc1f3The Android Open Source Project builder.setMessage(messageId); 35072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 35172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project builder.show(); 35272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 35372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 35472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private void updateState(int state) { 35572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (mState == state) { 35672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return; 35772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 35872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 35972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mState = state; 36072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project switch (state) { 36172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project case SHOW_LIST: 36272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mSimList.setVisibility(View.VISIBLE); 36372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mMessage.setVisibility(View.GONE); 36472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project setTitle(getString(R.string.sim_manage_messages_title)); 36572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project setProgressBarIndeterminateVisibility(false); 366507ace2ef4dd5cd30801b03778c95864ea45835aPawan Kumar Nimmagadda mSimList.requestFocus(); 36772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project break; 36872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project case SHOW_EMPTY: 36972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mSimList.setVisibility(View.GONE); 37072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mMessage.setVisibility(View.VISIBLE); 37172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project setTitle(getString(R.string.sim_manage_messages_title)); 37272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project setProgressBarIndeterminateVisibility(false); 37372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project break; 37472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project case SHOW_BUSY: 37572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mSimList.setVisibility(View.GONE); 37672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mMessage.setVisibility(View.GONE); 37772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project setTitle(getString(R.string.refreshing)); 37872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project setProgressBarIndeterminateVisibility(true); 37972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project break; 38072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project default: 38172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project Log.e(TAG, "Invalid State"); 38272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 38372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 38472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 38572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private void viewMessage(Cursor cursor) { 38672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // TODO: Add this. 38772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 38872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project} 38937321876549776417f035118f157d9531f73de6bWink Saville 390