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