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