13e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert/* 23e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * Copyright (C) 2009 The Android Open Source Project 33e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * 43e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * Licensed under the Apache License, Version 2.0 (the "License"); 53e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * you may not use this file except in compliance with the License. 63e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * You may obtain a copy of the License at 73e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * 83e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * http://www.apache.org/licenses/LICENSE-2.0 93e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * 103e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * Unless required by applicable law or agreed to in writing, software 113e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * distributed under the License is distributed on an "AS IS" BASIS, 123e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 133e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * See the License for the specific language governing permissions and 143e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * limitations under the License. 153e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert */ 163e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 173e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringertpackage com.android.quicksearchbox; 183e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 195229b06f00d20aac76cd8519b37f2a579d61c54fMathew Inwoodimport com.android.quicksearchbox.ui.SuggestionViewFactory; 20e29d52aa72c96c3147fa91d83aeb8dafc6d1f578Mathew Inwoodimport com.android.quicksearchbox.util.Now; 21e29d52aa72c96c3147fa91d83aeb8dafc6d1f578Mathew Inwoodimport com.android.quicksearchbox.util.NowOrLater; 225229b06f00d20aac76cd8519b37f2a579d61c54fMathew Inwood 233e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringertimport android.content.ComponentName; 243e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringertimport android.content.Intent; 253e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringertimport android.graphics.drawable.Drawable; 263e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringertimport android.net.Uri; 27fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringertimport android.os.Bundle; 283e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 293e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert/** 303e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * Mock implementation of {@link Source}. 313e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * 323e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert */ 333e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringertpublic class MockSource implements Source { 343e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 3508ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert public static final MockSource SOURCE_1 = new MockSource("SOURCE_1"); 363e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 3708ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert public static final MockSource SOURCE_2 = new MockSource("SOURCE_2"); 383e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 3908ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert public static final MockSource SOURCE_3 = new MockSource("SOURCE_3"); 4008ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert 4108ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert public static final MockSource WEB_SOURCE = new MockSource("WEB") { 4208ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert @Override 4353aab8c4459f45664d04ec882d67094c52b78695Bjorn Bringert public SuggestionData createSuggestion(String query) { 4453aab8c4459f45664d04ec882d67094c52b78695Bjorn Bringert return new SuggestionData(this) 4553aab8c4459f45664d04ec882d67094c52b78695Bjorn Bringert .setText1(query) 4653aab8c4459f45664d04ec882d67094c52b78695Bjorn Bringert .setIntentAction(Intent.ACTION_WEB_SEARCH) 4753aab8c4459f45664d04ec882d67094c52b78695Bjorn Bringert .setSuggestionQuery(query); 4853aab8c4459f45664d04ec882d67094c52b78695Bjorn Bringert } 4953aab8c4459f45664d04ec882d67094c52b78695Bjorn Bringert 5053aab8c4459f45664d04ec882d67094c52b78695Bjorn Bringert @Override 5153aab8c4459f45664d04ec882d67094c52b78695Bjorn Bringert public int getMaxShortcuts(Config config) { 5253aab8c4459f45664d04ec882d67094c52b78695Bjorn Bringert return config.getMaxShortcutsPerWebSource(); 5308ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert } 5408ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert }; 55883c1bf364e38c5b133afb55f8493a14b65f4dd4Bjorn Bringert 563e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert private final String mName; 573e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 586d5cbd67f7a5f824babb5c892b0f30bfd9f4ff23Bjorn Bringert private final int mVersionCode; 596d5cbd67f7a5f824babb5c892b0f30bfd9f4ff23Bjorn Bringert 603e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert public MockSource(String name) { 616d5cbd67f7a5f824babb5c892b0f30bfd9f4ff23Bjorn Bringert this(name, 0); 626d5cbd67f7a5f824babb5c892b0f30bfd9f4ff23Bjorn Bringert } 636d5cbd67f7a5f824babb5c892b0f30bfd9f4ff23Bjorn Bringert 646d5cbd67f7a5f824babb5c892b0f30bfd9f4ff23Bjorn Bringert public MockSource(String name, int versionCode) { 653e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert mName = name; 666d5cbd67f7a5f824babb5c892b0f30bfd9f4ff23Bjorn Bringert mVersionCode = versionCode; 673e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 683e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 6981a0897ff9685f3313c58294bf7973700c468b2bBjorn Bringert public ComponentName getIntentComponent() { 703e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert // Not an activity, but no code should treat it as one. 713e6381e417d5aff74a37c22a7300b1e30f2b1a86Bryan Mawhinney return new ComponentName("com.android.quicksearchbox", 72cf2b895b5491c481575d122225a32e95c47abea1Bjorn Bringert getClass().getName() + "." + mName); 733e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 743e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 7509552c760ad82eb90795e98de96c65005d6ebafcMathew Inwood public String getSuggestUri() { 7609552c760ad82eb90795e98de96c65005d6ebafcMathew Inwood return null; 7709552c760ad82eb90795e98de96c65005d6ebafcMathew Inwood } 7809552c760ad82eb90795e98de96c65005d6ebafcMathew Inwood 796d5cbd67f7a5f824babb5c892b0f30bfd9f4ff23Bjorn Bringert public int getVersionCode() { 806d5cbd67f7a5f824babb5c892b0f30bfd9f4ff23Bjorn Bringert return mVersionCode; 816d5cbd67f7a5f824babb5c892b0f30bfd9f4ff23Bjorn Bringert } 826d5cbd67f7a5f824babb5c892b0f30bfd9f4ff23Bjorn Bringert 8393ba3b9bf77395f7a148d384bac9a80ba8ce6cedMathew Inwood public boolean isVersionCodeCompatible(int version) { 8493ba3b9bf77395f7a148d384bac9a80ba8ce6cedMathew Inwood return version == mVersionCode; 8593ba3b9bf77395f7a148d384bac9a80ba8ce6cedMathew Inwood } 8693ba3b9bf77395f7a148d384bac9a80ba8ce6cedMathew Inwood 87f252dc7a25ba08b973ecc1cfbbce58eb78d42167Bjorn Bringert public String getName() { 8881a0897ff9685f3313c58294bf7973700c468b2bBjorn Bringert return getIntentComponent().flattenToShortString(); 89d32d6753347e872aa5d9d6e9015ed7f24db3e362Bjorn Bringert } 90d32d6753347e872aa5d9d6e9015ed7f24db3e362Bjorn Bringert 913e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert public String getDefaultIntentAction() { 9293bd2e70b8b08da1ec37fd0e990dac05551d2e90Bjorn Bringert return Intent.ACTION_SEARCH; 933e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 943e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 953e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert public String getDefaultIntentData() { 963e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert return null; 973e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 983e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 99e29d52aa72c96c3147fa91d83aeb8dafc6d1f578Mathew Inwood @Override 100e29d52aa72c96c3147fa91d83aeb8dafc6d1f578Mathew Inwood public NowOrLater<Drawable> getIcon(String drawableId) { 101e29d52aa72c96c3147fa91d83aeb8dafc6d1f578Mathew Inwood return new Now<Drawable>(null); 1023e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 1033e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 1043e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert public Uri getIconUri(String drawableId) { 1053e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert return null; 1063e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 1073e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 1083e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert public String getLabel() { 1093e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert return "MockSource " + mName; 1103e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 1113e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 1123e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert public int getQueryThreshold() { 1133e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert return 0; 1143e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 1153e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 1165691f9062b2a558ba39c700d65bc522d397ebc75Bjorn Bringert public CharSequence getHint() { 1175691f9062b2a558ba39c700d65bc522d397ebc75Bjorn Bringert return null; 1185691f9062b2a558ba39c700d65bc522d397ebc75Bjorn Bringert } 1195691f9062b2a558ba39c700d65bc522d397ebc75Bjorn Bringert 1203e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert public String getSettingsDescription() { 1213e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert return "Suggestions from MockSource " + mName; 1223e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 1233e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 1243e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert public Drawable getSourceIcon() { 1253e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert return null; 1263e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 1273e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 1283e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert public Uri getSourceIconUri() { 1293e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert return null; 1303e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 1313e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 13281a0897ff9685f3313c58294bf7973700c468b2bBjorn Bringert public boolean canRead() { 13381a0897ff9685f3313c58294bf7973700c468b2bBjorn Bringert return true; 13481a0897ff9685f3313c58294bf7973700c468b2bBjorn Bringert } 13581a0897ff9685f3313c58294bf7973700c468b2bBjorn Bringert 136cd1e3ba5f7c3f5242345ff6f674281e3d6366e24Mathew Inwood public SourceResult getSuggestions(String query, int queryLimit, boolean onlySource) { 1373e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert if (query.length() == 0) { 1383e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert return null; 1393e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 14093bd2e70b8b08da1ec37fd0e990dac05551d2e90Bjorn Bringert ListSuggestionCursor cursor = new ListSuggestionCursor(query); 14153aab8c4459f45664d04ec882d67094c52b78695Bjorn Bringert cursor.add(createSuggestion(query + "_1")); 14253aab8c4459f45664d04ec882d67094c52b78695Bjorn Bringert cursor.add(createSuggestion(query + "_2")); 143fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert return new Result(query, cursor); 144fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert } 145fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert 146b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert public SuggestionData createSuggestion(String query) { 14708ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert Uri data = new Uri.Builder().scheme("content").authority(mName).path(query).build(); 14808ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert return new SuggestionData(this) 14908ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert .setText1(query) 15008ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert .setIntentAction(Intent.ACTION_VIEW) 15108ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert .setIntentData(data.toString()); 15208ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert } 15308ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert 1546d5cbd67f7a5f824babb5c892b0f30bfd9f4ff23Bjorn Bringert @Override 1556d5cbd67f7a5f824babb5c892b0f30bfd9f4ff23Bjorn Bringert public boolean equals(Object o) { 1566d5cbd67f7a5f824babb5c892b0f30bfd9f4ff23Bjorn Bringert if (o != null && o.getClass().equals(this.getClass())) { 1576d5cbd67f7a5f824babb5c892b0f30bfd9f4ff23Bjorn Bringert MockSource s = (MockSource) o; 1586d5cbd67f7a5f824babb5c892b0f30bfd9f4ff23Bjorn Bringert return s.mName.equals(mName); 1596d5cbd67f7a5f824babb5c892b0f30bfd9f4ff23Bjorn Bringert } 1606d5cbd67f7a5f824babb5c892b0f30bfd9f4ff23Bjorn Bringert return false; 1616d5cbd67f7a5f824babb5c892b0f30bfd9f4ff23Bjorn Bringert } 1626d5cbd67f7a5f824babb5c892b0f30bfd9f4ff23Bjorn Bringert 1636d5cbd67f7a5f824babb5c892b0f30bfd9f4ff23Bjorn Bringert @Override 1646d5cbd67f7a5f824babb5c892b0f30bfd9f4ff23Bjorn Bringert public int hashCode() { 1656d5cbd67f7a5f824babb5c892b0f30bfd9f4ff23Bjorn Bringert return mName.hashCode(); 1666d5cbd67f7a5f824babb5c892b0f30bfd9f4ff23Bjorn Bringert } 1676d5cbd67f7a5f824babb5c892b0f30bfd9f4ff23Bjorn Bringert 1686d5cbd67f7a5f824babb5c892b0f30bfd9f4ff23Bjorn Bringert @Override 1696d5cbd67f7a5f824babb5c892b0f30bfd9f4ff23Bjorn Bringert public String toString() { 1706d5cbd67f7a5f824babb5c892b0f30bfd9f4ff23Bjorn Bringert return getName() + ":" + getVersionCode(); 1716d5cbd67f7a5f824babb5c892b0f30bfd9f4ff23Bjorn Bringert } 1726d5cbd67f7a5f824babb5c892b0f30bfd9f4ff23Bjorn Bringert 173fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert private class Result extends SuggestionCursorWrapper implements SourceResult { 174fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert 175fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert public Result(String userQuery, SuggestionCursor cursor) { 176fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert super(userQuery, cursor); 177fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert } 178fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert 179fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert public Source getSource() { 180fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert return MockSource.this; 181fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert } 182fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert 1833e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 1843e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 18594e8a2be78530170f50e7895a558bf8011bbf8e8Bryan Mawhinney public SuggestionCursor refreshShortcut(String shortcutId, String extraData) { 18694e8a2be78530170f50e7895a558bf8011bbf8e8Bryan Mawhinney return null; 18794e8a2be78530170f50e7895a558bf8011bbf8e8Bryan Mawhinney } 18894e8a2be78530170f50e7895a558bf8011bbf8e8Bryan Mawhinney 18981a0897ff9685f3313c58294bf7973700c468b2bBjorn Bringert public boolean isExternal() { 19081a0897ff9685f3313c58294bf7973700c468b2bBjorn Bringert return false; 19181a0897ff9685f3313c58294bf7973700c468b2bBjorn Bringert } 19281a0897ff9685f3313c58294bf7973700c468b2bBjorn Bringert 19353aab8c4459f45664d04ec882d67094c52b78695Bjorn Bringert public int getMaxShortcuts(Config config) { 19453aab8c4459f45664d04ec882d67094c52b78695Bjorn Bringert return config.getMaxShortcutsPerNonWebSource(); 1953e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 1963e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 1973e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert public boolean queryAfterZeroResults() { 1983e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert return false; 1993e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 2003e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 201fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert public Intent createSearchIntent(String query, Bundle appData) { 202fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert return null; 203fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert } 204fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert 205fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert public Intent createVoiceSearchIntent(Bundle appData) { 206fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert return null; 207fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert } 208fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert 209fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert public boolean voiceSearchEnabled() { 210fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert return false; 211fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert } 212fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert 213f3f70e5ae88f06ff6dabdec9e7c71a19ca1e7108Bjorn Bringert public boolean includeInAll() { 214f3f70e5ae88f06ff6dabdec9e7c71a19ca1e7108Bjorn Bringert return true; 215f3f70e5ae88f06ff6dabdec9e7c71a19ca1e7108Bjorn Bringert } 216f3f70e5ae88f06ff6dabdec9e7c71a19ca1e7108Bjorn Bringert 217848fa7a19abedc372452073abaf52780c7b6d78dAmith Yamasani public Source getRoot() { 218848fa7a19abedc372452073abaf52780c7b6d78dAmith Yamasani return this; 219848fa7a19abedc372452073abaf52780c7b6d78dAmith Yamasani } 220848fa7a19abedc372452073abaf52780c7b6d78dAmith Yamasani 2213e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert} 222