ConversationList.java revision 20b79e068c8aebff46f24fd3803cf7697df4eac4
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 2072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport com.android.mms.R; 211d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrickimport com.android.mms.data.Contact; 2270c73e05a792832aa28da751cdaf3fa83a7b8113Ficus Kirkpatrickimport com.android.mms.data.Conversation; 2372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport com.android.mms.transaction.MessagingNotification; 2472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport com.android.mms.util.ContactInfoCache; 2507e7775d5a792334b89436bf5479bfd5abeeb8c4Ficus Kirkpatrickimport com.android.mms.util.DraftCache; 2607e7775d5a792334b89436bf5479bfd5abeeb8c4Ficus Kirkpatrick 2772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport com.google.android.mms.pdu.PduHeaders; 2872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport com.google.android.mms.util.SqliteWrapper; 2972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 3072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.app.AlertDialog; 3172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.app.ListActivity; 3272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.content.AsyncQueryHandler; 3372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.content.ContentResolver; 3472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.content.ContentUris; 3572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.content.DialogInterface; 3672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.content.Intent; 3772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.content.DialogInterface.OnClickListener; 3872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.content.res.Configuration; 3972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.database.Cursor; 4072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.database.sqlite.SQLiteException; 4172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.net.Uri; 4272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.os.Bundle; 4372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.provider.Contacts; 4472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.provider.Contacts.People; 457d3e1caa6000b0bbab0716b1815c2c7177d67948Tom Taylorimport android.provider.Contacts.Intents.Insert; 4620b79e068c8aebff46f24fd3803cf7697df4eac4Ficus Kirkpatrickimport android.provider.Telephony.Mms; 4772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.util.Config; 4872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.util.Log; 4972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.view.ContextMenu; 5072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.view.KeyEvent; 5172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.view.LayoutInflater; 5272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.view.Menu; 5372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.view.MenuItem; 5472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.view.View; 5572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.view.Window; 5672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.view.ContextMenu.ContextMenuInfo; 5772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.view.View.OnCreateContextMenuListener; 5872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.view.View.OnKeyListener; 5972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.widget.AdapterView; 6072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.widget.ListView; 6172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 6272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project/** 6372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * This activity provides a list view of existing conversations. 6472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project */ 65b530437ceaad97151be691067191f48e1e93b87eFicus Kirkpatrickpublic class ConversationList extends ListActivity 66b530437ceaad97151be691067191f48e1e93b87eFicus Kirkpatrick implements DraftCache.OnDraftChangedListener { 6772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private static final String TAG = "ConversationList"; 6872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private static final boolean DEBUG = false; 6972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private static final boolean LOCAL_LOGV = Config.LOGV && DEBUG; 7072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 7172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private static final int THREAD_LIST_QUERY_TOKEN = 1701; 7272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 7372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private static final int DELETE_CONVERSATION_TOKEN = 1801; 7472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 7572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // IDs of the main menu items. 76cb5481d8b2a15ba206520b76a48bca140bc9efdcTom Taylor public static final int MENU_COMPOSE_NEW = 0; 77cb5481d8b2a15ba206520b76a48bca140bc9efdcTom Taylor public static final int MENU_SEARCH = 1; 78cb5481d8b2a15ba206520b76a48bca140bc9efdcTom Taylor public static final int MENU_DELETE_ALL = 3; 79cb5481d8b2a15ba206520b76a48bca140bc9efdcTom Taylor public static final int MENU_PREFERENCES = 4; 8072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 8172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // IDs of the context menu items for the list of conversations. 8248da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor public static final int MENU_DELETE = 0; 8348da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor public static final int MENU_VIEW = 1; 8448da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor public static final int MENU_VIEW_CONTACT = 2; 8548da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor public static final int MENU_ADD_TO_CONTACTS = 3; 86cb5481d8b2a15ba206520b76a48bca140bc9efdcTom Taylor 8772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private ThreadListQueryHandler mQueryHandler; 8872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private ConversationListAdapter mListAdapter; 8972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private CharSequence mTitle; 9072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 9172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project /** 9272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * An interface that's passed down to ListAdapters to use 9372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * for looking up the names of contact numbers. 9472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project */ 9572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public static interface CachingNameStore { 9672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // Returns comma-separated list of contact's display names 9772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // given a semicolon-delimited string of canonical phone 9872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // numbers. 9972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public String getContactNames(String addresses); 100cb5481d8b2a15ba206520b76a48bca140bc9efdcTom Taylor 101cb5481d8b2a15ba206520b76a48bca140bc9efdcTom Taylor public void invalidateCache(); 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 savedInstanceState) { 10672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project super.onCreate(savedInstanceState); 10772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 10872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); 10972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project setContentView(R.layout.conversation_list_screen); 11072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 11172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mQueryHandler = new ThreadListQueryHandler(getContentResolver()); 11272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 11372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project ListView listView = getListView(); 11472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project LayoutInflater inflater = LayoutInflater.from(this); 11572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project ConversationHeaderView headerView = (ConversationHeaderView) 11672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project inflater.inflate(R.layout.conversation_header, listView, false); 11772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project headerView.bind(getString(R.string.new_message), 11872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project getString(R.string.create_new_message)); 11972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project listView.addHeaderView(headerView, null, true); 12072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 12172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project listView.setOnCreateContextMenuListener(mConvListOnCreateContextMenuListener); 12272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project listView.setOnKeyListener(mThreadListKeyListener); 12372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 12459cd1f499645badf8df9e2820b29d28fc1835e79Ficus Kirkpatrick initListAdapter(); 12559cd1f499645badf8df9e2820b29d28fc1835e79Ficus Kirkpatrick 12672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project handleCreationIntent(getIntent()); 12772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 12872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 12959cd1f499645badf8df9e2820b29d28fc1835e79Ficus Kirkpatrick private void initListAdapter() { 1301d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick mListAdapter = new ConversationListAdapter(this, null); 13159cd1f499645badf8df9e2820b29d28fc1835e79Ficus Kirkpatrick setListAdapter(mListAdapter); 13259cd1f499645badf8df9e2820b29d28fc1835e79Ficus Kirkpatrick } 13359cd1f499645badf8df9e2820b29d28fc1835e79Ficus Kirkpatrick 13472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project static public boolean isFailedToDeliver(Intent intent) { 13572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return (intent != null) && intent.getBooleanExtra("undelivered_flag", false); 13672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 13772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 13872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project @Override 13972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project protected void onNewIntent(Intent intent) { 14072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // Handle intents that occur after the activity has already been created. 14172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project handleCreationIntent(intent); 14272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 14372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 14472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project protected void handleCreationIntent(Intent intent) { 14572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // Handle intents that occur upon creation of the activity. 14672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project initNormalQueryArgs(); 147591d17e9a51bb9f829d6860dc7aa0bad25062cd5The Android Open Source Project } 14872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 14972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project @Override 15072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project protected void onResume() { 15172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project super.onResume(); 15272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 153b530437ceaad97151be691067191f48e1e93b87eFicus Kirkpatrick DraftCache.getInstance().addOnDraftChangedListener(this); 154b530437ceaad97151be691067191f48e1e93b87eFicus Kirkpatrick 15570c73e05a792832aa28da751cdaf3fa83a7b8113Ficus Kirkpatrick Conversation.cleanup(this); 15672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 157598ca14f5d7d26d6d5125d8fe0d07e50f066ff98Ficus Kirkpatrick // Make sure the draft cache is up to date. 158598ca14f5d7d26d6d5125d8fe0d07e50f066ff98Ficus Kirkpatrick DraftCache.getInstance().refresh(); 159598ca14f5d7d26d6d5125d8fe0d07e50f066ff98Ficus Kirkpatrick 16072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project startAsyncQuery(); 16172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 1621d98ae0b203e01034ddead4214d1520ce863a23bFicus Kirkpatrick Contact.invalidateCache(); 16372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 16472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 16572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project @Override 16672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project protected void onPause() { 16772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project super.onPause(); 16872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 169b530437ceaad97151be691067191f48e1e93b87eFicus Kirkpatrick DraftCache.getInstance().removeOnDraftChangedListener(this); 17072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 17172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 17272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project @Override 17372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project protected void onStop() { 17472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project super.onStop(); 17572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 17659cd1f499645badf8df9e2820b29d28fc1835e79Ficus Kirkpatrick mListAdapter.changeCursor(null); 17772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 17872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 179b530437ceaad97151be691067191f48e1e93b87eFicus Kirkpatrick public void onDraftChanged(long threadId, boolean hasDraft) { 18059cd1f499645badf8df9e2820b29d28fc1835e79Ficus Kirkpatrick // Run notifyDataSetChanged() on the main thread. 18159cd1f499645badf8df9e2820b29d28fc1835e79Ficus Kirkpatrick mQueryHandler.post(new Runnable() { 18259cd1f499645badf8df9e2820b29d28fc1835e79Ficus Kirkpatrick public void run() { 18359cd1f499645badf8df9e2820b29d28fc1835e79Ficus Kirkpatrick mListAdapter.notifyDataSetChanged(); 18459cd1f499645badf8df9e2820b29d28fc1835e79Ficus Kirkpatrick } 18559cd1f499645badf8df9e2820b29d28fc1835e79Ficus Kirkpatrick }); 186b530437ceaad97151be691067191f48e1e93b87eFicus Kirkpatrick } 187b530437ceaad97151be691067191f48e1e93b87eFicus Kirkpatrick 18872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private void initNormalQueryArgs() { 18972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mTitle = getString(R.string.app_label); 19072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 19172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 19272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private void startAsyncQuery() { 19372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project try { 19472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project setTitle(getString(R.string.refreshing)); 19572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project setProgressBarIndeterminateVisibility(true); 19672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 19770c73e05a792832aa28da751cdaf3fa83a7b8113Ficus Kirkpatrick Conversation.startQueryForAll(mQueryHandler, THREAD_LIST_QUERY_TOKEN); 19872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } catch (SQLiteException e) { 19972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project SqliteWrapper.checkSQLiteException(this, e); 20072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 20172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 20272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 20372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project @Override 20472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public boolean onPrepareOptionsMenu(Menu menu) { 20572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project menu.clear(); 20672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 20772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project menu.add(0, MENU_COMPOSE_NEW, 0, R.string.menu_compose_new).setIcon( 20872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project com.android.internal.R.drawable.ic_menu_compose); 20972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // Removed search as part of b/1205708 21072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project //menu.add(0, MENU_SEARCH, 0, R.string.menu_search).setIcon( 21172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // R.drawable.ic_menu_search).setAlphabeticShortcut(SearchManager.MENU_KEY); 21270c73e05a792832aa28da751cdaf3fa83a7b8113Ficus Kirkpatrick if (mListAdapter.getCount() > 0) { 21372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project menu.add(0, MENU_DELETE_ALL, 0, R.string.menu_delete_all).setIcon( 21472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project android.R.drawable.ic_menu_delete); 21572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 21672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 21772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project menu.add(0, MENU_PREFERENCES, 0, R.string.menu_preferences).setIcon( 21872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project android.R.drawable.ic_menu_preferences); 21972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 22072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return true; 22172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 22272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 22372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project @Override 22472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public boolean onOptionsItemSelected(MenuItem item) { 22572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project switch(item.getItemId()) { 22672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project case MENU_COMPOSE_NEW: 22772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project createNewMessage(); 22872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project break; 22972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project case MENU_SEARCH: 23072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project onSearchRequested(); 23172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project break; 23272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project case MENU_DELETE_ALL: 23372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project confirmDeleteDialog(new DeleteThreadListener(-1L), true); 23472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project break; 23572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project case MENU_PREFERENCES: { 23672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project Intent intent = new Intent(this, MessagingPreferenceActivity.class); 23772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project startActivityIfNeeded(intent, -1); 23872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project break; 23972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 24072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project default: 24172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return true; 24272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 24372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return false; 24472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 24572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 24672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project @Override 24772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project protected void onListItemClick(ListView l, View v, int position, long id) { 24872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (LOCAL_LOGV) { 24972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project Log.v(TAG, "onListItemClick: position=" + position + ", id=" + id); 25072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 25172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 25272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (position == 0) { 25372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project createNewMessage(); 25472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } else if (v instanceof ConversationHeaderView) { 25572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project ConversationHeaderView headerView = (ConversationHeaderView) v; 25672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project ConversationHeader ch = headerView.getConversationHeader(); 257ab6141d9c98f1a6024fac52fe3c897076d8549c0Ficus Kirkpatrick openThread(ch.getThreadId()); 25872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 25972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 26072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 26172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private void createNewMessage() { 26272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project Intent intent = new Intent(this, ComposeMessageActivity.class); 26372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project startActivity(intent); 26472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 26572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 266ab6141d9c98f1a6024fac52fe3c897076d8549c0Ficus Kirkpatrick private void openThread(long threadId) { 26772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project Intent intent = new Intent(this, ComposeMessageActivity.class); 26872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project intent.putExtra("thread_id", threadId); 26972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project startActivity(intent); 27072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 27172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 27272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private void viewContact(String address) { 27372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // address must be a single recipient 27472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project ContactInfoCache cache = ContactInfoCache.getInstance(); 27566dde9460badebf8e740275cabde9cca256006ebFicus Kirkpatrick ContactInfoCache.CacheEntry info = cache.getContactInfo(address); 2765d2d0046ada7b53205e537d8675d32a8785e8d1dThe Android Open Source Project if (info != null && info.person_id > 0) { 27772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project Uri uri = ContentUris.withAppendedId(People.CONTENT_URI, info.person_id); 27872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project Intent intent = new Intent(Intent.ACTION_VIEW, uri); 27972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project startActivity(intent); 28072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 28172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 28272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 2837d3e1caa6000b0bbab0716b1815c2c7177d67948Tom Taylor public static Intent createAddContactIntent(String address) { 2847d3e1caa6000b0bbab0716b1815c2c7177d67948Tom Taylor // address must be a single recipient 2851bb6975b0a9a5a4b38aef689305b1e7eb5b61b08Tom Taylor Intent intent = new Intent(Intent.ACTION_INSERT_OR_EDIT); 2861bb6975b0a9a5a4b38aef689305b1e7eb5b61b08Tom Taylor intent.setType(Contacts.People.CONTENT_ITEM_TYPE); 28720b79e068c8aebff46f24fd3803cf7697df4eac4Ficus Kirkpatrick if (Mms.isEmailAddress(address)) { 2887d3e1caa6000b0bbab0716b1815c2c7177d67948Tom Taylor intent.putExtra(Insert.EMAIL, address); 28920b79e068c8aebff46f24fd3803cf7697df4eac4Ficus Kirkpatrick } else { 29020b79e068c8aebff46f24fd3803cf7697df4eac4Ficus Kirkpatrick intent.putExtra(Insert.PHONE, address); 2917d3e1caa6000b0bbab0716b1815c2c7177d67948Tom Taylor } 29219be5b3fbe66749f6bc030c9776936b0602ed62fTom Taylor 2937d3e1caa6000b0bbab0716b1815c2c7177d67948Tom Taylor return intent; 2947d3e1caa6000b0bbab0716b1815c2c7177d67948Tom Taylor } 2957d3e1caa6000b0bbab0716b1815c2c7177d67948Tom Taylor 29672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private final OnCreateContextMenuListener mConvListOnCreateContextMenuListener = 29772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project new OnCreateContextMenuListener() { 29872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public void onCreateContextMenu(ContextMenu menu, View v, 29972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project ContextMenuInfo menuInfo) { 30059cd1f499645badf8df9e2820b29d28fc1835e79Ficus Kirkpatrick Cursor cursor = mListAdapter.getCursor(); 30170c73e05a792832aa28da751cdaf3fa83a7b8113Ficus Kirkpatrick Conversation conv = Conversation.from(ConversationList.this, cursor); 30270c73e05a792832aa28da751cdaf3fa83a7b8113Ficus Kirkpatrick 30370c73e05a792832aa28da751cdaf3fa83a7b8113Ficus Kirkpatrick String address = MessageUtils.getRecipientsByIds( 30470c73e05a792832aa28da751cdaf3fa83a7b8113Ficus Kirkpatrick ConversationList.this, conv.getRecipientIds(), true); 30570c73e05a792832aa28da751cdaf3fa83a7b8113Ficus Kirkpatrick // The Recipient IDs column is separated with semicolons for some reason. 30670c73e05a792832aa28da751cdaf3fa83a7b8113Ficus Kirkpatrick // We should fix this in the content provider rework. 30770c73e05a792832aa28da751cdaf3fa83a7b8113Ficus Kirkpatrick ContactInfoCache cache = ContactInfoCache.getInstance(); 30870c73e05a792832aa28da751cdaf3fa83a7b8113Ficus Kirkpatrick CharSequence from = cache.getContactName(address).replace(';', ','); 30970c73e05a792832aa28da751cdaf3fa83a7b8113Ficus Kirkpatrick menu.setHeaderTitle(from); 31070c73e05a792832aa28da751cdaf3fa83a7b8113Ficus Kirkpatrick 31170c73e05a792832aa28da751cdaf3fa83a7b8113Ficus Kirkpatrick AdapterView.AdapterContextMenuInfo info = 31270c73e05a792832aa28da751cdaf3fa83a7b8113Ficus Kirkpatrick (AdapterView.AdapterContextMenuInfo) menuInfo; 31370c73e05a792832aa28da751cdaf3fa83a7b8113Ficus Kirkpatrick if (info.position > 0) { 31470c73e05a792832aa28da751cdaf3fa83a7b8113Ficus Kirkpatrick menu.add(0, MENU_VIEW, 0, R.string.menu_view); 31570c73e05a792832aa28da751cdaf3fa83a7b8113Ficus Kirkpatrick 31670c73e05a792832aa28da751cdaf3fa83a7b8113Ficus Kirkpatrick // Only show if there's a single recipient 31770c73e05a792832aa28da751cdaf3fa83a7b8113Ficus Kirkpatrick String recipient = getAddress(conv); 31870c73e05a792832aa28da751cdaf3fa83a7b8113Ficus Kirkpatrick if (!recipient.contains(";")) { 31970c73e05a792832aa28da751cdaf3fa83a7b8113Ficus Kirkpatrick // do we have this recipient in contacts? 32070c73e05a792832aa28da751cdaf3fa83a7b8113Ficus Kirkpatrick ContactInfoCache.CacheEntry entry = cache.getContactInfo(recipient); 32170c73e05a792832aa28da751cdaf3fa83a7b8113Ficus Kirkpatrick 32270c73e05a792832aa28da751cdaf3fa83a7b8113Ficus Kirkpatrick if (entry != null && entry.person_id > 0) { 32370c73e05a792832aa28da751cdaf3fa83a7b8113Ficus Kirkpatrick menu.add(0, MENU_VIEW_CONTACT, 0, R.string.menu_view_contact); 32470c73e05a792832aa28da751cdaf3fa83a7b8113Ficus Kirkpatrick } else { 32570c73e05a792832aa28da751cdaf3fa83a7b8113Ficus Kirkpatrick menu.add(0, MENU_ADD_TO_CONTACTS, 0, R.string.menu_add_to_contacts); 32672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 32772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 32870c73e05a792832aa28da751cdaf3fa83a7b8113Ficus Kirkpatrick menu.add(0, MENU_DELETE, 0, R.string.menu_delete); 32972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 33072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 33172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project }; 33272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 33372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project @Override 33472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public boolean onContextItemSelected(MenuItem item) { 33559cd1f499645badf8df9e2820b29d28fc1835e79Ficus Kirkpatrick Cursor cursor = mListAdapter.getCursor(); 33670c73e05a792832aa28da751cdaf3fa83a7b8113Ficus Kirkpatrick Conversation conv = Conversation.from(ConversationList.this, cursor); 33770c73e05a792832aa28da751cdaf3fa83a7b8113Ficus Kirkpatrick long threadId = conv.getThreadId(); 33872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project switch (item.getItemId()) { 33972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project case MENU_DELETE: { 34072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project DeleteThreadListener l = new DeleteThreadListener(threadId); 34172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project confirmDeleteDialog(l, false); 34272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project break; 34372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 34472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project case MENU_VIEW: { 345ab6141d9c98f1a6024fac52fe3c897076d8549c0Ficus Kirkpatrick openThread(threadId); 34672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project break; 34772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 34872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project case MENU_VIEW_CONTACT: { 34970c73e05a792832aa28da751cdaf3fa83a7b8113Ficus Kirkpatrick String address = getAddress(conv); 35072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project viewContact(address); 35172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project break; 35272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 3537d3e1caa6000b0bbab0716b1815c2c7177d67948Tom Taylor case MENU_ADD_TO_CONTACTS: { 35470c73e05a792832aa28da751cdaf3fa83a7b8113Ficus Kirkpatrick String address = getAddress(conv); 3557d3e1caa6000b0bbab0716b1815c2c7177d67948Tom Taylor startActivity(createAddContactIntent(address)); 3567d3e1caa6000b0bbab0716b1815c2c7177d67948Tom Taylor break; 3577d3e1caa6000b0bbab0716b1815c2c7177d67948Tom Taylor } 35872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project default: 35972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project break; 36072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 36172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 36272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return super.onContextItemSelected(item); 36372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 36472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 36570c73e05a792832aa28da751cdaf3fa83a7b8113Ficus Kirkpatrick private String getAddress(Conversation conv) { 36670c73e05a792832aa28da751cdaf3fa83a7b8113Ficus Kirkpatrick return MessageUtils.getRecipientsByIds(this, conv.getRecipientIds(), true); 36772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 36872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 36972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public void onConfigurationChanged(Configuration newConfig) { 37072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // We override this method to avoid restarting the entire 37172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // activity when the keyboard is opened (declared in 37272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // AndroidManifest.xml). Because the only translatable text 37372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // in this activity is "New Message", which has the full width 37472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // of phone to work with, localization shouldn't be a problem: 37572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // no abbreviated alternate words should be needed even in 37672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // 'wide' languages like German or Russian. 37772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 37872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project super.onConfigurationChanged(newConfig); 37972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (DEBUG) Log.v(TAG, "onConfigurationChanged: " + newConfig); 38072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 38172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 38272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private void confirmDeleteDialog(OnClickListener listener, boolean deleteAll) { 38372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project AlertDialog.Builder builder = new AlertDialog.Builder(this); 38472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project builder.setTitle(R.string.confirm_dialog_title); 38572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project builder.setIcon(android.R.drawable.ic_dialog_alert); 38672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project builder.setCancelable(true); 38772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project builder.setPositiveButton(R.string.yes, listener); 38872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project builder.setNegativeButton(R.string.no, null); 38972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project builder.setMessage(deleteAll 39072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project ? R.string.confirm_delete_all_conversations 39172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project : R.string.confirm_delete_conversation); 39272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 39372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project builder.show(); 39472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 39572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 39672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private final OnKeyListener mThreadListKeyListener = new OnKeyListener() { 39772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public boolean onKey(View v, int keyCode, KeyEvent event) { 39872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (event.getAction() == KeyEvent.ACTION_DOWN) { 39972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project switch (keyCode) { 40072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project case KeyEvent.KEYCODE_DEL: { 40172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project long id = getListView().getSelectedItemId(); 40272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (id > 0) { 40372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project DeleteThreadListener l = new DeleteThreadListener( 40472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project id); 40572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project confirmDeleteDialog(l, false); 40672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 40772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return true; 40872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 40972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 41072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 41172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return false; 41272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 41372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project }; 41472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 41572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private class DeleteThreadListener implements OnClickListener { 41672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private final long mThreadId; 41772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 41872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public DeleteThreadListener(long threadId) { 41972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mThreadId = threadId; 42072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 42172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 42272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public void onClick(DialogInterface dialog, int whichButton) { 42372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project MessageUtils.handleReadReport(ConversationList.this, mThreadId, 42472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project PduHeaders.READ_STATUS__DELETED_WITHOUT_BEING_READ, new Runnable() { 42572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public void run() { 42670c73e05a792832aa28da751cdaf3fa83a7b8113Ficus Kirkpatrick int token = DELETE_CONVERSATION_TOKEN; 42770c73e05a792832aa28da751cdaf3fa83a7b8113Ficus Kirkpatrick if (mThreadId == -1) { 42870c73e05a792832aa28da751cdaf3fa83a7b8113Ficus Kirkpatrick Conversation.startDeleteAll(mQueryHandler, token); 42970c73e05a792832aa28da751cdaf3fa83a7b8113Ficus Kirkpatrick } else { 43070c73e05a792832aa28da751cdaf3fa83a7b8113Ficus Kirkpatrick Conversation.startDelete(mQueryHandler, token, mThreadId); 43170c73e05a792832aa28da751cdaf3fa83a7b8113Ficus Kirkpatrick } 43272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 43372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project }); 43472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 43572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 43672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 43772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private final class ThreadListQueryHandler extends AsyncQueryHandler { 43872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public ThreadListQueryHandler(ContentResolver contentResolver) { 43972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project super(contentResolver); 44072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 44172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 44272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project @Override 44372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project protected void onQueryComplete(int token, Object cookie, Cursor cursor) { 44459cd1f499645badf8df9e2820b29d28fc1835e79Ficus Kirkpatrick switch (token) { 44559cd1f499645badf8df9e2820b29d28fc1835e79Ficus Kirkpatrick case THREAD_LIST_QUERY_TOKEN: 44659cd1f499645badf8df9e2820b29d28fc1835e79Ficus Kirkpatrick mListAdapter.changeCursor(cursor); 44759cd1f499645badf8df9e2820b29d28fc1835e79Ficus Kirkpatrick setTitle(mTitle); 44859cd1f499645badf8df9e2820b29d28fc1835e79Ficus Kirkpatrick setProgressBarIndeterminateVisibility(false); 44959cd1f499645badf8df9e2820b29d28fc1835e79Ficus Kirkpatrick break; 45059cd1f499645badf8df9e2820b29d28fc1835e79Ficus Kirkpatrick default: 45159cd1f499645badf8df9e2820b29d28fc1835e79Ficus Kirkpatrick Log.e(TAG, "onQueryComplete called with unknown token " + token); 45272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 45372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 45472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 45572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project @Override 45672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project protected void onDeleteComplete(int token, Object cookie, int result) { 45772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project switch (token) { 45872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project case DELETE_CONVERSATION_TOKEN: 45972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // Update the notification for new messages since they 46072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // may be deleted. 46172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project MessagingNotification.updateNewMessageIndicator(ConversationList.this); 46272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // Update the notification for failed messages since they 46372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // may be deleted. 46472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project MessagingNotification.updateSendFailedNotification(ConversationList.this); 46572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 46672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // Make sure the list reflects the delete 46772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project startAsyncQuery(); 46872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 46972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project onContentChanged(); 47072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project break; 47172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 47272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 47372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 47472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project} 475