1 /*
2  * Copyright (C) 2010 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.gallery3d.ui;
18 
19 import android.content.Context;
20 
21 import com.android.gallery3d.R;
22 import com.android.gallery3d.app.AbstractGalleryActivity;
23 import com.android.gallery3d.data.DataSourceType;
24 import com.android.gallery3d.data.MediaSet;
25 import com.android.gallery3d.data.Path;
26 import com.android.gallery3d.glrenderer.GLCanvas;
27 import com.android.gallery3d.glrenderer.ResourceTexture;
28 import com.android.gallery3d.glrenderer.StringTexture;
29 import com.android.gallery3d.ui.AlbumSetSlidingWindow.AlbumSetEntry;
30 
31 public class ManageCacheDrawer extends AlbumSetSlotRenderer {
32     private final ResourceTexture mCheckedItem;
33     private final ResourceTexture mUnCheckedItem;
34     private final SelectionManager mSelectionManager;
35 
36     private final ResourceTexture mLocalAlbumIcon;
37     private final StringTexture mCachingText;
38 
39     private final int mCachePinSize;
40     private final int mCachePinMargin;
41 
ManageCacheDrawer(AbstractGalleryActivity activity, SelectionManager selectionManager, SlotView slotView, LabelSpec labelSpec, int cachePinSize, int cachePinMargin)42     public ManageCacheDrawer(AbstractGalleryActivity activity, SelectionManager selectionManager,
43             SlotView slotView, LabelSpec labelSpec, int cachePinSize, int cachePinMargin) {
44         super(activity, selectionManager, slotView, labelSpec,
45                 activity.getResources().getColor(R.color.cache_placeholder));
46         Context context = activity;
47         mCheckedItem = new ResourceTexture(
48                 context, R.drawable.btn_make_offline_normal_on_holo_dark);
49         mUnCheckedItem = new ResourceTexture(
50                 context, R.drawable.btn_make_offline_normal_off_holo_dark);
51         mLocalAlbumIcon = new ResourceTexture(
52                 context, R.drawable.btn_make_offline_disabled_on_holo_dark);
53         String cachingLabel = context.getString(R.string.caching_label);
54         mCachingText = StringTexture.newInstance(cachingLabel, 12, 0xffffffff);
55         mSelectionManager = selectionManager;
56         mCachePinSize = cachePinSize;
57         mCachePinMargin = cachePinMargin;
58     }
59 
isLocal(int dataSourceType)60     private static boolean isLocal(int dataSourceType) {
61         return dataSourceType != DataSourceType.TYPE_PICASA;
62     }
63 
64     @Override
renderSlot(GLCanvas canvas, int index, int pass, int width, int height)65     public int renderSlot(GLCanvas canvas, int index, int pass, int width, int height) {
66         AlbumSetEntry entry = mDataWindow.get(index);
67 
68         boolean wantCache = entry.cacheFlag == MediaSet.CACHE_FLAG_FULL;
69         boolean isCaching = wantCache && (
70                 entry.cacheStatus != MediaSet.CACHE_STATUS_CACHED_FULL);
71         boolean selected = mSelectionManager.isItemSelected(entry.setPath);
72         boolean chooseToCache = wantCache ^ selected;
73         boolean available = isLocal(entry.sourceType) || chooseToCache;
74 
75         int renderRequestFlags = 0;
76 
77         if (!available) {
78             canvas.save(GLCanvas.SAVE_FLAG_ALPHA);
79             canvas.multiplyAlpha(0.6f);
80         }
81         renderRequestFlags |= renderContent(canvas, entry, width, height);
82         if (!available) canvas.restore();
83 
84         renderRequestFlags |= renderLabel(canvas, entry, width, height);
85 
86         drawCachingPin(canvas, entry.setPath,
87                 entry.sourceType, isCaching, chooseToCache, width, height);
88 
89         renderRequestFlags |= renderOverlay(canvas, index, entry, width, height);
90         return renderRequestFlags;
91     }
92 
drawCachingPin(GLCanvas canvas, Path path, int dataSourceType, boolean isCaching, boolean chooseToCache, int width, int height)93     private void drawCachingPin(GLCanvas canvas, Path path, int dataSourceType,
94             boolean isCaching, boolean chooseToCache, int width, int height) {
95         ResourceTexture icon;
96         if (isLocal(dataSourceType)) {
97             icon = mLocalAlbumIcon;
98         } else if (chooseToCache) {
99             icon = mCheckedItem;
100         } else {
101             icon = mUnCheckedItem;
102         }
103 
104         // show the icon in right bottom
105         int s = mCachePinSize;
106         int m = mCachePinMargin;
107         icon.draw(canvas, width - m - s, height - s, s, s);
108 
109         if (isCaching) {
110             int w = mCachingText.getWidth();
111             int h = mCachingText.getHeight();
112             // Show the caching text in bottom center
113             mCachingText.draw(canvas, (width - w) / 2, height - h);
114         }
115     }
116 }
117