ClassZeroActivity.java revision f7e8281a223af6228e6399055a6197a1edd9bc3a
172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project/* 272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * Copyright (C) 2007-2008 Esmertec AG. 372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * Copyright (C) 2007-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 android.app.Activity; 2172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.app.AlertDialog; 224da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liuimport android.content.ContentResolver; 234da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liuimport android.content.ContentUris; 244da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liuimport android.content.ContentValues; 2572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.content.DialogInterface; 2672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.content.DialogInterface.OnClickListener; 274da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liuimport android.database.Cursor; 284da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liuimport android.net.Uri; 2972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.os.Bundle; 304da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liuimport android.os.Handler; 314da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liuimport android.os.Message; 324da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liuimport android.os.SystemClock; 33f7e8281a223af6228e6399055a6197a1edd9bc3aTom Taylorimport android.provider.Telephony.Sms; 34f7e8281a223af6228e6399055a6197a1edd9bc3aTom Taylorimport android.provider.Telephony.Sms.Inbox; 354da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liuimport android.telephony.SmsMessage; 36044856d87b39a0ffb581ad946968da4598198f15Satish Roddomimport android.text.TextUtils; 374da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liuimport android.util.Log; 384da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liuimport android.util.Config; 3972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.view.Window; 4072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 4172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport com.android.mms.R; 4272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport com.android.mms.transaction.SmsReceiverService; 4343bcf48daea4e763811dffa75f62c2b4a3a39310Yong Liuimport com.android.mms.transaction.MessagingNotification; 4472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 45fd644551e8506266aad2b76463b51b44154ed62fTom Taylorimport android.database.sqlite.SqliteWrapper; 464da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu 4772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project/** 484da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu * Display a class-zero SMS message to the user. Wait for the user to dismiss 494da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu * it. 5072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project */ 5172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectpublic class ClassZeroActivity extends Activity { 52044856d87b39a0ffb581ad946968da4598198f15Satish Roddom private static final String BUFFER = " "; 53044856d87b39a0ffb581ad946968da4598198f15Satish Roddom private static final int BUFFER_OFFSET = BUFFER.length() * 2; 544da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu private static final String TAG = "display_00"; 554da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu private static final int ON_AUTO_SAVE = 1; 564da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu private static final String[] REPLACE_PROJECTION = new String[] { Sms._ID, 574da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu Sms.ADDRESS, Sms.PROTOCOL }; 584da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu private static final int REPLACE_COLUMN_ID = 0; 594da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu 604da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu /** Default timer to dismiss the dialog. */ 614da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu private static final long DEFAULT_TIMER = 5 * 60 * 1000; 624da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu 634da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu /** To remember the exact time when the timer should fire. */ 644da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu private static final String TIMER_FIRE = "timer_fire"; 654da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu 664da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu private SmsMessage mMessage = null; 674da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu 684da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu /** Is the message read. */ 694da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu private boolean mRead = false; 704da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu 714da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu /** The timer to dismiss the dialog automatically. */ 724da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu private long mTimerSet = 0; 734da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu private AlertDialog mDialog = null; 744da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu 754da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu private Handler mHandler = new Handler() { 764da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu @Override 774da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu public void handleMessage(Message msg) { 784da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu // Do not handle an invalid message. 794da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu if (msg.what == ON_AUTO_SAVE) { 804da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu mRead = false; 814da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu mDialog.dismiss(); 824da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu saveMessage(); 834da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu finish(); 844da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu } 854da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu } 864da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu }; 874da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu 884da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu private void saveMessage() { 8943bcf48daea4e763811dffa75f62c2b4a3a39310Yong Liu Uri messageUri = null; 904da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu if (mMessage.isReplace()) { 9143bcf48daea4e763811dffa75f62c2b4a3a39310Yong Liu messageUri = replaceMessage(mMessage); 924da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu } else { 9343bcf48daea4e763811dffa75f62c2b4a3a39310Yong Liu messageUri = storeMessage(mMessage); 9443bcf48daea4e763811dffa75f62c2b4a3a39310Yong Liu } 9543bcf48daea4e763811dffa75f62c2b4a3a39310Yong Liu if (!mRead && messageUri != null) { 9643bcf48daea4e763811dffa75f62c2b4a3a39310Yong Liu MessagingNotification.updateNewMessageIndicator(this, true); 974da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu } 984da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu } 994da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu 10072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project @Override 10172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project protected void onCreate(Bundle icicle) { 10272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project super.onCreate(icicle); 10372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project requestWindowFeature(Window.FEATURE_NO_TITLE); 10472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project getWindow().setBackgroundDrawableResource( 10572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project R.drawable.class_zero_background); 10672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 1074da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu byte[] pdu = getIntent().getByteArrayExtra("pdu"); 1084da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu mMessage = SmsMessage.createFromPdu(pdu); 1094da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu CharSequence messageChars = mMessage.getMessageBody(); 110044856d87b39a0ffb581ad946968da4598198f15Satish Roddom String message = messageChars.toString(); 111044856d87b39a0ffb581ad946968da4598198f15Satish Roddom if (TextUtils.isEmpty(message)) { 112044856d87b39a0ffb581ad946968da4598198f15Satish Roddom finish(); 113044856d87b39a0ffb581ad946968da4598198f15Satish Roddom return; 114044856d87b39a0ffb581ad946968da4598198f15Satish Roddom } 115044856d87b39a0ffb581ad946968da4598198f15Satish Roddom // TODO: The following line adds an emptry string before and after a message. 116044856d87b39a0ffb581ad946968da4598198f15Satish Roddom // This is not the correct way to layout a message. This is more of a hack 117044856d87b39a0ffb581ad946968da4598198f15Satish Roddom // to work-around a bug in AlertDialog. This needs to be fixed later when 118044856d87b39a0ffb581ad946968da4598198f15Satish Roddom // Android fixes the bug in AlertDialog. 119044856d87b39a0ffb581ad946968da4598198f15Satish Roddom if (message.length() < BUFFER_OFFSET) messageChars = BUFFER + message + BUFFER; 1204da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu long now = SystemClock.uptimeMillis(); 1214da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu mDialog = new AlertDialog.Builder(this).setMessage(messageChars) 1224da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu .setPositiveButton(R.string.save, mSaveListener) 1234da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu .setNegativeButton(android.R.string.cancel, mCancelListener) 1244da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu .setCancelable(false).show(); 1254da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu mTimerSet = now + DEFAULT_TIMER; 1264da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu if (icicle != null) { 1274da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu mTimerSet = icicle.getLong(TIMER_FIRE, mTimerSet); 1284da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu } 12943bcf48daea4e763811dffa75f62c2b4a3a39310Yong Liu } 13043bcf48daea4e763811dffa75f62c2b4a3a39310Yong Liu 13143bcf48daea4e763811dffa75f62c2b4a3a39310Yong Liu @Override 13243bcf48daea4e763811dffa75f62c2b4a3a39310Yong Liu protected void onStart() { 13343bcf48daea4e763811dffa75f62c2b4a3a39310Yong Liu super.onStart(); 13443bcf48daea4e763811dffa75f62c2b4a3a39310Yong Liu long now = SystemClock.uptimeMillis(); 1354da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu if (mTimerSet <= now) { 1364da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu // Save the message if the timer already expired. 1374da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu mHandler.sendEmptyMessage(ON_AUTO_SAVE); 1384da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu } else { 1394da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu mHandler.sendEmptyMessageAtTime(ON_AUTO_SAVE, mTimerSet); 1404da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu if (Config.DEBUG) { 14143bcf48daea4e763811dffa75f62c2b4a3a39310Yong Liu Log.d(TAG, "onRestart time = " + Long.toString(mTimerSet) + " " 1424da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu + this.toString()); 1434da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu } 1444da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu } 1454da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu } 14672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 1474da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu @Override 1484da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu protected void onSaveInstanceState(Bundle outState) { 1494da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu super.onSaveInstanceState(outState); 1504da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu outState.putLong(TIMER_FIRE, mTimerSet); 1514da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu if (Config.DEBUG) { 1524da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu Log.d(TAG, "onSaveInstanceState time = " + Long.toString(mTimerSet) 1534da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu + " " + this.toString()); 1544da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu } 1554da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu } 1564da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu 1574da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu @Override 1584da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu protected void onStop() { 1594da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu super.onStop(); 1604da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu mHandler.removeMessages(ON_AUTO_SAVE); 1614da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu if (Config.DEBUG) { 16243bcf48daea4e763811dffa75f62c2b4a3a39310Yong Liu Log.d(TAG, "onStop time = " + Long.toString(mTimerSet) 16343bcf48daea4e763811dffa75f62c2b4a3a39310Yong Liu + " " + this.toString()); 1644da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu } 16572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 16672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 1674da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu private final OnClickListener mCancelListener = new OnClickListener() { 16872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public void onClick(DialogInterface dialog, int whichButton) { 1694da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu finish(); 17072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 17172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project }; 1724da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu 1734da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu private final OnClickListener mSaveListener = new OnClickListener() { 1744da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu public void onClick(DialogInterface dialog, int whichButton) { 1754da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu mRead = true; 1764da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu saveMessage(); 1774da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu finish(); 1784da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu } 1794da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu }; 1804da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu 1814da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu private ContentValues extractContentValues(SmsMessage sms) { 1824da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu // Store the message in the content provider. 1834da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu ContentValues values = new ContentValues(); 1844da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu 1854da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu values.put(Inbox.ADDRESS, sms.getDisplayOriginatingAddress()); 1864da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu 1874da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu // Use now for the timestamp to avoid confusion with clock 1884da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu // drift between the handset and the SMSC. 1894da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu values.put(Inbox.DATE, new Long(System.currentTimeMillis())); 1904da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu values.put(Inbox.PROTOCOL, sms.getProtocolIdentifier()); 1914da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu values.put(Inbox.READ, Integer.valueOf(mRead ? 1 : 0)); 192627007213deb59ef938c80353c8f3598b01478b3Wei Huang values.put(Inbox.SEEN, Integer.valueOf(mRead ? 1 : 0)); 1934da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu 1944da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu if (sms.getPseudoSubject().length() > 0) { 1954da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu values.put(Inbox.SUBJECT, sms.getPseudoSubject()); 1964da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu } 1974da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu values.put(Inbox.REPLY_PATH_PRESENT, sms.isReplyPathPresent() ? 1 : 0); 1984da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu values.put(Inbox.SERVICE_CENTER, sms.getServiceCenterAddress()); 1994da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu return values; 2004da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu } 2014da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu 2024da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu private Uri replaceMessage(SmsMessage sms) { 2034da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu ContentValues values = extractContentValues(sms); 2044da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu 2054da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu values.put(Inbox.BODY, sms.getMessageBody()); 2064da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu 2074da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu ContentResolver resolver = getContentResolver(); 2084da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu String originatingAddress = sms.getOriginatingAddress(); 2094da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu int protocolIdentifier = sms.getProtocolIdentifier(); 2104da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu String selection = Sms.ADDRESS + " = ? AND " + Sms.PROTOCOL + " = ?"; 2114da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu String[] selectionArgs = new String[] { originatingAddress, 2124da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu Integer.toString(protocolIdentifier) }; 2134da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu 2144da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu Cursor cursor = SqliteWrapper.query(this, resolver, Inbox.CONTENT_URI, 2154da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu REPLACE_PROJECTION, selection, selectionArgs, null); 2164da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu 2174da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu try { 2184da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu if (cursor.moveToFirst()) { 2194da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu long messageId = cursor.getLong(REPLACE_COLUMN_ID); 2204da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu Uri messageUri = ContentUris.withAppendedId( 2214da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu Sms.CONTENT_URI, messageId); 2224da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu 2234da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu SqliteWrapper.update(this, resolver, messageUri, values, 2244da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu null, null); 2254da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu return messageUri; 2264da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu } 2274da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu } finally { 2284da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu cursor.close(); 2294da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu } 2304da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu return storeMessage(sms); 2314da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu } 2324da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu 2334da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu private Uri storeMessage(SmsMessage sms) { 2344da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu // Store the message in the content provider. 2354da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu ContentValues values = extractContentValues(sms); 2364da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu values.put(Inbox.BODY, sms.getDisplayMessageBody()); 2374da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu ContentResolver resolver = getContentResolver(); 23843bcf48daea4e763811dffa75f62c2b4a3a39310Yong Liu if (Config.DEBUG) { 23943bcf48daea4e763811dffa75f62c2b4a3a39310Yong Liu Log.d(TAG, "storeMessage " + this.toString()); 24043bcf48daea4e763811dffa75f62c2b4a3a39310Yong Liu } 2414da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu return SqliteWrapper.insert(this, resolver, Inbox.CONTENT_URI, values); 2424da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu } 24372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project} 244