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; 3872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.view.Window; 3972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 4072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport com.android.mms.R; 4172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport com.android.mms.transaction.SmsReceiverService; 4243bcf48daea4e763811dffa75f62c2b4a3a39310Yong Liuimport com.android.mms.transaction.MessagingNotification; 4372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 44fd644551e8506266aad2b76463b51b44154ed62fTom Taylorimport android.database.sqlite.SqliteWrapper; 454da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu 4672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project/** 474da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu * Display a class-zero SMS message to the user. Wait for the user to dismiss 484da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu * it. 4972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project */ 5072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectpublic class ClassZeroActivity extends Activity { 51044856d87b39a0ffb581ad946968da4598198f15Satish Roddom private static final String BUFFER = " "; 52044856d87b39a0ffb581ad946968da4598198f15Satish Roddom private static final int BUFFER_OFFSET = BUFFER.length() * 2; 534da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu private static final String TAG = "display_00"; 544da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu private static final int ON_AUTO_SAVE = 1; 554da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu private static final String[] REPLACE_PROJECTION = new String[] { Sms._ID, 564da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu Sms.ADDRESS, Sms.PROTOCOL }; 574da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu private static final int REPLACE_COLUMN_ID = 0; 584da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu 594da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu /** Default timer to dismiss the dialog. */ 604da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu private static final long DEFAULT_TIMER = 5 * 60 * 1000; 614da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu 624da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu /** To remember the exact time when the timer should fire. */ 634da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu private static final String TIMER_FIRE = "timer_fire"; 644da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu 654da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu private SmsMessage mMessage = null; 664da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu 674da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu /** Is the message read. */ 684da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu private boolean mRead = false; 694da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu 704da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu /** The timer to dismiss the dialog automatically. */ 714da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu private long mTimerSet = 0; 724da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu private AlertDialog mDialog = null; 734da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu 744da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu private Handler mHandler = new Handler() { 754da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu @Override 764da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu public void handleMessage(Message msg) { 774da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu // Do not handle an invalid message. 784da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu if (msg.what == ON_AUTO_SAVE) { 794da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu mRead = false; 804da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu mDialog.dismiss(); 814da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu saveMessage(); 824da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu finish(); 834da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu } 844da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu } 854da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu }; 864da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu 874da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu private void saveMessage() { 8843bcf48daea4e763811dffa75f62c2b4a3a39310Yong Liu Uri messageUri = null; 894da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu if (mMessage.isReplace()) { 9043bcf48daea4e763811dffa75f62c2b4a3a39310Yong Liu messageUri = replaceMessage(mMessage); 914da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu } else { 9243bcf48daea4e763811dffa75f62c2b4a3a39310Yong Liu messageUri = storeMessage(mMessage); 9343bcf48daea4e763811dffa75f62c2b4a3a39310Yong Liu } 9443bcf48daea4e763811dffa75f62c2b4a3a39310Yong Liu if (!mRead && messageUri != null) { 953b21f6ab04db5936d73e9f53032f1587389380ffTom Taylor MessagingNotification.nonBlockingUpdateNewMessageIndicator(this, true, false); 964da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu } 974da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu } 984da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu 9972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project @Override 10072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project protected void onCreate(Bundle icicle) { 10172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project super.onCreate(icicle); 10272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project requestWindowFeature(Window.FEATURE_NO_TITLE); 10372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project getWindow().setBackgroundDrawableResource( 10472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project R.drawable.class_zero_background); 10572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 1064da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu byte[] pdu = getIntent().getByteArrayExtra("pdu"); 1072b04a715ca8aba549ead0bc2b45f650386962c15Jake Hamby String format = getIntent().getStringExtra("format"); 1082b04a715ca8aba549ead0bc2b45f650386962c15Jake Hamby mMessage = SmsMessage.createFromPdu(pdu, format); 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); 140150c4179995cc0a75f934ef194372f9295957ca2Joe Onorato if (false) { 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); 151150c4179995cc0a75f934ef194372f9295957ca2Joe Onorato if (false) { 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); 161150c4179995cc0a75f934ef194372f9295957ca2Joe Onorato if (false) { 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) { 169c4a34a0ccd414e2bba937e8abd105a0383afff35Tom Taylor dialog.dismiss(); 1704da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu finish(); 17172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 17272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project }; 1734da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu 1744da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu private final OnClickListener mSaveListener = new OnClickListener() { 1754da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu public void onClick(DialogInterface dialog, int whichButton) { 1764da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu mRead = true; 1774da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu saveMessage(); 178c4a34a0ccd414e2bba937e8abd105a0383afff35Tom Taylor dialog.dismiss(); 1794da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu finish(); 1804da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu } 1814da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu }; 1824da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu 1834da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu private ContentValues extractContentValues(SmsMessage sms) { 1844da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu // Store the message in the content provider. 1854da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu ContentValues values = new ContentValues(); 1864da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu 1874da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu values.put(Inbox.ADDRESS, sms.getDisplayOriginatingAddress()); 1884da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu 1894da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu // Use now for the timestamp to avoid confusion with clock 1904da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu // drift between the handset and the SMSC. 1914da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu values.put(Inbox.DATE, new Long(System.currentTimeMillis())); 1924da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu values.put(Inbox.PROTOCOL, sms.getProtocolIdentifier()); 1934da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu values.put(Inbox.READ, Integer.valueOf(mRead ? 1 : 0)); 194627007213deb59ef938c80353c8f3598b01478b3Wei Huang values.put(Inbox.SEEN, Integer.valueOf(mRead ? 1 : 0)); 1954da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu 1964da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu if (sms.getPseudoSubject().length() > 0) { 1974da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu values.put(Inbox.SUBJECT, sms.getPseudoSubject()); 1984da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu } 1994da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu values.put(Inbox.REPLY_PATH_PRESENT, sms.isReplyPathPresent() ? 1 : 0); 2004da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu values.put(Inbox.SERVICE_CENTER, sms.getServiceCenterAddress()); 2014da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu return values; 2024da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu } 2034da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu 2044da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu private Uri replaceMessage(SmsMessage sms) { 2054da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu ContentValues values = extractContentValues(sms); 2064da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu 2074da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu values.put(Inbox.BODY, sms.getMessageBody()); 2084da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu 2094da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu ContentResolver resolver = getContentResolver(); 2104da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu String originatingAddress = sms.getOriginatingAddress(); 2114da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu int protocolIdentifier = sms.getProtocolIdentifier(); 2124da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu String selection = Sms.ADDRESS + " = ? AND " + Sms.PROTOCOL + " = ?"; 2134da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu String[] selectionArgs = new String[] { originatingAddress, 2144da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu Integer.toString(protocolIdentifier) }; 2154da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu 2164da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu Cursor cursor = SqliteWrapper.query(this, resolver, Inbox.CONTENT_URI, 2174da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu REPLACE_PROJECTION, selection, selectionArgs, null); 2184da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu 2194da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu try { 2204da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu if (cursor.moveToFirst()) { 2214da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu long messageId = cursor.getLong(REPLACE_COLUMN_ID); 2224da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu Uri messageUri = ContentUris.withAppendedId( 2234da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu Sms.CONTENT_URI, messageId); 2244da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu 2254da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu SqliteWrapper.update(this, resolver, messageUri, values, 2264da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu null, null); 2274da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu return messageUri; 2284da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu } 2294da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu } finally { 2304da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu cursor.close(); 2314da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu } 2324da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu return storeMessage(sms); 2334da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu } 2344da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu 2354da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu private Uri storeMessage(SmsMessage sms) { 2364da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu // Store the message in the content provider. 2374da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu ContentValues values = extractContentValues(sms); 2384da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu values.put(Inbox.BODY, sms.getDisplayMessageBody()); 2394da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu ContentResolver resolver = getContentResolver(); 240150c4179995cc0a75f934ef194372f9295957ca2Joe Onorato if (false) { 24143bcf48daea4e763811dffa75f62c2b4a3a39310Yong Liu Log.d(TAG, "storeMessage " + this.toString()); 24243bcf48daea4e763811dffa75f62c2b4a3a39310Yong Liu } 2434da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu return SqliteWrapper.insert(this, resolver, Inbox.CONTENT_URI, values); 2444da6513065fbcfbf7fee9a18176ce62d2f62c825Yong Liu } 24572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project} 246