BitmapCompat.java revision ddb24f29a236175d3cda4c11bda98a6212ecf9e5
1ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee/*
2ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee * Copyright (C) 2014 The Android Open Source Project
3ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee *
4ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee * Licensed under the Apache License, Version 2.0 (the "License");
5ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee * you may not use this file except in compliance with the License.
6ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee * You may obtain a copy of the License at
7ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee *
8ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee *      http://www.apache.org/licenses/LICENSE-2.0
9ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee *
10ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee * Unless required by applicable law or agreed to in writing, software
11ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee * distributed under the License is distributed on an "AS IS" BASIS,
12ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee * See the License for the specific language governing permissions and
14ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee * limitations under the License.
15ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee */
16ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Leepackage android.support.v4.graphics;
17ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee
18ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Leeimport android.graphics.Bitmap;
19ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee
20ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee/**
21ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee * Helper for accessing features in {@link android.graphics.Bitmap}
22ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee * introduced after API level 4 in a backwards compatible fashion.
23ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee */
24ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Leepublic class BitmapCompat {
25ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee    /**
26ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee     * Interface for the full API.
27ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee     */
28ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee    interface BitmapImpl {
29ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee        public boolean hasMipMap(Bitmap bitmap);
30ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee        public void setHasMipMap(Bitmap bitmap, boolean hasMipMap);
31ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee    }
32ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee
33ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee    /**
34ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee     * Interface implementation that doesn't use anything about v4 APIs.
35ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee     */
36ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee    static class BaseBitmapImpl implements BitmapImpl {
37ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee        @Override
38ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee        public boolean hasMipMap(Bitmap bitmap) {
39ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee            return false;
40ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee        }
41ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee
42ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee        @Override
43ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee        public void setHasMipMap(Bitmap bitmap, boolean hasMipMap) {
44ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee        }
45ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee    }
46ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee
47ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee    static class JbMr2BitmapCompatImpl extends BaseBitmapImpl {
48ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee        @Override
49ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee        public boolean hasMipMap(Bitmap bitmap){
50ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee            return BitmapCompatJellybeanMR2.hasMipMap(bitmap);
51ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee        }
52ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee
53ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee        @Override
54ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee        public void setHasMipMap(Bitmap bitmap, boolean hasMipMap) {
55ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee            BitmapCompatJellybeanMR2.setHasMipMap(bitmap, hasMipMap);
56ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee        }
57ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee    }
58ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee
59ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee    /**
60ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee     * Select the correct implementation to use for the current platform.
61ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee     */
62ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee    static final BitmapImpl IMPL;
63ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee    static {
64ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee        final int version = android.os.Build.VERSION.SDK_INT;
65ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee        if (version >= 18) {
66ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee            IMPL = new JbMr2BitmapCompatImpl();
67ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee        } else {
68ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee            IMPL = new BaseBitmapImpl();
69ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee        }
70ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee    }
71ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee
72ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee    public static boolean hasMipMap(Bitmap bitmap) {
73ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee        return IMPL.hasMipMap(bitmap);
74ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee    }
75ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee
76ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee    public static void setHasMipMap(Bitmap bitmap, boolean hasMipMap) {
77ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee        IMPL.setHasMipMap(bitmap, hasMipMap);
78ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee    }
79ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee}