1ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey/* 2ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey * Copyright (C) 2013 The Android Open Source Project 3ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey * 4ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey * Licensed under the Apache License, Version 2.0 (the "License"); 5ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey * you may not use this file except in compliance with the License. 6ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey * You may obtain a copy of the License at 7ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey * 8ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey * http://www.apache.org/licenses/LICENSE-2.0 9ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey * 10ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey * Unless required by applicable law or agreed to in writing, software 11ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey * distributed under the License is distributed on an "AS IS" BASIS, 12ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey * See the License for the specific language governing permissions and 14ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey * limitations under the License. 15ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey */ 16ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey 17ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkeypackage com.android.documentsui; 18ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey 19ae9b51bfa313c51a31af30875a71255d7b6d2e61Jeff Sharkeyimport com.android.documentsui.model.DocumentInfo; 20ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkeyimport com.android.internal.util.Predicate; 21ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey 22ae9b51bfa313c51a31af30875a71255d7b6d2e61Jeff Sharkeypublic class MimePredicate implements Predicate<DocumentInfo> { 23ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey private final String[] mFilters; 24ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey 25f6db154975ef575479ba4ab59d80bcf592288252Jeff Sharkey /** 26f6db154975ef575479ba4ab59d80bcf592288252Jeff Sharkey * MIME types that are visual in nature. For example, they should always be 27f6db154975ef575479ba4ab59d80bcf592288252Jeff Sharkey * shown as thumbnails in list mode. 28f6db154975ef575479ba4ab59d80bcf592288252Jeff Sharkey */ 29f6db154975ef575479ba4ab59d80bcf592288252Jeff Sharkey public static final String[] VISUAL_MIMES = new String[] { "image/*", "video/*" }; 30f6db154975ef575479ba4ab59d80bcf592288252Jeff Sharkey 31ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey public MimePredicate(String[] filters) { 32ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey mFilters = filters; 33ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey } 34ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey 35ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey @Override 36ae9b51bfa313c51a31af30875a71255d7b6d2e61Jeff Sharkey public boolean apply(DocumentInfo doc) { 37b156f4bf8cdfe475a7116b627d84a281e1a281b7Jeff Sharkey if (doc.isDirectory()) { 38ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey return true; 39ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey } 40923396b7720367ec99c889725fddfa556e703971Jeff Sharkey if (mimeMatches(mFilters, doc.mimeType)) { 41923396b7720367ec99c889725fddfa556e703971Jeff Sharkey return true; 42923396b7720367ec99c889725fddfa556e703971Jeff Sharkey } 43923396b7720367ec99c889725fddfa556e703971Jeff Sharkey return false; 44923396b7720367ec99c889725fddfa556e703971Jeff Sharkey } 45923396b7720367ec99c889725fddfa556e703971Jeff Sharkey 46923396b7720367ec99c889725fddfa556e703971Jeff Sharkey public static boolean mimeMatches(String[] filters, String[] tests) { 47923396b7720367ec99c889725fddfa556e703971Jeff Sharkey if (tests == null) { 48923396b7720367ec99c889725fddfa556e703971Jeff Sharkey return false; 49923396b7720367ec99c889725fddfa556e703971Jeff Sharkey } 50923396b7720367ec99c889725fddfa556e703971Jeff Sharkey for (String test : tests) { 51923396b7720367ec99c889725fddfa556e703971Jeff Sharkey if (mimeMatches(filters, test)) { 52ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey return true; 53ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey } 54ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey } 55ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey return false; 56ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey } 57ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey 58d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey public static boolean mimeMatches(String filter, String[] tests) { 59d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey if (tests == null) { 60d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey return true; 61d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey } 62d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey for (String test : tests) { 63d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey if (mimeMatches(filter, test)) { 64d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey return true; 65d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey } 66d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey } 67d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey return false; 68d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey } 69d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey 70923396b7720367ec99c889725fddfa556e703971Jeff Sharkey public static boolean mimeMatches(String[] filters, String test) { 71923396b7720367ec99c889725fddfa556e703971Jeff Sharkey if (filters == null) { 72923396b7720367ec99c889725fddfa556e703971Jeff Sharkey return true; 73923396b7720367ec99c889725fddfa556e703971Jeff Sharkey } 74923396b7720367ec99c889725fddfa556e703971Jeff Sharkey for (String filter : filters) { 75ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey if (mimeMatches(filter, test)) { 76ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey return true; 77ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey } 78ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey } 79ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey return false; 80ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey } 81ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey 82ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey public static boolean mimeMatches(String filter, String test) { 83563ee0fbe99c234f3364044cb762a75abbbaa797Jeff Sharkey if (test == null) { 84a5599ef636e37cb0b6474349936999be1afe6987Jeff Sharkey return false; 85563ee0fbe99c234f3364044cb762a75abbbaa797Jeff Sharkey } else if (filter == null || "*/*".equals(filter)) { 86563ee0fbe99c234f3364044cb762a75abbbaa797Jeff Sharkey return true; 87a5599ef636e37cb0b6474349936999be1afe6987Jeff Sharkey } else if (filter.equals(test)) { 88ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey return true; 89ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey } else if (filter.endsWith("/*")) { 90ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey return filter.regionMatches(0, test, 0, filter.indexOf('/')); 91ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey } else { 92ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey return false; 93ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey } 94ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey } 95ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey} 96