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; 19b3187869ca1ed7a353bf1d6a4b356bc84ad7eadfAurimas Liutikasimport android.os.Build; 20645e5c8aa6b31961c5f73f3d30bb5261d5e04aebKirill Grouchnikovimport android.support.annotation.RequiresApi; 21ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee 22ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee/** 23645e5c8aa6b31961c5f73f3d30bb5261d5e04aebKirill Grouchnikov * Helper for accessing features in {@link android.graphics.Bitmap}. 24ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee */ 25c5847d13e40f5d52459f5c0dab32dc08f1a9a683Chris Banespublic final class BitmapCompat { 26b3187869ca1ed7a353bf1d6a4b356bc84ad7eadfAurimas Liutikas static class BitmapCompatBaseImpl { 27ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee public boolean hasMipMap(Bitmap bitmap) { 28ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee return false; 29ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee } 30ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee 31ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee public void setHasMipMap(Bitmap bitmap, boolean hasMipMap) { 32ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee } 33c55f505d6e5cd8b701721f42431bfd742a1968f0Chris Banes 34c55f505d6e5cd8b701721f42431bfd742a1968f0Chris Banes public int getAllocationByteCount(Bitmap bitmap) { 35b3187869ca1ed7a353bf1d6a4b356bc84ad7eadfAurimas Liutikas return bitmap.getByteCount(); 36c55f505d6e5cd8b701721f42431bfd742a1968f0Chris Banes } 37ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee } 38ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee 39c69882cb9b130902c1554ef5d3e3b06d776cd796Alan Viverette @RequiresApi(18) 40b3187869ca1ed7a353bf1d6a4b356bc84ad7eadfAurimas Liutikas static class BitmapCompatApi18Impl extends BitmapCompatBaseImpl { 41ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee @Override 42ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee public boolean hasMipMap(Bitmap bitmap){ 43b3187869ca1ed7a353bf1d6a4b356bc84ad7eadfAurimas Liutikas return bitmap.hasMipMap(); 44ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee } 45ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee 46ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee @Override 47ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee public void setHasMipMap(Bitmap bitmap, boolean hasMipMap) { 48b3187869ca1ed7a353bf1d6a4b356bc84ad7eadfAurimas Liutikas bitmap.setHasMipMap(hasMipMap); 49ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee } 50ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee } 51ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee 52c69882cb9b130902c1554ef5d3e3b06d776cd796Alan Viverette @RequiresApi(19) 53b3187869ca1ed7a353bf1d6a4b356bc84ad7eadfAurimas Liutikas static class BitmapCompatApi19Impl extends BitmapCompatApi18Impl { 54c55f505d6e5cd8b701721f42431bfd742a1968f0Chris Banes @Override 55c55f505d6e5cd8b701721f42431bfd742a1968f0Chris Banes public int getAllocationByteCount(Bitmap bitmap) { 56b3187869ca1ed7a353bf1d6a4b356bc84ad7eadfAurimas Liutikas return bitmap.getAllocationByteCount(); 57c55f505d6e5cd8b701721f42431bfd742a1968f0Chris Banes } 58c55f505d6e5cd8b701721f42431bfd742a1968f0Chris Banes } 59c55f505d6e5cd8b701721f42431bfd742a1968f0Chris Banes 60ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee /** 61ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee * Select the correct implementation to use for the current platform. 62ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee */ 63b3187869ca1ed7a353bf1d6a4b356bc84ad7eadfAurimas Liutikas static final BitmapCompatBaseImpl IMPL; 64ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee static { 65c69882cb9b130902c1554ef5d3e3b06d776cd796Alan Viverette if (Build.VERSION.SDK_INT >= 19) { 66b3187869ca1ed7a353bf1d6a4b356bc84ad7eadfAurimas Liutikas IMPL = new BitmapCompatApi19Impl(); 67c69882cb9b130902c1554ef5d3e3b06d776cd796Alan Viverette } else if (Build.VERSION.SDK_INT >= 18) { 68b3187869ca1ed7a353bf1d6a4b356bc84ad7eadfAurimas Liutikas IMPL = new BitmapCompatApi18Impl(); 69ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee } else { 70b3187869ca1ed7a353bf1d6a4b356bc84ad7eadfAurimas Liutikas IMPL = new BitmapCompatBaseImpl(); 71ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee } 72ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee } 73ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee 74ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee public static boolean hasMipMap(Bitmap bitmap) { 75ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee return IMPL.hasMipMap(bitmap); 76ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee } 77ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee 78ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee public static void setHasMipMap(Bitmap bitmap, boolean hasMipMap) { 79ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee IMPL.setHasMipMap(bitmap, hasMipMap); 80ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee } 81c55f505d6e5cd8b701721f42431bfd742a1968f0Chris Banes 82c55f505d6e5cd8b701721f42431bfd742a1968f0Chris Banes /** 83c55f505d6e5cd8b701721f42431bfd742a1968f0Chris Banes * Returns the size of the allocated memory used to store this bitmap's pixels in a backwards 84c55f505d6e5cd8b701721f42431bfd742a1968f0Chris Banes * compatible way. 85c55f505d6e5cd8b701721f42431bfd742a1968f0Chris Banes * 8644ece5ceaaee232f9139ccbde40ac4a5e642bdeeChristophe Beyls * @param bitmap the bitmap in which to return its allocation size 87c55f505d6e5cd8b701721f42431bfd742a1968f0Chris Banes * @return the allocation size in bytes 88c55f505d6e5cd8b701721f42431bfd742a1968f0Chris Banes */ 89c55f505d6e5cd8b701721f42431bfd742a1968f0Chris Banes public static int getAllocationByteCount(Bitmap bitmap) { 90c55f505d6e5cd8b701721f42431bfd742a1968f0Chris Banes return IMPL.getAllocationByteCount(bitmap); 91c55f505d6e5cd8b701721f42431bfd742a1968f0Chris Banes } 92c5847d13e40f5d52459f5c0dab32dc08f1a9a683Chris Banes 93c5847d13e40f5d52459f5c0dab32dc08f1a9a683Chris Banes private BitmapCompat() {} 94ddb24f29a236175d3cda4c11bda98a6212ecf9e5Yorke Lee}