Java 类android.database.sqlite.SqliteWrapper 实例源码

项目:qksms    文件:RetrieveTransaction.java   
private String getContentLocation(Context context, Uri uri)
        throws MmsException {
    Cursor cursor = SqliteWrapper.query(context, context.getContentResolver(),
                        uri, PROJECTION, null, null, null);
    mLocked = false;

    if (cursor != null) {
        try {
            if ((cursor.getCount() == 1) && cursor.moveToFirst()) {
                // Get the locked flag from the M-Notification.ind so it can be transferred
                // to the real message after the download.
                mLocked = cursor.getInt(COLUMN_LOCKED) == 1;
                return cursor.getString(COLUMN_CONTENT_LOCATION);
            }
        } finally {
            cursor.close();
        }
    }

    throw new MmsException("Cannot get X-Mms-Content-Location from: " + uri);
}
项目:qksms    文件:RetryScheduler.java   
private void markMmsFailedToSend(Context context, Uri msgUri) {
    // https://github.com/qklabs/aosp-messenger/blob/master/src/com/android/mms/data/WorkingMessage.java#L1476-1476

    try {
        PduPersister p = PduPersister.getPduPersister(context);
        // Move the message into MMS Outbox. A trigger will create an entry in
        // the "pending_msgs" table.
        p.move(msgUri, Telephony.Mms.Outbox.CONTENT_URI);

        // Now update the pending_msgs table with an error for that new item.
        ContentValues values = new ContentValues(1);
        values.put(Telephony.MmsSms.PendingMessages.ERROR_TYPE, Telephony.MmsSms.ERR_TYPE_GENERIC_PERMANENT);
        long msgId = ContentUris.parseId(msgUri);
        SqliteWrapper.update(context, mContentResolver,
                Telephony.MmsSms.PendingMessages.CONTENT_URI,
                values, Telephony.MmsSms.PendingMessages.MSG_ID + "=" + msgId, null);
    } catch (MmsException e) {
        // Not much we can do here. If the p.move throws an exception, we'll just
        // leave the message in the draft box.
        Log.e(TAG, "Failed to move message to outbox and mark as error: " + msgUri, e);
    }
}
项目:qksms    文件:RetryScheduler.java   
private int getResponseStatus(long msgID) {
    int respStatus = 0;
    Cursor cursor = SqliteWrapper.query(mContext, mContentResolver,
            Mms.Outbox.CONTENT_URI, null, Mms._ID + "=" + msgID, null, null);
    try {
        if (cursor.moveToFirst()) {
            respStatus = cursor.getInt(cursor.getColumnIndexOrThrow(Mms.RESPONSE_STATUS));
        }
    } finally {
        cursor.close();
    }
    if (respStatus != 0) {
        Log.e(TAG, "Response status is: " + respStatus);
    }
    return respStatus;
}
项目:qksms    文件:RetryScheduler.java   
private int getRetrieveStatus(long msgID) {
    int retrieveStatus = 0;
    Cursor cursor = SqliteWrapper.query(mContext, mContentResolver,
            Mms.Inbox.CONTENT_URI, null, Mms._ID + "=" + msgID, null, null);
    try {
        if (cursor.moveToFirst()) {
            retrieveStatus = cursor.getInt(cursor.getColumnIndexOrThrow(
                        Mms.RESPONSE_STATUS));
        }
    } finally {
        cursor.close();
    }
    if (retrieveStatus != 0) {
        if (LOCAL_LOGV) Log.v(TAG, "Retrieve status is: " + retrieveStatus);
    }
    return retrieveStatus;
}
项目:qksms    文件:TransactionService.java   
public void markAllPendingTransactionsAsFailed() {
    synchronized (mProcessing) {
        while (!mPending.isEmpty()) {
            Transaction transaction = mPending.remove(0);
            transaction.mTransactionState.setState(TransactionState.FAILED);
            if (transaction instanceof SendTransaction) {
                Uri uri = ((SendTransaction)transaction).mSendReqURI;
                transaction.mTransactionState.setContentUri(uri);
                int respStatus = PduHeaders.RESPONSE_STATUS_ERROR_NETWORK_PROBLEM;
                ContentValues values = new ContentValues(1);
                values.put("resp_st", respStatus);

                SqliteWrapper.update(TransactionService.this,
                        TransactionService.this.getContentResolver(),
                        uri, values, null, null);
            }
            transaction.notifyObservers();
        }
    }
}
项目:qksms    文件:RateController.java   
public final boolean isLimitSurpassed() {
    long oneHourAgo = System.currentTimeMillis() - ONE_HOUR;
    Cursor c = SqliteWrapper.query(mContext, mContext.getContentResolver(),
            Uri.withAppendedPath(
                    Uri.parse("content://mms"), "rate"), new String[] { "COUNT(*) AS rate" },
            "sent_time" + ">" + oneHourAgo, null, null);
    if (c != null) {
        try {
            if (c.moveToFirst()) {
                return c.getInt(0) >= RATE_LIMIT;
            }
        } finally {
            c.close();
        }
    }
    return false;
}
项目:qksms    文件:PushReceiver.java   
private static boolean isDuplicateNotification(
        Context context, NotificationInd nInd) {
    byte[] rawLocation = nInd.getContentLocation();
    if (rawLocation != null) {
        String location = new String(rawLocation);
        // TODO do not use the sdk > 19 sms apis for this
        String selection = "ct_l = ?";
        String[] selectionArgs = new String[] { location };
        Cursor cursor = SqliteWrapper.query(
                context, context.getContentResolver(),
                Uri.parse("content://mms"), new String[] { "_id" },
                selection, selectionArgs, null);
        if (cursor != null) {
            try {
                if (cursor.getCount() > 0) {
                    // We already received the same notification before.
                    return true;
                }
            } finally {
                cursor.close();
            }
        }
    }
    return false;
}
项目:qksms    文件:RecipientIdCache.java   
public static void canonicalTableDump() {
    Log.d(TAG, "**** Dump of canoncial_addresses table ****");
    Context context = sInstance.mContext;
    Cursor c = SqliteWrapper.query(context, context.getContentResolver(),
            sAllCanonical, null, null, null, null);
    if (c == null) {
        Log.w(TAG, "null Cursor in content://mms-sms/canonical-addresses");
    }
    try {
        while (c.moveToNext()) {
            // TODO: don't hardcode the column indices
            long id = c.getLong(0);
            String number = c.getString(1);
            Log.d(TAG, "id: " + id + " number: " + number);
        }
    } finally {
        c.close();
    }
}
项目:qksms    文件:RecipientIdCache.java   
/**
 * getSingleNumberFromCanonicalAddresses looks up the recipientId in the canonical_addresses
 * table and returns the associated number or email address.
 * @param context needed for the ContentResolver
 * @param recipientId of the contact to look up
 * @return phone number or email address of the recipientId
 */
