191125be98af76cf3f854d72b6de7ac6e6c0c8229Daniel Nishi/*
29e323c0012f3cf195af2ce5a272321af7f226fb3Salvador Martinez * Copyright (C) 2017 The Android Open Source Project
391125be98af76cf3f854d72b6de7ac6e6c0c8229Daniel Nishi *
491125be98af76cf3f854d72b6de7ac6e6c0c8229Daniel Nishi * Licensed under the Apache License, Version 2.0 (the "License");
591125be98af76cf3f854d72b6de7ac6e6c0c8229Daniel Nishi * you may not use this file except in compliance with the License.
691125be98af76cf3f854d72b6de7ac6e6c0c8229Daniel Nishi * You may obtain a copy of the License at
791125be98af76cf3f854d72b6de7ac6e6c0c8229Daniel Nishi *
891125be98af76cf3f854d72b6de7ac6e6c0c8229Daniel Nishi *      http://www.apache.org/licenses/LICENSE-2.0
991125be98af76cf3f854d72b6de7ac6e6c0c8229Daniel Nishi *
1091125be98af76cf3f854d72b6de7ac6e6c0c8229Daniel Nishi * Unless required by applicable law or agreed to in writing, software
1191125be98af76cf3f854d72b6de7ac6e6c0c8229Daniel Nishi * distributed under the License is distributed on an "AS IS" BASIS,
1291125be98af76cf3f854d72b6de7ac6e6c0c8229Daniel Nishi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1391125be98af76cf3f854d72b6de7ac6e6c0c8229Daniel Nishi * See the License for the specific language governing permissions and
1491125be98af76cf3f854d72b6de7ac6e6c0c8229Daniel Nishi * limitations under the License.
1591125be98af76cf3f854d72b6de7ac6e6c0c8229Daniel Nishi */
1691125be98af76cf3f854d72b6de7ac6e6c0c8229Daniel Nishi
1791125be98af76cf3f854d72b6de7ac6e6c0c8229Daniel Nishipackage com.android.storagemanager.utils;
1891125be98af76cf3f854d72b6de7ac6e6c0c8229Daniel Nishi
1991125be98af76cf3f854d72b6de7ac6e6c0c8229Daniel Nishiimport android.content.Context;
2091125be98af76cf3f854d72b6de7ac6e6c0c8229Daniel Nishiimport android.graphics.drawable.Drawable;
21226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishiimport android.webkit.MimeTypeMap;
22226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi
23226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishiimport java.io.File;
2491125be98af76cf3f854d72b6de7ac6e6c0c8229Daniel Nishi
2591125be98af76cf3f854d72b6de7ac6e6c0c8229Daniel Nishi/**
269e323c0012f3cf195af2ce5a272321af7f226fb3Salvador Martinez * IconProvider is a class for getting file icons. It is strongly based upon the DocumentsUI
279e323c0012f3cf195af2ce5a272321af7f226fb3Salvador Martinez * implementation of IconUtils, but tailored for the Deletion Helper use-case. Useful for testing.
2891125be98af76cf3f854d72b6de7ac6e6c0c8229Daniel Nishi */
299e323c0012f3cf195af2ce5a272321af7f226fb3Salvador Martinezpublic class IconProvider {
309e323c0012f3cf195af2ce5a272321af7f226fb3Salvador Martinez    private Context mContext;
319e323c0012f3cf195af2ce5a272321af7f226fb3Salvador Martinez
329e323c0012f3cf195af2ce5a272321af7f226fb3Salvador Martinez    public IconProvider(Context context) {
339e323c0012f3cf195af2ce5a272321af7f226fb3Salvador Martinez        mContext = context;
349e323c0012f3cf195af2ce5a272321af7f226fb3Salvador Martinez    }
359e323c0012f3cf195af2ce5a272321af7f226fb3Salvador Martinez
3691125be98af76cf3f854d72b6de7ac6e6c0c8229Daniel Nishi    /**
3791125be98af76cf3f854d72b6de7ac6e6c0c8229Daniel Nishi     * Returns an icon which represents a file with the given MIME type.
389e323c0012f3cf195af2ce5a272321af7f226fb3Salvador Martinez     *
3991125be98af76cf3f854d72b6de7ac6e6c0c8229Daniel Nishi     * @param mimeType The MIME type of the file.
4091125be98af76cf3f854d72b6de7ac6e6c0c8229Daniel Nishi     * @return
4191125be98af76cf3f854d72b6de7ac6e6c0c8229Daniel Nishi     */
429e323c0012f3cf195af2ce5a272321af7f226fb3Salvador Martinez    public Drawable loadMimeIcon(String mimeType) {
439e323c0012f3cf195af2ce5a272321af7f226fb3Salvador Martinez        return mContext.getContentResolver().getTypeDrawable(mimeType);
4491125be98af76cf3f854d72b6de7ac6e6c0c8229Daniel Nishi    }
459e323c0012f3cf195af2ce5a272321af7f226fb3Salvador Martinez
46226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi    public static String getMimeType(File file) {
47226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi        String name = file.getName();
48226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi        final int lastDot = name.lastIndexOf('.');
49226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi        if (lastDot >= 0) {
50226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi            final String extension = name.substring(lastDot + 1);
51226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi            final String mimeType =
52226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi                    MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension.toLowerCase());
53226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi            if (mimeType != null) {
54226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi                return mimeType;
55226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi            }
56226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi        }
57226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi        return "application/octet-stream";
58226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi    }
59226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi
60226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi    public static boolean isImageType(File file) {
61226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi        String mimeType = getMimeType(file);
62226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi        return mimeType.startsWith("image/");
63226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi    }
64226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi
6591125be98af76cf3f854d72b6de7ac6e6c0c8229Daniel Nishi}
66