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