public static String getSingleAddressFromCanonicalAddressInDb(final Context context,
                                                              final String recipientId) {
    Cursor c = SqliteWrapper.query(context, context.getContentResolver(),
            ContentUris.withAppendedId(sSingleCanonicalAddressUri, Long.parseLong(recipientId)),
            null, null, null, null);
    if (c == null) {
        LogTag.warn(TAG, "null Cursor looking up recipient: " + recipientId);
        return null;
    }
    try {
        if (c.moveToFirst()) {
            String number = c.getString(0);
            return number;
        }
    } finally {
        c.close();
    }
    return null;
}
项目:qksms    文件:MessageUtils.java   
public static Uri getContactUriForEmail(Context context, String emailAddress) {
    Cursor cursor = SqliteWrapper.query(context, context.getContentResolver(),
            Uri.withAppendedPath(ContactsContract.CommonDataKinds.Email.CONTENT_LOOKUP_URI, Uri.encode(emailAddress)),
            new String[]{ContactsContract.CommonDataKinds.Email.CONTACT_ID, ContactsContract.Contacts.DISPLAY_NAME}, null, null, null);

    if (cursor != null) {
        try {
            while (cursor.moveToNext()) {
                String name = cursor.getString(1);
                if (!TextUtils.isEmpty(name)) {
                    return ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, cursor.getLong(0));
                }
            }
        } finally {
            cursor.close();
        }
    }
    return null;
}
项目:sms_DualCard    文件:SmsMessageSender.java   
/**
 * Get the service center to use for a reply.
 *
 * The rule from TS 23.040 D.6 is that we send reply messages to
 * the service center of the message to which we're replying, but
 * only if we haven't already replied to that message and only if
 * <code>TP-Reply-Path</code> was set in that message.
 *
 * Therefore, return the service center from the most recent
 * message in the conversation, but only if it is a message from
 * the other party, and only if <code>TP-Reply-Path</code> is set.
 * Otherwise, return null.
 */
