diff --git a/astrid/AndroidManifest.xml b/astrid/AndroidManifest.xml index d2098a98e..b51db00b3 100644 --- a/astrid/AndroidManifest.xml +++ b/astrid/AndroidManifest.xml @@ -34,7 +34,6 @@ - diff --git a/astrid/plugin-src/com/todoroo/astrid/calls/MissedCallActivity.java b/astrid/plugin-src/com/todoroo/astrid/calls/MissedCallActivity.java index d6f8e0593..2079e3190 100644 --- a/astrid/plugin-src/com/todoroo/astrid/calls/MissedCallActivity.java +++ b/astrid/plugin-src/com/todoroo/astrid/calls/MissedCallActivity.java @@ -10,6 +10,7 @@ import android.os.Bundle; import android.text.TextUtils; import android.view.View; import android.view.View.OnClickListener; +import android.widget.ImageView; import android.widget.TextView; import com.timsu.astrid.R; @@ -29,6 +30,7 @@ public class MissedCallActivity extends Activity { public static final String EXTRA_NUMBER = "number"; //$NON-NLS-1$ public static final String EXTRA_NAME = "name"; //$NON-NLS-1$ public static final String EXTRA_TIME = "time"; //$NON-NLS-1$ + public static final String EXTRA_PHOTO = "photo"; //$NON-NLS-1$ private static final String PREF_IGNORE_PRESSES = "missedCallsIgnored"; //$NON-NLS-1$ @@ -96,6 +98,7 @@ public class MissedCallActivity extends Activity { name = intent.getStringExtra(EXTRA_NAME); number = intent.getStringExtra(EXTRA_NUMBER); timeString = intent.getStringExtra(EXTRA_TIME); + String picture = intent.getStringExtra(EXTRA_PHOTO); int color = ThemeService.getThemeColor(); @@ -103,7 +106,15 @@ public class MissedCallActivity extends Activity { callLaterButton = (TextView) findViewById(R.id.call_later); ignoreButton = (TextView) findViewById(R.id.call_ignore); dismissButton = findViewById(R.id.dismiss); - ((TextView) findViewById(R.id.reminder_title)).setText(getString(R.string.MCA_title, timeString)); + ((TextView) findViewById(R.id.reminder_title)) + .setText(getString(R.string.MCA_title, + TextUtils.isEmpty(name) ? number : name, timeString)); + + ImageView pictureView = ((ImageView) findViewById(R.id.contact_picture)); + if (TextUtils.isEmpty(picture)) + pictureView.setImageDrawable(getResources().getDrawable(R.drawable.none)); + else + pictureView.setImageURI(Uri.parse(picture)); Resources r = getResources(); returnCallButton.setBackgroundColor(r.getColor(color)); diff --git a/astrid/plugin-src/com/todoroo/astrid/calls/PhoneStateChangedReceiver.java b/astrid/plugin-src/com/todoroo/astrid/calls/PhoneStateChangedReceiver.java index 9d686bb13..7fe0d8c4a 100644 --- a/astrid/plugin-src/com/todoroo/astrid/calls/PhoneStateChangedReceiver.java +++ b/astrid/plugin-src/com/todoroo/astrid/calls/PhoneStateChangedReceiver.java @@ -6,7 +6,9 @@ import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.database.Cursor; +import android.net.Uri; import android.provider.CallLog.Calls; +import android.provider.ContactsContract; import android.telephony.TelephonyManager; import android.text.TextUtils; @@ -49,9 +51,7 @@ public class PhoneStateChangedReceiver extends BroadcastReceiver { ); try { - if (calls.getCount() > 0) { - calls.moveToFirst(); - + if (calls.moveToFirst()) { int numberIndex = calls.getColumnIndex(Calls.NUMBER); String number = calls.getString(numberIndex); @@ -65,7 +65,7 @@ public class PhoneStateChangedReceiver extends BroadcastReceiver { // and will be processed again. int dateIndex = calls.getColumnIndex(Calls.DATE); long date = calls.getLong(dateIndex); - if (DateUtilities.now() - date > 2 * DateUtilities.ONE_MINUTE) + if (DateUtilities.now() - date < 2 * DateUtilities.ONE_MINUTE) return; int nameIndex = calls.getColumnIndex(Calls.CACHED_NAME); @@ -75,11 +75,13 @@ public class PhoneStateChangedReceiver extends BroadcastReceiver { long time = calls.getLong(timeIndex); String timeString = DateUtilities.getTimeString(context, new Date(time)); + String photo = getContactPhotoFromNumber(context, number); Intent missedCallIntent = new Intent(context, MissedCallActivity.class); missedCallIntent.putExtra(MissedCallActivity.EXTRA_NUMBER, number); missedCallIntent.putExtra(MissedCallActivity.EXTRA_NAME, name); missedCallIntent.putExtra(MissedCallActivity.EXTRA_TIME, timeString); + missedCallIntent.putExtra(MissedCallActivity.EXTRA_PHOTO, photo); missedCallIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_MULTIPLE_TASK); context.startActivity(missedCallIntent); } @@ -101,4 +103,40 @@ public class PhoneStateChangedReceiver extends BroadcastReceiver { return builder.toString(); } + private String getContactPhotoFromNumber(Context context, String number) { + return getPhotoForContactId(context, getContactIdFromNumber(context, number)); + } + + private long getContactIdFromNumber(Context context, String number) { + Uri contactUri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(number)); + Cursor c = context.getContentResolver().query(contactUri, new String[] { ContactsContract.PhoneLookup._ID }, null, null, null); + + try { + if (c.moveToFirst()) { + long id = c.getLong(c.getColumnIndex(ContactsContract.PhoneLookup._ID)); + return id; + } + } finally { + c.close(); + } + return -1; + } + + private String getPhotoForContactId(Context context, long contactId) { + if (contactId < 0) + return ""; + Cursor c = context.getContentResolver().query(ContactsContract.Contacts.CONTENT_FILTER_URI, + new String[] { ContactsContract.Contacts.PHOTO_URI }, + ContactsContract.Contacts._ID + " = ?", new String[] { Long.toString(contactId) }, null); + try { + if (c.moveToFirst()) { + String uri = c.getString(c.getColumnIndex(ContactsContract.Contacts.PHOTO_URI)); + return uri; + } + } finally { + c.close(); + } + return ""; + } + } diff --git a/astrid/res/drawable-hdpi/close_clear_cancel.png b/astrid/res/drawable-hdpi/close_clear_cancel.png new file mode 100644 index 000000000..778c7f081 Binary files /dev/null and b/astrid/res/drawable-hdpi/close_clear_cancel.png differ diff --git a/astrid/res/drawable/close_clear_cancel.png b/astrid/res/drawable/close_clear_cancel.png new file mode 100644 index 000000000..778c7f081 Binary files /dev/null and b/astrid/res/drawable/close_clear_cancel.png differ diff --git a/astrid/res/layout-land/astrid_reminder_view.xml b/astrid/res/layout-land/astrid_reminder_view.xml index d946248e0..8e13547f5 100644 --- a/astrid/res/layout-land/astrid_reminder_view.xml +++ b/astrid/res/layout-land/astrid_reminder_view.xml @@ -53,7 +53,7 @@ android:scaleType="fitCenter" android:layout_gravity="right" android:layout_marginBottom="10dip" - android:src="@android:drawable/ic_menu_close_clear_cancel"/> + android:src="@drawable/close_clear_cancel"/>