Loading QKSMS/src/main/java/com/moez/QKSMS/data/Conversation.java +3 −4 Original line number Diff line number Diff line Loading @@ -62,11 +62,10 @@ public class Conversation { Threads.READ }; private static final String UNREAD_SELECTION = "(read=0 OR seen=0)"; public static final String UNREAD_SELECTION = "(read=0 OR seen=0)"; public static final String FAILED_SELECTION = "error != 0"; private static final String[] SEEN_PROJECTION = new String[]{ "seen" }; public static final String[] SEEN_PROJECTION = new String[]{"seen"}; public static final int ID = 0; public static final int DATE = 1; Loading QKSMS/src/main/java/com/moez/QKSMS/receiver/AirplaneModeReceiver.java +34 −9 Original line number Diff line number Diff line package com.moez.QKSMS.receiver; import android.content.BroadcastReceiver; import android.content.ContentUris; import android.content.Context; import android.content.Intent; import android.database.Cursor; import android.net.Uri; import com.google.android.mms.MmsException; import com.moez.QKSMS.data.Conversation; import com.moez.QKSMS.mmssms.Message; import com.moez.QKSMS.mmssms.Transaction; import com.moez.QKSMS.transaction.SmsHelper; import com.moez.QKSMS.ui.messagelist.MessageColumns; import com.moez.QKSMS.ui.messagelist.MessageItem; /** * Listen for changes to the Airplane Mode status, so that we can attempt to re-send failed messages * once we have signal */ public class AirplaneModeReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Cursor cursor = context.getContentResolver().query( SmsHelper.MMS_SMS_CONTENT_PROVIDER, MessageColumns.PROJECTION, SmsHelper.FAILED_SELECTION, null, SmsHelper.sortDateDesc // If we're going into airplane mode, no need to do anything if (intent.getBooleanExtra("state", true)) { return; } // Cursor to find the conversations that contain failed messages Cursor conversationCursor = context.getContentResolver().query( SmsHelper.CONVERSATIONS_CONTENT_PROVIDER, Conversation.ALL_THREADS_PROJECTION, Conversation.FAILED_SELECTION, null, SmsHelper.sortDateDesc ); if (cursor.moveToFirst()) { // Loop through each of the conversations while (conversationCursor.moveToNext()) { Uri uri = ContentUris.withAppendedId(SmsHelper.MMS_SMS_CONTENT_PROVIDER, conversationCursor.getLong(Conversation.ID)); // Find the failed messages within the conversation Cursor cursor = context.getContentResolver().query(uri, MessageColumns.PROJECTION, SmsHelper.FAILED_SELECTION, null, SmsHelper.sortDateAsc); // Map the cursor row to a MessageItem, then re-send it MessageColumns.ColumnsMap columnsMap = new MessageColumns.ColumnsMap(cursor); for (int i = 0; i < cursor.getCount(); i++) { while (cursor.moveToNext()) { try { MessageItem message = new MessageItem(context, cursor.getString(columnsMap.mColumnMsgType), cursor, columnsMap, null, true); MessageItem message = new MessageItem(context, cursor.getString(columnsMap.mColumnMsgType), cursor, columnsMap, null, true); sendSms(context, message); } catch (MmsException e) { e.printStackTrace(); } } cursor.close(); } cursor.close(); conversationCursor.close(); } private void sendSms(Context context, MessageItem messageItem) { Loading @@ -43,6 +66,8 @@ public class AirplaneModeReceiver extends BroadcastReceiver { Message message = new Message(messageItem.mBody, messageItem.mAddress); message.setType(Message.TYPE_SMSMMS); context.getContentResolver().delete(messageItem.mMessageUri, null, null); sendTransaction.sendNewMessage(message, 0); } } Loading
QKSMS/src/main/java/com/moez/QKSMS/data/Conversation.java +3 −4 Original line number Diff line number Diff line Loading @@ -62,11 +62,10 @@ public class Conversation { Threads.READ }; private static final String UNREAD_SELECTION = "(read=0 OR seen=0)"; public static final String UNREAD_SELECTION = "(read=0 OR seen=0)"; public static final String FAILED_SELECTION = "error != 0"; private static final String[] SEEN_PROJECTION = new String[]{ "seen" }; public static final String[] SEEN_PROJECTION = new String[]{"seen"}; public static final int ID = 0; public static final int DATE = 1; Loading
QKSMS/src/main/java/com/moez/QKSMS/receiver/AirplaneModeReceiver.java +34 −9 Original line number Diff line number Diff line package com.moez.QKSMS.receiver; import android.content.BroadcastReceiver; import android.content.ContentUris; import android.content.Context; import android.content.Intent; import android.database.Cursor; import android.net.Uri; import com.google.android.mms.MmsException; import com.moez.QKSMS.data.Conversation; import com.moez.QKSMS.mmssms.Message; import com.moez.QKSMS.mmssms.Transaction; import com.moez.QKSMS.transaction.SmsHelper; import com.moez.QKSMS.ui.messagelist.MessageColumns; import com.moez.QKSMS.ui.messagelist.MessageItem; /** * Listen for changes to the Airplane Mode status, so that we can attempt to re-send failed messages * once we have signal */ public class AirplaneModeReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Cursor cursor = context.getContentResolver().query( SmsHelper.MMS_SMS_CONTENT_PROVIDER, MessageColumns.PROJECTION, SmsHelper.FAILED_SELECTION, null, SmsHelper.sortDateDesc // If we're going into airplane mode, no need to do anything if (intent.getBooleanExtra("state", true)) { return; } // Cursor to find the conversations that contain failed messages Cursor conversationCursor = context.getContentResolver().query( SmsHelper.CONVERSATIONS_CONTENT_PROVIDER, Conversation.ALL_THREADS_PROJECTION, Conversation.FAILED_SELECTION, null, SmsHelper.sortDateDesc ); if (cursor.moveToFirst()) { // Loop through each of the conversations while (conversationCursor.moveToNext()) { Uri uri = ContentUris.withAppendedId(SmsHelper.MMS_SMS_CONTENT_PROVIDER, conversationCursor.getLong(Conversation.ID)); // Find the failed messages within the conversation Cursor cursor = context.getContentResolver().query(uri, MessageColumns.PROJECTION, SmsHelper.FAILED_SELECTION, null, SmsHelper.sortDateAsc); // Map the cursor row to a MessageItem, then re-send it MessageColumns.ColumnsMap columnsMap = new MessageColumns.ColumnsMap(cursor); for (int i = 0; i < cursor.getCount(); i++) { while (cursor.moveToNext()) { try { MessageItem message = new MessageItem(context, cursor.getString(columnsMap.mColumnMsgType), cursor, columnsMap, null, true); MessageItem message = new MessageItem(context, cursor.getString(columnsMap.mColumnMsgType), cursor, columnsMap, null, true); sendSms(context, message); } catch (MmsException e) { e.printStackTrace(); } } cursor.close(); } cursor.close(); conversationCursor.close(); } private void sendSms(Context context, MessageItem messageItem) { Loading @@ -43,6 +66,8 @@ public class AirplaneModeReceiver extends BroadcastReceiver { Message message = new Message(messageItem.mBody, messageItem.mAddress); message.setType(Message.TYPE_SMSMMS); context.getContentResolver().delete(messageItem.mMessageUri, null, null); sendTransaction.sendNewMessage(message, 0); } }