Add shortcut when clicking QuickContact badge
Bug: 2858540
Change-Id: I67456936742926c1fb5591170aaa325fcb016e8a
diff --git a/res/layout/contact_suggestion.xml b/res/layout/contact_suggestion.xml
index 0fbd800..c4abc86 100644
--- a/res/layout/contact_suggestion.xml
+++ b/res/layout/contact_suggestion.xml
@@ -35,7 +35,7 @@
android:layout_alignParentBottom="true"
>
- <android.widget.QuickContactBadge android:id="@+id/icon1"
+ <com.android.quicksearchbox.ui.ContactBadge android:id="@+id/icon1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerInside"
diff --git a/src/com/android/quicksearchbox/EventLogLogger.java b/src/com/android/quicksearchbox/EventLogLogger.java
index b1fc1b2..63dd976 100644
--- a/src/com/android/quicksearchbox/EventLogLogger.java
+++ b/src/com/android/quicksearchbox/EventLogLogger.java
@@ -28,9 +28,6 @@
*/
public class EventLogLogger implements Logger {
- private static final int SUGGESTION_CLICK_TYPE_LAUNCH = 0;
- private static final int SUGGESTION_CLICK_TYPE_REFINE = 1;
-
private static final char LIST_SEPARATOR = '|';
private final Context mContext;
@@ -70,17 +67,7 @@
latency, currentCorpus, enabledCorpora);
}
- public void logSuggestionClick(int position,
- SuggestionCursor suggestionCursor, Collection<Corpus> queriedCorpora) {
- logQsbClick(position, suggestionCursor, queriedCorpora, SUGGESTION_CLICK_TYPE_LAUNCH);
- }
-
- public void logRefine(int position, SuggestionCursor suggestionCursor,
- Collection<Corpus> queriedCorpora) {
- logQsbClick(position, suggestionCursor, queriedCorpora, SUGGESTION_CLICK_TYPE_REFINE);
- }
-
- private void logQsbClick(int position, SuggestionCursor suggestionCursor,
+ public void logSuggestionClick(int position, SuggestionCursor suggestionCursor,
Collection<Corpus> queriedCorpora, int clickType) {
String suggestions = getSuggestions(suggestionCursor);
String corpora = getCorpusLogNames(queriedCorpora);
diff --git a/src/com/android/quicksearchbox/EventLogTags.logtags b/src/com/android/quicksearchbox/EventLogTags.logtags
index 9b463dd..06ffca5 100644
--- a/src/com/android/quicksearchbox/EventLogTags.logtags
+++ b/src/com/android/quicksearchbox/EventLogTags.logtags
@@ -32,6 +32,7 @@
# @param click_type
# SUGGESTION_CLICK_TYPE_LAUNCH = 0
# SUGGESTION_CLICK_TYPE_REFINE = 1
+# SUGGESTION_CLICK_TYPE_QUICK_CONTACT = 2
#
# TODO: latency?
71002 qsb_click (position|1),(suggestions|3),(queried_sources|3),(num_chars|1),(click_type|1)
diff --git a/src/com/android/quicksearchbox/Logger.java b/src/com/android/quicksearchbox/Logger.java
index 7427593..ac3be67 100644
--- a/src/com/android/quicksearchbox/Logger.java
+++ b/src/com/android/quicksearchbox/Logger.java
@@ -28,6 +28,10 @@
public static final int SEARCH_METHOD_BUTTON = 0;
public static final int SEARCH_METHOD_KEYBOARD = 1;
+ public static final int SUGGESTION_CLICK_TYPE_LAUNCH = 0;
+ public static final int SUGGESTION_CLICK_TYPE_REFINE = 1;
+ public static final int SUGGESTION_CLICK_TYPE_QUICK_CONTACT = 2;
+
/**
* Called when QSB has started.
*
@@ -43,20 +47,10 @@
* @param suggestionCursor all the suggestions shown in the UI.
* @param queriedCorpora all corpora that were queried to produce the suggestions in
* {@code suggestionCursor}, ordered by rank.
+ * @param clickType One of the SUGGESTION_CLICK_TYPE constants.
*/
void logSuggestionClick(int position, SuggestionCursor suggestionCursor,
- Collection<Corpus> queriedCorpora);
-
- /**
- * The user clicked the query refine button.
- *
- * @param position 0-based position of the suggestion in the UI.
- * @param suggestionCursor all the suggestions shown in the UI.
- * @param queriedCorpora all corpora that were queried to produce the suggestions in
- * {@code suggestionCursor}, ordered by rank.
- */
- void logRefine(int position, SuggestionCursor suggestionCursor,
- Collection<Corpus> queriedCorpora);
+ Collection<Corpus> queriedCorpora, int clickType);
/**
* The user launched a search.
diff --git a/src/com/android/quicksearchbox/NoLogger.java b/src/com/android/quicksearchbox/NoLogger.java
index 2347633..b6b4f7f 100644
--- a/src/com/android/quicksearchbox/NoLogger.java
+++ b/src/com/android/quicksearchbox/NoLogger.java
@@ -32,11 +32,8 @@
}
public void logSuggestionClick(int position,
- SuggestionCursor suggestionCursor, Collection<Corpus> queriedCorpora) {
- }
-
- public void logRefine(int position, SuggestionCursor suggestionCursor,
- Collection<Corpus> queriedCorpora) {
+ SuggestionCursor suggestionCursor, Collection<Corpus> queriedCorpora,
+ int clickType) {
}
public void logSearch(Corpus corpus, int startMethod, int numChars) {
diff --git a/src/com/android/quicksearchbox/SearchActivity.java b/src/com/android/quicksearchbox/SearchActivity.java
index 1bbfe34..b519f2f 100644
--- a/src/com/android/quicksearchbox/SearchActivity.java
+++ b/src/com/android/quicksearchbox/SearchActivity.java
@@ -50,7 +50,6 @@
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
-import java.util.Collection;
import java.util.Set;
/**
@@ -571,7 +570,8 @@
mTookAction = true;
// Log suggestion click
- getLogger().logSuggestionClick(position, suggestions, getCurrentIncludedCorpora());
+ getLogger().logSuggestionClick(position, suggestions, getCurrentIncludedCorpora(),
+ Logger.SUGGESTION_CLICK_TYPE_LAUNCH);
// Create shortcut
getShortcutRepository().reportClick(suggestions, position);
@@ -584,6 +584,21 @@
return true;
}
+ protected void clickedQuickContact(int position) {
+ SuggestionCursor suggestions = getCurrentSuggestions(position);
+ if (suggestions == null) return;
+
+ if (DBG) Log.d(TAG, "Used suggestion " + position);
+ mTookAction = true;
+
+ // Log suggestion click
+ getLogger().logSuggestionClick(position, suggestions, getCurrentIncludedCorpora(),
+ Logger.SUGGESTION_CLICK_TYPE_QUICK_CONTACT);
+
+ // Create shortcut
+ getShortcutRepository().reportClick(suggestions, position);
+ }
+
protected boolean onSuggestionLongClicked(int position) {
if (DBG) Log.d(TAG, "Long clicked on suggestion " + position);
return false;
@@ -612,7 +627,8 @@
}
// Log refine click
- getLogger().logRefine(position, suggestions, getCurrentIncludedCorpora());
+ getLogger().logSuggestionClick(position, suggestions, getCurrentIncludedCorpora(),
+ Logger.SUGGESTION_CLICK_TYPE_REFINE);
// Put query + space in query text view
String queryWithSpace = query + ' ';
@@ -830,6 +846,10 @@
launchSuggestion(position);
}
+ public void onSuggestionQuickContactClicked(int position) {
+ clickedQuickContact(position);
+ }
+
public boolean onSuggestionLongClicked(int position) {
return SearchActivity.this.onSuggestionLongClicked(position);
}
diff --git a/src/com/android/quicksearchbox/ui/ContactBadge.java b/src/com/android/quicksearchbox/ui/ContactBadge.java
new file mode 100644
index 0000000..15b8320
--- /dev/null
+++ b/src/com/android/quicksearchbox/ui/ContactBadge.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.quicksearchbox.ui;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.view.View;
+import android.widget.QuickContactBadge;
+
+/**
+ * A {@link QuickContactBadge} that allows setting a click listener.
+ * The base class may use {@link View#setOnClickListener} internally,
+ * so this class adds a separate click listener field.
+ */
+public class ContactBadge extends QuickContactBadge {
+
+ private View.OnClickListener mExtraOnClickListener;
+
+ public ContactBadge(Context context) {
+ super(context);
+ }
+
+ public ContactBadge(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ public ContactBadge(Context context, AttributeSet attrs, int defStyle) {
+ super(context, attrs, defStyle);
+ }
+
+ @Override
+ public void onClick(View v) {
+ super.onClick(v);
+ if (mExtraOnClickListener != null) {
+ mExtraOnClickListener.onClick(v);
+ }
+ }
+
+ public void setExtraOnClickListener(View.OnClickListener extraOnClickListener) {
+ mExtraOnClickListener = extraOnClickListener;
+ }
+
+}
diff --git a/src/com/android/quicksearchbox/ui/ContactSuggestionView.java b/src/com/android/quicksearchbox/ui/ContactSuggestionView.java
index e90057a..1cf8fc6 100644
--- a/src/com/android/quicksearchbox/ui/ContactSuggestionView.java
+++ b/src/com/android/quicksearchbox/ui/ContactSuggestionView.java
@@ -22,14 +22,14 @@
import android.content.Context;
import android.net.Uri;
import android.util.AttributeSet;
-import android.widget.QuickContactBadge;
+import android.view.View;
/**
* View for contacts appearing in the suggestions list.
*/
public class ContactSuggestionView extends DefaultSuggestionView {
- private QuickContactBadge mQuickContact;
+ private ContactBadge mQuickContact;
public ContactSuggestionView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
@@ -46,12 +46,19 @@
@Override
protected void onFinishInflate() {
super.onFinishInflate();
- mQuickContact = (QuickContactBadge) findViewById(R.id.icon1);
+ mQuickContact = (ContactBadge) findViewById(R.id.icon1);
}
@Override
public void bindAsSuggestion(SuggestionCursor suggestion, SuggestionClickListener onClick) {
super.bindAsSuggestion(suggestion, onClick);
mQuickContact.assignContactUri(Uri.parse(suggestion.getSuggestionIntentDataString()));
+ mQuickContact.setExtraOnClickListener(new ContactBadgeClickListener());
+ }
+
+ private class ContactBadgeClickListener implements View.OnClickListener {
+ public void onClick(View v) {
+ fireOnSuggestionQuickContactClicked();
+ }
}
}
\ No newline at end of file
diff --git a/src/com/android/quicksearchbox/ui/DefaultSuggestionView.java b/src/com/android/quicksearchbox/ui/DefaultSuggestionView.java
index 501120c..c19c042 100644
--- a/src/com/android/quicksearchbox/ui/DefaultSuggestionView.java
+++ b/src/com/android/quicksearchbox/ui/DefaultSuggestionView.java
@@ -256,6 +256,12 @@
}
}
+ protected void fireOnSuggestionQuickContactClicked() {
+ if (mClickListener != null) {
+ mClickListener.onSuggestionQuickContactClicked(mPosition);
+ }
+ }
+
private class ClickListener implements OnClickListener {
public void onClick(View v) {
if (DBG) Log.d(TAG, "onItemClick(" + mPosition + ")");
diff --git a/src/com/android/quicksearchbox/ui/SuggestionClickListener.java b/src/com/android/quicksearchbox/ui/SuggestionClickListener.java
index 10fc714..9eaee0c 100644
--- a/src/com/android/quicksearchbox/ui/SuggestionClickListener.java
+++ b/src/com/android/quicksearchbox/ui/SuggestionClickListener.java
@@ -29,6 +29,13 @@
void onSuggestionClicked(int position);
/**
+ * Called when a quick contact badge in a suggestion is clicked.
+ *
+ * @param position Position of the suggestion.
+ */
+ void onSuggestionQuickContactClicked(int position);
+
+ /**
* Called when a suggestion is long clicked.
*
* @param position Position of the long clicked suggestion.