private String getOutgoingServiceCenter(long threadId) {
    Cursor cursor = null;

    try {
        cursor = SqliteWrapper.query(mContext, mContext.getContentResolver(),
                        Inbox.CONTENT_URI, SERVICE_CENTER_PROJECTION,
                        "thread_id = " + threadId, null, "date DESC");

        if ((cursor == null) || !cursor.moveToFirst()) {
            return null;
        }

        boolean replyPathPresent = (1 == cursor.getInt(COLUMN_REPLY_PATH_PRESENT));
        return replyPathPresent ? cursor.getString(COLUMN_SERVICE_CENTER) : null;
    } finally {
        if (cursor != null) {
            cursor.close();
        }
    }
}
项目:sms_DualCard    文件:RetrieveTransaction.java   
private String getContentLocation(Context context, Uri uri)
        throws MmsException {
    Cursor cursor = SqliteWrapper.query(context, context.getContentResolver(),
                        uri, PROJECTION, null, null, null);
    mLocked = false;

    if (cursor != null) {
        try {
            if ((cursor.getCount() == 1) && cursor.moveToFirst()) {
                // Get the locked flag from the M-Notification.ind so it can be transferred
                // to the real message after the download.
                mLocked = cursor.getInt(COLUMN_LOCKED) == 1;
                return cursor.getString(COLUMN_CONTENT_LOCATION);
            }
        } finally {
            cursor.close();
        }
    }

    throw new MmsException("Cannot get X-Mms-Content-Location from: " + uri);
}
项目:sms_DualCard    文件:RetryScheduler.java   
private int getResponseStatus(long msgID) {
    int respStatus = 0;
    Cursor cursor = SqliteWrapper.query(mContext, mContentResolver,
            Mms.Outbox.CONTENT_URI, null, Mms._ID + "=" + msgID, null, null);
    try {
        if (cursor.moveToFirst()) {
            respStatus = cursor.getInt(cursor.getColumnIndexOrThrow(Mms.RESPONSE_STATUS));
        }
    } finally {
        cursor.close();
    }
    if (respStatus != 0) {
        Log.e(TAG, "Response status is: " + respStatus);
    }
    return respStatus;
}
项目:sms_DualCard    文件:RetryScheduler.java   
private int getRetrieveStatus(long msgID) {
    int retrieveStatus = 0;
    Cursor cursor = SqliteWrapper.query(mContext, mContentResolver,
            Mms.Inbox.CONTENT_URI, null, Mms._ID + "=" + msgID, null, null);
    try {
        if (cursor.moveToFirst()) {
            retrieveStatus = cursor.getInt(cursor.getColumnIndexOrThrow(
                        Mms.RESPONSE_STATUS));
        }
    } finally {
        cursor.close();
    }
    if (retrieveStatus != 0) {
        if (Log.isLoggable(LogTag.TRANSACTION, Log.VERBOSE)) {
            Log.v(TAG, "Retrieve status is: " + retrieveStatus);
        }
    }
    return retrieveStatus;
}
项目:sms_DualCard    文件:PushReceiver.java   
private static boolean isDuplicateNotification(
        Context context, NotificationInd nInd) {
    byte[] rawLocation = nInd.getContentLocation();
    if (rawLocation != null) {
        String location = new String(rawLocation);
        String selection = Mms.CONTENT_LOCATION + " = ?";
        String[] selectionArgs = new String[] { location };
        Cursor cursor = SqliteWrapper.query(
                context, context.getContentResolver(),
                Mms.CONTENT_URI, new String[] { Mms._ID },
                selection, selectionArgs, null);
        if (cursor != null) {
            try {
                if (cursor.getCount() > 0) {
                    // We already received the same notification before.
                    return true;
                }
            } finally {
                cursor.close();
            }
        }
    }
    return false;
}
项目:sms_DualCard    文件:MessagingNotification.java   
private static int getDownloadFailedMessageCount(Context context) {
    // Look for any messages in the MMS Inbox that are of the type
    // NOTIFICATION_IND (i.e. not already downloaded) and in the
    // permanent failure state.  If there are none, cancel any
    // failed download notification.
    Cursor c = SqliteWrapper.query(context, context.getContentResolver(),
            Mms.Inbox.CONTENT_URI, null,
            Mms.MESSAGE_TYPE + "=" +
                String.valueOf(PduHeaders.MESSAGE_TYPE_NOTIFICATION_IND) +
            " AND " + Mms.STATUS + "=" +
                String.valueOf(DownloadManager.STATE_PERMANENT_FAILURE),
            null, null);
    if (c == null) {
        return 0;
    }
    int count = c.getCount();
    c.close();
    return count;
}
项目:sms_DualCard    文件:MessagingNotification.java   
/**
 * Get the thread ID of the SMS message with the given URI
 * @param context The context
 * @param uri The URI of the SMS message
 * @return The thread ID, or THREAD_NONE if the URI contains no entries
 */
