package com.moez.QKSMS.data;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.net.Uri;
import com.moez.QKSMS.R;
import com.moez.QKSMS.transaction.SmsHelper;
import com.moez.QKSMS.ui.dialog.DefaultSmsHelper;
public class Message {
private final String TAG = "Message";
public static final int RECEIVED = 1;
public static final int SENT = 2;
public static final int DRAFT = 3;
public static final int SENDING = 4;
public static final int FAILED = 5;
public static final Uri SMS_CONTENT_PROVIDER = Uri.parse("content://sms/");
public static final Uri MMS_SMS_CONTENT_PROVIDER = Uri.parse("content://mms-sms/conversations/");
public static final Uri SENT_MESSAGE_CONTENT_PROVIDER = Uri.parse("content://sms/sent");
// ContentResolver columns
static final Uri RECEIVED_MESSAGE_CONTENT_PROVIDER = Uri.parse("content://sms/inbox");
private Context context;
private ContactHelper contactHelper;
private Uri uri;
private long id;
private long threadId;
private String body;
private String address;
private String name;
private long contactId;
private Bitmap photoBitmap;
private int read; // change to boolean
public Message(Context context, long id) {
this.context = context;
this.id = id;
contactHelper = new ContactHelper();
uri = Uri.withAppendedPath(MMS_SMS_CONTENT_PROVIDER, "" + id);
}
public Message(Context context, Uri uri) {
this.context = context;
this.uri = uri;
contactHelper = new ContactHelper();
Cursor cursor = context.getContentResolver().query(uri, new String[]{SmsHelper.COLUMN_ID}, null, null, null);
cursor.moveToFirst();
id = cursor.getLong(cursor.getColumnIndexOrThrow(SmsHelper.COLUMN_ID));
cursor.close();
}
public long getId() {
return id;
}
public long getThreadId() {
if (threadId == 0) {
Cursor cursor = null;
try {
cursor = context.getContentResolver().query(SMS_CONTENT_PROVIDER, new String[]{SmsHelper.COLUMN_THREAD_ID}, "_id=" + id, null, null);
cursor.moveToFirst();
threadId = cursor.getLong(cursor.getColumnIndexOrThrow(SmsHelper.COLUMN_THREAD_ID));
} catch (Exception e) {
e.printStackTrace();
} finally {
if (cursor != null) {
cursor.close();
}
}
}
return threadId;
}
public boolean isMms() {
boolean isMms = false;
Cursor cursor = null;
try {
cursor = context.getContentResolver().query(MMS_SMS_CONTENT_PROVIDER, new String[]{SmsHelper.COLUMN_MMS}, "_id=" + id, null, null);
cursor.moveToFirst();
isMms = "application/vnd.wap.multipart.related".equals(cursor.getString(cursor.getColumnIndex(SmsHelper.COLUMN_MMS)));
} catch (Exception e) {
e.printStackTrace();
} finally {
if (cursor != null) {
cursor.close();
}
}
return isMms;
}
public String getAddress() {
Cursor cursor = null;
if (address == null) {
try {
cursor = context.getContentResolver().query(SMS_CONTENT_PROVIDER, new String[]{SmsHelper.COLUMN_ADDRESS}, "_id=" + id, null, null);
cursor.moveToFirst();
address = cursor.getString(cursor.getColumnIndexOrThrow(SmsHelper.COLUMN_ADDRESS));
} catch (Exception e) {
e.printStackTrace();
} finally {
if (cursor != null) {
cursor.close();
}
}
}
return address;
}
public String getName() {
if (name == null) name = contactHelper.getName(context, getAddress());
return name;
}
public String getBody() {
if (body == null) {
Cursor cursor = null;
try {
cursor = context.getContentResolver().query(SMS_CONTENT_PROVIDER, new String[]{SmsHelper.COLUMN_BODY}, "_id=" + id, null, null);
cursor.moveToFirst();
body = cursor.getString(cursor.getColumnIndexOrThrow(SmsHelper.COLUMN_BODY));
} catch (Exception e) {
e.printStackTrace();
} finally {
if (cursor != null) {
cursor.close();
}
}
}
return body;
}
public long getContactId() {
if (contactId == 0) contactId = contactHelper.getId(context, getAddress());
return contactId;
}
public Bitmap getPhotoBitmap() {
if (photoBitmap == null)
photoBitmap = contactHelper.getBitmap(context, getContactId());
return photoBitmap;
}
public void markSeen() {
ContentValues cv = new ContentValues();
cv.put("seen", true);
if (isMms()) {
context.getContentResolver().update(Uri.parse("content://mms/" + getId()), cv, null, null);
} else {
context.getContentResolver().update(Uri.parse("content://sms/" + getId()), cv, null, null);
}
}
public void markRead() {
ContentValues cv = new ContentValues();
cv.put("read", true);
cv.put("seen", true);
if (isMms()) {
context.getContentResolver().update(Uri.parse("content://mms/" + getId()), cv, null, null);
} else {
context.getContentResolver().update(Uri.parse("content://sms/" + getId()), cv, null, null);
}
}
public void delete() {
new DefaultSmsHelper(context, R.string.not_default_delete).showIfNotDefault(null);
try {
if (isMms()) {
context.getContentResolver().delete(Uri.parse("content://mms/" + getId()), null, null);
} else {
context.getContentResolver().delete(Uri.parse("content://sms/" + getId()), null, null);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}