package cn.edu.tsinghua.hpc.tmms.util;
import java.util.HashSet;
import java.util.Set;
import cn.edu.tsinghua.hpc.google.tmms.util.SqliteWrapper;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.provider.BaseColumns;
import android.provider.ContactsContract.StatusUpdates;
import android.provider.Telephony.BaseMmsColumns;
import android.provider.Telephony.Mms;
import android.provider.Telephony.MmsSms;
import android.provider.Telephony.TextBasedSmsColumns;
import android.provider.Telephony.ThreadsColumns;
import android.util.Log;
public class TTelephony {
public static final class TMms{
public static final String AUTHORITY = "tmms";
public static final Uri AUTHORITY_URI = Uri.parse("content://" + AUTHORITY);
public static final Uri CONTENT_URI = AUTHORITY_URI;
public static final Uri REPORT_REQUEST_URI = Uri.withAppendedPath(
CONTENT_URI, "report-request");
public static final Uri REPORT_STATUS_URI = Uri.withAppendedPath(
CONTENT_URI, "report-status");
public static final class TDraft{
public static final Uri
CONTENT_URI = Uri.withAppendedPath(
AUTHORITY_URI, "drafts");
}
public static final class TOutbox implements BaseColumns, TextBasedSmsColumns {
public static final Uri CONTENT_URI = Uri.withAppendedPath(
AUTHORITY_URI, "outbox");
}
public static final class TInbox {
public static final Uri CONTENT_URI = Uri.withAppendedPath(
AUTHORITY_URI, "inbox");
}
public static final class TSent {
public static final Uri CONTENT_URI = Uri.withAppendedPath(
AUTHORITY_URI, "sent");
}
public static final class TScrapSpace {
public static final Uri CONTENT_URI = Uri.withAppendedPath(
AUTHORITY_URI, "scrapSpace");
}
public static final class TRate {
public static final Uri CONTENT_URI = Uri.withAppendedPath(
AUTHORITY_URI, "rate");
}
}
public static final class TMmsSms{
public static final String AUTHORITY = "tmms-sms";
public static final Uri AUTHORITY_URI = Uri.parse("content://" + AUTHORITY);
public static final Uri CONTENT_URI = AUTHORITY_URI;
public static final Uri CONTENT_CONVERSATIONS_URI = Uri.withAppendedPath(
CONTENT_URI, "conversations");
public static final Uri CONTENT_FILTER_BYPHONE_URI = Uri.withAppendedPath(
CONTENT_URI, "messages/byphone");
public static final Uri CONTENT_UNDELIVERED_URI = Uri.withAppendedPath(
CONTENT_URI, "undelivered");
public static final Uri CONTENT_DRAFT_URI = Uri.withAppendedPath(
CONTENT_URI, "draft");
public static final Uri CONTENT_LOCKED_URI = Uri.withAppendedPath(
CONTENT_URI, "locked");
public static final Uri SEARCH_URI = Uri.withAppendedPath(
CONTENT_URI, "search");
public static final class TPendingMessages implements BaseColumns {
public static final Uri CONTENT_URI = Uri.withAppendedPath(
TMmsSms.CONTENT_URI, "pending");
}
}
public static final class TSms implements BaseColumns, TextBasedSmsColumns {
public static final Cursor query(ContentResolver cr, String[] projection) {
return cr.query(CONTENT_URI, projection, null, null, DEFAULT_SORT_ORDER);
}
public static final Cursor query(ContentResolver cr, String[] projection,
String where, String orderBy) {
return cr.query(CONTENT_URI, projection, where,
null, orderBy == null ? DEFAULT_SORT_ORDER : orderBy);
}
public static final String AUTHORITY = "tsms";
public static final Uri AUTHORITY_URI = Uri.parse("content://"
+ AUTHORITY);
public static final Uri CONTENT_URI = AUTHORITY_URI;
public static final String DEFAULT_SORT_ORDER = "date DESC";
public static Uri addMessageToUri(ContentResolver resolver,
Uri uri, String address, String body, String subject,
Long date, boolean read, boolean deliveryReport) {
return addMessageToUri(resolver, uri, address, body, subject,
date, read, deliveryReport, -1L);
}
public static Uri addMessageToUri(ContentResolver resolver,
Uri uri, String address, String body, String subject,
Long date, boolean read, boolean deliveryReport, long threadId) {
ContentValues values = new ContentValues(7);
values.put(ADDRESS, address);
if (date != null) {
values.put(DATE, date);
}
values.put(READ, read ? Integer.valueOf(1) : Integer.valueOf(0));
values.put(SUBJECT, subject);
values.put(BODY, body);
if (deliveryReport) {
values.put(STATUS, STATUS_PENDING);
}
if (threadId != -1L) {
values.put(THREAD_ID, threadId);
}
return resolver.insert(uri, values);
}
public static final class TConversations {
public static final Uri CONTENT_URI = Uri.withAppendedPath(
AUTHORITY_URI, "conversations");
}
public static final class TOutbox {
public static final Uri CONTENT_URI = Uri.withAppendedPath(
AUTHORITY_URI, "outbox");
public static Uri addMessage(ContentResolver resolver,
String address, String body, String subject, Long date,
boolean deliveryReport, long threadId) {
return addMessageToUri(resolver, CONTENT_URI, address, body,
subject, date, true, deliveryReport, threadId);
}
}
public static final class TInbox {
public static final Uri CONTENT_URI = Uri.withAppendedPath(
AUTHORITY_URI, "inbox");
public static Uri addMessage(ContentResolver resolver,
String address, String body, String subject, Long date,
boolean read) {
return addMessageToUri(resolver, CONTENT_URI, address, body,
subject, date, read, false);
}
}
public static final class TSent implements BaseColumns, TextBasedSmsColumns {
public static final Uri CONTENT_URI = Uri.withAppendedPath(
AUTHORITY_URI, "sent");
public static Uri addMessage(ContentResolver resolver,
String address, String body, String subject, Long date) {
return addMessageToUri(resolver, CONTENT_URI, address, body,
subject, date, true, false);
}
}
public static final class TDraft implements BaseColumns, TextBasedSmsColumns {
public static final Uri CONTENT_URI = Uri.withAppendedPath(
AUTHORITY_URI, "draft");
public static Uri addMessage(ContentResolver resolver,
String address, String body, String subject, Long date) {
return addMessageToUri(resolver, CONTENT_URI, address, body,
subject, date, true, false);
}
public static boolean saveMessage(ContentResolver resolver,
Uri uri, String body) {
ContentValues values = new ContentValues(2);
values.put(BODY, body);
values.put(DATE, System.currentTimeMillis());
return resolver.update(uri, values, null, null) == 1;
}
}
}
public static final class TMessage {
public static final String AUTHORITY = "tmessage";
public static final Uri AUTHORITY_URI = Uri.parse("content://"
+ AUTHORITY);
}
public static final class TCarriers implements BaseColumns {
public static final Uri CONTENT_URI =
Uri.parse("content://ttelephony/carriers");
}
public class TConnectivityManager{
public static final int TYPE_MOBILE_MMS = 2;
}
public static final class TPresence{
public static final int OFFLINE = 0;
}
public final class TMediaStore {
public final static String EXTRA_SIZE_LIMIT = "android.intent.extra.sizeLimit";
public final static String EXTRA_DURATION_LIMIT = "android.intent.extra.durationLimit";
}
/*
public static final class TThreads {
private static final Uri THREAD_ID_CONTENT_URI = Uri
.parse("content://tmms-sms/threadID");
public static final Uri CONTENT_URI = Uri.withAppendedPath(
TMmsSms.CONTENT_URI, "conversations");
public static final Uri OBSOLETE_THREADS_URI = Uri.withAppendedPath(
CONTENT_URI, "obsolete");
}
*/
public static final class TThreads implements ThreadsColumns {
private static final String[] ID_PROJECTION = { BaseColumns._ID };
private static final String STANDARD_ENCODING = "UTF-8";
private static final Uri THREAD_ID_CONTENT_URI = Uri.parse(
"content://tmms-sms/threadID");
public static final Uri CONTENT_URI = Uri.withAppendedPath(
TMmsSms.CONTENT_URI, "conversations");
public static final Uri OBSOLETE_THREADS_URI = Uri.withAppendedPath(
CONTENT_URI, "obsolete");
public static final int COMMON_THREAD = 0;
public static final int BROADCAST_THREAD = 1;
// No one should construct an instance of this class.
private TThreads() {
}
public static long getOrCreateThreadId(Context context, String recipient) {
Set<String> recipients = new HashSet<String>();
recipients.add(recipient);
return getOrCreateThreadId(context, recipients);
}
public static long getOrCreateThreadId(
Context context, Set<String> recipients) {
Uri.Builder uriBuilder = THREAD_ID_CONTENT_URI.buildUpon();
for (String recipient : recipients) {
if (Mms.isEmailAddress(recipient)) {
recipient = Mms.extractAddrSpec(recipient);
}
uriBuilder.appendQueryParameter("recipient", recipient);
}
Uri uri = uriBuilder.build();
String TAG = "TThreads";
if (true) {
Log.v(TAG, "getOrCreateThreadId uri: " + uri);
}
Cursor cursor = SqliteWrapper.query(context, context.getContentResolver(),
uri, ID_PROJECTION, null, null, null);
if (true) {
Log.v(TAG, "getOrCreateThreadId cursor cnt: " + cursor.getCount());
}
if (cursor != null) {
try {
if (cursor.moveToFirst()) {
return cursor.getLong(0);
} else {
Log.e(TAG, "getOrCreateThreadId returned no rows!");
}
} finally {
cursor.close();
}
}
Log.e(TAG, "getOrCreateThreadId failed with uri " + uri.toString());
throw new IllegalArgumentException("Unable to find or allocate a thread ID.");
}
}
}