public static long getSmsThreadId(Context context, Uri uri) {
    Cursor cursor = SqliteWrapper.query(
        context,
        context.getContentResolver(),
        uri,
        SMS_THREAD_ID_PROJECTION,
        null,
        null,
        null);

    if (cursor == null) {
        return THREAD_NONE;
    }

    try {
        if (cursor.moveToFirst()) {
            return cursor.getLong(cursor.getColumnIndex(Sms.THREAD_ID));
        } else {
            return THREAD_NONE;
        }
    } finally {
        cursor.close();
    }
}
项目:sms_DualCard    文件:MessagingNotification.java   
/**
 * Get the thread ID of the MMS message with the given URI
 * @param context The context
 * @param uri The URI of the SMS message
 * @return The thread ID, or THREAD_NONE if the URI contains no entries
 */
public static long getThreadId(Context context, Uri uri) {
    Cursor cursor = SqliteWrapper.query(
            context,
            context.getContentResolver(),
            uri,
            MMS_THREAD_ID_PROJECTION,
            null,
            null,
            null);

    if (cursor == null) {
        return THREAD_NONE;
    }

    try {
        if (cursor.moveToFirst()) {
            return cursor.getLong(cursor.getColumnIndex(Mms.THREAD_ID));
        } else {
            return THREAD_NONE;
        }
    } finally {
        cursor.close();
    }
}
项目:sms_DualCard    文件:SmsReceiverService.java   
/**
 * Move all messages that are in the outbox to the failed state and set them to unread.
 * @return The number of messages that were actually moved
 */
private int moveOutboxMessagesToFailedBox() {
    ContentValues values = new ContentValues(3);

    values.put(Sms.TYPE, Sms.MESSAGE_TYPE_FAILED);
    values.put(Sms.ERROR_CODE, SmsManager.RESULT_ERROR_GENERIC_FAILURE);
    values.put(Sms.READ, Integer.valueOf(0));

    int messageCount = SqliteWrapper.update(
            getApplicationContext(), getContentResolver(), Outbox.CONTENT_URI,
            values, "type = " + Sms.MESSAGE_TYPE_OUTBOX, null);
    if (Log.isLoggable(LogTag.TRANSACTION, Log.VERBOSE) || LogTag.DEBUG_SEND) {
        Log.v(TAG, "moveOutboxMessagesToFailedBox messageCount: " + messageCount);
    }
    return messageCount;
}
项目:sms_DualCard    文件:RecipientIdCache.java   
public static void canonicalTableDump() {
    Log.d(TAG, "**** Dump of canoncial_addresses table ****");
    Context context = sInstance.mContext;
    Cursor c = SqliteWrapper.query(context, context.getContentResolver(),
            sAllCanonical, null, null, null, null);
    if (c == null) {
        Log.w(TAG, "null Cursor in content://mms-sms/canonical-addresses");
    }
    try {
        while (c.moveToNext()) {
            // TODO: don't hardcode the column indices
            long id = c.getLong(0);
            String number = c.getString(1);
            Log.d(TAG, "id: " + id + " number: " + number);
        }
    } finally {
        c.close();
    }
}
项目:sms_DualCard    文件:RecipientIdCache.java   
/**
 * getSingleNumberFromCanonicalAddresses looks up the recipientId in the canonical_addresses
 * table and returns the associated number or email address.
 * @param context needed for the ContentResolver
 * @param recipientId of the contact to look up
 * @return phone number or email address of the recipientId
 */
