MimePredicate.java revision ef7184a1aa0be5d496a5cb495a0f9e11f342af44
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 19ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkeyimport android.provider.DocumentsContract; 20ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey 21ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkeyimport com.android.documentsui.model.Document; 22ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkeyimport com.android.internal.util.Predicate; 23ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey 24ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkeypublic class MimePredicate implements Predicate<Document> { 25ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey private final String[] mFilters; 26ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey 27ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey public MimePredicate(String[] filters) { 28ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey mFilters = filters; 29ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey } 30ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey 31ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey @Override 32ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey public boolean apply(Document doc) { 33ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey if (DocumentsContract.MIME_TYPE_DIRECTORY.equals(doc.mimeType)) { 34ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey return true; 35ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey } 36ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey for (String filter : mFilters) { 37ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey if (mimeMatches(filter, doc.mimeType)) { 38ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey return true; 39ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey } 40ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey } 41ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey return false; 42ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey } 43ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey 44ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey public static boolean mimeMatches(String filter, String[] tests) { 45ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey for (String test : tests) { 46ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey if (mimeMatches(filter, test)) { 47ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey return true; 48ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey } 49ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey } 50ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey return false; 51ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey } 52ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey 53ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey public static boolean mimeMatches(String filter, String test) { 54ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey if (filter.equals(test)) { 55ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey return true; 56ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey } else if ("*/*".equals(filter)) { 57ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey return true; 58ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey } else if (filter.endsWith("/*")) { 59ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey return filter.regionMatches(0, test, 0, filter.indexOf('/')); 60ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey } else { 61ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey return false; 62ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey } 63ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey } 64ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey} 65