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; 211040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackbornimport android.text.TextUtils; 221040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn 231040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackbornimport java.util.ArrayList; 241040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn 251040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn/** 26f6d952bbc85706031e1ad29ec389c1e02cfff433Dianne Hackborn * Meta-data describing the contents of a {@link ClipData}. Provides enough 271040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn * information to know if you can handle the ClipData, but not the data 281040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn * itself. 293aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * 303aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * <div class="special reference"> 313aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * <h3>Developer Guides</h3> 323aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * <p>For more information about using the clipboard framework, read the 333aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * <a href="{@docRoot}guide/topics/clipboard/copy-paste.html">Copy and Paste</a> 343aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * developer guide.</p> 353aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * </div> 361040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn */ 371040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackbornpublic class ClipDescription implements Parcelable { 381040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn /** 391040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn * The MIME type for a clip holding plain text. 401040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn */ 411040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn public static final String MIMETYPE_TEXT_PLAIN = "text/plain"; 421040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn 431040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn /** 44acb69bb909d098cea284df47d794c17171d84c91Dianne Hackborn * The MIME type for a clip holding HTML text. 45acb69bb909d098cea284df47d794c17171d84c91Dianne Hackborn */ 46acb69bb909d098cea284df47d794c17171d84c91Dianne Hackborn public static final String MIMETYPE_TEXT_HTML = "text/html"; 47acb69bb909d098cea284df47d794c17171d84c91Dianne Hackborn 48acb69bb909d098cea284df47d794c17171d84c91Dianne Hackborn /** 491040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn * The MIME type for a clip holding one or more URIs. This should be 501040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn * used for URIs that are meaningful to a user (such as an http: URI). 511040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn * It should <em>not</em> be used for a content: URI that references some 521040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn * other piece of data; in that case the MIME type should be the type 531040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn * of the referenced data. 541040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn */ 551040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn public static final String MIMETYPE_TEXT_URILIST = "text/uri-list"; 561040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn 571040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn /** 581040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn * The MIME type for a clip holding an Intent. 591040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn */ 601040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn public static final String MIMETYPE_TEXT_INTENT = "text/vnd.android.intent"; 611040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn 621040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn final CharSequence mLabel; 631040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn final String[] mMimeTypes; 641040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn 651040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn /** 661040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn * Create a new clip. 671040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn * 681040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn * @param label Label to show to the user describing this clip. 691040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn * @param mimeTypes An array of MIME types this data is available as. 701040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn */ 711040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn public ClipDescription(CharSequence label, String[] mimeTypes) { 721040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn if (mimeTypes == null) { 731040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn throw new NullPointerException("mimeTypes is null"); 741040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn } 751040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn mLabel = label; 761040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn mMimeTypes = mimeTypes; 771040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn } 781040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn 791040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn /** 801040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn * Create a copy of a ClipDescription. 811040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn */ 821040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn public ClipDescription(ClipDescription o) { 831040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn mLabel = o.mLabel; 841040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn mMimeTypes = o.mMimeTypes; 851040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn } 861040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn 871040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn /** 881040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn * Helper to compare two MIME types, where one may be a pattern. 891040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn * @param concreteType A fully-specified MIME type. 903390018c6b45acffa6edf97a4174ca49f1e8c76dJohn Spurlock * @param desiredType A desired MIME type that may be a pattern such as */*. 911040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn * @return Returns true if the two MIME types match. 921040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn */ 931040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn public static boolean compareMimeTypes(String concreteType, String desiredType) { 941040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn final int typeLength = desiredType.length(); 951040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn if (typeLength == 3 && desiredType.equals("*/*")) { 961040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn return true; 971040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn } 981040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn 991040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn final int slashpos = desiredType.indexOf('/'); 1001040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn if (slashpos > 0) { 1011040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn if (typeLength == slashpos+2 && desiredType.charAt(slashpos+1) == '*') { 1021040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn if (desiredType.regionMatches(0, concreteType, 0, slashpos+1)) { 1031040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn return true; 1041040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn } 1051040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn } else if (desiredType.equals(concreteType)) { 1061040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn return true; 1071040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn } 1081040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn } 1091040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn 1101040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn return false; 1111040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn } 1121040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn 1131040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn /** 1141040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn * Return the label for this clip. 1151040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn */ 1161040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn public CharSequence getLabel() { 1171040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn return mLabel; 1181040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn } 1191040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn 1201040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn /** 1211040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn * Check whether the clip description contains the given MIME type. 1221040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn * 1231040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn * @param mimeType The desired MIME type. May be a pattern. 1241040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn * @return Returns true if one of the MIME types in the clip description 1251040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn * matches the desired MIME type, else false. 1261040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn */ 1271040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn public boolean hasMimeType(String mimeType) { 1281040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn for (int i=0; i<mMimeTypes.length; i++) { 1291040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn if (compareMimeTypes(mMimeTypes[i], mimeType)) { 1301040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn return true; 1311040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn } 1321040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn } 1331040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn return false; 1341040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn } 1351040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn 1361040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn /** 1371040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn * Filter the clip description MIME types by the given MIME type. Returns 1381040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn * all MIME types in the clip that match the given MIME type. 1391040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn * 1401040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn * @param mimeType The desired MIME type. May be a pattern. 1411040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn * @return Returns an array of all matching MIME types. If there are no 1421040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn * matching MIME types, null is returned. 1431040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn */ 1441040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn public String[] filterMimeTypes(String mimeType) { 1451040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn ArrayList<String> array = null; 1461040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn for (int i=0; i<mMimeTypes.length; i++) { 1471040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn if (compareMimeTypes(mMimeTypes[i], mimeType)) { 1481040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn if (array == null) { 1491040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn array = new ArrayList<String>(); 1501040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn } 1511040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn array.add(mMimeTypes[i]); 1521040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn } 1531040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn } 1541040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn if (array == null) { 1551040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn return null; 1561040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn } 1571040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn String[] rawArray = new String[array.size()]; 1581040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn array.toArray(rawArray); 1591040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn return rawArray; 1601040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn } 1611040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn 1621040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn /** 1631040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn * Return the number of MIME types the clip is available in. 1641040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn */ 1651040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn public int getMimeTypeCount() { 1661040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn return mMimeTypes.length; 1671040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn } 1681040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn 1691040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn /** 1701040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn * Return one of the possible clip MIME types. 1711040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn */ 1721040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn public String getMimeType(int index) { 1731040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn return mMimeTypes[index]; 1741040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn } 1751040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn 1761040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn /** @hide */ 1771040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn public void validate() { 1781040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn if (mMimeTypes == null) { 1791040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn throw new NullPointerException("null mime types"); 1801040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn } 1811040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn if (mMimeTypes.length <= 0) { 1821040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn throw new IllegalArgumentException("must have at least 1 mime type"); 1831040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn } 1841040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn for (int i=0; i<mMimeTypes.length; i++) { 1851040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn if (mMimeTypes[i] == null) { 1861040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn throw new NullPointerException("mime type at " + i + " is null"); 1871040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn } 1881040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn } 1891040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn } 1901040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn 1911040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn @Override 19221c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn public String toString() { 19321c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn StringBuilder b = new StringBuilder(128); 19421c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn 19521c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn b.append("ClipDescription { "); 19621c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn toShortString(b); 19721c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn b.append(" }"); 19821c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn 19921c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn return b.toString(); 20021c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn } 20121c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn 20221c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn /** @hide */ 20321c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn public boolean toShortString(StringBuilder b) { 20421c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn boolean first = true; 20521c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn for (int i=0; i<mMimeTypes.length; i++) { 20621c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn if (!first) { 20721c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn b.append(' '); 20821c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn } 20921c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn first = false; 21021c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn b.append(mMimeTypes[i]); 21121c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn } 21221c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn if (mLabel != null) { 21321c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn if (!first) { 21421c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn b.append(' '); 21521c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn } 21621c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn first = false; 21721c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn b.append('"'); 21821c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn b.append(mLabel); 21921c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn b.append('"'); 22021c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn } 22121c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn return !first; 22221c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn } 22321c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn 22421c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn @Override 2251040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn public int describeContents() { 2261040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn return 0; 2271040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn } 2281040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn 2291040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn @Override 2301040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn public void writeToParcel(Parcel dest, int flags) { 2311040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn TextUtils.writeToParcel(mLabel, dest, flags); 2321040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn dest.writeStringArray(mMimeTypes); 2331040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn } 2341040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn 2351040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn ClipDescription(Parcel in) { 2361040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn mLabel = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in); 2371040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn mMimeTypes = in.createStringArray(); 2381040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn } 2391040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn 2401040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn public static final Parcelable.Creator<ClipDescription> CREATOR = 2411040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn new Parcelable.Creator<ClipDescription>() { 2421040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn 2431040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn public ClipDescription createFromParcel(Parcel source) { 2441040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn return new ClipDescription(source); 2451040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn } 2461040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn 2471040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn public ClipDescription[] newArray(int size) { 2481040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn return new ClipDescription[size]; 2491040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn } 2501040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn }; 2511040dc465cbf5ca8f834a87c949e476abefa3f76Dianne Hackborn} 252