public static String getSingleAddressFromCanonicalAddressInDb(final Context context,
        final String recipientId) {
    Cursor c = SqliteWrapper.query(context, context.getContentResolver(),
            ContentUris.withAppendedId(sSingleCanonicalAddressUri, Long.parseLong(recipientId)),
            null, null, null, null);
    if (c == null) {
        LogTag.warn(TAG, "null Cursor looking up recipient: " + recipientId);
        return null;
    }
    try {
        if (c.moveToFirst()) {
            String number = c.getString(0);
            return number;
        }
    } finally {
        c.close();
    }
    return null;
}
项目:sms_DualCard    文件:WorkingMessage.java   
private void markMmsMessageWithError(Uri mmsUri) {
    try {
        PduPersister p = PduPersister.getPduPersister(mActivity);
        // Move the message into MMS Outbox. A trigger will create an entry
        // in
        // the "pending_msgs" table.
        p.move(mmsUri, Mms.Outbox.CONTENT_URI);

        // Now update the pending_msgs table with an error for that new
        // item.
        ContentValues values = new ContentValues(1);
        values.put(PendingMessages.ERROR_TYPE,
                MmsSms.ERR_TYPE_GENERIC_PERMANENT);
        long msgId = ContentUris.parseId(mmsUri);
        SqliteWrapper.update(mActivity, mContentResolver,
                PendingMessages.CONTENT_URI, values, PendingMessages.MSG_ID
                        + "=" + msgId, null);
    } catch (MmsException e) {
        // Not much we can do here. If the p.move throws an exception, we'll
        // just
        // leave the message in the draft box.
        Log.e(TAG, "Failed to move message to outbox and mark as error: "
                + mmsUri, e);
    }
}
项目:sms_DualCard    文件:WorkingMessage.java   
private void updateDraftSmsMessage(final Conversation conv, String contents) {
    final long threadId = conv.getThreadId();
    if (Log.isLoggable(LogTag.APP, Log.VERBOSE)) {
        LogTag.debug("updateDraftSmsMessage tid=%d, contents=\"%s\"",
                threadId, contents);
    }

    // If we don't have a valid thread, there's nothing to do.
    if (threadId <= 0) {
        return;
    }

    ContentValues values = new ContentValues(3);
    values.put(Sms.THREAD_ID, threadId);
    values.put(Sms.BODY, contents);
    values.put(Sms.TYPE, Sms.MESSAGE_TYPE_DRAFT);
    SqliteWrapper.insert(mActivity, mContentResolver, Sms.CONTENT_URI,
            values);
    asyncDeleteDraftMmsMessage(conv);
    mMessageUri = null;
}
项目:sms_DualCard    文件:ComposeMessageActivity.java   
private Uri getContactUriForEmail(String emailAddress) {
    Cursor cursor = SqliteWrapper.query(
            this,
            getContentResolver(),
            Uri.withAppendedPath(Email.CONTENT_LOOKUP_URI,
                    Uri.encode(emailAddress)), new String[] {
                    Email.CONTACT_ID, Contacts.DISPLAY_NAME }, null, null,
            null);

    if (cursor != null) {
        try {
            while (cursor.moveToNext()) {
                String name = cursor.getString(1);
                if (!TextUtils.isEmpty(name)) {
                    return ContentUris.withAppendedId(Contacts.CONTENT_URI,
                            cursor.getLong(0));
                }
            }
        } finally {
            cursor.close();
        }
    }
    return null;
}
项目:sms_DualCard    文件:ComposeMessageActivity.java   
private void startMsgListQuery(int token) {
    Uri conversationUri = mConversation.getUri();

    if (conversationUri == null) {
        log("##### startMsgListQuery: conversationUri is null, bail!");
        return;
    }

    long threadId = mConversation.getThreadId();
    if (LogTag.VERBOSE || Log.isLoggable(LogTag.APP, Log.VERBOSE)) {
        log("startMsgListQuery for " + conversationUri + ", threadId="
                + threadId + " token: " + token + " mConversation: "
                + mConversation);
    }

    // Cancel any pending queries
    mBackgroundQueryHandler.cancelOperation(token);
    try {
        // Kick off the new query
        mBackgroundQueryHandler.startQuery(token, threadId /* cookie */,
                conversationUri, PROJECTION, null, null, null);
    } catch (SQLiteException e) {
        SqliteWrapper.checkSQLiteException(this, e);
    }
}
项目:sms_DualCard    文件:ComposeMessageActivity.java   
private long getMessageDate(Uri uri) {
    if (uri != null) {
        Cursor cursor = SqliteWrapper.query(this, mContentResolver, uri,
                new String[] { Mms.DATE }, null, null, null);
        if (cursor != null) {
            try {
                if ((cursor.getCount() == 1) && cursor.moveToFirst()) {
                    return cursor.getLong(0) * 1000L;
                }
            } finally {
                cursor.close();
            }
        }
    }
    return NO_DATE_FOR_DIALOG;
}
项目:sms_DualCard    文件:RateController.java   
public final boolean isLimitSurpassed() {
    long oneHourAgo = System.currentTimeMillis() - ONE_HOUR;
    Cursor c = SqliteWrapper.query(mContext, mContext.getContentResolver(),
            Rate.CONTENT_URI, new String[] { "COUNT(*) AS rate" },
            Rate.SENT_TIME + ">" + oneHourAgo, null, null);
    if (c != null) {
        try {
            if (c.moveToFirst()) {
                return c.getInt(0) >= RATE_LIMIT;
            }
        } finally {
            c.close();
        }
    }
    return false;
}
项目:android-aosp-mms    文件:SmsMessageSender.java   
/**
 * Get the service center to use for a reply.
 *
 * The rule from TS 23.040 D.6 is that we send reply messages to
 * the service center of the message to which we're replying, but
 * only if we haven't already replied to that message and only if
 * <code>TP-Reply-Path</code> was set in that message.
 *
 * Therefore, return the service center from the most recent
 * message in the conversation, but only if it is a message from
 * the other party, and only if <code>TP-Reply-Path</code> is set.
 * Otherwise, return null.
 */
