1ae9b51bfa313c51a31af30875a71255d7b6d2e61Jeff Sharkey/* 2ae9b51bfa313c51a31af30875a71255d7b6d2e61Jeff Sharkey * Copyright (C) 2013 The Android Open Source Project 3ae9b51bfa313c51a31af30875a71255d7b6d2e61Jeff Sharkey * 4ae9b51bfa313c51a31af30875a71255d7b6d2e61Jeff Sharkey * Licensed under the Apache License, Version 2.0 (the "License"); 5ae9b51bfa313c51a31af30875a71255d7b6d2e61Jeff Sharkey * you may not use this file except in compliance with the License. 6ae9b51bfa313c51a31af30875a71255d7b6d2e61Jeff Sharkey * You may obtain a copy of the License at 7ae9b51bfa313c51a31af30875a71255d7b6d2e61Jeff Sharkey * 8ae9b51bfa313c51a31af30875a71255d7b6d2e61Jeff Sharkey * http://www.apache.org/licenses/LICENSE-2.0 9ae9b51bfa313c51a31af30875a71255d7b6d2e61Jeff Sharkey * 10ae9b51bfa313c51a31af30875a71255d7b6d2e61Jeff Sharkey * Unless required by applicable law or agreed to in writing, software 11ae9b51bfa313c51a31af30875a71255d7b6d2e61Jeff Sharkey * distributed under the License is distributed on an "AS IS" BASIS, 12ae9b51bfa313c51a31af30875a71255d7b6d2e61Jeff Sharkey * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ae9b51bfa313c51a31af30875a71255d7b6d2e61Jeff Sharkey * See the License for the specific language governing permissions and 14ae9b51bfa313c51a31af30875a71255d7b6d2e61Jeff Sharkey * limitations under the License. 15ae9b51bfa313c51a31af30875a71255d7b6d2e61Jeff Sharkey */ 16ae9b51bfa313c51a31af30875a71255d7b6d2e61Jeff Sharkey 17ae9b51bfa313c51a31af30875a71255d7b6d2e61Jeff Sharkeypackage com.android.documentsui.model; 18ae9b51bfa313c51a31af30875a71255d7b6d2e61Jeff Sharkey 19ae9b51bfa313c51a31af30875a71255d7b6d2e61Jeff Sharkeyimport static com.android.documentsui.model.DocumentInfo.getCursorInt; 20ae9b51bfa313c51a31af30875a71255d7b6d2e61Jeff Sharkeyimport static com.android.documentsui.model.DocumentInfo.getCursorLong; 21ae9b51bfa313c51a31af30875a71255d7b6d2e61Jeff Sharkeyimport static com.android.documentsui.model.DocumentInfo.getCursorString; 22ae9b51bfa313c51a31af30875a71255d7b6d2e61Jeff Sharkey 23ae9b51bfa313c51a31af30875a71255d7b6d2e61Jeff Sharkeyimport android.content.Context; 24ae9b51bfa313c51a31af30875a71255d7b6d2e61Jeff Sharkeyimport android.database.Cursor; 25ae9b51bfa313c51a31af30875a71255d7b6d2e61Jeff Sharkeyimport android.graphics.drawable.Drawable; 26d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkeyimport android.os.Parcel; 27d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkeyimport android.os.Parcelable; 28ae9b51bfa313c51a31af30875a71255d7b6d2e61Jeff Sharkeyimport android.provider.DocumentsContract.Root; 294ec973925fc2cd18f9ec0d0ca5af588564fded27Jeff Sharkeyimport android.text.TextUtils; 30ae9b51bfa313c51a31af30875a71255d7b6d2e61Jeff Sharkey 310b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkeyimport com.android.documentsui.IconUtils; 326d97d3c1a2ebac4e3f32c7e5bc134864ace1c17fJeff Sharkeyimport com.android.documentsui.R; 330b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey 34d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkeyimport java.io.DataInputStream; 35d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkeyimport java.io.DataOutputStream; 36d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkeyimport java.io.IOException; 37d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkeyimport java.net.ProtocolException; 38251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkeyimport java.util.Objects; 39251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey 40ae9b51bfa313c51a31af30875a71255d7b6d2e61Jeff Sharkey/** 41ae9b51bfa313c51a31af30875a71255d7b6d2e61Jeff Sharkey * Representation of a {@link Root}. 42ae9b51bfa313c51a31af30875a71255d7b6d2e61Jeff Sharkey */ 43d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkeypublic class RootInfo implements Durable, Parcelable { 44d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey private static final int VERSION_INIT = 1; 456efba22ce510352bb84910d6efc42fecafd31ed7Jeff Sharkey private static final int VERSION_DROP_TYPE = 2; 46d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey 47ae9b51bfa313c51a31af30875a71255d7b6d2e61Jeff Sharkey public String authority; 48ae9b51bfa313c51a31af30875a71255d7b6d2e61Jeff Sharkey public String rootId; 49ae9b51bfa313c51a31af30875a71255d7b6d2e61Jeff Sharkey public int flags; 50ae9b51bfa313c51a31af30875a71255d7b6d2e61Jeff Sharkey public int icon; 51ae9b51bfa313c51a31af30875a71255d7b6d2e61Jeff Sharkey public String title; 52ae9b51bfa313c51a31af30875a71255d7b6d2e61Jeff Sharkey public String summary; 53ae9b51bfa313c51a31af30875a71255d7b6d2e61Jeff Sharkey public String documentId; 54ae9b51bfa313c51a31af30875a71255d7b6d2e61Jeff Sharkey public long availableBytes; 55d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey public String mimeTypes; 56d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey 57d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey /** Derived fields that aren't persisted */ 58a9ce049db87259e302e2368d2a4a1c11a94fd831Jeff Sharkey public String derivedPackageName; 59d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey public String[] derivedMimeTypes; 60d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey public int derivedIcon; 61d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey 62d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey public RootInfo() { 63d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey reset(); 64d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey } 65d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey 66d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey @Override 67d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey public void reset() { 68d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey authority = null; 69d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey rootId = null; 70d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey flags = 0; 71d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey icon = 0; 72d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey title = null; 73d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey summary = null; 74d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey documentId = null; 75d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey availableBytes = -1; 76d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey mimeTypes = null; 77d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey 78a9ce049db87259e302e2368d2a4a1c11a94fd831Jeff Sharkey derivedPackageName = null; 79d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey derivedMimeTypes = null; 80d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey derivedIcon = 0; 81d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey } 82d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey 83d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey @Override 84d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey public void read(DataInputStream in) throws IOException { 85d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey final int version = in.readInt(); 86d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey switch (version) { 876efba22ce510352bb84910d6efc42fecafd31ed7Jeff Sharkey case VERSION_DROP_TYPE: 88d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey authority = DurableUtils.readNullableString(in); 89d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey rootId = DurableUtils.readNullableString(in); 90d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey flags = in.readInt(); 91d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey icon = in.readInt(); 92d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey title = DurableUtils.readNullableString(in); 93d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey summary = DurableUtils.readNullableString(in); 94d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey documentId = DurableUtils.readNullableString(in); 95d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey availableBytes = in.readLong(); 96d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey mimeTypes = DurableUtils.readNullableString(in); 97d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey deriveFields(); 98d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey break; 99d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey default: 100d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey throw new ProtocolException("Unknown version " + version); 101d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey } 102d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey } 103d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey 104d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey @Override 105d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey public void write(DataOutputStream out) throws IOException { 1066efba22ce510352bb84910d6efc42fecafd31ed7Jeff Sharkey out.writeInt(VERSION_DROP_TYPE); 107d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey DurableUtils.writeNullableString(out, authority); 108d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey DurableUtils.writeNullableString(out, rootId); 109d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey out.writeInt(flags); 110d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey out.writeInt(icon); 111d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey DurableUtils.writeNullableString(out, title); 112d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey DurableUtils.writeNullableString(out, summary); 113d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey DurableUtils.writeNullableString(out, documentId); 114d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey out.writeLong(availableBytes); 115d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey DurableUtils.writeNullableString(out, mimeTypes); 116d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey } 117d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey 118d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey @Override 119d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey public int describeContents() { 120d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey return 0; 121d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey } 122d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey 123d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey @Override 124d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey public void writeToParcel(Parcel dest, int flags) { 125d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey DurableUtils.writeToParcel(dest, this); 126d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey } 127d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey 128d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey public static final Creator<RootInfo> CREATOR = new Creator<RootInfo>() { 129d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey @Override 130d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey public RootInfo createFromParcel(Parcel in) { 131d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey final RootInfo root = new RootInfo(); 132d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey DurableUtils.readFromParcel(in, root); 133d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey return root; 134d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey } 135d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey 136d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey @Override 137d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey public RootInfo[] newArray(int size) { 138d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey return new RootInfo[size]; 139d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey } 140d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey }; 141ae9b51bfa313c51a31af30875a71255d7b6d2e61Jeff Sharkey 142ae9b51bfa313c51a31af30875a71255d7b6d2e61Jeff Sharkey public static RootInfo fromRootsCursor(String authority, Cursor cursor) { 143ae9b51bfa313c51a31af30875a71255d7b6d2e61Jeff Sharkey final RootInfo root = new RootInfo(); 144ae9b51bfa313c51a31af30875a71255d7b6d2e61Jeff Sharkey root.authority = authority; 145ae9b51bfa313c51a31af30875a71255d7b6d2e61Jeff Sharkey root.rootId = getCursorString(cursor, Root.COLUMN_ROOT_ID); 146ae9b51bfa313c51a31af30875a71255d7b6d2e61Jeff Sharkey root.flags = getCursorInt(cursor, Root.COLUMN_FLAGS); 147ae9b51bfa313c51a31af30875a71255d7b6d2e61Jeff Sharkey root.icon = getCursorInt(cursor, Root.COLUMN_ICON); 148ae9b51bfa313c51a31af30875a71255d7b6d2e61Jeff Sharkey root.title = getCursorString(cursor, Root.COLUMN_TITLE); 149ae9b51bfa313c51a31af30875a71255d7b6d2e61Jeff Sharkey root.summary = getCursorString(cursor, Root.COLUMN_SUMMARY); 150ae9b51bfa313c51a31af30875a71255d7b6d2e61Jeff Sharkey root.documentId = getCursorString(cursor, Root.COLUMN_DOCUMENT_ID); 151ae9b51bfa313c51a31af30875a71255d7b6d2e61Jeff Sharkey root.availableBytes = getCursorLong(cursor, Root.COLUMN_AVAILABLE_BYTES); 152d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey root.mimeTypes = getCursorString(cursor, Root.COLUMN_MIME_TYPES); 153d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey root.deriveFields(); 154d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey return root; 155d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey } 156e37ea6123d1aa3cd3e8804988886b1f6046d79d6Jeff Sharkey 157d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey private void deriveFields() { 158d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey derivedMimeTypes = (mimeTypes != null) ? mimeTypes.split("\n") : null; 159e37ea6123d1aa3cd3e8804988886b1f6046d79d6Jeff Sharkey 1606d97d3c1a2ebac4e3f32c7e5bc134864ace1c17fJeff Sharkey // TODO: remove these special case icons 1616efba22ce510352bb84910d6efc42fecafd31ed7Jeff Sharkey if (isExternalStorage()) { 162c29dd61cbfc9f073239bdce3f4fe397deae2c623Jeff Sharkey derivedIcon = R.drawable.ic_root_sdcard; 1636efba22ce510352bb84910d6efc42fecafd31ed7Jeff Sharkey } else if (isDownloads()) { 164c29dd61cbfc9f073239bdce3f4fe397deae2c623Jeff Sharkey derivedIcon = R.drawable.ic_root_download; 1656efba22ce510352bb84910d6efc42fecafd31ed7Jeff Sharkey } else if (isImages()) { 166c29dd61cbfc9f073239bdce3f4fe397deae2c623Jeff Sharkey derivedIcon = R.drawable.ic_doc_image; 1676efba22ce510352bb84910d6efc42fecafd31ed7Jeff Sharkey } else if (isVideos()) { 168c29dd61cbfc9f073239bdce3f4fe397deae2c623Jeff Sharkey derivedIcon = R.drawable.ic_doc_video; 1696efba22ce510352bb84910d6efc42fecafd31ed7Jeff Sharkey } else if (isAudio()) { 170c29dd61cbfc9f073239bdce3f4fe397deae2c623Jeff Sharkey derivedIcon = R.drawable.ic_doc_audio; 1716d97d3c1a2ebac4e3f32c7e5bc134864ace1c17fJeff Sharkey } 1726efba22ce510352bb84910d6efc42fecafd31ed7Jeff Sharkey } 1736efba22ce510352bb84910d6efc42fecafd31ed7Jeff Sharkey 1746efba22ce510352bb84910d6efc42fecafd31ed7Jeff Sharkey public boolean isRecents() { 1756efba22ce510352bb84910d6efc42fecafd31ed7Jeff Sharkey return authority == null && rootId == null; 1766efba22ce510352bb84910d6efc42fecafd31ed7Jeff Sharkey } 1776efba22ce510352bb84910d6efc42fecafd31ed7Jeff Sharkey 1786efba22ce510352bb84910d6efc42fecafd31ed7Jeff Sharkey public boolean isExternalStorage() { 1796efba22ce510352bb84910d6efc42fecafd31ed7Jeff Sharkey return "com.android.externalstorage.documents".equals(authority); 1806efba22ce510352bb84910d6efc42fecafd31ed7Jeff Sharkey } 1816efba22ce510352bb84910d6efc42fecafd31ed7Jeff Sharkey 1826efba22ce510352bb84910d6efc42fecafd31ed7Jeff Sharkey public boolean isDownloads() { 1836efba22ce510352bb84910d6efc42fecafd31ed7Jeff Sharkey return "com.android.providers.downloads.documents".equals(authority); 1846efba22ce510352bb84910d6efc42fecafd31ed7Jeff Sharkey } 1856efba22ce510352bb84910d6efc42fecafd31ed7Jeff Sharkey 1866efba22ce510352bb84910d6efc42fecafd31ed7Jeff Sharkey public boolean isImages() { 1876efba22ce510352bb84910d6efc42fecafd31ed7Jeff Sharkey return "com.android.providers.media.documents".equals(authority) 1886efba22ce510352bb84910d6efc42fecafd31ed7Jeff Sharkey && "images_root".equals(rootId); 1896efba22ce510352bb84910d6efc42fecafd31ed7Jeff Sharkey } 1906efba22ce510352bb84910d6efc42fecafd31ed7Jeff Sharkey 1916efba22ce510352bb84910d6efc42fecafd31ed7Jeff Sharkey public boolean isVideos() { 1926efba22ce510352bb84910d6efc42fecafd31ed7Jeff Sharkey return "com.android.providers.media.documents".equals(authority) 1936efba22ce510352bb84910d6efc42fecafd31ed7Jeff Sharkey && "videos_root".equals(rootId); 1946efba22ce510352bb84910d6efc42fecafd31ed7Jeff Sharkey } 1956efba22ce510352bb84910d6efc42fecafd31ed7Jeff Sharkey 1966efba22ce510352bb84910d6efc42fecafd31ed7Jeff Sharkey public boolean isAudio() { 1976efba22ce510352bb84910d6efc42fecafd31ed7Jeff Sharkey return "com.android.providers.media.documents".equals(authority) 1986efba22ce510352bb84910d6efc42fecafd31ed7Jeff Sharkey && "audio_root".equals(rootId); 199d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey } 2006d97d3c1a2ebac4e3f32c7e5bc134864ace1c17fJeff Sharkey 201d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey @Override 202d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey public String toString() { 2035545f56f7561810187545a1817b6001dd1f9931bJeff Sharkey return "Root{authority=" + authority + ", rootId=" + rootId + ", title=" + title + "}"; 204ae9b51bfa313c51a31af30875a71255d7b6d2e61Jeff Sharkey } 205ae9b51bfa313c51a31af30875a71255d7b6d2e61Jeff Sharkey 206ae9b51bfa313c51a31af30875a71255d7b6d2e61Jeff Sharkey public Drawable loadIcon(Context context) { 207d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey if (derivedIcon != 0) { 20803d30a573b8bc8e169e153a0fffa053ffedcd5eeAlan Viverette return context.getDrawable(derivedIcon); 2096d97d3c1a2ebac4e3f32c7e5bc134864ace1c17fJeff Sharkey } else { 2106d97d3c1a2ebac4e3f32c7e5bc134864ace1c17fJeff Sharkey return IconUtils.loadPackageIcon(context, authority, icon); 2116d97d3c1a2ebac4e3f32c7e5bc134864ace1c17fJeff Sharkey } 212ae9b51bfa313c51a31af30875a71255d7b6d2e61Jeff Sharkey } 213251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey 214cbce47001e15be85b084c36a64c20039a0c4a667Jeff Sharkey public Drawable loadDrawerIcon(Context context) { 215cbce47001e15be85b084c36a64c20039a0c4a667Jeff Sharkey if (derivedIcon != 0) { 216cbce47001e15be85b084c36a64c20039a0c4a667Jeff Sharkey return IconUtils.applyTintColor(context, derivedIcon, R.color.item_root_icon); 217cbce47001e15be85b084c36a64c20039a0c4a667Jeff Sharkey } else { 218cbce47001e15be85b084c36a64c20039a0c4a667Jeff Sharkey return IconUtils.loadPackageIcon(context, authority, icon); 219cbce47001e15be85b084c36a64c20039a0c4a667Jeff Sharkey } 220cbce47001e15be85b084c36a64c20039a0c4a667Jeff Sharkey } 221cbce47001e15be85b084c36a64c20039a0c4a667Jeff Sharkey 222c29dd61cbfc9f073239bdce3f4fe397deae2c623Jeff Sharkey public Drawable loadGridIcon(Context context) { 223c29dd61cbfc9f073239bdce3f4fe397deae2c623Jeff Sharkey if (derivedIcon != 0) { 224cbce47001e15be85b084c36a64c20039a0c4a667Jeff Sharkey return IconUtils.applyTintAttr(context, derivedIcon, 225c29dd61cbfc9f073239bdce3f4fe397deae2c623Jeff Sharkey android.R.attr.textColorPrimaryInverse); 226c29dd61cbfc9f073239bdce3f4fe397deae2c623Jeff Sharkey } else { 227c29dd61cbfc9f073239bdce3f4fe397deae2c623Jeff Sharkey return IconUtils.loadPackageIcon(context, authority, icon); 228c29dd61cbfc9f073239bdce3f4fe397deae2c623Jeff Sharkey } 229c29dd61cbfc9f073239bdce3f4fe397deae2c623Jeff Sharkey } 230c29dd61cbfc9f073239bdce3f4fe397deae2c623Jeff Sharkey 231c29dd61cbfc9f073239bdce3f4fe397deae2c623Jeff Sharkey public Drawable loadToolbarIcon(Context context) { 232c29dd61cbfc9f073239bdce3f4fe397deae2c623Jeff Sharkey if (derivedIcon != 0) { 233cbce47001e15be85b084c36a64c20039a0c4a667Jeff Sharkey return IconUtils.applyTintAttr(context, derivedIcon, 234c29dd61cbfc9f073239bdce3f4fe397deae2c623Jeff Sharkey android.R.attr.colorControlNormal); 235a847d79310320ae8adbedb281123a0f879c2fc6eJeff Sharkey } else { 236c29dd61cbfc9f073239bdce3f4fe397deae2c623Jeff Sharkey return IconUtils.loadPackageIcon(context, authority, icon); 237a847d79310320ae8adbedb281123a0f879c2fc6eJeff Sharkey } 238a847d79310320ae8adbedb281123a0f879c2fc6eJeff Sharkey } 239a847d79310320ae8adbedb281123a0f879c2fc6eJeff Sharkey 240251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey @Override 241251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey public boolean equals(Object o) { 242251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey if (o instanceof RootInfo) { 243251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey final RootInfo root = (RootInfo) o; 244251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey return Objects.equals(authority, root.authority) && Objects.equals(rootId, root.rootId); 245251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey } else { 246251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey return false; 247251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey } 248251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey } 249251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey 250251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey @Override 251251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey public int hashCode() { 252251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey return Objects.hash(authority, rootId); 253251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey } 254251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey 255251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey public String getDirectoryString() { 2564ec973925fc2cd18f9ec0d0ca5af588564fded27Jeff Sharkey return !TextUtils.isEmpty(summary) ? summary : title; 257251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey } 258ae9b51bfa313c51a31af30875a71255d7b6d2e61Jeff Sharkey} 259