summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--AndroidManifest.xml2
-rw-r--r--res/menu/call_details_options.xml2
-rw-r--r--res/values/cm_strings.xml4
-rw-r--r--res/values/colors.xml3
-rw-r--r--src/com/android/dialer/CallDetailActivity.java3
-rw-r--r--src/com/android/dialer/calllog/CallLogQueryHandler.java6
-rwxr-xr-x[-rw-r--r--]src/com/android/dialer/calllog/CallTypeHelper.java6
-rwxr-xr-x[-rw-r--r--]src/com/android/dialer/calllog/CallTypeIconsView.java14
-rw-r--r--src/com/android/dialer/calllog/ContactInfoHelper.java31
9 files changed, 70 insertions, 1 deletions
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 06182b10a..af9190fcf 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -53,6 +53,8 @@
<uses-permission android:name="com.android.voicemail.permission.READ_VOICEMAIL" />
<uses-permission android:name="android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK" />
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>
+ <uses-permission android:name="android.permission.READ_PHONE_BLACKLIST" />
+ <uses-permission android:name="android.permission.CHANGE_PHONE_BLACKLIST" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.BROADCAST_STICKY" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
diff --git a/res/menu/call_details_options.xml b/res/menu/call_details_options.xml
index f08b4facd..6edeb95db 100644
--- a/res/menu/call_details_options.xml
+++ b/res/menu/call_details_options.xml
@@ -31,4 +31,6 @@
<item android:id="@+id/menu_report"
android:title="@string/call_detail_menu_report" />
+ <item android:id="@+id/menu_add_to_blacklist"
+ android:title="@string/menu_add_to_blacklist" />
</menu>
diff --git a/res/values/cm_strings.xml b/res/values/cm_strings.xml
index 445c1465f..597e79051 100644
--- a/res/values/cm_strings.xml
+++ b/res/values/cm_strings.xml
@@ -37,4 +37,8 @@
<string name="cyngn_reverse_lookup_provider_name">Cyngn Chinese (CN)</string>
<string name="cyngn_reverse_lookup_provider_value" translatable="false">CyngnChinese</string>
+ <!-- Description for incoming calls that were blacklisted -->
+ <string name="type_blacklist">Blacklisted call</string>
+ <string name="menu_add_to_blacklist">Add to blocked caller list</string>
+ <string name="toast_added_to_blacklist">%s added to blocked caller list.</string>
</resources>
diff --git a/res/values/colors.xml b/res/values/colors.xml
index f72ad3bd5..62580f5bd 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -89,6 +89,9 @@
<!-- Color for missed call icons. -->
<color name="missed_call">#ff2e58</color>
+ <!-- Color for blacklist call icons. -->
+ <color name="blacklisted_call">#ff000000</color>
+
<!-- Color for answered or outgoing call icons. -->
<color name="answered_call">@color/dialer_green_highlight_color</color>
diff --git a/src/com/android/dialer/CallDetailActivity.java b/src/com/android/dialer/CallDetailActivity.java
index 56f2cb1dc..da86bd98b 100644
--- a/src/com/android/dialer/CallDetailActivity.java
+++ b/src/com/android/dialer/CallDetailActivity.java
@@ -365,6 +365,9 @@ public class CallDetailActivity extends Activity
CallLogAsyncTaskUtil.deleteVoicemail(
this, mVoicemailUri, mCallLogAsyncTaskListener);
break;
+ case R.id.menu_add_to_blacklist:
+ mContactInfoHelper.addNumberToBlacklist(mNumber);
+ break;
}
return true;
}
diff --git a/src/com/android/dialer/calllog/CallLogQueryHandler.java b/src/com/android/dialer/calllog/CallLogQueryHandler.java
index 60bdcff46..aceca62aa 100644
--- a/src/com/android/dialer/calllog/CallLogQueryHandler.java
+++ b/src/com/android/dialer/calllog/CallLogQueryHandler.java
@@ -169,6 +169,12 @@ public class CallLogQueryHandler extends NoNullCursorAsyncQueryHandler {
where.append(" AND ");
where.append(String.format("(%s = ?)", Calls.TYPE));
selectionArgs.add(Integer.toString(callType));
+ if (callType == Calls.MISSED_TYPE) {
+ // also query for blacklisted calls as they are 'missed'
+ where.append(" OR ");
+ where.append(String.format("(%s = ?)", Calls.TYPE));
+ selectionArgs.add(Integer.toString(Calls.BLACKLIST_TYPE));
+ }
} else {
where.append(" AND NOT ");
where.append("(" + Calls.TYPE + " = " + Calls.VOICEMAIL_TYPE + ")");
diff --git a/src/com/android/dialer/calllog/CallTypeHelper.java b/src/com/android/dialer/calllog/CallTypeHelper.java
index 36c0975bd..3603ce6c3 100644..100755
--- a/src/com/android/dialer/calllog/CallTypeHelper.java
+++ b/src/com/android/dialer/calllog/CallTypeHelper.java
@@ -39,6 +39,8 @@ public class CallTypeHelper {
private final CharSequence mMissedVideoName;
/** Name used to identify voicemail calls. */
private final CharSequence mVoicemailName;
+ /** Name used to identify blacklisted calls */
+ private final CharSequence mBlacklistedName;
/** Color used to identify new missed calls. */
private final int mNewMissedColor;
/** Color used to identify new voicemail calls. */
@@ -53,6 +55,7 @@ public class CallTypeHelper {
mOutgoingVideoName = resources.getString(R.string.type_outgoing_video);
mMissedVideoName = resources.getString(R.string.type_missed_video);
mVoicemailName = resources.getString(R.string.type_voicemail);
+ mBlacklistedName = resources.getText(R.string.type_blacklist);
mNewMissedColor = resources.getColor(R.color.call_log_missed_call_highlight_color);
mNewVoicemailColor = resources.getColor(R.color.call_log_voicemail_highlight_color);
}
@@ -84,6 +87,9 @@ public class CallTypeHelper {
case Calls.VOICEMAIL_TYPE:
return mVoicemailName;
+ case Calls.BLACKLIST_TYPE:
+ return mBlacklistedName;
+
default:
return mMissedName;
}
diff --git a/src/com/android/dialer/calllog/CallTypeIconsView.java b/src/com/android/dialer/calllog/CallTypeIconsView.java
index 31d4f4b0e..686336283 100644..100755
--- a/src/com/android/dialer/calllog/CallTypeIconsView.java
+++ b/src/com/android/dialer/calllog/CallTypeIconsView.java
@@ -40,7 +40,7 @@ import java.util.List;
* for ListView-recycling that a regular LinearLayout using ImageViews.
*/
public class CallTypeIconsView extends View {
- private List<Integer> mCallTypes = Lists.newArrayListWithCapacity(3);
+ private List<Integer> mCallTypes = Lists.newArrayListWithCapacity(4);
private boolean mShowVideo = false;
private Resources mResources;
private int mWidth;
@@ -114,6 +114,9 @@ public class CallTypeIconsView extends View {
return mResources.missed;
case Calls.VOICEMAIL_TYPE:
return mResources.voicemail;
+ case Calls.BLACKLIST_TYPE:
+ return mResources.blacklist;
+
default:
// It is possible for users to end up with calls with unknown call types in their
// call history, possibly due to 3rd party call log implementations (e.g. to
@@ -176,10 +179,16 @@ public class CallTypeIconsView extends View {
public final Drawable videoCall;
/**
+ * Drawable representing blacklisted call.
+ */
+ public final Drawable blacklist;
+
+ /**
* The margin to use for icons.
*/
public final int iconMargin;
+
/**
* Configures the call icon drawables.
* A single white call arrow which points down and left is used as a basis for all of the
@@ -202,6 +211,9 @@ public class CallTypeIconsView extends View {
missed = r.getDrawable(R.drawable.ic_call_arrow).mutate();
missed.setColorFilter(r.getColor(R.color.missed_call), PorterDuff.Mode.MULTIPLY);
+ blacklist = r.getDrawable(R.drawable.ic_call_arrow).mutate();
+ blacklist.setColorFilter(r.getColor(R.color.blacklisted_call), PorterDuff.Mode.MULTIPLY);
+
voicemail = r.getDrawable(R.drawable.ic_call_voicemail_holo_dark);
// Get the video call icon, scaled to match the height of the call arrows.
diff --git a/src/com/android/dialer/calllog/ContactInfoHelper.java b/src/com/android/dialer/calllog/ContactInfoHelper.java
index 4e2fe5c1d..2ecf65f22 100644
--- a/src/com/android/dialer/calllog/ContactInfoHelper.java
+++ b/src/com/android/dialer/calllog/ContactInfoHelper.java
@@ -25,14 +25,18 @@ import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.provider.ContactsContract.Contacts;
import android.provider.ContactsContract.DisplayNameSources;
import android.provider.ContactsContract.PhoneLookup;
+import android.provider.Settings;
+import android.provider.Telephony;
import android.telephony.PhoneNumberUtils;
import android.text.TextUtils;
import android.util.Log;
+import android.widget.Toast;
import com.android.contacts.common.util.Constants;
import com.android.contacts.common.util.PermissionsUtil;
import com.android.contacts.common.util.PhoneNumberHelper;
import com.android.contacts.common.util.UriUtils;
+import com.android.dialer.R;
import com.android.dialer.lookup.LookupCache;
import com.android.dialer.service.CachedNumberLookupService;
import com.android.dialer.service.CachedNumberLookupService.CachedContactInfo;
@@ -443,5 +447,32 @@ public class ContactInfoHelper {
&& mCachedNumberLookupService.canReportAsInvalid(sourceType, objectId);
}
+ /**
+ * Checks whether calls can be blacklisted; that is, whether the
+ * phone blacklist is enabled
+ */
+ public boolean canBlacklistCalls() {
+ return Settings.System.getInt(mContext.getContentResolver(),
+ Settings.System.PHONE_BLACKLIST_ENABLED, 1) != 0;
+ }
+
+ /**
+ * Requests the given number to be added to the phone blacklist
+ *
+ * @param number the number to be blacklisted
+ */
+ public void addNumberToBlacklist(String number) {
+ ContentValues cv = new ContentValues();
+ cv.put(Telephony.Blacklist.PHONE_MODE, 1);
+
+ Uri uri = Uri.withAppendedPath(Telephony.Blacklist.CONTENT_FILTER_BYNUMBER_URI, number);
+ int count = mContext.getContentResolver().update(uri, cv, null, null);
+
+ if (count != 0) {
+ // Give the user some feedback
+ String message = mContext.getString(R.string.toast_added_to_blacklist, number);
+ Toast.makeText(mContext, message, Toast.LENGTH_SHORT).show();
+ }
+ }
}