ClipDescription.java revision 5d196673b8d940b9420cfdb12c2d6d75460b818c
11040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn/** 21040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn * Copyright (c) 2010, The Android Open Source Project 31040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn * 41040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn * Licensed under the Apache License, Version 2.0 (the "License"); 51040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn * you may not use this file except in compliance with the License. 61040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn * You may obtain a copy of the License at 71040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn * 81040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn * http://www.apache.org/licenses/LICENSE-2.0 91040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn * 101040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn * Unless required by applicable law or agreed to in writing, software 111040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn * distributed under the License is distributed on an "AS IS" BASIS, 121040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn * See the License for the specific language governing permissions and 141040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn * limitations under the License. 151040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn */ 161040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn 171040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackbornpackage android.content; 181040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn 191040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackbornimport android.os.Parcel; 201040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackbornimport android.os.Parcelable; 21ddb4bdecfcb6fd84c0613f42c0fadb7fdd487839Vladislav Kaznacheevimport android.os.PersistableBundle; 221040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackbornimport android.text.TextUtils; 231040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn 241040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackbornimport java.util.ArrayList; 251040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn 261040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn/** 27f6d952bbc85706031e1ad29ec389c1e02cfff433Dianne Hackborn * Meta-data describing the contents of a {@link ClipData}. Provides enough 281040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn * information to know if you can handle the ClipData, but not the data 291040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn * itself. 303aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * 313aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * <div class="special reference"> 323aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * <h3>Developer Guides</h3> 333aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * <p>For more information about using the clipboard framework, read the 343aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * <a href="{@docRoot}guide/topics/clipboard/copy-paste.html">Copy and Paste</a> 353aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * developer guide.</p> 363aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * </div> 371040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn */ 381040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackbornpublic class ClipDescription implements Parcelable { 391040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn /** 401040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn * The MIME type for a clip holding plain text. 411040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn */ 421040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn public static final String MIMETYPE_TEXT_PLAIN = "text/plain"; 431040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn 441040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn /** 45acb69bb909d098cea284df47d794c17171d84c91Dianne Hackborn * The MIME type for a clip holding HTML text. 46acb69bb909d098cea284df47d794c17171d84c91Dianne Hackborn */ 47acb69bb909d098cea284df47d794c17171d84c91Dianne Hackborn public static final String MIMETYPE_TEXT_HTML = "text/html"; 48acb69bb909d098cea284df47d794c17171d84c91Dianne Hackborn 49acb69bb909d098cea284df47d794c17171d84c91Dianne Hackborn /** 501040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn * The MIME type for a clip holding one or more URIs. This should be 511040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn * used for URIs that are meaningful to a user (such as an http: URI). 521040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn * It should <em>not</em> be used for a content: URI that references some 531040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn * other piece of data; in that case the MIME type should be the type 541040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn * of the referenced data. 551040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn */ 561040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn public static final String MIMETYPE_TEXT_URILIST = "text/uri-list"; 571040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn 581040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn /** 591040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn * The MIME type for a clip holding an Intent. 601040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn */ 611040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn public static final String MIMETYPE_TEXT_INTENT = "text/vnd.android.intent"; 621040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn 63ddb4bdecfcb6fd84c0613f42c0fadb7fdd487839Vladislav Kaznacheev /** 64ddb4bdecfcb6fd84c0613f42c0fadb7fdd487839Vladislav Kaznacheev * The name of the extra used to define a component name when copying/dragging 65ddb4bdecfcb6fd84c0613f42c0fadb7fdd487839Vladislav Kaznacheev * an app icon from Launcher. 66ddb4bdecfcb6fd84c0613f42c0fadb7fdd487839Vladislav Kaznacheev * <p> 67ddb4bdecfcb6fd84c0613f42c0fadb7fdd487839Vladislav Kaznacheev * Type: String 68ddb4bdecfcb6fd84c0613f42c0fadb7fdd487839Vladislav Kaznacheev * </p> 69ddb4bdecfcb6fd84c0613f42c0fadb7fdd487839Vladislav Kaznacheev * <p> 70ddb4bdecfcb6fd84c0613f42c0fadb7fdd487839Vladislav Kaznacheev * Use {@link ComponentName#unflattenFromString(String)} 71ddb4bdecfcb6fd84c0613f42c0fadb7fdd487839Vladislav Kaznacheev * and {@link ComponentName#flattenToString()} to convert the extra value 72ddb4bdecfcb6fd84c0613f42c0fadb7fdd487839Vladislav Kaznacheev * to/from {@link ComponentName}. 73ddb4bdecfcb6fd84c0613f42c0fadb7fdd487839Vladislav Kaznacheev * </p> 745d196673b8d940b9420cfdb12c2d6d75460b818cVladislav Kaznacheev * @hide 75ddb4bdecfcb6fd84c0613f42c0fadb7fdd487839Vladislav Kaznacheev */ 76ddb4bdecfcb6fd84c0613f42c0fadb7fdd487839Vladislav Kaznacheev public static final String EXTRA_TARGET_COMPONENT_NAME = 77ddb4bdecfcb6fd84c0613f42c0fadb7fdd487839Vladislav Kaznacheev "android.content.extra.TARGET_COMPONENT_NAME"; 78ddb4bdecfcb6fd84c0613f42c0fadb7fdd487839Vladislav Kaznacheev 79ddb4bdecfcb6fd84c0613f42c0fadb7fdd487839Vladislav Kaznacheev /** 80ddb4bdecfcb6fd84c0613f42c0fadb7fdd487839Vladislav Kaznacheev * The name of the extra used to define a user serial number when copying/dragging 81ddb4bdecfcb6fd84c0613f42c0fadb7fdd487839Vladislav Kaznacheev * an app icon from Launcher. 82ddb4bdecfcb6fd84c0613f42c0fadb7fdd487839Vladislav Kaznacheev * <p> 83ddb4bdecfcb6fd84c0613f42c0fadb7fdd487839Vladislav Kaznacheev * Type: long 84ddb4bdecfcb6fd84c0613f42c0fadb7fdd487839Vladislav Kaznacheev * </p> 855d196673b8d940b9420cfdb12c2d6d75460b818cVladislav Kaznacheev * @hide 86ddb4bdecfcb6fd84c0613f42c0fadb7fdd487839Vladislav Kaznacheev */ 87ddb4bdecfcb6fd84c0613f42c0fadb7fdd487839Vladislav Kaznacheev public static final String EXTRA_USER_SERIAL_NUMBER = 88ddb4bdecfcb6fd84c0613f42c0fadb7fdd487839Vladislav Kaznacheev "android.content.extra.USER_SERIAL_NUMBER"; 89ddb4bdecfcb6fd84c0613f42c0fadb7fdd487839Vladislav Kaznacheev 90ddb4bdecfcb6fd84c0613f42c0fadb7fdd487839Vladislav Kaznacheev 911040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn final CharSequence mLabel; 921040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn final String[] mMimeTypes; 93ddb4bdecfcb6fd84c0613f42c0fadb7fdd487839Vladislav Kaznacheev private PersistableBundle mExtras; 941040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn 951040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn /** 961040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn * Create a new clip. 971040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn * 981040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn * @param label Label to show to the user describing this clip. 991040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn * @param mimeTypes An array of MIME types this data is available as. 1001040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn */ 1011040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn public ClipDescription(CharSequence label, String[] mimeTypes) { 1021040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn if (mimeTypes == null) { 1031040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn throw new NullPointerException("mimeTypes is null"); 1041040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn } 1051040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn mLabel = label; 1061040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn mMimeTypes = mimeTypes; 1071040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn } 1081040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn 1091040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn /** 1101040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn * Create a copy of a ClipDescription. 1111040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn */ 1121040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn public ClipDescription(ClipDescription o) { 1131040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn mLabel = o.mLabel; 1141040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn mMimeTypes = o.mMimeTypes; 1151040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn } 1161040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn 1171040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn /** 1181040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn * Helper to compare two MIME types, where one may be a pattern. 1191040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn * @param concreteType A fully-specified MIME type. 1203390018c6b45acffa6edf97a4174ca49f1e8c76dJohn Spurlock * @param desiredType A desired MIME type that may be a pattern such as */*. 1211040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn * @return Returns true if the two MIME types match. 1221040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn */ 1231040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn public static boolean compareMimeTypes(String concreteType, String desiredType) { 1241040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn final int typeLength = desiredType.length(); 1251040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn if (typeLength == 3 && desiredType.equals("*/*")) { 1261040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn return true; 1271040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn } 1281040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn 1291040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn final int slashpos = desiredType.indexOf('/'); 1301040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn if (slashpos > 0) { 1311040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn if (typeLength == slashpos+2 && desiredType.charAt(slashpos+1) == '*') { 1321040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn if (desiredType.regionMatches(0, concreteType, 0, slashpos+1)) { 1331040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn return true; 1341040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn } 1351040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn } else if (desiredType.equals(concreteType)) { 1361040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn return true; 1371040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn } 1381040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn } 1391040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn 1401040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn return false; 1411040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn } 1421040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn 1431040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn /** 1441040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn * Return the label for this clip. 1451040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn */ 1461040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn public CharSequence getLabel() { 1471040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn return mLabel; 1481040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn } 1491040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn 1501040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn /** 1511040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn * Check whether the clip description contains the given MIME type. 1521040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn * 1531040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn * @param mimeType The desired MIME type. May be a pattern. 1541040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn * @return Returns true if one of the MIME types in the clip description 1551040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn * matches the desired MIME type, else false. 1561040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn */ 1571040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn public boolean hasMimeType(String mimeType) { 1581040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn for (int i=0; i<mMimeTypes.length; i++) { 1591040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn if (compareMimeTypes(mMimeTypes[i], mimeType)) { 1601040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn return true; 1611040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn } 1621040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn } 1631040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn return false; 1641040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn } 1651040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn 1661040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn /** 1671040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn * Filter the clip description MIME types by the given MIME type. Returns 1681040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn * all MIME types in the clip that match the given MIME type. 1691040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn * 1701040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn * @param mimeType The desired MIME type. May be a pattern. 1711040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn * @return Returns an array of all matching MIME types. If there are no 1721040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn * matching MIME types, null is returned. 1731040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn */ 1741040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn public String[] filterMimeTypes(String mimeType) { 1751040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn ArrayList<String> array = null; 1761040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn for (int i=0; i<mMimeTypes.length; i++) { 1771040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn if (compareMimeTypes(mMimeTypes[i], mimeType)) { 1781040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn if (array == null) { 1791040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn array = new ArrayList<String>(); 1801040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn } 1811040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn array.add(mMimeTypes[i]); 1821040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn } 1831040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn } 1841040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn if (array == null) { 1851040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn return null; 1861040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn } 1871040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn String[] rawArray = new String[array.size()]; 1881040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn array.toArray(rawArray); 1891040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn return rawArray; 1901040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn } 1911040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn 1921040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn /** 1931040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn * Return the number of MIME types the clip is available in. 1941040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn */ 1951040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn public int getMimeTypeCount() { 1961040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn return mMimeTypes.length; 1971040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn } 1981040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn 1991040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn /** 2001040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn * Return one of the possible clip MIME types. 2011040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn */ 2021040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn public String getMimeType(int index) { 2031040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn return mMimeTypes[index]; 2041040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn } 2051040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn 206ddb4bdecfcb6fd84c0613f42c0fadb7fdd487839Vladislav Kaznacheev /** 207ddb4bdecfcb6fd84c0613f42c0fadb7fdd487839Vladislav Kaznacheev * Retrieve extended data from the clip description. 208ddb4bdecfcb6fd84c0613f42c0fadb7fdd487839Vladislav Kaznacheev * 209ddb4bdecfcb6fd84c0613f42c0fadb7fdd487839Vladislav Kaznacheev * @return the bundle containing extended data previously set with 210ddb4bdecfcb6fd84c0613f42c0fadb7fdd487839Vladislav Kaznacheev * {@link #setExtras(PersistableBundle)}, or null if no extras have been set. 211ddb4bdecfcb6fd84c0613f42c0fadb7fdd487839Vladislav Kaznacheev * 212ddb4bdecfcb6fd84c0613f42c0fadb7fdd487839Vladislav Kaznacheev * @see #setExtras(PersistableBundle) 213ddb4bdecfcb6fd84c0613f42c0fadb7fdd487839Vladislav Kaznacheev */ 214ddb4bdecfcb6fd84c0613f42c0fadb7fdd487839Vladislav Kaznacheev public PersistableBundle getExtras() { 215ddb4bdecfcb6fd84c0613f42c0fadb7fdd487839Vladislav Kaznacheev return mExtras; 216ddb4bdecfcb6fd84c0613f42c0fadb7fdd487839Vladislav Kaznacheev } 217ddb4bdecfcb6fd84c0613f42c0fadb7fdd487839Vladislav Kaznacheev 218ddb4bdecfcb6fd84c0613f42c0fadb7fdd487839Vladislav Kaznacheev /** 219ddb4bdecfcb6fd84c0613f42c0fadb7fdd487839Vladislav Kaznacheev * Add extended data to the clip description. 220ddb4bdecfcb6fd84c0613f42c0fadb7fdd487839Vladislav Kaznacheev * 221ddb4bdecfcb6fd84c0613f42c0fadb7fdd487839Vladislav Kaznacheev * @see #getExtras() 222ddb4bdecfcb6fd84c0613f42c0fadb7fdd487839Vladislav Kaznacheev */ 223ddb4bdecfcb6fd84c0613f42c0fadb7fdd487839Vladislav Kaznacheev public void setExtras(PersistableBundle extras) { 224ddb4bdecfcb6fd84c0613f42c0fadb7fdd487839Vladislav Kaznacheev mExtras = new PersistableBundle(extras); 225ddb4bdecfcb6fd84c0613f42c0fadb7fdd487839Vladislav Kaznacheev } 226ddb4bdecfcb6fd84c0613f42c0fadb7fdd487839Vladislav Kaznacheev 2271040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn /** @hide */ 2281040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn public void validate() { 2291040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn if (mMimeTypes == null) { 2301040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn throw new NullPointerException("null mime types"); 2311040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn } 2321040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn if (mMimeTypes.length <= 0) { 2331040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn throw new IllegalArgumentException("must have at least 1 mime type"); 2341040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn } 2351040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn for (int i=0; i<mMimeTypes.length; i++) { 2361040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn if (mMimeTypes[i] == null) { 2371040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn throw new NullPointerException("mime type at " + i + " is null"); 2381040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn } 2391040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn } 2401040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn } 2411040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn 2421040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn @Override 24321c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn public String toString() { 24421c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn StringBuilder b = new StringBuilder(128); 24521c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn 24621c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn b.append("ClipDescription { "); 24721c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn toShortString(b); 24821c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn b.append(" }"); 24921c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn 25021c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn return b.toString(); 25121c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn } 25221c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn 25321c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn /** @hide */ 25421c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn public boolean toShortString(StringBuilder b) { 255ae498721001c6cdcdb6cce1b2f3ba5abbce36f8aDianne Hackborn boolean first = !toShortStringTypesOnly(b); 256ae498721001c6cdcdb6cce1b2f3ba5abbce36f8aDianne Hackborn if (mLabel != null) { 25721c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn if (!first) { 25821c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn b.append(' '); 25921c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn } 26021c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn first = false; 261ae498721001c6cdcdb6cce1b2f3ba5abbce36f8aDianne Hackborn b.append('"'); 262ae498721001c6cdcdb6cce1b2f3ba5abbce36f8aDianne Hackborn b.append(mLabel); 263ae498721001c6cdcdb6cce1b2f3ba5abbce36f8aDianne Hackborn b.append('"'); 26421c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn } 265ddb4bdecfcb6fd84c0613f42c0fadb7fdd487839Vladislav Kaznacheev if (mExtras != null) { 266ddb4bdecfcb6fd84c0613f42c0fadb7fdd487839Vladislav Kaznacheev if (!first) { 267ddb4bdecfcb6fd84c0613f42c0fadb7fdd487839Vladislav Kaznacheev b.append(' '); 268ddb4bdecfcb6fd84c0613f42c0fadb7fdd487839Vladislav Kaznacheev } 269ddb4bdecfcb6fd84c0613f42c0fadb7fdd487839Vladislav Kaznacheev first = false; 270ddb4bdecfcb6fd84c0613f42c0fadb7fdd487839Vladislav Kaznacheev b.append(mExtras.toString()); 271ddb4bdecfcb6fd84c0613f42c0fadb7fdd487839Vladislav Kaznacheev } 272ae498721001c6cdcdb6cce1b2f3ba5abbce36f8aDianne Hackborn return !first; 273ae498721001c6cdcdb6cce1b2f3ba5abbce36f8aDianne Hackborn } 274ae498721001c6cdcdb6cce1b2f3ba5abbce36f8aDianne Hackborn 275ae498721001c6cdcdb6cce1b2f3ba5abbce36f8aDianne Hackborn /** @hide */ 276ae498721001c6cdcdb6cce1b2f3ba5abbce36f8aDianne Hackborn public boolean toShortStringTypesOnly(StringBuilder b) { 277ae498721001c6cdcdb6cce1b2f3ba5abbce36f8aDianne Hackborn boolean first = true; 278ae498721001c6cdcdb6cce1b2f3ba5abbce36f8aDianne Hackborn for (int i=0; i<mMimeTypes.length; i++) { 27921c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn if (!first) { 28021c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn b.append(' '); 28121c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn } 28221c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn first = false; 283ae498721001c6cdcdb6cce1b2f3ba5abbce36f8aDianne Hackborn b.append(mMimeTypes[i]); 28421c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn } 28521c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn return !first; 28621c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn } 28721c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn 28821c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn @Override 2891040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn public int describeContents() { 2901040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn return 0; 2911040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn } 2921040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn 2931040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn @Override 2941040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn public void writeToParcel(Parcel dest, int flags) { 2951040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn TextUtils.writeToParcel(mLabel, dest, flags); 2961040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn dest.writeStringArray(mMimeTypes); 297ddb4bdecfcb6fd84c0613f42c0fadb7fdd487839Vladislav Kaznacheev dest.writePersistableBundle(mExtras); 2981040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn } 2991040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn 3001040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn ClipDescription(Parcel in) { 3011040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn mLabel = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in); 3021040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn mMimeTypes = in.createStringArray(); 303ddb4bdecfcb6fd84c0613f42c0fadb7fdd487839Vladislav Kaznacheev mExtras = in.readPersistableBundle(); 3041040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn } 3051040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn 3061040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn public static final Parcelable.Creator<ClipDescription> CREATOR = 3071040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn new Parcelable.Creator<ClipDescription>() { 3081040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn 3091040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn public ClipDescription createFromParcel(Parcel source) { 3101040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn return new ClipDescription(source); 3111040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn } 3121040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn 3131040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn public ClipDescription[] newArray(int size) { 3141040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn return new ClipDescription[size]; 3151040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn } 3161040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn }; 3171040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn} 318