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