private String getOutgoingServiceCenter(long threadId) {
    Cursor cursor = null;

    try {
        cursor = SqliteWrapper.query(mContext, mContext.getContentResolver(),
                        Inbox.CONTENT_URI, SERVICE_CENTER_PROJECTION,
                        "thread_id = " + threadId, null, "date DESC");

        if ((cursor == null) || !cursor.moveToFirst()) {
            return null;
        }

        boolean replyPathPresent = (1 == cursor.getInt(COLUMN_REPLY_PATH_PRESENT));
        return replyPathPresent ? cursor.getString(COLUMN_SERVICE_CENTER) : null;
    } finally {
        if (cursor != null) {
            cursor.close();
        }
    }
}
项目:android-aosp-mms    文件:RetrieveTransaction.java   
private String getContentLocation(Context context, Uri uri)
        throws MmsException {
    Cursor cursor = SqliteWrapper.query(context, context.getContentResolver(),
                        uri, PROJECTION, null, null, null);
    mLocked = false;

    if (cursor != null) {
        try {
            if ((cursor.getCount() == 1) && cursor.moveToFirst()) {
                // Get the locked flag from the M-Notification.ind so it can be transferred
                // to the real message after the download.
                mLocked = cursor.getInt(COLUMN_LOCKED) == 1;
                return cursor.getString(COLUMN_CONTENT_LOCATION);
            }
        } finally {
            cursor.close();
        }
    }

    throw new MmsException("Cannot get X-Mms-Content-Location from: " + uri);
}
项目:android-aosp-mms    文件:RetryScheduler.java   
private int getResponseStatus(long msgID) {
    int respStatus = 0;
    Cursor cursor = SqliteWrapper.query(mContext, mContentResolver,
            Mms.Outbox.CONTENT_URI, null, Mms._ID + "=" + msgID, null, null);
    try {
        if (cursor.moveToFirst()) {
            respStatus = cursor.getInt(cursor.getColumnIndexOrThrow(Mms.RESPONSE_STATUS));
        }
    } finally {
        cursor.close();
    }
    if (respStatus != 0) {
        Log.e(TAG, "Response status is: " + respStatus);
    }
    return respStatus;
}
项目:android-aosp-mms    文件:RetryScheduler.java   
private int getRetrieveStatus(long msgID) {
    int retrieveStatus = 0;
    Cursor cursor = SqliteWrapper.query(mContext, mContentResolver,
            Mms.Inbox.CONTENT_URI, null, Mms._ID + "=" + msgID, null, null);
    try {
        if (cursor.moveToFirst()) {
            retrieveStatus = cursor.getInt(cursor.getColumnIndexOrThrow(
                        Mms.RESPONSE_STATUS));
        }
    } finally {
        cursor.close();
    }
    if (retrieveStatus != 0) {
        if (Log.isLoggable(LogTag.TRANSACTION, Log.VERBOSE)) {
            Log.v(TAG, "Retrieve status is: " + retrieveStatus);
        }
    }
    return retrieveStatus;
}
项目:android-aosp-mms    文件:PushReceiver.java   
private static boolean isDuplicateNotification(
        Context context, NotificationInd nInd) {
    byte[] rawLocation = nInd.getContentLocation();
    if (rawLocation != null) {
        String location = new String(rawLocation);
        String selection = Mms.CONTENT_LOCATION + " = ?";
        String[] selectionArgs = new String[] { location };
        Cursor cursor = SqliteWrapper.query(
                context, context.getContentResolver(),
                Mms.CONTENT_URI, new String[] { Mms._ID },
                selection, selectionArgs, null);
        if (cursor != null) {
            try {
                if (cursor.getCount() > 0) {
                    // We already received the same notification before.
                    return true;
                }
            } finally {
                cursor.close();
            }
        }
    }
    return false;
}
项目:android-aosp-mms    文件:MessagingNotification.java   
private static int getDownloadFailedMessageCount(Context context) {
    // Look for any messages in the MMS Inbox that are of the type
    // NOTIFICATION_IND (i.e. not already downloaded) and in the
    // permanent failure state.  If there are none, cancel any
    // failed download notification.
    Cursor c = SqliteWrapper.query(context, context.getContentResolver(),
            Mms.Inbox.CONTENT_URI, null,
            Mms.MESSAGE_TYPE + "=" +
                String.valueOf(PduHeaders.MESSAGE_TYPE_NOTIFICATION_IND) +
            " AND " + Mms.STATUS + "=" +
                String.valueOf(DownloadManager.STATE_PERMANENT_FAILURE),
            null, null);
    if (c == null) {
        return 0;
    }
    int count = c.getCount();
    c.close();
    return count;
}
项目:android-aosp-mms    文件:SmsReceiverService.java   
/**
 * Move all messages that are in the outbox to the failed state and set them to unread.
 * @return The number of messages that were actually moved
 */
