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