SuggestionData.java revision 3e44ff1f2a204db3f479698cf0b3eab3d451dec2
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 193e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringertimport android.app.SearchManager; 203e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringertimport android.content.Intent; 213e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 223e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert/** 233e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * Holds data for each suggest item including the display data and how to launch the result. 243e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * Used for passing from the provider to the suggest cursor. 253e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * Use {@link Builder} to create new instances. 263e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * 273e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert */ 283e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringertpublic class SuggestionData { 293e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 303e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert private final Source mSource; 313e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert private final String mFormat; 323e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert private final String mText1; 333e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert private final String mText2; 343e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert private final String mIcon1; 353e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert private final String mIcon2; 363e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert private final Intent mIntent; 373e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert private final Intent mSecondaryIntent; 383e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert private final String mDisplayQuery; 393e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert private final String mShortcutId; 403e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 413e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert public SuggestionData( 423e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert Source source, 433e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert String format, 443e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert String text1, 453e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert String text2, 463e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert String icon1, 473e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert String icon2, 483e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert Intent intent, 493e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert Intent secondaryIntent, 503e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert String displayQuery, 513e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert String shortcutId) { 523e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert mSource = source; 533e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert mFormat = format; 543e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert mText1 = text1; 553e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert mText2 = text2; 563e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert mIcon1 = icon1; 573e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert mIcon2 = icon2; 583e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert mIntent = intent == null ? null : new Intent(intent); 593e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert mSecondaryIntent = secondaryIntent == null ? null : new Intent(intent); 603e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert mDisplayQuery = displayQuery; 613e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert mShortcutId = shortcutId; 623e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 633e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 643e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert /** 653e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * Gets the suggestion source that created this suggestion. 663e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert */ 673e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert public Source getSource() { 683e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert return mSource; 693e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 703e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 713e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert /** 723e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * Gets the format of the text in the title and description. 733e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert */ 743e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert public String getFormat() { 753e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert return mFormat; 763e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 773e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 783e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert /** 793e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * Gets the display title (typically shown as the first line). 803e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert */ 813e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert public String getText1() { 823e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert return mText1; 833e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 843e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 853e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert /** 863e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * Gets the display description (typically shown as the second line). 873e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert */ 883e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert public String getText2() { 893e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert return mText2; 903e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 913e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 923e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert /** 933e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * Resource ID or URI for the first icon (typically shown on the left). 943e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert */ 953e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert public String getIcon1() { 963e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert return mIcon1; 973e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 983e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 993e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert /** 1003e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * Resource ID or URI for the second icon (typically shown on the right). 1013e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert */ 1023e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert public String getIcon2() { 1033e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert return mIcon2; 1043e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 1053e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 1063e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert /** 1073e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * The intent to launch. 1083e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert */ 1093e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert public Intent getIntent() { 1103e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert return mIntent == null ? null : new Intent(mIntent); 1113e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 1123e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 1133e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert /** 1143e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * The secondary intent for the suggestion. 1153e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert */ 1163e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert public Intent getSecondaryIntent() { 1173e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert return mSecondaryIntent == null ? null : new Intent(mSecondaryIntent); 1183e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 1193e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 1203e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert /** 1213e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * The query to display when this suggestion is selected. 1223e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert */ 1233e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert public String getDisplayQuery() { 1243e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert return mDisplayQuery; 1253e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 1263e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 1273e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert /** 1283e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * The shortcut id. 1293e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert */ 1303e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert public String getShortcutId() { 1313e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert return mShortcutId; 1323e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 1333e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 1343e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert public boolean hasSecondaryIntent() { 1353e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert return mSecondaryIntent != null; 1363e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 1373e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 1383e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert private String makeKeyComponent(String str) { 1393e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert return str == null ? "" : str; 1403e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 1413e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 1423e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert public String getSuggestionKey() { 1433e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert String action = ""; 1443e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert String data = ""; 1453e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert String query = ""; 1463e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert if (mIntent != null) { 1473e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert action = makeKeyComponent(mIntent.getAction()); 1483e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert data = makeKeyComponent(mIntent.getDataString()); 1493e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert query = makeKeyComponent(mIntent.getStringExtra(SearchManager.QUERY)); 1503e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 1513e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert // calculating accurate size of string builder avoids an allocation vs starting with 1523e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert // the default size and having to expand. 1533e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert int size = action.length() + 2 + data.length() + query.length(); 1543e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert return new StringBuilder(size) 1553e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert .append(action) 1563e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert .append('#') 1573e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert .append(data) 1583e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert .append('#') 1593e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert .append(query) 1603e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert .toString(); 1613e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 1623e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 1633e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert /** 1643e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * Gets a builder initialized with the values from this suggestion. 1653e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert */ 1663e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert public Builder buildUpon() { 1673e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert return new Builder(getSource()) 1683e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert .format(getFormat()) 1693e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert .text1(getText1()) 1703e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert .text2(getText2()) 1713e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert .icon1(getIcon1()) 1723e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert .icon2(getIcon2()) 1733e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert .intent(getIntent()) 1743e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert .secondaryIntent(getSecondaryIntent()) 1753e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert .shortcutId(getShortcutId()); 1763e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 1773e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 1783e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert private String getIntentString() { 1793e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert if (mIntent == null) { 1803e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert return null; 1813e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 1823e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert return mIntent.toUri(Intent.URI_INTENT_SCHEME); 1833e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 1843e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 1853e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert private String getSecondaryIntentString() { 1863e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert if (mSecondaryIntent == null) { 1873e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert return null; 1883e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 1893e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert return mSecondaryIntent.toUri(Intent.URI_INTENT_SCHEME); 1903e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 1913e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 1923e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert @Override 1933e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert public boolean equals(Object o) { 1943e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert if (this == o) { 1953e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert return true; 1963e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 1973e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert if (o == null || getClass() != o.getClass()) { 1983e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert return false; 1993e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 2003e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 2013e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert SuggestionData that = (SuggestionData) o; 2023e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 2033e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert if (notEqual(mSource, that.mSource)) return false; 2043e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert if (notEqual(mFormat, that.mFormat)) return false; 2053e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert if (notEqual(mText1, that.mText1)) return false; 2063e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert if (notEqual(mText2, that.mText2)) return false; 2073e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert if (notEqual(mIcon1, that.mIcon1)) return false; 2083e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert if (notEqual(mIcon2, that.mIcon2)) return false; 2093e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert if (notEqual(getIntentString(), that.getIntentString())) return false; 2103e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert if (notEqual(getSecondaryIntentString(), that.getSecondaryIntentString())) return false; 2113e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert if (notEqual(mShortcutId, that.mShortcutId)) return false; 2123e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert return true; 2133e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 2143e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 2153e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert private static boolean notEqual(Object x, Object y) { 2163e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert if (x == null) { 2173e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert return y != null; 2183e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 2193e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert if (x == y) { 2203e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert return false; 2213e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 2223e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert return !x.equals(y); 2233e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 2243e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 2253e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert @Override 2263e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert public int hashCode() { 2273e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert int result = mSource.hashCode(); 2283e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert result = addHashCode(result, mFormat); 2293e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert result = addHashCode(result, mText1); 2303e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert result = addHashCode(result, mText2); 2313e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert result = addHashCode(result, mIcon1); 2323e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert result = addHashCode(result, mIcon2); 2333e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert result = addHashCode(result, getIntentString()); 2343e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert result = addHashCode(result, getSecondaryIntentString()); 2353e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert result = addHashCode(result, mShortcutId); 2363e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert return result; 2373e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 2383e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 2393e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert private static int addHashCode(int old, String str) { 2403e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert return 31 * old + (str != null ? str.hashCode() : 0); 2413e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 2423e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 2433e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert /** 2443e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * Returns a string representation of the contents of this SuggestionData, 2453e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * for debugging purposes. 2463e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert */ 2473e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert @Override 2483e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert public String toString() { 2493e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert StringBuilder builder = new StringBuilder("SuggestionData("); 2503e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert builder.append("source=").append(mSource.getComponentName().toShortString()) 2513e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert .append(", title=").append(mText1); 2523e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert if (mIntent != null) { 2533e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert builder.append(", intent=").append(getIntentString()); 2543e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 2553e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert if (mSecondaryIntent != null) { 2563e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert builder.append(", secondaryIntent=").append(getSecondaryIntentString()); 2573e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 2583e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert if (mShortcutId != null) { 2593e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert builder.append(", shortcutid=").append(mShortcutId); 2603e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 2613e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 2623e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert builder.append(")"); 2633e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert return builder.toString(); 2643e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 2653e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 2663e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert /** 2673e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * Builder for {@link SuggestionData}. 2683e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert */ 2693e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert public static class Builder { 2703e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert private Source mSource; 2713e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert private String mFormat; 2723e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert private String mText1; 2733e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert private String mText2; 2743e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert private String mIcon1; 2753e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert private String mIcon2; 2763e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert private Intent mIntent; 2773e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert private Intent mSecondaryIntent; 2783e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert private String mDisplayQuery; 2793e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert private String mShortcutId; 2803e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 2813e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert /** 2823e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * Creates a new suggestion builder. 2833e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * 2843e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * @param source The suggestion source that this suggestion comes from. 2853e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert */ 2863e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert public Builder(Source source) { 2873e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert mSource = source; 2883e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 2893e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 2903e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert /** 2913e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * Builds a suggestion using the values set in the builder. 2923e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert */ 2933e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert public SuggestionData build() { 2943e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert return new SuggestionData( 2953e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert mSource, 2963e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert mFormat, 2973e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert mText1, 2983e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert mText2, 2993e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert mIcon1, 3003e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert mIcon2, 3013e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert mIntent, 3023e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert mSecondaryIntent, 3033e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert mDisplayQuery, 3043e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert mShortcutId); 3053e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 3063e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 3073e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert /** 3083e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * Sets the format of the text in the title and description. 3093e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert */ 3103e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert public Builder format(String format) { 3113e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert mFormat = format; 3123e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert return this; 3133e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 3143e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 3153e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert /** 3163e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * Sets the first text line. 3173e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert */ 3183e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert public Builder text1(String text1) { 3193e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert mText1 = text1; 3203e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert return this; 3213e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 3223e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 3233e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert /** 3243e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * Sets the second text line. 3253e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert */ 3263e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert public Builder text2(String text2) { 3273e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert mText2 = text2; 3283e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert return this; 3293e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 3303e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 3313e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert /** 3323e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * Sets the resource ID or URI for the first icon (typically shown on the left). 3333e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert */ 3343e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert public Builder icon1(String icon1) { 3353e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert mIcon1 = icon1; 3363e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert return this; 3373e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 3383e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 3393e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert /** 3403e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * Sets the resource ID for the first icon (typically shown on the left). 3413e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert */ 3423e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert public Builder icon1(int icon1) { 3433e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert return icon1(String.valueOf(icon1)); 3443e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 3453e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 3463e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert /** 3473e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * Sets the resource ID or URI for the second icon (typically shown on the right). 3483e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert */ 3493e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert public Builder icon2(String icon2) { 3503e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert mIcon2 = icon2; 3513e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert return this; 3523e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 3533e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 3543e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert /** 3553e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * Sets the resource ID for the second icon (typically shown on the right). 3563e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert */ 3573e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert public Builder icon2(int icon2) { 3583e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert return icon2(String.valueOf(icon2)); 3593e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 3603e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 3613e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert /** 3623e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * Sets the intent to launch. 3633e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert */ 3643e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert public Builder intent(Intent intent) { 3653e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert mIntent = intent; 3663e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert return this; 3673e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 3683e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 3693e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert /** 3703e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * Sets the secondary intent . 3713e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert */ 3723e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert public Builder secondaryIntent(Intent intent) { 3733e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert mSecondaryIntent = intent; 3743e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert return this; 3753e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 3763e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 3773e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert /** 3783e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * Sets the query that will be displayed when this suggestion is selected. 3793e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert */ 3803e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert public Builder displayQuery(String displayQuery) { 3813e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert mDisplayQuery = displayQuery; 3823e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert return this; 3833e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 3843e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 3853e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert /** 3863e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * Sets the shortcut id. 3873e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert */ 3883e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert public Builder shortcutId(String shortcutId) { 3893e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert mShortcutId = shortcutId; 3903e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert return this; 3913e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 3923e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 3933e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert} 394