private int moveOutboxMessagesToFailedBox() {
    ContentValues values = new ContentValues(3);

    values.put(Sms.TYPE, Sms.MESSAGE_TYPE_FAILED);
    values.put(Sms.ERROR_CODE, SmsManager.RESULT_ERROR_GENERIC_FAILURE);
    values.put(Sms.READ, Integer.valueOf(0));

    int messageCount = SqliteWrapper.update(
            getApplicationContext(), getContentResolver(), Outbox.CONTENT_URI,
            values, "type = " + Sms.MESSAGE_TYPE_OUTBOX, null);
    if (Log.isLoggable(LogTag.TRANSACTION, Log.VERBOSE) || LogTag.DEBUG_SEND) {
        Log.v(TAG, "moveOutboxMessagesToFailedBox messageCount: " + messageCount);
    }
    return messageCount;
}
项目:android-aosp-mms    文件:TransactionService.java   
public void markAllPendingTransactionsAsFailed() {
    synchronized (mProcessing) {
        while (mPending.size() != 0) {
            Transaction transaction = mPending.remove(0);
            transaction.mTransactionState.setState(TransactionState.FAILED);
            if (transaction instanceof SendTransaction) {
                Uri uri = ((SendTransaction)transaction).mSendReqURI;
                transaction.mTransactionState.setContentUri(uri);
                int respStatus = PduHeaders.RESPONSE_STATUS_ERROR_NETWORK_PROBLEM;
                ContentValues values = new ContentValues(1);
                values.put(Mms.RESPONSE_STATUS, respStatus);

                SqliteWrapper.update(TransactionService.this,
                        TransactionService.this.getContentResolver(),
                        uri, values, null, null);
            }
            transaction.notifyObservers();
        }
    }
}
项目:android-aosp-mms    文件:RecipientIdCache.java   
public static void canonicalTableDump() {
    Log.d(TAG, "**** Dump of canoncial_addresses table ****");
    Context context = sInstance.mContext;
    Cursor c = SqliteWrapper.query(context, context.getContentResolver(),
            sAllCanonical, null, null, null, null);
    if (c == null) {
        Log.w(TAG, "null Cursor in content://mms-sms/canonical-addresses");
    }
    try {
        while (c.moveToNext()) {
            // TODO: don't hardcode the column indices
            long id = c.getLong(0);
            String number = c.getString(1);
            Log.d(TAG, "id: " + id + " number: " + number);
        }
    } finally {
        c.close();
    }
}
项目:android-aosp-mms    文件:RecipientIdCache.java   
/**
 * getSingleNumberFromCanonicalAddresses looks up the recipientId in the canonical_addresses
 * table and returns the associated number or email address.
 * @param context needed for the ContentResolver
 * @param recipientId of the contact to look up
 * @return phone number or email address of the recipientId
 */
