1f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin/* 2f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * Copyright (C) 2010 The Android Open Source Project 3f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * 4f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * Licensed under the Apache License, Version 2.0 (the "License"); 5f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * you may not use this file except in compliance with the License. 6f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * You may obtain a copy of the License at 7f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * 8f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * http://www.apache.org/licenses/LICENSE-2.0 9f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * 10f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * Unless required by applicable law or agreed to in writing, software 11f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * distributed under the License is distributed on an "AS IS" BASIS, 12f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * See the License for the specific language governing permissions and 14f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * limitations under the License. 15f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin */ 16f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 17f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linpackage com.android.gallery3d.ui; 18f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 19f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport com.android.gallery3d.R; 20f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport com.android.gallery3d.common.Utils; 21f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport com.android.gallery3d.data.Path; 22f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 23f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.content.Context; 24f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 25f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linpublic class ManageCacheDrawer extends IconDrawer { 26f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private final ResourceTexture mCheckedItem; 27f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private final ResourceTexture mUnCheckedItem; 28f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private final SelectionManager mSelectionManager; 29f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 30f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private final ResourceTexture mLocalAlbumIcon; 31bc2154199aee16762e3758ad0cfed685323d9a9fChih-Chung Chang private final StringTexture mCachingText; 32f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 33fafa06467fd79a1cf525b861ae0372db0b85bf09Chih-Chung Chang private final int mCachePinSize; 34fafa06467fd79a1cf525b861ae0372db0b85bf09Chih-Chung Chang private final int mCachePinMargin; 35fafa06467fd79a1cf525b861ae0372db0b85bf09Chih-Chung Chang 36fafa06467fd79a1cf525b861ae0372db0b85bf09Chih-Chung Chang public ManageCacheDrawer(Context context, SelectionManager selectionManager, 37fafa06467fd79a1cf525b861ae0372db0b85bf09Chih-Chung Chang int cachePinSize, int cachePinMargin) { 38f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin super(context); 39f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mCheckedItem = new ResourceTexture(context, R.drawable.btn_make_offline_normal_on_holo_dark); 40f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mUnCheckedItem = new ResourceTexture(context, R.drawable.btn_make_offline_normal_off_holo_dark); 41f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mLocalAlbumIcon = new ResourceTexture(context, R.drawable.btn_make_offline_disabled_on_holo_dark); 42f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin String cachingLabel = context.getString(R.string.caching_label); 43bc2154199aee16762e3758ad0cfed685323d9a9fChih-Chung Chang mCachingText = StringTexture.newInstance(cachingLabel, 12, 0xffffffff); 44f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mSelectionManager = selectionManager; 45fafa06467fd79a1cf525b861ae0372db0b85bf09Chih-Chung Chang mCachePinSize = cachePinSize; 46fafa06467fd79a1cf525b861ae0372db0b85bf09Chih-Chung Chang mCachePinMargin = cachePinMargin; 47f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 48f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 49f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin @Override 50f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public void prepareDrawing() { 51f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 52f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 53f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private static boolean isLocal(int dataSourceType) { 54f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin return dataSourceType != DATASOURCE_TYPE_PICASA; 55f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 56f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 57f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin @Override 58bc2154199aee16762e3758ad0cfed685323d9a9fChih-Chung Chang public void draw(GLCanvas canvas, Texture content, int width, 59da071d27a1435cce080b5c609d0d833555e5a175Chih-Chung Chang int height, int rotation, Path path, 60bc2154199aee16762e3758ad0cfed685323d9a9fChih-Chung Chang int dataSourceType, int mediaType, boolean isPanorama, 61bc2154199aee16762e3758ad0cfed685323d9a9fChih-Chung Chang int labelBackgroundHeight, boolean wantCache, boolean isCaching) { 62f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 6347c476d3102e15ec4c8307d424adf6c54982d5f3Chih-Chung Chang boolean selected = mSelectionManager.isItemSelected(path); 6447c476d3102e15ec4c8307d424adf6c54982d5f3Chih-Chung Chang boolean chooseToCache = wantCache ^ selected; 6547c476d3102e15ec4c8307d424adf6c54982d5f3Chih-Chung Chang boolean available = isLocal(dataSourceType) || chooseToCache; 6647c476d3102e15ec4c8307d424adf6c54982d5f3Chih-Chung Chang 67f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin int x = -width / 2; 68f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin int y = -height / 2; 69f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 7047c476d3102e15ec4c8307d424adf6c54982d5f3Chih-Chung Chang if (!available) { 7147c476d3102e15ec4c8307d424adf6c54982d5f3Chih-Chung Chang canvas.save(GLCanvas.SAVE_FLAG_ALPHA); 7247c476d3102e15ec4c8307d424adf6c54982d5f3Chih-Chung Chang canvas.multiplyAlpha(0.6f); 7347c476d3102e15ec4c8307d424adf6c54982d5f3Chih-Chung Chang } 7447c476d3102e15ec4c8307d424adf6c54982d5f3Chih-Chung Chang 75da071d27a1435cce080b5c609d0d833555e5a175Chih-Chung Chang drawWithRotation(canvas, content, x, y, width, height, rotation); 76f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 7747c476d3102e15ec4c8307d424adf6c54982d5f3Chih-Chung Chang if (!available) { 7847c476d3102e15ec4c8307d424adf6c54982d5f3Chih-Chung Chang canvas.restore(); 7947c476d3102e15ec4c8307d424adf6c54982d5f3Chih-Chung Chang } 8047c476d3102e15ec4c8307d424adf6c54982d5f3Chih-Chung Chang 81f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (((rotation / 90) & 0x01) == 1) { 82f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin int temp = width; 83f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin width = height; 84f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin height = temp; 85f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin x = -width / 2; 86f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin y = -height / 2; 87f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 88f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 89da071d27a1435cce080b5c609d0d833555e5a175Chih-Chung Chang drawMediaTypeOverlay(canvas, mediaType, isPanorama, x, y, width, height); 90da071d27a1435cce080b5c609d0d833555e5a175Chih-Chung Chang drawLabelBackground(canvas, width, height, labelBackgroundHeight); 91da071d27a1435cce080b5c609d0d833555e5a175Chih-Chung Chang drawIcon(canvas, width, height, dataSourceType); 9247c476d3102e15ec4c8307d424adf6c54982d5f3Chih-Chung Chang drawCachingPin(canvas, path, dataSourceType, isCaching, chooseToCache, 93da071d27a1435cce080b5c609d0d833555e5a175Chih-Chung Chang width, height); 94bc2154199aee16762e3758ad0cfed685323d9a9fChih-Chung Chang 95bc2154199aee16762e3758ad0cfed685323d9a9fChih-Chung Chang if (mSelectionManager.isPressedPath(path)) { 96bc2154199aee16762e3758ad0cfed685323d9a9fChih-Chung Chang drawPressedFrame(canvas, x, y, width, height); 97bc2154199aee16762e3758ad0cfed685323d9a9fChih-Chung Chang } 98bc2154199aee16762e3758ad0cfed685323d9a9fChih-Chung Chang } 99bc2154199aee16762e3758ad0cfed685323d9a9fChih-Chung Chang 100fafa06467fd79a1cf525b861ae0372db0b85bf09Chih-Chung Chang private void drawCachingPin(GLCanvas canvas, Path path, int dataSourceType, 10147c476d3102e15ec4c8307d424adf6c54982d5f3Chih-Chung Chang boolean isCaching, boolean chooseToCache, int width, int height) { 102bc2154199aee16762e3758ad0cfed685323d9a9fChih-Chung Chang 103bc2154199aee16762e3758ad0cfed685323d9a9fChih-Chung Chang ResourceTexture icon = null; 104bc2154199aee16762e3758ad0cfed685323d9a9fChih-Chung Chang if (isLocal(dataSourceType)) { 105bc2154199aee16762e3758ad0cfed685323d9a9fChih-Chung Chang icon = mLocalAlbumIcon; 106bc2154199aee16762e3758ad0cfed685323d9a9fChih-Chung Chang } else if (chooseToCache) { 107bc2154199aee16762e3758ad0cfed685323d9a9fChih-Chung Chang icon = mCheckedItem; 108bc2154199aee16762e3758ad0cfed685323d9a9fChih-Chung Chang } else { 109bc2154199aee16762e3758ad0cfed685323d9a9fChih-Chung Chang icon = mUnCheckedItem; 110bc2154199aee16762e3758ad0cfed685323d9a9fChih-Chung Chang } 111f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 112fafa06467fd79a1cf525b861ae0372db0b85bf09Chih-Chung Chang int w = mCachePinSize; 113fafa06467fd79a1cf525b861ae0372db0b85bf09Chih-Chung Chang int h = mCachePinSize; 114bc2154199aee16762e3758ad0cfed685323d9a9fChih-Chung Chang int right = (width + 1) / 2; 115bc2154199aee16762e3758ad0cfed685323d9a9fChih-Chung Chang int bottom = (height + 1) / 2; 116fafa06467fd79a1cf525b861ae0372db0b85bf09Chih-Chung Chang int x = right - w - mCachePinMargin; 117fafa06467fd79a1cf525b861ae0372db0b85bf09Chih-Chung Chang int y = bottom - h - mCachePinMargin; 118bc2154199aee16762e3758ad0cfed685323d9a9fChih-Chung Chang 119bc2154199aee16762e3758ad0cfed685323d9a9fChih-Chung Chang icon.draw(canvas, x, y, w, h); 120bc2154199aee16762e3758ad0cfed685323d9a9fChih-Chung Chang 121bc2154199aee16762e3758ad0cfed685323d9a9fChih-Chung Chang if (isCaching) { 122bc2154199aee16762e3758ad0cfed685323d9a9fChih-Chung Chang int textWidth = mCachingText.getWidth(); 123bc2154199aee16762e3758ad0cfed685323d9a9fChih-Chung Chang int textHeight = mCachingText.getHeight(); 124fafa06467fd79a1cf525b861ae0372db0b85bf09Chih-Chung Chang // Align the center of the text to the center of the pin icon 125fafa06467fd79a1cf525b861ae0372db0b85bf09Chih-Chung Chang x = right - mCachePinMargin - (textWidth + mCachePinSize) / 2; 126bc2154199aee16762e3758ad0cfed685323d9a9fChih-Chung Chang y = bottom - textHeight; 127bc2154199aee16762e3758ad0cfed685323d9a9fChih-Chung Chang mCachingText.draw(canvas, x, y); 128f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 129f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 130f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 131f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin @Override 132f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public void drawFocus(GLCanvas canvas, int width, int height) { 133f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 134f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin} 135