Updates DataUsage table on entry click
Change-Id: I0c0b5a527577cc57ff260637ab75898dee96a8e4
diff --git a/src/com/android/contacts/quickcontact/ExpandingEntryCardView.java b/src/com/android/contacts/quickcontact/ExpandingEntryCardView.java
index bdbe9ca..1a4051e 100644
--- a/src/com/android/contacts/quickcontact/ExpandingEntryCardView.java
+++ b/src/com/android/contacts/quickcontact/ExpandingEntryCardView.java
@@ -52,6 +52,7 @@
*/
public static final class Entry {
+ private final int mViewId;
private final Drawable mIcon;
private final String mHeader;
private final String mSubHeader;
@@ -61,14 +62,15 @@
private final Intent mIntent;
private final boolean mIsEditable;
- public Entry(Drawable icon, String header, String subHeader, String text,
+ public Entry(int viewId, Drawable icon, String header, String subHeader, String text,
Intent intent, boolean isEditable) {
- this(icon, header, subHeader, null, text, null, intent, isEditable);
+ this(viewId, icon, header, subHeader, null, text, null, intent, isEditable);
}
- public Entry(Drawable mainIcon, String header, String subHeader,
+ public Entry(int viewId, Drawable mainIcon, String header, String subHeader,
Drawable subHeaderIcon, String text, Drawable textIcon, Intent intent,
boolean isEditable) {
+ mViewId = viewId;
mIcon = mainIcon;
mHeader = header;
mSubHeader = subHeader;
@@ -110,6 +112,10 @@
boolean isEditable() {
return mIsEditable;
}
+
+ int getViewId() {
+ return mViewId;
+ }
}
public interface ExpandingEntryCardViewListener {
@@ -337,6 +343,8 @@
View view = layoutInflater.inflate(
R.layout.expanding_entry_card_item, this, false);
+ view.setId(entry.getViewId());
+
ImageView icon = (ImageView) view.findViewById(R.id.icon);
if (entry.getIcon() != null) {
icon.setImageDrawable(entry.getIcon());
diff --git a/src/com/android/contacts/quickcontact/QuickContactActivity.java b/src/com/android/contacts/quickcontact/QuickContactActivity.java
index 7617128..290f399 100644
--- a/src/com/android/contacts/quickcontact/QuickContactActivity.java
+++ b/src/com/android/contacts/quickcontact/QuickContactActivity.java
@@ -28,6 +28,7 @@
import android.content.ActivityNotFoundException;
import android.content.ComponentName;
import android.content.ContentUris;
+import android.content.ContentValues;
import android.content.Intent;
import android.content.Loader;
import android.content.pm.PackageManager;
@@ -63,6 +64,7 @@
import android.provider.ContactsContract.CommonDataKinds.Website;
import android.provider.ContactsContract.Contacts;
import android.provider.ContactsContract.DisplayNameSources;
+import android.provider.ContactsContract.DataUsageFeedback;
import android.provider.ContactsContract.QuickContact;
import android.provider.ContactsContract.RawContacts;
import android.support.v7.graphics.Palette;
@@ -163,6 +165,8 @@
private static final int REQUEST_CODE_CONTACT_EDITOR_ACTIVITY = 1;
private static final float SYSTEM_BAR_BRIGHTNESS_FACTOR = 0.7f;
private static final int SCRIM_COLOR = Color.argb(0xB2, 0, 0, 0);
+ private static final String SCHEME_SMSTO = "smsto";
+ private static final String MIMETYPE_SMS = "vnd.android-dir/mms-sms";
/** This is the Intent action to install a shortcut in the launcher. */
private static final String ACTION_INSTALL_SHORTCUT =
@@ -272,12 +276,40 @@
final OnClickListener mEntryClickHandler = new OnClickListener() {
@Override
public void onClick(View v) {
- Log.i(TAG, "mEntryClickHandler onClick");
- final Object intent = v.getTag();
- if (intent == null || !(intent instanceof Intent)) {
+ // Data Id is stored as the entry view id
+ final int dataId = v.getId();
+ Object intentObject = v.getTag();
+ if (intentObject == null || !(intentObject instanceof Intent)) {
+ Log.w(TAG, "Intent tag was not used correctly");
return;
}
- startActivity((Intent) intent);
+ final Intent intent = (Intent) intentObject;
+
+ // Default to USAGE_TYPE_CALL. Usage is summed among all types for sorting each data id
+ // so the exact usage type is not necessary in all cases
+ String usageType = DataUsageFeedback.USAGE_TYPE_CALL;
+
+ if (intent.getData().getScheme().equals(SCHEME_SMSTO) ||
+ (intent.getType() != null && intent.getType().equals(MIMETYPE_SMS))) {
+ usageType = DataUsageFeedback.USAGE_TYPE_SHORT_TEXT;
+ }
+
+ // Data IDs start at 1 so anything less is invalid
+ if (dataId > 0) {
+ final Uri uri = DataUsageFeedback.FEEDBACK_URI.buildUpon()
+ .appendPath(String.valueOf(dataId))
+ .appendQueryParameter(DataUsageFeedback.USAGE_TYPE, usageType)
+ .build();
+ final boolean successful = getContentResolver().update(
+ uri, new ContentValues(), null, null) > 0;
+ if (!successful) {
+ Log.w(TAG, "DataUsageFeedback increment failed");
+ }
+ } else {
+ Log.w(TAG, "Invalid Data ID");
+ }
+
+ startActivity(intent);
}
};
@@ -781,8 +813,10 @@
Uri.fromParts(CallUtil.SCHEME_SMSTO, phone.getNumber(), null));
smsIntent.setComponent(mSmsComponent);
}
+ final int dataId = phone.getId() > Integer.MAX_VALUE ?
+ -1 : (int) phone.getId();
contactCardEntries.add(topContactIndex++,
- new Entry(
+ new Entry(dataId,
getResources().getDrawable(R.drawable.ic_message_24dp),
getResources().getString(R.string.send_message),
/* subHeader = */ null,
@@ -1057,7 +1091,10 @@
return null;
}
- return new Entry(icon, header, subHeader, subHeaderIcon, text, textIcon,
+ final int dataId = dataItem.getId() > Integer.MAX_VALUE ?
+ -1 : (int) dataItem.getId();
+
+ return new Entry(dataId, icon, header, subHeader, subHeaderIcon, text, textIcon,
intent, isEditable);
}
@@ -1197,7 +1234,8 @@
private List<Entry> contactInteractionsToEntries(List<ContactInteraction> interactions) {
final List<Entry> entries = new ArrayList<>();
for (ContactInteraction interaction : interactions) {
- entries.add(new Entry(interaction.getIcon(this),
+ entries.add(new Entry(/* id = */ -1,
+ interaction.getIcon(this),
interaction.getViewHeader(this),
interaction.getViewBody(this),
interaction.getBodyIcon(this),