public static String getSingleAddressFromCanonicalAddressInDb(final Context context,
        final String recipientId) {
    Cursor c = SqliteWrapper.query(context, context.getContentResolver(),
            ContentUris.withAppendedId(sSingleCanonicalAddressUri, Long.parseLong(recipientId)),
            null, null, null, null);
    if (c == null) {
        LogTag.warn(TAG, "null Cursor looking up recipient: " + recipientId);
        return null;
    }
    try {
        if (c.moveToFirst()) {
            String number = c.getString(0);
            return number;
        }
    } finally {
        c.close();
    }
    return null;
}
项目:android-aosp-mms    文件:WorkingMessage.java   
private void markMmsMessageWithError(Uri mmsUri) {
    try {
        PduPersister p = PduPersister.getPduPersister(mActivity);
        // Move the message into MMS Outbox. A trigger will create an entry in
        // the "pending_msgs" table.
        p.move(mmsUri, Mms.Outbox.CONTENT_URI);

        // Now update the pending_msgs table with an error for that new item.
        ContentValues values = new ContentValues(1);
        values.put(PendingMessages.ERROR_TYPE, MmsSms.ERR_TYPE_GENERIC_PERMANENT);
        long msgId = ContentUris.parseId(mmsUri);
        SqliteWrapper.update(mActivity, mContentResolver,
                PendingMessages.CONTENT_URI,
                values, PendingMessages.MSG_ID + "=" + msgId, null);
    } catch (MmsException e) {
        // Not much we can do here. If the p.move throws an exception, we'll just
        // leave the message in the draft box.
        Log.e(TAG, "Failed to move message to outbox and mark as error: " + mmsUri, e);
    }
}
项目:android-aosp-mms    文件:WorkingMessage.java   
private void updateDraftSmsMessage(final Conversation conv, String contents) {
    final long threadId = conv.getThreadId();
    if (Log.isLoggable(LogTag.APP, Log.VERBOSE)) {
        LogTag.debug("updateDraftSmsMessage tid=%d, contents=\"%s\"", threadId, contents);
    }

    // If we don't have a valid thread, there's nothing to do.
    if (threadId <= 0) {
        return;
    }

    ContentValues values = new ContentValues(3);
    values.put(Sms.THREAD_ID, threadId);
    values.put(Sms.BODY, contents);
    values.put(Sms.TYPE, Sms.MESSAGE_TYPE_DRAFT);
    SqliteWrapper.insert(mActivity, mContentResolver, Sms.CONTENT_URI, values);
    asyncDeleteDraftMmsMessage(conv);
    mMessageUri = null;
}
项目:android-aosp-mms    文件:ComposeMessageActivity.java   
private Uri getContactUriForEmail(String emailAddress) {
    Cursor cursor = SqliteWrapper.query(this, getContentResolver(),
            Uri.withAppendedPath(Email.CONTENT_LOOKUP_URI, Uri.encode(emailAddress)),
            new String[] { Email.CONTACT_ID, Contacts.DISPLAY_NAME }, null, null, null);

    if (cursor != null) {
        try {
            while (cursor.moveToNext()) {
                String name = cursor.getString(1);
                if (!TextUtils.isEmpty(name)) {
                    return ContentUris.withAppendedId(Contacts.CONTENT_URI, cursor.getLong(0));
                }
            }
        } finally {
            cursor.close();
        }
    }
    return null;
}