1a3cb716626b477c98ba912698c765eab20f27286Jim Millerpackage com.android.ex.carousel; 2a3cb716626b477c98ba912698c765eab20f27286Jim Miller 3a3cb716626b477c98ba912698c765eab20f27286Jim Millerimport android.content.Context; 4a3cb716626b477c98ba912698c765eab20f27286Jim Millerimport android.graphics.Bitmap; 5a3cb716626b477c98ba912698c765eab20f27286Jim Millerimport android.graphics.Matrix; 6e8cab95c5f73ddf6843d82793decc3adb4692860Jim Shumaimport android.graphics.Rect; 7a3cb716626b477c98ba912698c765eab20f27286Jim Millerimport android.os.Handler; 8a3cb716626b477c98ba912698c765eab20f27286Jim Millerimport android.os.HandlerThread; 9a3cb716626b477c98ba912698c765eab20f27286Jim Millerimport android.os.Looper; 10a3cb716626b477c98ba912698c765eab20f27286Jim Millerimport android.os.Message; 11c2baf88a763ae0e3694c8a10c13f203db9aec363Jim Shumaimport android.renderscript.Matrix4f; 12a3cb716626b477c98ba912698c765eab20f27286Jim Millerimport android.renderscript.Mesh; 13a3cb716626b477c98ba912698c765eab20f27286Jim Millerimport android.util.Log; 14a3cb716626b477c98ba912698c765eab20f27286Jim Miller 15a3cb716626b477c98ba912698c765eab20f27286Jim Millerimport com.android.ex.carousel.CarouselRS.CarouselCallback; 16a3cb716626b477c98ba912698c765eab20f27286Jim Miller 17a3cb716626b477c98ba912698c765eab20f27286Jim Miller/** 18a3cb716626b477c98ba912698c765eab20f27286Jim Miller * CarouselViewHelper wraps all of the threading and event handling of the CarouselView, 19a3cb716626b477c98ba912698c765eab20f27286Jim Miller * providing a simpler interface. Most users will just need to implement a handful of 20a3cb716626b477c98ba912698c765eab20f27286Jim Miller * methods to get an application working. 21a3cb716626b477c98ba912698c765eab20f27286Jim Miller * 22a3cb716626b477c98ba912698c765eab20f27286Jim Miller */ 23a3cb716626b477c98ba912698c765eab20f27286Jim Millerpublic class CarouselViewHelper implements CarouselCallback { 24a3cb716626b477c98ba912698c765eab20f27286Jim Miller private static final String TAG = "CarouselViewHelper"; 25a3cb716626b477c98ba912698c765eab20f27286Jim Miller private static final int SET_TEXTURE_N = 1; 26a3cb716626b477c98ba912698c765eab20f27286Jim Miller private static final int SET_DETAIL_TEXTURE_N = 2; 27a3cb716626b477c98ba912698c765eab20f27286Jim Miller private static final int SET_GEOMETRY_N = 3; 28c2baf88a763ae0e3694c8a10c13f203db9aec363Jim Shuma private static final int SET_MATRIX_N = 4; 29a3cb716626b477c98ba912698c765eab20f27286Jim Miller 30a3cb716626b477c98ba912698c765eab20f27286Jim Miller // This is an ordered list of base message ids to allow removal of a single item from the 31a3cb716626b477c98ba912698c765eab20f27286Jim Miller // list for a particular card. The implementation currently supports up to a million cards. 32a3cb716626b477c98ba912698c765eab20f27286Jim Miller private static final int REQUEST_TEXTURE_N = 1000000; 33a3cb716626b477c98ba912698c765eab20f27286Jim Miller private static final int REQUEST_DETAIL_TEXTURE_N = 2000000; 34a3cb716626b477c98ba912698c765eab20f27286Jim Miller private static final int REQUEST_GEOMETRY_N = 3000000; 35a3cb716626b477c98ba912698c765eab20f27286Jim Miller private static final int REQUEST_END = 4000000; 36a3cb716626b477c98ba912698c765eab20f27286Jim Miller 37a3cb716626b477c98ba912698c765eab20f27286Jim Miller private HandlerThread mHandlerThread; 38a3cb716626b477c98ba912698c765eab20f27286Jim Miller private Context mContext; 39a3cb716626b477c98ba912698c765eab20f27286Jim Miller private CarouselView mCarouselView; 402ba04e061b52c488a154739379501dc833e39f79Jim Miller private boolean DBG = false; 41a3cb716626b477c98ba912698c765eab20f27286Jim Miller private long HOLDOFF_DELAY = 100; 42a3cb716626b477c98ba912698c765eab20f27286Jim Miller private Handler mAsyncHandler; // Background thread handler for reading textures, geometry, etc. 43a3cb716626b477c98ba912698c765eab20f27286Jim Miller private Handler mSyncHandler; // Synchronous handler for interacting with UI elements. 44a3cb716626b477c98ba912698c765eab20f27286Jim Miller 450eb8cac611ca6d82dced0995d2ead3886c647170Jack Palevich public static class TextureParameters { 46c2baf88a763ae0e3694c8a10c13f203db9aec363Jim Shuma public TextureParameters() { matrix = new Matrix4f(); } 47c2baf88a763ae0e3694c8a10c13f203db9aec363Jim Shuma public TextureParameters(Matrix4f _matrix) { matrix = _matrix; } 48c2baf88a763ae0e3694c8a10c13f203db9aec363Jim Shuma public Matrix4f matrix; 49a3cb716626b477c98ba912698c765eab20f27286Jim Miller }; 50a3cb716626b477c98ba912698c765eab20f27286Jim Miller 510eb8cac611ca6d82dced0995d2ead3886c647170Jack Palevich public static class DetailTextureParameters { 52b378af500b36226635b6343b1d5009ee9af44fc1Jim Miller public DetailTextureParameters(float textureOffsetX, float textureOffsetY) { 53b378af500b36226635b6343b1d5009ee9af44fc1Jim Miller this.textureOffsetX = textureOffsetX; 54b378af500b36226635b6343b1d5009ee9af44fc1Jim Miller this.textureOffsetY = textureOffsetY; 55b378af500b36226635b6343b1d5009ee9af44fc1Jim Miller this.lineOffsetX = 0.0f; 56b378af500b36226635b6343b1d5009ee9af44fc1Jim Miller this.lineOffsetY = 0.0f; 57a3cb716626b477c98ba912698c765eab20f27286Jim Miller } 58b378af500b36226635b6343b1d5009ee9af44fc1Jim Miller public DetailTextureParameters( 59b378af500b36226635b6343b1d5009ee9af44fc1Jim Miller float textureOffsetX, float textureOffsetY, 60b378af500b36226635b6343b1d5009ee9af44fc1Jim Miller float lineOffsetX, float lineOffsetY) { 61b378af500b36226635b6343b1d5009ee9af44fc1Jim Miller this.textureOffsetX = textureOffsetX; 62b378af500b36226635b6343b1d5009ee9af44fc1Jim Miller this.textureOffsetY = textureOffsetY; 63b378af500b36226635b6343b1d5009ee9af44fc1Jim Miller this.lineOffsetX = lineOffsetX; 64b378af500b36226635b6343b1d5009ee9af44fc1Jim Miller this.lineOffsetY = lineOffsetY; 65b378af500b36226635b6343b1d5009ee9af44fc1Jim Miller } 66b378af500b36226635b6343b1d5009ee9af44fc1Jim Miller public float textureOffsetX; 67b378af500b36226635b6343b1d5009ee9af44fc1Jim Miller public float textureOffsetY; 68b378af500b36226635b6343b1d5009ee9af44fc1Jim Miller public float lineOffsetX; 69b378af500b36226635b6343b1d5009ee9af44fc1Jim Miller public float lineOffsetY; 70a3cb716626b477c98ba912698c765eab20f27286Jim Miller }; 71a3cb716626b477c98ba912698c765eab20f27286Jim Miller 72a3cb716626b477c98ba912698c765eab20f27286Jim Miller public void setCarouselView(CarouselView carouselView) { 73a3cb716626b477c98ba912698c765eab20f27286Jim Miller mCarouselView = carouselView; 74a3cb716626b477c98ba912698c765eab20f27286Jim Miller mCarouselView.setCallback(this); 75a3cb716626b477c98ba912698c765eab20f27286Jim Miller } 76a3cb716626b477c98ba912698c765eab20f27286Jim Miller 77a3cb716626b477c98ba912698c765eab20f27286Jim Miller public CarouselViewHelper(Context context, CarouselView carouselView) { 78a3cb716626b477c98ba912698c765eab20f27286Jim Miller this(context); 79a3cb716626b477c98ba912698c765eab20f27286Jim Miller setCarouselView(carouselView); 80a3cb716626b477c98ba912698c765eab20f27286Jim Miller } 81a3cb716626b477c98ba912698c765eab20f27286Jim Miller 82a3cb716626b477c98ba912698c765eab20f27286Jim Miller public CarouselViewHelper(Context context) { 83a3cb716626b477c98ba912698c765eab20f27286Jim Miller mContext = context; 84a3cb716626b477c98ba912698c765eab20f27286Jim Miller 85a3cb716626b477c98ba912698c765eab20f27286Jim Miller mHandlerThread = new HandlerThread(TAG + ".handler"); 86a3cb716626b477c98ba912698c765eab20f27286Jim Miller mHandlerThread.start(); 87a3cb716626b477c98ba912698c765eab20f27286Jim Miller 88a3cb716626b477c98ba912698c765eab20f27286Jim Miller mAsyncHandler = new AsyncHandler(mHandlerThread.getLooper()); 89a3cb716626b477c98ba912698c765eab20f27286Jim Miller mSyncHandler = new SyncHandler(); // runs in calling thread 90a3cb716626b477c98ba912698c765eab20f27286Jim Miller } 91a3cb716626b477c98ba912698c765eab20f27286Jim Miller 92a3cb716626b477c98ba912698c765eab20f27286Jim Miller class AsyncHandler extends Handler { 93a3cb716626b477c98ba912698c765eab20f27286Jim Miller AsyncHandler(Looper looper) { 94a3cb716626b477c98ba912698c765eab20f27286Jim Miller super(looper); 95a3cb716626b477c98ba912698c765eab20f27286Jim Miller } 96a3cb716626b477c98ba912698c765eab20f27286Jim Miller 97a3cb716626b477c98ba912698c765eab20f27286Jim Miller @Override 98a3cb716626b477c98ba912698c765eab20f27286Jim Miller public void handleMessage(Message msg) { 99a3cb716626b477c98ba912698c765eab20f27286Jim Miller int id = msg.arg1; 100a3cb716626b477c98ba912698c765eab20f27286Jim Miller if (id >= mCarouselView.getCardCount()) { 101a3cb716626b477c98ba912698c765eab20f27286Jim Miller Log.e(TAG, "Index out of range for get, card:" + id); 102a3cb716626b477c98ba912698c765eab20f27286Jim Miller return; 103a3cb716626b477c98ba912698c765eab20f27286Jim Miller } 104a3cb716626b477c98ba912698c765eab20f27286Jim Miller if (msg.what < REQUEST_TEXTURE_N || msg.what > REQUEST_END) { 105a3cb716626b477c98ba912698c765eab20f27286Jim Miller Log.e(TAG, "Unknown message: " + id); 106a3cb716626b477c98ba912698c765eab20f27286Jim Miller return; 107a3cb716626b477c98ba912698c765eab20f27286Jim Miller } 108a3cb716626b477c98ba912698c765eab20f27286Jim Miller if (msg.what < REQUEST_DETAIL_TEXTURE_N) { 109a3cb716626b477c98ba912698c765eab20f27286Jim Miller // REQUEST_TEXTURE_N 110a3cb716626b477c98ba912698c765eab20f27286Jim Miller final Bitmap bitmap = getTexture(id); 111a3cb716626b477c98ba912698c765eab20f27286Jim Miller if (bitmap != null) { 112a3cb716626b477c98ba912698c765eab20f27286Jim Miller mSyncHandler.obtainMessage(SET_TEXTURE_N, id, 0, bitmap).sendToTarget(); 113a3cb716626b477c98ba912698c765eab20f27286Jim Miller } 114c2baf88a763ae0e3694c8a10c13f203db9aec363Jim Shuma 115c2baf88a763ae0e3694c8a10c13f203db9aec363Jim Shuma TextureParameters params = getTextureParameters(id); 116c2baf88a763ae0e3694c8a10c13f203db9aec363Jim Shuma if (params != null) { 117c2baf88a763ae0e3694c8a10c13f203db9aec363Jim Shuma mSyncHandler.obtainMessage(SET_MATRIX_N, id, 0, 118c2baf88a763ae0e3694c8a10c13f203db9aec363Jim Shuma params.matrix.getArray()).sendToTarget(); 119c2baf88a763ae0e3694c8a10c13f203db9aec363Jim Shuma } 120a3cb716626b477c98ba912698c765eab20f27286Jim Miller } else if (msg.what < REQUEST_GEOMETRY_N) { 121a3cb716626b477c98ba912698c765eab20f27286Jim Miller // REQUEST_DETAIL_TEXTURE_N 122a3cb716626b477c98ba912698c765eab20f27286Jim Miller final Bitmap bitmap = getDetailTexture(id); 123a3cb716626b477c98ba912698c765eab20f27286Jim Miller if (bitmap != null) { 124a3cb716626b477c98ba912698c765eab20f27286Jim Miller mSyncHandler.obtainMessage(SET_DETAIL_TEXTURE_N, id, 0, bitmap).sendToTarget(); 125a3cb716626b477c98ba912698c765eab20f27286Jim Miller } 126a3cb716626b477c98ba912698c765eab20f27286Jim Miller } else if (msg.what < REQUEST_END) { 127a3cb716626b477c98ba912698c765eab20f27286Jim Miller // REQUEST_GEOMETRY_N 128a3cb716626b477c98ba912698c765eab20f27286Jim Miller Mesh mesh = getGeometry(id); 129a3cb716626b477c98ba912698c765eab20f27286Jim Miller if (mesh != null) { 130a3cb716626b477c98ba912698c765eab20f27286Jim Miller mSyncHandler.obtainMessage(SET_GEOMETRY_N, id, 0, mesh).sendToTarget(); 131a3cb716626b477c98ba912698c765eab20f27286Jim Miller } 132a3cb716626b477c98ba912698c765eab20f27286Jim Miller } 133a3cb716626b477c98ba912698c765eab20f27286Jim Miller } 134a3cb716626b477c98ba912698c765eab20f27286Jim Miller }; 135a3cb716626b477c98ba912698c765eab20f27286Jim Miller 136a3cb716626b477c98ba912698c765eab20f27286Jim Miller class SyncHandler extends Handler { 137a3cb716626b477c98ba912698c765eab20f27286Jim Miller @Override 138a3cb716626b477c98ba912698c765eab20f27286Jim Miller public void handleMessage(Message msg) { 139a3cb716626b477c98ba912698c765eab20f27286Jim Miller int id = msg.arg1; 140a3cb716626b477c98ba912698c765eab20f27286Jim Miller if (id >= mCarouselView.getCardCount()) { 141a3cb716626b477c98ba912698c765eab20f27286Jim Miller Log.e(TAG, "Index out of range for set, card:" + id); 142a3cb716626b477c98ba912698c765eab20f27286Jim Miller return; 143a3cb716626b477c98ba912698c765eab20f27286Jim Miller } 144a3cb716626b477c98ba912698c765eab20f27286Jim Miller 145a3cb716626b477c98ba912698c765eab20f27286Jim Miller switch (msg.what) { 146a3cb716626b477c98ba912698c765eab20f27286Jim Miller case SET_TEXTURE_N: 147a3cb716626b477c98ba912698c765eab20f27286Jim Miller mCarouselView.setTextureForItem(id, (Bitmap) msg.obj); 148a3cb716626b477c98ba912698c765eab20f27286Jim Miller break; 149a3cb716626b477c98ba912698c765eab20f27286Jim Miller 150a3cb716626b477c98ba912698c765eab20f27286Jim Miller case SET_DETAIL_TEXTURE_N: 151a3cb716626b477c98ba912698c765eab20f27286Jim Miller DetailTextureParameters params = getDetailTextureParameters(id); 152b378af500b36226635b6343b1d5009ee9af44fc1Jim Miller float x = params != null ? params.textureOffsetX : 0.0f; 153b378af500b36226635b6343b1d5009ee9af44fc1Jim Miller float y = params != null ? params.textureOffsetY : 0.0f; 154b378af500b36226635b6343b1d5009ee9af44fc1Jim Miller float lx = params != null ? params.lineOffsetX : 0.0f; 155b378af500b36226635b6343b1d5009ee9af44fc1Jim Miller float ly = params != null ? params.lineOffsetY : 0.0f; 156b378af500b36226635b6343b1d5009ee9af44fc1Jim Miller mCarouselView.setDetailTextureForItem(id, x, y, lx, ly, (Bitmap) msg.obj); 157a3cb716626b477c98ba912698c765eab20f27286Jim Miller break; 158a3cb716626b477c98ba912698c765eab20f27286Jim Miller 159a3cb716626b477c98ba912698c765eab20f27286Jim Miller case SET_GEOMETRY_N: 160a3cb716626b477c98ba912698c765eab20f27286Jim Miller mCarouselView.setGeometryForItem(id, (Mesh) msg.obj); 161a3cb716626b477c98ba912698c765eab20f27286Jim Miller break; 162c2baf88a763ae0e3694c8a10c13f203db9aec363Jim Shuma 163c2baf88a763ae0e3694c8a10c13f203db9aec363Jim Shuma case SET_MATRIX_N: 164c2baf88a763ae0e3694c8a10c13f203db9aec363Jim Shuma mCarouselView.setMatrixForItem(id, (float[]) msg.obj); 165c2baf88a763ae0e3694c8a10c13f203db9aec363Jim Shuma break; 166a3cb716626b477c98ba912698c765eab20f27286Jim Miller } 167a3cb716626b477c98ba912698c765eab20f27286Jim Miller } 168a3cb716626b477c98ba912698c765eab20f27286Jim Miller }; 169a3cb716626b477c98ba912698c765eab20f27286Jim Miller 170a3cb716626b477c98ba912698c765eab20f27286Jim Miller /** 171a3cb716626b477c98ba912698c765eab20f27286Jim Miller * Implement this method if you want to load a texture for 172a3cb716626b477c98ba912698c765eab20f27286Jim Miller * the given card. Most subclasses will implement this. Note: this will generally 173a3cb716626b477c98ba912698c765eab20f27286Jim Miller * <b>not</b> be called in the UI thread, so proper locking should be ensured. 174a3cb716626b477c98ba912698c765eab20f27286Jim Miller * 175a3cb716626b477c98ba912698c765eab20f27286Jim Miller * @param id of the texture to load 176a3cb716626b477c98ba912698c765eab20f27286Jim Miller * @return a valid bitmap 177a3cb716626b477c98ba912698c765eab20f27286Jim Miller */ 178a3cb716626b477c98ba912698c765eab20f27286Jim Miller public Bitmap getTexture(int id) { 179a3cb716626b477c98ba912698c765eab20f27286Jim Miller return null; 180a3cb716626b477c98ba912698c765eab20f27286Jim Miller } 181a3cb716626b477c98ba912698c765eab20f27286Jim Miller 182a3cb716626b477c98ba912698c765eab20f27286Jim Miller /** 183a3cb716626b477c98ba912698c765eab20f27286Jim Miller * Implement this method if you want to load a detail texture for 184a3cb716626b477c98ba912698c765eab20f27286Jim Miller * the given card. Most subclasses will implement this. Note: this will generally 185a3cb716626b477c98ba912698c765eab20f27286Jim Miller * <b>not</b> be called in the UI thread, so proper locking should be ensured. 186a3cb716626b477c98ba912698c765eab20f27286Jim Miller * 187a3cb716626b477c98ba912698c765eab20f27286Jim Miller * @param id 188a3cb716626b477c98ba912698c765eab20f27286Jim Miller * @return 189a3cb716626b477c98ba912698c765eab20f27286Jim Miller */ 190a3cb716626b477c98ba912698c765eab20f27286Jim Miller public Bitmap getDetailTexture(int id) { 191a3cb716626b477c98ba912698c765eab20f27286Jim Miller return null; 192a3cb716626b477c98ba912698c765eab20f27286Jim Miller } 193a3cb716626b477c98ba912698c765eab20f27286Jim Miller 194a3cb716626b477c98ba912698c765eab20f27286Jim Miller /** 195a3cb716626b477c98ba912698c765eab20f27286Jim Miller * Implement this method if you want to load geometry for the given card. Most subclasses 196a3cb716626b477c98ba912698c765eab20f27286Jim Miller * will implement this. Note: this will generally <b>not</b> be called in the UI thread, 197a3cb716626b477c98ba912698c765eab20f27286Jim Miller * so proper locking should be ensured. 198a3cb716626b477c98ba912698c765eab20f27286Jim Miller * 199a3cb716626b477c98ba912698c765eab20f27286Jim Miller * @param id 200a3cb716626b477c98ba912698c765eab20f27286Jim Miller * @return 201a3cb716626b477c98ba912698c765eab20f27286Jim Miller */ 202eb71cf6812bdb53bda75ac37a185f78f43ddfcefJim Shuma public Mesh getGeometry(int id) { 203a3cb716626b477c98ba912698c765eab20f27286Jim Miller return null; 204a3cb716626b477c98ba912698c765eab20f27286Jim Miller } 205a3cb716626b477c98ba912698c765eab20f27286Jim Miller 206a3cb716626b477c98ba912698c765eab20f27286Jim Miller /** 207a3cb716626b477c98ba912698c765eab20f27286Jim Miller * Implement this method if you want custom texture parameters for 208a3cb716626b477c98ba912698c765eab20f27286Jim Miller * the given id. Note: this will generally 209a3cb716626b477c98ba912698c765eab20f27286Jim Miller * <b>not</b> be called in the UI thread, so proper locking should be ensured. 210a3cb716626b477c98ba912698c765eab20f27286Jim Miller * 211a3cb716626b477c98ba912698c765eab20f27286Jim Miller * @param id 212a3cb716626b477c98ba912698c765eab20f27286Jim Miller * @return texture parameters 213a3cb716626b477c98ba912698c765eab20f27286Jim Miller */ 214a3cb716626b477c98ba912698c765eab20f27286Jim Miller public TextureParameters getTextureParameters(int id) { 215a3cb716626b477c98ba912698c765eab20f27286Jim Miller return null; 216a3cb716626b477c98ba912698c765eab20f27286Jim Miller } 217a3cb716626b477c98ba912698c765eab20f27286Jim Miller 218a3cb716626b477c98ba912698c765eab20f27286Jim Miller /** 219a3cb716626b477c98ba912698c765eab20f27286Jim Miller * Implement this method if you want custom detail texture parameters for 220a3cb716626b477c98ba912698c765eab20f27286Jim Miller * the given id. Note: this will generally 221a3cb716626b477c98ba912698c765eab20f27286Jim Miller * <b>not</b> be called in the UI thread, so proper locking should be ensured. 222a3cb716626b477c98ba912698c765eab20f27286Jim Miller * 223a3cb716626b477c98ba912698c765eab20f27286Jim Miller * @param id the id of the texture being requested 224a3cb716626b477c98ba912698c765eab20f27286Jim Miller * @return detail texture parameters 225a3cb716626b477c98ba912698c765eab20f27286Jim Miller */ 226a3cb716626b477c98ba912698c765eab20f27286Jim Miller public DetailTextureParameters getDetailTextureParameters(int id) { 227a3cb716626b477c98ba912698c765eab20f27286Jim Miller return null; 228a3cb716626b477c98ba912698c765eab20f27286Jim Miller } 229a3cb716626b477c98ba912698c765eab20f27286Jim Miller 230a3cb716626b477c98ba912698c765eab20f27286Jim Miller public void onRequestTexture(int id) { 231a3cb716626b477c98ba912698c765eab20f27286Jim Miller if (DBG) Log.v(TAG, "onRequestTexture(" + id + ")" ); 232a3cb716626b477c98ba912698c765eab20f27286Jim Miller mAsyncHandler.removeMessages(REQUEST_TEXTURE_N + id); 233a3cb716626b477c98ba912698c765eab20f27286Jim Miller Message message = mAsyncHandler.obtainMessage(REQUEST_TEXTURE_N + id, id, 0); 234a3cb716626b477c98ba912698c765eab20f27286Jim Miller mAsyncHandler.sendMessageDelayed(message, HOLDOFF_DELAY); 235a3cb716626b477c98ba912698c765eab20f27286Jim Miller } 236a3cb716626b477c98ba912698c765eab20f27286Jim Miller 237a3cb716626b477c98ba912698c765eab20f27286Jim Miller public void onInvalidateTexture(final int id) { 238a3cb716626b477c98ba912698c765eab20f27286Jim Miller if (DBG) Log.v(TAG, "onInvalidateTexture(" + id + ")"); 239a3cb716626b477c98ba912698c765eab20f27286Jim Miller mAsyncHandler.removeMessages(REQUEST_TEXTURE_N + id); 240a3cb716626b477c98ba912698c765eab20f27286Jim Miller } 241a3cb716626b477c98ba912698c765eab20f27286Jim Miller 242a3cb716626b477c98ba912698c765eab20f27286Jim Miller public void onRequestGeometry(int id) { 243a3cb716626b477c98ba912698c765eab20f27286Jim Miller if (DBG) Log.v(TAG, "onRequestGeometry(" + id + ")"); 244a3cb716626b477c98ba912698c765eab20f27286Jim Miller mAsyncHandler.removeMessages(REQUEST_GEOMETRY_N + id); 245a3cb716626b477c98ba912698c765eab20f27286Jim Miller mAsyncHandler.sendMessage(mAsyncHandler.obtainMessage(REQUEST_GEOMETRY_N + id, id, 0)); 246a3cb716626b477c98ba912698c765eab20f27286Jim Miller } 247a3cb716626b477c98ba912698c765eab20f27286Jim Miller 248a3cb716626b477c98ba912698c765eab20f27286Jim Miller public void onInvalidateGeometry(int id) { 249a3cb716626b477c98ba912698c765eab20f27286Jim Miller if (DBG) Log.v(TAG, "onInvalidateGeometry(" + id + ")"); 250a3cb716626b477c98ba912698c765eab20f27286Jim Miller mAsyncHandler.removeMessages(REQUEST_GEOMETRY_N + id); 251a3cb716626b477c98ba912698c765eab20f27286Jim Miller } 252a3cb716626b477c98ba912698c765eab20f27286Jim Miller 253a3cb716626b477c98ba912698c765eab20f27286Jim Miller public void onRequestDetailTexture(int id) { 254a3cb716626b477c98ba912698c765eab20f27286Jim Miller if (DBG) Log.v(TAG, "onRequestDetailTexture(" + id + ")" ); 255a3cb716626b477c98ba912698c765eab20f27286Jim Miller mAsyncHandler.removeMessages(REQUEST_DETAIL_TEXTURE_N + id); 256a3cb716626b477c98ba912698c765eab20f27286Jim Miller Message message = mAsyncHandler.obtainMessage(REQUEST_DETAIL_TEXTURE_N + id, id, 0); 257a3cb716626b477c98ba912698c765eab20f27286Jim Miller mAsyncHandler.sendMessageDelayed(message, HOLDOFF_DELAY); 258a3cb716626b477c98ba912698c765eab20f27286Jim Miller } 259a3cb716626b477c98ba912698c765eab20f27286Jim Miller 260a3cb716626b477c98ba912698c765eab20f27286Jim Miller public void onInvalidateDetailTexture(int id) { 261a3cb716626b477c98ba912698c765eab20f27286Jim Miller if (DBG) Log.v(TAG, "onInvalidateDetailTexture(" + id + ")"); 262a3cb716626b477c98ba912698c765eab20f27286Jim Miller mAsyncHandler.removeMessages(REQUEST_DETAIL_TEXTURE_N + id); 263a3cb716626b477c98ba912698c765eab20f27286Jim Miller } 264a3cb716626b477c98ba912698c765eab20f27286Jim Miller 265a3cb716626b477c98ba912698c765eab20f27286Jim Miller public void onCardSelected(int n) { 266a3cb716626b477c98ba912698c765eab20f27286Jim Miller if (DBG) Log.v(TAG, "onCardSelected(" + n + ")"); 267a3cb716626b477c98ba912698c765eab20f27286Jim Miller } 268a3cb716626b477c98ba912698c765eab20f27286Jim Miller 2698fd40311898a9ec759a76f021642f43e617e38c4Jim Shuma public void onDetailSelected(int n, int x, int y) { 2708fd40311898a9ec759a76f021642f43e617e38c4Jim Shuma if (DBG) Log.v(TAG, "onDetailSelected(" + n + ", " + x + ", " + y + ")"); 2718fd40311898a9ec759a76f021642f43e617e38c4Jim Shuma } 2728fd40311898a9ec759a76f021642f43e617e38c4Jim Shuma 273e8cab95c5f73ddf6843d82793decc3adb4692860Jim Shuma public void onCardLongPress(int n, int touchPosition[], Rect detailCoordinates) { 274e8cab95c5f73ddf6843d82793decc3adb4692860Jim Shuma if (DBG) Log.v(TAG, "onCardLongPress(" + n + ", (" + touchPosition + "), (" + 275e8cab95c5f73ddf6843d82793decc3adb4692860Jim Shuma detailCoordinates +") )"); 276594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma } 277594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma 278a3cb716626b477c98ba912698c765eab20f27286Jim Miller public void onAnimationStarted() { 2797cc5787b49708f63aeb818bdd06efed3d4229925Jim Shuma 280a3cb716626b477c98ba912698c765eab20f27286Jim Miller } 281a3cb716626b477c98ba912698c765eab20f27286Jim Miller 2827cc5787b49708f63aeb818bdd06efed3d4229925Jim Shuma public void onAnimationFinished(float carouselRotationAngle) { 2837cc5787b49708f63aeb818bdd06efed3d4229925Jim Shuma 284a3cb716626b477c98ba912698c765eab20f27286Jim Miller } 285a3cb716626b477c98ba912698c765eab20f27286Jim Miller 286a3cb716626b477c98ba912698c765eab20f27286Jim Miller public void onResume() { 28727b81f375cfa65f4f689c64bd2c48e3a56c1e11bJason Sams mCarouselView.resume(); 288a3cb716626b477c98ba912698c765eab20f27286Jim Miller } 289a3cb716626b477c98ba912698c765eab20f27286Jim Miller 290a3cb716626b477c98ba912698c765eab20f27286Jim Miller public void onPause() { 29127b81f375cfa65f4f689c64bd2c48e3a56c1e11bJason Sams mCarouselView.pause(); 292a3cb716626b477c98ba912698c765eab20f27286Jim Miller } 293baa6653bc1165a787c44ed8781c8d258a8e4e798Jack Palevich 2949fa7a1887bd54f8833a772f8418b8f94c811ccf6Jack Palevich public void onDestroy() { 2959fa7a1887bd54f8833a772f8418b8f94c811ccf6Jack Palevich mHandlerThread.quit(); 2969fa7a1887bd54f8833a772f8418b8f94c811ccf6Jack Palevich } 2979fa7a1887bd54f8833a772f8418b8f94c811ccf6Jack Palevich 298baa6653bc1165a787c44ed8781c8d258a8e4e798Jack Palevich protected Handler getAsyncHandler() { 299baa6653bc1165a787c44ed8781c8d258a8e4e798Jack Palevich return mAsyncHandler; 300baa6653bc1165a787c44ed8781c8d258a8e4e798Jack Palevich } 301baa6653bc1165a787c44ed8781c8d258a8e4e798Jack Palevich 302baa6653bc1165a787c44ed8781c8d258a8e4e798Jack Palevich protected CarouselView getCarouselView() { 303baa6653bc1165a787c44ed8781c8d258a8e4e798Jack Palevich return mCarouselView; 304baa6653bc1165a787c44ed8781c8d258a8e4e798Jack Palevich } 305a3cb716626b477c98ba912698c765eab20f27286Jim Miller} 306