15ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller/* 25ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * Copyright (C) 2010 The Android Open Source Project 35ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * 45ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * Licensed under the Apache License, Version 2.0 (the "License"); 55ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * you may not use this file except in compliance with the License. 65ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * You may obtain a copy of the License at 75ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * 85ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * http://www.apache.org/licenses/LICENSE-2.0 95ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * 105ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * Unless required by applicable law or agreed to in writing, software 115ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * distributed under the License is distributed on an "AS IS" BASIS, 125ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 135ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * See the License for the specific language governing permissions and 145ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * limitations under the License. 155ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller */ 165ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 175ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerpackage com.android.carouseltest; 185ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 195ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerimport com.android.ex.carousel.CarouselView; 20a3cb716626b477c98ba912698c765eab20f27286Jim Millerimport com.android.ex.carousel.CarouselViewHelper; 215ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 225ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerimport android.app.Activity; 2346a02894a12775c16c4588a168c3cbc767a6f983Jim Millerimport android.app.AlertDialog; 24a3cb716626b477c98ba912698c765eab20f27286Jim Millerimport android.content.Context; 255ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerimport android.content.res.Resources; 265ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerimport android.graphics.Bitmap; 275ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerimport android.graphics.BitmapFactory; 285ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerimport android.graphics.Canvas; 295ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerimport android.graphics.Paint; 30420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Millerimport android.graphics.PixelFormat; 31a3cb716626b477c98ba912698c765eab20f27286Jim Millerimport android.graphics.Rect; 325ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerimport android.os.Bundle; 335ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerimport android.util.Log; 345ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 355ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerpublic class CarouselTestActivity extends Activity { 36a3cb716626b477c98ba912698c765eab20f27286Jim Miller private static final String TAG = "CarouselTestActivity"; 375ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller private static final int CARD_SLOTS = 56; 3843471a7e84593d0dd855ec5c66d70891a6fd4c81Jim Miller private static final int TOTAL_CARDS = 100; 39420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller private static final int TEXTURE_HEIGHT = 256; 40420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller private static final int TEXTURE_WIDTH = 256; 415ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller private static final int SLOTS_VISIBLE = 7; 42a3cb716626b477c98ba912698c765eab20f27286Jim Miller 437cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller protected static final boolean DBG = false; 447cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller private static final int DETAIL_TEXTURE_WIDTH = 200; 457cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller private static final int DETAIL_TEXTURE_HEIGHT = 80; 46f7c724da4bb4fcd3cd02add04a7bb8052e07e4c3Jim Miller private static final int VISIBLE_DETAIL_COUNT = 3; 471eccd028e704c15e842c1f23254d77a1a0a4cae0Jim Miller private static boolean INCREMENTAL_ADD = false; // To debug incrementally adding cards 485ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller private CarouselView mView; 495ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller private Paint mPaint = new Paint(); 50a3cb716626b477c98ba912698c765eab20f27286Jim Miller private CarouselViewHelper mHelper; 51a3cb716626b477c98ba912698c765eab20f27286Jim Miller private Bitmap mGlossyOverlay; 52a3cb716626b477c98ba912698c765eab20f27286Jim Miller private Bitmap mBorder; 53a3cb716626b477c98ba912698c765eab20f27286Jim Miller 54a3cb716626b477c98ba912698c765eab20f27286Jim Miller class LocalCarouselViewHelper extends CarouselViewHelper { 55a3cb716626b477c98ba912698c765eab20f27286Jim Miller private static final int PIXEL_BORDER = 3; 56a3cb716626b477c98ba912698c765eab20f27286Jim Miller private DetailTextureParameters mDetailTextureParameters 57b378af500b36226635b6343b1d5009ee9af44fc1Jim Miller = new DetailTextureParameters(5.0f, 5.0f, 3.0f, 10.0f); 585ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 59a3cb716626b477c98ba912698c765eab20f27286Jim Miller LocalCarouselViewHelper(Context context) { 60a3cb716626b477c98ba912698c765eab20f27286Jim Miller super(context); 61a3cb716626b477c98ba912698c765eab20f27286Jim Miller } 62a3cb716626b477c98ba912698c765eab20f27286Jim Miller 63a3cb716626b477c98ba912698c765eab20f27286Jim Miller @Override 6446a02894a12775c16c4588a168c3cbc767a6f983Jim Miller public void onCardSelected(final int id) { 6546a02894a12775c16c4588a168c3cbc767a6f983Jim Miller postMessage("Selection", "Card " + id + " was selected"); 66a3cb716626b477c98ba912698c765eab20f27286Jim Miller } 67a3cb716626b477c98ba912698c765eab20f27286Jim Miller 68a3cb716626b477c98ba912698c765eab20f27286Jim Miller @Override 6946a02894a12775c16c4588a168c3cbc767a6f983Jim Miller public void onDetailSelected(final int id, int x, int y) { 7046a02894a12775c16c4588a168c3cbc767a6f983Jim Miller postMessage("Selection", "Detail for card " + id + " was selected"); 7146a02894a12775c16c4588a168c3cbc767a6f983Jim Miller } 7246a02894a12775c16c4588a168c3cbc767a6f983Jim Miller 7346a02894a12775c16c4588a168c3cbc767a6f983Jim Miller @Override 7446a02894a12775c16c4588a168c3cbc767a6f983Jim Miller public void onCardLongPress(int n, int touchPosition[], Rect detailCoordinates) { 7546a02894a12775c16c4588a168c3cbc767a6f983Jim Miller postMessage("Selection", "Long press on card " + n); 768fd40311898a9ec759a76f021642f43e617e38c4Jim Shuma } 778fd40311898a9ec759a76f021642f43e617e38c4Jim Shuma 788fd40311898a9ec759a76f021642f43e617e38c4Jim Shuma @Override 79a3cb716626b477c98ba912698c765eab20f27286Jim Miller public DetailTextureParameters getDetailTextureParameters(int id) { 80a3cb716626b477c98ba912698c765eab20f27286Jim Miller return mDetailTextureParameters; 81a3cb716626b477c98ba912698c765eab20f27286Jim Miller } 82a3cb716626b477c98ba912698c765eab20f27286Jim Miller 83a3cb716626b477c98ba912698c765eab20f27286Jim Miller @Override 84a3cb716626b477c98ba912698c765eab20f27286Jim Miller public Bitmap getTexture(int n) { 85a3cb716626b477c98ba912698c765eab20f27286Jim Miller Bitmap bitmap = Bitmap.createBitmap(TEXTURE_WIDTH, TEXTURE_HEIGHT, 86a3cb716626b477c98ba912698c765eab20f27286Jim Miller Bitmap.Config.ARGB_8888); 87a3cb716626b477c98ba912698c765eab20f27286Jim Miller Canvas canvas = new Canvas(bitmap); 88a3cb716626b477c98ba912698c765eab20f27286Jim Miller canvas.drawARGB(0, 0, 0, 0); 89420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller mPaint.setColor(0x40808080); 90420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller canvas.drawRect(2, 2, TEXTURE_WIDTH-2, TEXTURE_HEIGHT-2, mPaint); 91a3cb716626b477c98ba912698c765eab20f27286Jim Miller mPaint.setTextSize(100.0f); 92a3cb716626b477c98ba912698c765eab20f27286Jim Miller mPaint.setAntiAlias(true); 93a3cb716626b477c98ba912698c765eab20f27286Jim Miller mPaint.setColor(0xffffffff); 94420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller canvas.drawText("" + n, 2, TEXTURE_HEIGHT-10, mPaint); 95a3cb716626b477c98ba912698c765eab20f27286Jim Miller canvas.drawBitmap(mGlossyOverlay, null, 96a3cb716626b477c98ba912698c765eab20f27286Jim Miller new Rect(PIXEL_BORDER, PIXEL_BORDER, 97a3cb716626b477c98ba912698c765eab20f27286Jim Miller TEXTURE_WIDTH - PIXEL_BORDER, TEXTURE_HEIGHT - PIXEL_BORDER), mPaint); 98a3cb716626b477c98ba912698c765eab20f27286Jim Miller return bitmap; 99a3cb716626b477c98ba912698c765eab20f27286Jim Miller } 100a3cb716626b477c98ba912698c765eab20f27286Jim Miller 101a3cb716626b477c98ba912698c765eab20f27286Jim Miller @Override 102a3cb716626b477c98ba912698c765eab20f27286Jim Miller public Bitmap getDetailTexture(int n) { 103a3cb716626b477c98ba912698c765eab20f27286Jim Miller Bitmap bitmap = Bitmap.createBitmap(DETAIL_TEXTURE_WIDTH, DETAIL_TEXTURE_HEIGHT, 104a3cb716626b477c98ba912698c765eab20f27286Jim Miller Bitmap.Config.ARGB_8888); 105a3cb716626b477c98ba912698c765eab20f27286Jim Miller Canvas canvas = new Canvas(bitmap); 106420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller canvas.drawARGB(32, 10, 10, 10); 107a3cb716626b477c98ba912698c765eab20f27286Jim Miller mPaint.setTextSize(15.0f); 108a3cb716626b477c98ba912698c765eab20f27286Jim Miller mPaint.setAntiAlias(true); 109a3cb716626b477c98ba912698c765eab20f27286Jim Miller canvas.drawText("Detail text for card " + n, 0, DETAIL_TEXTURE_HEIGHT/2, mPaint); 110a3cb716626b477c98ba912698c765eab20f27286Jim Miller return bitmap; 111a3cb716626b477c98ba912698c765eab20f27286Jim Miller } 112a3cb716626b477c98ba912698c765eab20f27286Jim Miller }; 1135ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 1145ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller @Override 115420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller public CharSequence onCreateDescription() { 116420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller return getText(R.string.carousel_test_activity_description); 117420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller } 118420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller 1192ba04e061b52c488a154739379501dc833e39f79Jim Miller private Runnable mAddCardRunnable = new Runnable() { 1202ba04e061b52c488a154739379501dc833e39f79Jim Miller public void run() { 1212ba04e061b52c488a154739379501dc833e39f79Jim Miller if (mView.getCardCount() < TOTAL_CARDS) { 1222ba04e061b52c488a154739379501dc833e39f79Jim Miller mView.createCards(mView.getCardCount() + 1); 1232ba04e061b52c488a154739379501dc833e39f79Jim Miller mView.postDelayed(mAddCardRunnable, 2000); 1242ba04e061b52c488a154739379501dc833e39f79Jim Miller } 1252ba04e061b52c488a154739379501dc833e39f79Jim Miller } 1262ba04e061b52c488a154739379501dc833e39f79Jim Miller }; 1272ba04e061b52c488a154739379501dc833e39f79Jim Miller 12846a02894a12775c16c4588a168c3cbc767a6f983Jim Miller void postMessage(final CharSequence title, final CharSequence msg) { 12946a02894a12775c16c4588a168c3cbc767a6f983Jim Miller runOnUiThread(new Runnable() { 13046a02894a12775c16c4588a168c3cbc767a6f983Jim Miller public void run() { 13146a02894a12775c16c4588a168c3cbc767a6f983Jim Miller new AlertDialog.Builder(CarouselTestActivity.this) 13246a02894a12775c16c4588a168c3cbc767a6f983Jim Miller .setTitle(title) 13346a02894a12775c16c4588a168c3cbc767a6f983Jim Miller .setMessage(msg) 13446a02894a12775c16c4588a168c3cbc767a6f983Jim Miller .setPositiveButton("OK", null) 13546a02894a12775c16c4588a168c3cbc767a6f983Jim Miller .create() 13646a02894a12775c16c4588a168c3cbc767a6f983Jim Miller .show(); 13746a02894a12775c16c4588a168c3cbc767a6f983Jim Miller } 13846a02894a12775c16c4588a168c3cbc767a6f983Jim Miller }); 13946a02894a12775c16c4588a168c3cbc767a6f983Jim Miller } 14046a02894a12775c16c4588a168c3cbc767a6f983Jim Miller 141420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller @Override 1425ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller protected void onCreate(Bundle savedInstanceState) { 1435ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller super.onCreate(savedInstanceState); 1445ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 145fb179e7afd8f02be63061b478b0283e3085fc25fJim Miller setContentView(R.layout.carousel_test); 146fb179e7afd8f02be63061b478b0283e3085fc25fJim Miller mView = (CarouselView) findViewById(R.id.carousel); 147fb179e7afd8f02be63061b478b0283e3085fc25fJim Miller mView.getHolder().setFormat(PixelFormat.RGBA_8888); 1485ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mPaint.setColor(0xffffffff); 1495ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller final Resources res = getResources(); 1505ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 151a3cb716626b477c98ba912698c765eab20f27286Jim Miller mHelper = new LocalCarouselViewHelper(this); 152a3cb716626b477c98ba912698c765eab20f27286Jim Miller mHelper.setCarouselView(mView); 1535ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mView.setSlotCount(CARD_SLOTS); 1542ba04e061b52c488a154739379501dc833e39f79Jim Miller mView.createCards(INCREMENTAL_ADD ? 1: TOTAL_CARDS); 1555ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mView.setVisibleSlots(SLOTS_VISIBLE); 1565ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mView.setStartAngle((float) -(2.0f*Math.PI * 5 / CARD_SLOTS)); 157a3cb716626b477c98ba912698c765eab20f27286Jim Miller mBorder = BitmapFactory.decodeResource(res, R.drawable.border); 158a3cb716626b477c98ba912698c765eab20f27286Jim Miller mView.setDefaultBitmap(mBorder); 159a3cb716626b477c98ba912698c765eab20f27286Jim Miller mView.setLoadingBitmap(mBorder); 160420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller mView.setBackgroundColor(0.25f, 0.25f, 0.5f, 0.5f); 161420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller mView.setRezInCardCount(3.0f); 162420b44b8b11ec1c309ea130e69a6876325dbfef9Jim Miller mView.setFadeInDuration(250); 163f7c724da4bb4fcd3cd02add04a7bb8052e07e4c3Jim Miller mView.setVisibleDetails(VISIBLE_DETAIL_COUNT); 164be5482f170e191aa98a3c2ecefdeaf936b7df412Jim Miller mView.setDragModel(CarouselView.DRAG_MODEL_PLANE); 1652ba04e061b52c488a154739379501dc833e39f79Jim Miller if (INCREMENTAL_ADD) { 1662ba04e061b52c488a154739379501dc833e39f79Jim Miller mView.postDelayed(mAddCardRunnable, 2000); 1672ba04e061b52c488a154739379501dc833e39f79Jim Miller } 1685ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 169a3cb716626b477c98ba912698c765eab20f27286Jim Miller mGlossyOverlay = BitmapFactory.decodeResource(res, R.drawable.glossy_overlay); 1705ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 1715ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 1725ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller @Override 1735ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller protected void onResume() { 1745ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller super.onResume(); 175a3cb716626b477c98ba912698c765eab20f27286Jim Miller mHelper.onResume(); 1765ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 1775ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 1785ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller @Override 1795ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller protected void onPause() { 1805ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller super.onPause(); 181a3cb716626b477c98ba912698c765eab20f27286Jim Miller mHelper.onPause(); 1827cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller } 1837cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller 1845ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller} 185