diff options
author | Bjorn Bringert <bringert@android.com> | 2009-08-28 12:19:33 +0100 |
---|---|---|
committer | Bjorn Bringert <bringert@android.com> | 2009-08-28 15:25:47 +0100 |
commit | a5697c41c49de0ffc8b1a150f4dce17b55d45635 (patch) | |
tree | bb79005e905088995d6e3b946ab39e66a583ce11 | |
parent | c754a9c29283657754f214693038d957f4b25d09 (diff) | |
download | GlobalSearch-a5697c41c49de0ffc8b1a150f4dce17b55d45635.tar.gz |
Never promote 3rd party sources with < 3 clicks.
Fixes http://b/issue?id=2085102
Change-Id: I263b3b4d9c26efd778cb83ddbfb6f22cd9668d4f
3 files changed, 29 insertions, 11 deletions
diff --git a/src/com/android/globalsearch/ShortcutRepository.java b/src/com/android/globalsearch/ShortcutRepository.java index 54719dc..cba63be 100644 --- a/src/com/android/globalsearch/ShortcutRepository.java +++ b/src/com/android/globalsearch/ShortcutRepository.java @@ -43,6 +43,11 @@ public interface ShortcutRepository { */ static final int MIN_IMPRESSIONS_FOR_SOURCE_RANKING = 5; + /** + * The mininum number of clicks to be considered for source ranking. + */ + static final int MIN_CLICKS_FOR_SOURCE_RANKING = 3; + static final int MAX_SHORTCUTS_RETURNED = 12; /** diff --git a/src/com/android/globalsearch/ShortcutRepositoryImplLog.java b/src/com/android/globalsearch/ShortcutRepositoryImplLog.java index 6e8c469..a473817 100644 --- a/src/com/android/globalsearch/ShortcutRepositoryImplLog.java +++ b/src/com/android/globalsearch/ShortcutRepositoryImplLog.java @@ -104,7 +104,8 @@ class ShortcutRepositoryImplLog implements ShortcutRepository { final String tables = SourceStats.TABLE_NAME; final String[] columns = SourceStats.COLUMNS; - final String where = SourceStats.total_impressions + " >= $1"; + final String where = SourceStats.total_impressions + " >= $1 AND " + + SourceStats.total_clicks + " >= $2"; final String groupBy = null; final String having = null; final String orderBy = orderingExpr + " DESC"; @@ -167,7 +168,8 @@ class ShortcutRepositoryImplLog implements ShortcutRepository { /** {@inheritDoc} */ public ArrayList<ComponentName> getSourceRanking() { - return getSourceRanking(MIN_IMPRESSIONS_FOR_SOURCE_RANKING); + return getSourceRanking(MIN_IMPRESSIONS_FOR_SOURCE_RANKING, + MIN_CLICKS_FOR_SOURCE_RANKING); } /** {@inheritDoc} */ @@ -275,13 +277,14 @@ class ShortcutRepositoryImplLog implements ShortcutRepository { * Returns the source ranking for sources with a minimum number of impressions. * * @param minImpressions The minimum number of impressions a source must have. + * @param minClicks The minimum number of clicks a source must have. * @return The list of sources, ranked by click through rate. */ - ArrayList<ComponentName> getSourceRanking(int minImpressions) { + ArrayList<ComponentName> getSourceRanking(int minImpressions, int minClicks) { SQLiteDatabase db = mOpenHelper.getReadableDatabase(); final Cursor cursor = db.rawQuery( SOURCE_RANKING_SQL, - new String[] { String.valueOf(minImpressions) }); + new String[] { String.valueOf(minImpressions), String.valueOf(minClicks) }); try { final ArrayList<ComponentName> sources = new ArrayList<ComponentName>(cursor.getCount()); diff --git a/tests/src/com/android/globalsearch/ShortcutRepositoryTest.java b/tests/src/com/android/globalsearch/ShortcutRepositoryTest.java index 0d73484..b48c465 100644 --- a/tests/src/com/android/globalsearch/ShortcutRepositoryTest.java +++ b/tests/src/com/android/globalsearch/ShortcutRepositoryTest.java @@ -530,7 +530,7 @@ public class ShortcutRepositoryTest extends AndroidTestCase { Lists.newArrayList(APP_COMPONENT, CONTACTS_COMPONENT)), NOW); assertContentsInOrder("expecting apps to rank ahead of contacts (more clicks)", - mRepo.getSourceRanking(0), + mRepo.getSourceRanking(0, 0), APP_COMPONENT, CONTACTS_COMPONENT); // 2 clicks on a contact, impression for both apps and contacts @@ -544,7 +544,7 @@ public class ShortcutRepositoryTest extends AndroidTestCase { Lists.newArrayList(APP_COMPONENT, CONTACTS_COMPONENT)), NOW); assertContentsInOrder("expecting contacts to rank ahead of apps (more clicks)", - mRepo.getSourceRanking(0), + mRepo.getSourceRanking(0, 0), CONTACTS_COMPONENT, APP_COMPONENT); } @@ -563,7 +563,7 @@ public class ShortcutRepositoryTest extends AndroidTestCase { assertContentsInOrder( "apps (1 click / 2 impressions) should beat contacts (2 clicks / 5 impressions)", - mRepo.getSourceRanking(0), + mRepo.getSourceRanking(0, 0), APP_COMPONENT, CONTACTS_COMPONENT); // contacts: up to 4 clicks in 7 impressions @@ -572,7 +572,7 @@ public class ShortcutRepositoryTest extends AndroidTestCase { assertContentsInOrder( "contacts (4 click / 7 impressions) should beat apps (1 clicks / 2 impressions)", - mRepo.getSourceRanking(0), + mRepo.getSourceRanking(0, 0), CONTACTS_COMPONENT, APP_COMPONENT); } @@ -594,12 +594,12 @@ public class ShortcutRepositoryTest extends AndroidTestCase { assertContentsInOrder( "old clicks for apps shouldn't count.", - mRepo.getSourceRanking(0), + mRepo.getSourceRanking(0, 0), CONTACTS_COMPONENT, APP_COMPONENT); } - public void testSourceRanking_filterSourcesWithInsufficientImpressions() { + public void testSourceRanking_filterSourcesWithInsufficientData() { sourceImpressions(APP_COMPONENT, 1, 5); sourceImpressions(CONTACTS_COMPONENT, 1, 2); sourceImpressions(BOOKMARKS_COMPONENT, 9, 10); @@ -609,8 +609,18 @@ public class ShortcutRepositoryTest extends AndroidTestCase { assertContentsInOrder( "ordering should only include sources with at least 5 impressions.", - mRepo.getSourceRanking(5), + mRepo.getSourceRanking(5, 0), BOOKMARKS_COMPONENT, MARKET_COMPONENT, APP_COMPONENT); + + assertContentsInOrder( + "ordering should only include sources with at least 2 clicks.", + mRepo.getSourceRanking(0, 2), + HISTORY_COMPONENT, BOOKMARKS_COMPONENT, MARKET_COMPONENT); + + assertContentsInOrder( + "ordering should only include sources with at least 5 impressions and 3 clicks.", + mRepo.getSourceRanking(5, 3), + BOOKMARKS_COMPONENT, MARKET_COMPONENT); } protected void sourceImpressions(ComponentName source, int clicks, int impressions) { |