1666ea1b28a76aeba74744148b15099254d918671Owen Lin/* 2666ea1b28a76aeba74744148b15099254d918671Owen Lin * Copyright (C) 2009 The Android Open Source Project 3666ea1b28a76aeba74744148b15099254d918671Owen Lin * 4666ea1b28a76aeba74744148b15099254d918671Owen Lin * Licensed under the Apache License, Version 2.0 (the "License"); 5666ea1b28a76aeba74744148b15099254d918671Owen Lin * you may not use this file except in compliance with the License. 6666ea1b28a76aeba74744148b15099254d918671Owen Lin * You may obtain a copy of the License at 7666ea1b28a76aeba74744148b15099254d918671Owen Lin * 8666ea1b28a76aeba74744148b15099254d918671Owen Lin * http://www.apache.org/licenses/LICENSE-2.0 9666ea1b28a76aeba74744148b15099254d918671Owen Lin * 10666ea1b28a76aeba74744148b15099254d918671Owen Lin * Unless required by applicable law or agreed to in writing, software 11666ea1b28a76aeba74744148b15099254d918671Owen Lin * distributed under the License is distributed on an "AS IS" BASIS, 12666ea1b28a76aeba74744148b15099254d918671Owen Lin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13666ea1b28a76aeba74744148b15099254d918671Owen Lin * See the License for the specific language governing permissions and 14666ea1b28a76aeba74744148b15099254d918671Owen Lin * limitations under the License. 15666ea1b28a76aeba74744148b15099254d918671Owen Lin */ 16666ea1b28a76aeba74744148b15099254d918671Owen Lin 17666ea1b28a76aeba74744148b15099254d918671Owen Linpackage com.android.camera; 18666ea1b28a76aeba74744148b15099254d918671Owen Lin 19666ea1b28a76aeba74744148b15099254d918671Owen Linimport com.android.camera.gallery.IImage; 20666ea1b28a76aeba74744148b15099254d918671Owen Linimport com.android.camera.gallery.IImageList; 21666ea1b28a76aeba74744148b15099254d918671Owen Lin 22666ea1b28a76aeba74744148b15099254d918671Owen Linimport android.content.Context; 23666ea1b28a76aeba74744148b15099254d918671Owen Linimport android.graphics.Bitmap; 24666ea1b28a76aeba74744148b15099254d918671Owen Linimport android.test.AndroidTestCase; 25666ea1b28a76aeba74744148b15099254d918671Owen Lin 26666ea1b28a76aeba74744148b15099254d918671Owen Lin/** 27666ea1b28a76aeba74744148b15099254d918671Owen Lin * BitmapManager's unit tests. 28666ea1b28a76aeba74744148b15099254d918671Owen Lin */ 29666ea1b28a76aeba74744148b15099254d918671Owen Linpublic class BitmapManagerUnitTests extends AndroidTestCase { 30666ea1b28a76aeba74744148b15099254d918671Owen Lin IImageList mImageList; 31666ea1b28a76aeba74744148b15099254d918671Owen Lin IImage mImage; 32666ea1b28a76aeba74744148b15099254d918671Owen Lin BitmapManager mBitmapManager; 33666ea1b28a76aeba74744148b15099254d918671Owen Lin Context mContext; 34666ea1b28a76aeba74744148b15099254d918671Owen Lin 35666ea1b28a76aeba74744148b15099254d918671Owen Lin private class DecodeThread extends Thread { 36666ea1b28a76aeba74744148b15099254d918671Owen Lin Bitmap bitmap; 37666ea1b28a76aeba74744148b15099254d918671Owen Lin 38666ea1b28a76aeba74744148b15099254d918671Owen Lin public DecodeThread() { 39666ea1b28a76aeba74744148b15099254d918671Owen Lin } 40666ea1b28a76aeba74744148b15099254d918671Owen Lin 41666ea1b28a76aeba74744148b15099254d918671Owen Lin @Override 42666ea1b28a76aeba74744148b15099254d918671Owen Lin public void run() { 43666ea1b28a76aeba74744148b15099254d918671Owen Lin bitmap = mImage.thumbBitmap(IImage.ROTATE_AS_NEEDED); 44666ea1b28a76aeba74744148b15099254d918671Owen Lin } 45666ea1b28a76aeba74744148b15099254d918671Owen Lin 46666ea1b28a76aeba74744148b15099254d918671Owen Lin public Bitmap getBitmap() { 47666ea1b28a76aeba74744148b15099254d918671Owen Lin return bitmap; 48666ea1b28a76aeba74744148b15099254d918671Owen Lin } 49666ea1b28a76aeba74744148b15099254d918671Owen Lin } 50666ea1b28a76aeba74744148b15099254d918671Owen Lin 51666ea1b28a76aeba74744148b15099254d918671Owen Lin @Override 52666ea1b28a76aeba74744148b15099254d918671Owen Lin public void setUp() { 53666ea1b28a76aeba74744148b15099254d918671Owen Lin mContext = getContext(); 54666ea1b28a76aeba74744148b15099254d918671Owen Lin mBitmapManager = BitmapManager.instance(); 55666ea1b28a76aeba74744148b15099254d918671Owen Lin mImageList = ImageManager.makeImageList( 56666ea1b28a76aeba74744148b15099254d918671Owen Lin mContext.getContentResolver(), 57666ea1b28a76aeba74744148b15099254d918671Owen Lin ImageManager.DataLocation.ALL, 58666ea1b28a76aeba74744148b15099254d918671Owen Lin ImageManager.INCLUDE_IMAGES, 59666ea1b28a76aeba74744148b15099254d918671Owen Lin ImageManager.SORT_DESCENDING, 60666ea1b28a76aeba74744148b15099254d918671Owen Lin null); 61666ea1b28a76aeba74744148b15099254d918671Owen Lin mImage = mImageList.getImageAt(0); 62666ea1b28a76aeba74744148b15099254d918671Owen Lin } 63666ea1b28a76aeba74744148b15099254d918671Owen Lin 64666ea1b28a76aeba74744148b15099254d918671Owen Lin public void testSingleton() { 65666ea1b28a76aeba74744148b15099254d918671Owen Lin BitmapManager manager = BitmapManager.instance(); 66666ea1b28a76aeba74744148b15099254d918671Owen Lin assertNotNull(manager); 67666ea1b28a76aeba74744148b15099254d918671Owen Lin assertNotNull(mBitmapManager); 68666ea1b28a76aeba74744148b15099254d918671Owen Lin assertSame(manager, mBitmapManager); 69666ea1b28a76aeba74744148b15099254d918671Owen Lin } 70666ea1b28a76aeba74744148b15099254d918671Owen Lin 71666ea1b28a76aeba74744148b15099254d918671Owen Lin public void testCanThreadDecoding() { 72666ea1b28a76aeba74744148b15099254d918671Owen Lin Thread t = new DecodeThread(); 73666ea1b28a76aeba74744148b15099254d918671Owen Lin 74666ea1b28a76aeba74744148b15099254d918671Owen Lin // By default all threads can decode. 75666ea1b28a76aeba74744148b15099254d918671Owen Lin assertTrue(mBitmapManager.canThreadDecoding(t)); 76666ea1b28a76aeba74744148b15099254d918671Owen Lin 77666ea1b28a76aeba74744148b15099254d918671Owen Lin // Disallow thread t to decode. 788aa3fbcf9a5a0d11acd48861f5167073e3554980Owen Lin mBitmapManager.cancelThreadDecoding(t, mContext.getContentResolver()); 79666ea1b28a76aeba74744148b15099254d918671Owen Lin assertFalse(mBitmapManager.canThreadDecoding(t)); 80666ea1b28a76aeba74744148b15099254d918671Owen Lin 81666ea1b28a76aeba74744148b15099254d918671Owen Lin // Allow thread t to decode again. 82666ea1b28a76aeba74744148b15099254d918671Owen Lin mBitmapManager.allowThreadDecoding(t); 83666ea1b28a76aeba74744148b15099254d918671Owen Lin assertTrue(mBitmapManager.canThreadDecoding(t)); 84666ea1b28a76aeba74744148b15099254d918671Owen Lin } 85666ea1b28a76aeba74744148b15099254d918671Owen Lin 86666ea1b28a76aeba74744148b15099254d918671Owen Lin public void testDefaultAllowDecoding() { 87666ea1b28a76aeba74744148b15099254d918671Owen Lin DecodeThread t = new DecodeThread(); 88666ea1b28a76aeba74744148b15099254d918671Owen Lin try { 89666ea1b28a76aeba74744148b15099254d918671Owen Lin t.start(); 90666ea1b28a76aeba74744148b15099254d918671Owen Lin t.join(); 91666ea1b28a76aeba74744148b15099254d918671Owen Lin } catch (InterruptedException ex) { 92666ea1b28a76aeba74744148b15099254d918671Owen Lin } finally { 93666ea1b28a76aeba74744148b15099254d918671Owen Lin assertNotNull(t.getBitmap()); 94666ea1b28a76aeba74744148b15099254d918671Owen Lin } 95666ea1b28a76aeba74744148b15099254d918671Owen Lin } 96666ea1b28a76aeba74744148b15099254d918671Owen Lin 97666ea1b28a76aeba74744148b15099254d918671Owen Lin public void testCancelDecoding() { 98666ea1b28a76aeba74744148b15099254d918671Owen Lin DecodeThread t = new DecodeThread(); 998aa3fbcf9a5a0d11acd48861f5167073e3554980Owen Lin mBitmapManager.cancelThreadDecoding(t, mContext.getContentResolver()); 100666ea1b28a76aeba74744148b15099254d918671Owen Lin try { 101666ea1b28a76aeba74744148b15099254d918671Owen Lin t.start(); 102666ea1b28a76aeba74744148b15099254d918671Owen Lin t.join(); 103666ea1b28a76aeba74744148b15099254d918671Owen Lin } catch (InterruptedException ex) { 104666ea1b28a76aeba74744148b15099254d918671Owen Lin } finally { 105666ea1b28a76aeba74744148b15099254d918671Owen Lin assertNull(t.getBitmap()); 106666ea1b28a76aeba74744148b15099254d918671Owen Lin } 107666ea1b28a76aeba74744148b15099254d918671Owen Lin } 108666ea1b28a76aeba74744148b15099254d918671Owen Lin 109666ea1b28a76aeba74744148b15099254d918671Owen Lin public void testAllowDecoding() { 110666ea1b28a76aeba74744148b15099254d918671Owen Lin DecodeThread t = new DecodeThread(); 1118aa3fbcf9a5a0d11acd48861f5167073e3554980Owen Lin mBitmapManager.cancelThreadDecoding(t, mContext.getContentResolver()); 112666ea1b28a76aeba74744148b15099254d918671Owen Lin mBitmapManager.allowThreadDecoding(t); 113666ea1b28a76aeba74744148b15099254d918671Owen Lin try { 114666ea1b28a76aeba74744148b15099254d918671Owen Lin t.start(); 115666ea1b28a76aeba74744148b15099254d918671Owen Lin t.join(); 116666ea1b28a76aeba74744148b15099254d918671Owen Lin } catch (InterruptedException ex) { 117666ea1b28a76aeba74744148b15099254d918671Owen Lin } finally { 118666ea1b28a76aeba74744148b15099254d918671Owen Lin assertNotNull(t.getBitmap()); 119666ea1b28a76aeba74744148b15099254d918671Owen Lin } 120666ea1b28a76aeba74744148b15099254d918671Owen Lin } 121666ea1b28a76aeba74744148b15099254d918671Owen Lin 122666ea1b28a76aeba74744148b15099254d918671Owen Lin public void testThreadDecoding() { 123666ea1b28a76aeba74744148b15099254d918671Owen Lin DecodeThread t1 = new DecodeThread(); 124666ea1b28a76aeba74744148b15099254d918671Owen Lin DecodeThread t2 = new DecodeThread(); 125666ea1b28a76aeba74744148b15099254d918671Owen Lin mBitmapManager.allowThreadDecoding(t1); 1268aa3fbcf9a5a0d11acd48861f5167073e3554980Owen Lin mBitmapManager.cancelThreadDecoding(t2, mContext.getContentResolver()); 127666ea1b28a76aeba74744148b15099254d918671Owen Lin t1.start(); 128666ea1b28a76aeba74744148b15099254d918671Owen Lin t2.start(); 129666ea1b28a76aeba74744148b15099254d918671Owen Lin 130666ea1b28a76aeba74744148b15099254d918671Owen Lin try { 131666ea1b28a76aeba74744148b15099254d918671Owen Lin t1.join(); 132666ea1b28a76aeba74744148b15099254d918671Owen Lin t2.join(); 133666ea1b28a76aeba74744148b15099254d918671Owen Lin } catch (InterruptedException ex) { 134666ea1b28a76aeba74744148b15099254d918671Owen Lin } finally { 135666ea1b28a76aeba74744148b15099254d918671Owen Lin assertTrue(mBitmapManager.canThreadDecoding(t1)); 136666ea1b28a76aeba74744148b15099254d918671Owen Lin assertNotNull(t1.getBitmap()); 137666ea1b28a76aeba74744148b15099254d918671Owen Lin assertFalse(mBitmapManager.canThreadDecoding(t2)); 138666ea1b28a76aeba74744148b15099254d918671Owen Lin assertNull(t2.getBitmap()); 139666ea1b28a76aeba74744148b15099254d918671Owen Lin } 140666ea1b28a76aeba74744148b15099254d918671Owen Lin } 141666ea1b28a76aeba74744148b15099254d918671Owen Lin 142666ea1b28a76aeba74744148b15099254d918671Owen Lin @Override 143666ea1b28a76aeba74744148b15099254d918671Owen Lin public String toString() { 144666ea1b28a76aeba74744148b15099254d918671Owen Lin return "BitmapManagerUnitTest"; 145666ea1b28a76aeba74744148b15099254d918671Owen Lin } 146666ea1b28a76aeba74744148b15099254d918671Owen Lin} 147