blob: bf07ab2b1219b13ba1631e3b717291873501d0d5 [file] [log] [blame]
Owen Lina2fba682011-08-17 22:07:43 +08001/*
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
17package com.android.gallery3d.ui;
18
19import com.android.gallery3d.app.GalleryActivity;
20import com.android.gallery3d.data.MediaItem;
Owen Lina2fba682011-08-17 22:07:43 +080021
Owen Lin83a036c2012-03-22 14:14:40 +080022public class AlbumView implements SlotView.SlotRenderer {
Owen Lina2fba682011-08-17 22:07:43 +080023 @SuppressWarnings("unused")
24 private static final String TAG = "AlbumView";
25 private static final int CACHE_SIZE = 64;
26
Owen Lina2fba682011-08-17 22:07:43 +080027 private AlbumSlidingWindow mDataWindow;
28 private final GalleryActivity mActivity;
29 private SelectionDrawer mSelectionDrawer;
Chih-Chung Chang07069de2011-09-14 20:50:28 +080030 private int mCacheThumbSize;
Owen Lina2fba682011-08-17 22:07:43 +080031
Owen Lin83a036c2012-03-22 14:14:40 +080032 private final SlotView mSlotView;
Owen Lina2fba682011-08-17 22:07:43 +080033
34 public static interface Model {
35 public int size();
36 public MediaItem get(int index);
37 public void setActiveWindow(int start, int end);
38 public void setModelListener(ModelListener listener);
39 }
40
41 public static interface ModelListener {
42 public void onWindowContentChanged(int index);
43 public void onSizeChanged(int size);
44 }
45
Owen Lin83a036c2012-03-22 14:14:40 +080046 public AlbumView(GalleryActivity activity, SlotView slotView,
Chih-Chung Chang07069de2011-09-14 20:50:28 +080047 int cacheThumbSize) {
Chih-Chung Chang07069de2011-09-14 20:50:28 +080048 mCacheThumbSize = cacheThumbSize;
Owen Lin83a036c2012-03-22 14:14:40 +080049 mSlotView = slotView;
Owen Lina2fba682011-08-17 22:07:43 +080050 mActivity = activity;
51 }
52
53 public void setSelectionDrawer(SelectionDrawer drawer) {
54 mSelectionDrawer = drawer;
55 if (mDataWindow != null) mDataWindow.setSelectionDrawer(drawer);
56 }
57
58 public void setModel(Model model) {
59 if (mDataWindow != null) {
60 mDataWindow.setListener(null);
Owen Lin83a036c2012-03-22 14:14:40 +080061 mSlotView.setSlotCount(0);
Owen Lina2fba682011-08-17 22:07:43 +080062 mDataWindow = null;
63 }
64 if (model != null) {
65 mDataWindow = new AlbumSlidingWindow(
66 mActivity, model, CACHE_SIZE,
Chih-Chung Chang07069de2011-09-14 20:50:28 +080067 mCacheThumbSize);
Owen Lina2fba682011-08-17 22:07:43 +080068 mDataWindow.setSelectionDrawer(mSelectionDrawer);
69 mDataWindow.setListener(new MyDataModelListener());
Owen Lin83a036c2012-03-22 14:14:40 +080070 mSlotView.setSlotCount(model.size());
Owen Lina2fba682011-08-17 22:07:43 +080071 }
72 }
73
74 public void setFocusIndex(int slotIndex) {
75 if (mDataWindow != null) {
76 mDataWindow.setFocusIndex(slotIndex);
77 }
78 }
79
Owen Lina2fba682011-08-17 22:07:43 +080080 @Override
Owen Lin83a036c2012-03-22 14:14:40 +080081 public int renderSlot(GLCanvas canvas, int index, int pass, int width, int height) {
82 DisplayItem item = mDataWindow.get(index);
83 if (item != null) {
84 canvas.translate(width / 2, height / 2);
85 item.setBox(width, height);
86 int r = item.render(canvas, pass);
87 canvas.translate(-width / 2, -height / 2);
88 return r;
89 }
90 return 0;
Owen Lina2fba682011-08-17 22:07:43 +080091 }
92
93 private class MyDataModelListener implements AlbumSlidingWindow.Listener {
Owen Lin83a036c2012-03-22 14:14:40 +080094 @Override
95 public void onContentChanged() {
96 mSlotView.invalidate();
Owen Lina2fba682011-08-17 22:07:43 +080097 }
98
Owen Lin83a036c2012-03-22 14:14:40 +080099 @Override
Owen Lina2fba682011-08-17 22:07:43 +0800100 public void onSizeChanged(int size) {
Owen Lin83a036c2012-03-22 14:14:40 +0800101 mSlotView.setSlotCount(size);
Owen Lina2fba682011-08-17 22:07:43 +0800102 }
103 }
104
105 public void resume() {
Owen Lina2fba682011-08-17 22:07:43 +0800106 mDataWindow.resume();
Owen Lina2fba682011-08-17 22:07:43 +0800107 }
108
109 public void pause() {
Owen Lina2fba682011-08-17 22:07:43 +0800110 mDataWindow.pause();
111 }
Owen Lin83a036c2012-03-22 14:14:40 +0800112
113 @Override
114 public void prepareDrawing() {
115 mSelectionDrawer.prepareDrawing();
116 }
117
118 @Override
119 public void onVisibleRangeChanged(int visibleStart, int visibleEnd) {
120 if (mDataWindow != null) {
121 mDataWindow.setActiveWindow(visibleStart, visibleEnd);
122 }
123 }
Owen Lina2fba682011-08-17 22:07:43 +0800124}