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 1943ba9f6644e4183b8ee27f96de3dda703d136c52Bobby Georgescuimport com.android.gallery3d.R; 20b21b8e58a604f6c701245d84b141b5b87663192bOwen Linimport com.android.gallery3d.app.AbstractGalleryActivity; 21c3d8ac3b9504346dafc49e006b5f732dd1db21e8Owen Linimport com.android.gallery3d.app.AlbumSetDataLoader; 2231cac30e46a293f6d0901e22c6ab0d083cae7021Owen Linimport com.android.gallery3d.data.MediaObject; 2331cac30e46a293f6d0901e22c6ab0d083cae7021Owen Linimport com.android.gallery3d.data.Path; 24a4eae1abb4f2547dfbda84301ee764ce35464881John Reckimport com.android.gallery3d.glrenderer.ColorTexture; 25a4eae1abb4f2547dfbda84301ee764ce35464881John Reckimport com.android.gallery3d.glrenderer.FadeInTexture; 26a4eae1abb4f2547dfbda84301ee764ce35464881John Reckimport com.android.gallery3d.glrenderer.GLCanvas; 27a4eae1abb4f2547dfbda84301ee764ce35464881John Reckimport com.android.gallery3d.glrenderer.ResourceTexture; 28a4eae1abb4f2547dfbda84301ee764ce35464881John Reckimport com.android.gallery3d.glrenderer.Texture; 29a4eae1abb4f2547dfbda84301ee764ce35464881John Reckimport com.android.gallery3d.glrenderer.TiledTexture; 30a4eae1abb4f2547dfbda84301ee764ce35464881John Reckimport com.android.gallery3d.glrenderer.UploadedTexture; 311a4bd273afe5dd11592f7625c2f19853b6f174e9Owen Linimport com.android.gallery3d.ui.AlbumSetSlidingWindow.AlbumSetEntry; 32f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 33c3d8ac3b9504346dafc49e006b5f732dd1db21e8Owen Linpublic class AlbumSetSlotRenderer extends AbstractSlotRenderer { 34f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin @SuppressWarnings("unused") 35f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private static final String TAG = "AlbumSetView"; 36cd36bfc52cc4e7f4b667ba3c5e8eb950647ae9d1Owen Lin private static final int CACHE_SIZE = 96; 37915c2c5b2c367df71599370613af0924bd7c4887Bobby Georgescu private final int mPlaceholderColor; 38f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 391a4bd273afe5dd11592f7625c2f19853b6f174e9Owen Lin private final ColorTexture mWaitLoadingTexture; 4043ba9f6644e4183b8ee27f96de3dda703d136c52Bobby Georgescu private final ResourceTexture mCameraOverlay; 41b21b8e58a604f6c701245d84b141b5b87663192bOwen Lin private final AbstractGalleryActivity mActivity; 4231cac30e46a293f6d0901e22c6ab0d083cae7021Owen Lin private final SelectionManager mSelectionManager; 4331cac30e46a293f6d0901e22c6ab0d083cae7021Owen Lin protected final LabelSpec mLabelSpec; 44f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 4531cac30e46a293f6d0901e22c6ab0d083cae7021Owen Lin protected AlbumSetSlidingWindow mDataWindow; 467260f6f74d465520e4497b23fe56f98abb0c15a2Owen Lin private SlotView mSlotView; 47f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 4831cac30e46a293f6d0901e22c6ab0d083cae7021Owen Lin private int mPressedIndex = -1; 4990fe70f11b0961e1e5ae353cdf563236a55f502dYuli Huang private boolean mAnimatePressedUp; 5031cac30e46a293f6d0901e22c6ab0d083cae7021Owen Lin private Path mHighlightItemPath = null; 5131cac30e46a293f6d0901e22c6ab0d083cae7021Owen Lin private boolean mInSelectionMode; 5231cac30e46a293f6d0901e22c6ab0d083cae7021Owen Lin 539201679ed1c485767f2e334aa618bd733024af03Chih-Chung Chang public static class LabelSpec { 54bc2154199aee16762e3758ad0cfed685323d9a9fChih-Chung Chang public int labelBackgroundHeight; 559201679ed1c485767f2e334aa618bd733024af03Chih-Chung Chang public int titleOffset; 56bc2154199aee16762e3758ad0cfed685323d9a9fChih-Chung Chang public int countOffset; 579201679ed1c485767f2e334aa618bd733024af03Chih-Chung Chang public int titleFontSize; 58bc2154199aee16762e3758ad0cfed685323d9a9fChih-Chung Chang public int countFontSize; 599201679ed1c485767f2e334aa618bd733024af03Chih-Chung Chang public int leftMargin; 609201679ed1c485767f2e334aa618bd733024af03Chih-Chung Chang public int iconSize; 61e24cc7208a6d3760a87dfd4b80a7a6683fe146ebBobby Georgescu public int titleRightMargin; 62915c2c5b2c367df71599370613af0924bd7c4887Bobby Georgescu public int backgroundColor; 63915c2c5b2c367df71599370613af0924bd7c4887Bobby Georgescu public int titleColor; 64915c2c5b2c367df71599370613af0924bd7c4887Bobby Georgescu public int countColor; 65915c2c5b2c367df71599370613af0924bd7c4887Bobby Georgescu public int borderSize; 669201679ed1c485767f2e334aa618bd733024af03Chih-Chung Chang } 679201679ed1c485767f2e334aa618bd733024af03Chih-Chung Chang 68b21b8e58a604f6c701245d84b141b5b87663192bOwen Lin public AlbumSetSlotRenderer(AbstractGalleryActivity activity, 69b21b8e58a604f6c701245d84b141b5b87663192bOwen Lin SelectionManager selectionManager, 70915c2c5b2c367df71599370613af0924bd7c4887Bobby Georgescu SlotView slotView, LabelSpec labelSpec, int placeholderColor) { 71b21b8e58a604f6c701245d84b141b5b87663192bOwen Lin super (activity); 72f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mActivity = activity; 7331cac30e46a293f6d0901e22c6ab0d083cae7021Owen Lin mSelectionManager = selectionManager; 747260f6f74d465520e4497b23fe56f98abb0c15a2Owen Lin mSlotView = slotView; 7531cac30e46a293f6d0901e22c6ab0d083cae7021Owen Lin mLabelSpec = labelSpec; 76915c2c5b2c367df71599370613af0924bd7c4887Bobby Georgescu mPlaceholderColor = placeholderColor; 771a4bd273afe5dd11592f7625c2f19853b6f174e9Owen Lin 78915c2c5b2c367df71599370613af0924bd7c4887Bobby Georgescu mWaitLoadingTexture = new ColorTexture(mPlaceholderColor); 791a4bd273afe5dd11592f7625c2f19853b6f174e9Owen Lin mWaitLoadingTexture.setSize(1, 1); 8043ba9f6644e4183b8ee27f96de3dda703d136c52Bobby Georgescu mCameraOverlay = new ResourceTexture(activity, 811f7c5d1e683b369225ec812ed0c45c7fa3d42b96Bobby Georgescu R.drawable.ic_cameraalbum_overlay); 8231cac30e46a293f6d0901e22c6ab0d083cae7021Owen Lin } 831a4bd273afe5dd11592f7625c2f19853b6f174e9Owen Lin 8431cac30e46a293f6d0901e22c6ab0d083cae7021Owen Lin public void setPressedIndex(int index) { 8531cac30e46a293f6d0901e22c6ab0d083cae7021Owen Lin if (mPressedIndex == index) return; 8631cac30e46a293f6d0901e22c6ab0d083cae7021Owen Lin mPressedIndex = index; 8731cac30e46a293f6d0901e22c6ab0d083cae7021Owen Lin mSlotView.invalidate(); 88f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 89f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 9090fe70f11b0961e1e5ae353cdf563236a55f502dYuli Huang public void setPressedUp() { 9190fe70f11b0961e1e5ae353cdf563236a55f502dYuli Huang if (mPressedIndex == -1) return; 9290fe70f11b0961e1e5ae353cdf563236a55f502dYuli Huang mAnimatePressedUp = true; 9390fe70f11b0961e1e5ae353cdf563236a55f502dYuli Huang mSlotView.invalidate(); 9490fe70f11b0961e1e5ae353cdf563236a55f502dYuli Huang } 9590fe70f11b0961e1e5ae353cdf563236a55f502dYuli Huang 9631cac30e46a293f6d0901e22c6ab0d083cae7021Owen Lin public void setHighlightItemPath(Path path) { 9731cac30e46a293f6d0901e22c6ab0d083cae7021Owen Lin if (mHighlightItemPath == path) return; 9831cac30e46a293f6d0901e22c6ab0d083cae7021Owen Lin mHighlightItemPath = path; 991a4bd273afe5dd11592f7625c2f19853b6f174e9Owen Lin mSlotView.invalidate(); 100f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 101f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 102c3d8ac3b9504346dafc49e006b5f732dd1db21e8Owen Lin public void setModel(AlbumSetDataLoader model) { 103f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (mDataWindow != null) { 104f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mDataWindow.setListener(null); 105f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mDataWindow = null; 1067260f6f74d465520e4497b23fe56f98abb0c15a2Owen Lin mSlotView.setSlotCount(0); 107f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 108f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (model != null) { 10931cac30e46a293f6d0901e22c6ab0d083cae7021Owen Lin mDataWindow = new AlbumSetSlidingWindow( 11031cac30e46a293f6d0901e22c6ab0d083cae7021Owen Lin mActivity, model, mLabelSpec, CACHE_SIZE); 111f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mDataWindow.setListener(new MyCacheListener()); 1127260f6f74d465520e4497b23fe56f98abb0c15a2Owen Lin mSlotView.setSlotCount(mDataWindow.size()); 113f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 114f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 115f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 116adee31f028d839e7baa8f9e052dc4e4d60b137daOwen Lin private static Texture checkLabelTexture(Texture texture) { 11737c605949219b8bf54c165c34d6405f5f2989f50Owen Lin return ((texture instanceof UploadedTexture) 11837c605949219b8bf54c165c34d6405f5f2989f50Owen Lin && ((UploadedTexture) texture).isUploading()) 119d8fb81f601830385a2343d08ad5dd171e4c7bfe0Owen Lin ? null 120d8fb81f601830385a2343d08ad5dd171e4c7bfe0Owen Lin : texture; 121d8fb81f601830385a2343d08ad5dd171e4c7bfe0Owen Lin } 122d8fb81f601830385a2343d08ad5dd171e4c7bfe0Owen Lin 123adee31f028d839e7baa8f9e052dc4e4d60b137daOwen Lin private static Texture checkContentTexture(Texture texture) { 124adee31f028d839e7baa8f9e052dc4e4d60b137daOwen Lin return ((texture instanceof TiledTexture) 125adee31f028d839e7baa8f9e052dc4e4d60b137daOwen Lin && !((TiledTexture) texture).isReady()) 126adee31f028d839e7baa8f9e052dc4e4d60b137daOwen Lin ? null 127adee31f028d839e7baa8f9e052dc4e4d60b137daOwen Lin : texture; 128adee31f028d839e7baa8f9e052dc4e4d60b137daOwen Lin } 129adee31f028d839e7baa8f9e052dc4e4d60b137daOwen Lin 1307260f6f74d465520e4497b23fe56f98abb0c15a2Owen Lin @Override 1317260f6f74d465520e4497b23fe56f98abb0c15a2Owen Lin public int renderSlot(GLCanvas canvas, int index, int pass, int width, int height) { 1321a4bd273afe5dd11592f7625c2f19853b6f174e9Owen Lin AlbumSetEntry entry = mDataWindow.get(index); 13331cac30e46a293f6d0901e22c6ab0d083cae7021Owen Lin int renderRequestFlags = 0; 13431cac30e46a293f6d0901e22c6ab0d083cae7021Owen Lin renderRequestFlags |= renderContent(canvas, entry, width, height); 13531cac30e46a293f6d0901e22c6ab0d083cae7021Owen Lin renderRequestFlags |= renderLabel(canvas, entry, width, height); 13631cac30e46a293f6d0901e22c6ab0d083cae7021Owen Lin renderRequestFlags |= renderOverlay(canvas, index, entry, width, height); 13731cac30e46a293f6d0901e22c6ab0d083cae7021Owen Lin return renderRequestFlags; 13831cac30e46a293f6d0901e22c6ab0d083cae7021Owen Lin } 13931cac30e46a293f6d0901e22c6ab0d083cae7021Owen Lin 14031cac30e46a293f6d0901e22c6ab0d083cae7021Owen Lin protected int renderOverlay( 14131cac30e46a293f6d0901e22c6ab0d083cae7021Owen Lin GLCanvas canvas, int index, AlbumSetEntry entry, int width, int height) { 14290fe70f11b0961e1e5ae353cdf563236a55f502dYuli Huang int renderRequestFlags = 0; 14343ba9f6644e4183b8ee27f96de3dda703d136c52Bobby Georgescu if (entry.album != null && entry.album.isCameraRoll()) { 1448a8b9cfdd15bf36ccd068563451d98a011a5eeabBobby Georgescu int uncoveredHeight = height - mLabelSpec.labelBackgroundHeight; 1458a8b9cfdd15bf36ccd068563451d98a011a5eeabBobby Georgescu int dim = uncoveredHeight / 2; 1468a8b9cfdd15bf36ccd068563451d98a011a5eeabBobby Georgescu mCameraOverlay.draw(canvas, (width - dim) / 2, 1478a8b9cfdd15bf36ccd068563451d98a011a5eeabBobby Georgescu (uncoveredHeight - dim) / 2, dim, dim); 14843ba9f6644e4183b8ee27f96de3dda703d136c52Bobby Georgescu } 14931cac30e46a293f6d0901e22c6ab0d083cae7021Owen Lin if (mPressedIndex == index) { 15090fe70f11b0961e1e5ae353cdf563236a55f502dYuli Huang if (mAnimatePressedUp) { 15190fe70f11b0961e1e5ae353cdf563236a55f502dYuli Huang drawPressedUpFrame(canvas, width, height); 15290fe70f11b0961e1e5ae353cdf563236a55f502dYuli Huang renderRequestFlags |= SlotView.RENDER_MORE_FRAME; 15390fe70f11b0961e1e5ae353cdf563236a55f502dYuli Huang if (isPressedUpFrameFinished()) { 15490fe70f11b0961e1e5ae353cdf563236a55f502dYuli Huang mAnimatePressedUp = false; 15590fe70f11b0961e1e5ae353cdf563236a55f502dYuli Huang mPressedIndex = -1; 15690fe70f11b0961e1e5ae353cdf563236a55f502dYuli Huang } 15790fe70f11b0961e1e5ae353cdf563236a55f502dYuli Huang } else { 15890fe70f11b0961e1e5ae353cdf563236a55f502dYuli Huang drawPressedFrame(canvas, width, height); 15990fe70f11b0961e1e5ae353cdf563236a55f502dYuli Huang } 16090fe70f11b0961e1e5ae353cdf563236a55f502dYuli Huang } else if ((mHighlightItemPath != null) && (mHighlightItemPath == entry.setPath)) { 16131cac30e46a293f6d0901e22c6ab0d083cae7021Owen Lin drawSelectedFrame(canvas, width, height); 16290fe70f11b0961e1e5ae353cdf563236a55f502dYuli Huang } else if (mInSelectionMode && mSelectionManager.isItemSelected(entry.setPath)) { 16331cac30e46a293f6d0901e22c6ab0d083cae7021Owen Lin drawSelectedFrame(canvas, width, height); 16431cac30e46a293f6d0901e22c6ab0d083cae7021Owen Lin } 16590fe70f11b0961e1e5ae353cdf563236a55f502dYuli Huang return renderRequestFlags; 1661a4bd273afe5dd11592f7625c2f19853b6f174e9Owen Lin } 1671a4bd273afe5dd11592f7625c2f19853b6f174e9Owen Lin 16831cac30e46a293f6d0901e22c6ab0d083cae7021Owen Lin protected int renderContent( 16931cac30e46a293f6d0901e22c6ab0d083cae7021Owen Lin GLCanvas canvas, AlbumSetEntry entry, int width, int height) { 17031cac30e46a293f6d0901e22c6ab0d083cae7021Owen Lin int renderRequestFlags = 0; 1711a4bd273afe5dd11592f7625c2f19853b6f174e9Owen Lin 172adee31f028d839e7baa8f9e052dc4e4d60b137daOwen Lin Texture content = checkContentTexture(entry.content); 1731a4bd273afe5dd11592f7625c2f19853b6f174e9Owen Lin if (content == null) { 1741a4bd273afe5dd11592f7625c2f19853b6f174e9Owen Lin content = mWaitLoadingTexture; 1751a4bd273afe5dd11592f7625c2f19853b6f174e9Owen Lin entry.isWaitLoadingDisplayed = true; 1761a4bd273afe5dd11592f7625c2f19853b6f174e9Owen Lin } else if (entry.isWaitLoadingDisplayed) { 1771a4bd273afe5dd11592f7625c2f19853b6f174e9Owen Lin entry.isWaitLoadingDisplayed = false; 178915c2c5b2c367df71599370613af0924bd7c4887Bobby Georgescu content = new FadeInTexture(mPlaceholderColor, entry.bitmapTexture); 1793535d67239b1b1e4ee038f39dece64545b78f2edOwen Lin entry.content = content; 1801a4bd273afe5dd11592f7625c2f19853b6f174e9Owen Lin } 18131cac30e46a293f6d0901e22c6ab0d083cae7021Owen Lin drawContent(canvas, content, width, height, entry.rotation); 1821a4bd273afe5dd11592f7625c2f19853b6f174e9Owen Lin if ((content instanceof FadeInTexture) && 1831a4bd273afe5dd11592f7625c2f19853b6f174e9Owen Lin ((FadeInTexture) content).isAnimating()) { 18431cac30e46a293f6d0901e22c6ab0d083cae7021Owen Lin renderRequestFlags |= SlotView.RENDER_MORE_FRAME; 1851a4bd273afe5dd11592f7625c2f19853b6f174e9Owen Lin } 1861a4bd273afe5dd11592f7625c2f19853b6f174e9Owen Lin 18731cac30e46a293f6d0901e22c6ab0d083cae7021Owen Lin return renderRequestFlags; 18831cac30e46a293f6d0901e22c6ab0d083cae7021Owen Lin } 1891a4bd273afe5dd11592f7625c2f19853b6f174e9Owen Lin 19031cac30e46a293f6d0901e22c6ab0d083cae7021Owen Lin protected int renderLabel( 19131cac30e46a293f6d0901e22c6ab0d083cae7021Owen Lin GLCanvas canvas, AlbumSetEntry entry, int width, int height) { 192adee31f028d839e7baa8f9e052dc4e4d60b137daOwen Lin Texture content = checkLabelTexture(entry.labelTexture); 193541e25df9f933d58d4678f58519558473db5a333Bobby Georgescu if (content == null) { 194541e25df9f933d58d4678f58519558473db5a333Bobby Georgescu content = mWaitLoadingTexture; 195f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 196541e25df9f933d58d4678f58519558473db5a333Bobby Georgescu int b = AlbumLabelMaker.getBorderSize(); 197541e25df9f933d58d4678f58519558473db5a333Bobby Georgescu int h = mLabelSpec.labelBackgroundHeight; 198541e25df9f933d58d4678f58519558473db5a333Bobby Georgescu content.draw(canvas, -b, height - h + b, width + b + b, h); 199541e25df9f933d58d4678f58519558473db5a333Bobby Georgescu 2001a4bd273afe5dd11592f7625c2f19853b6f174e9Owen Lin return 0; 201f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 202f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 203f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin @Override 2047260f6f74d465520e4497b23fe56f98abb0c15a2Owen Lin public void prepareDrawing() { 20531cac30e46a293f6d0901e22c6ab0d083cae7021Owen Lin mInSelectionMode = mSelectionManager.inSelectionMode(); 206f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 207f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 208f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private class MyCacheListener implements AlbumSetSlidingWindow.Listener { 209f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 2107260f6f74d465520e4497b23fe56f98abb0c15a2Owen Lin @Override 211f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public void onSizeChanged(int size) { 2127260f6f74d465520e4497b23fe56f98abb0c15a2Owen Lin mSlotView.setSlotCount(size); 213f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 214f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 2157260f6f74d465520e4497b23fe56f98abb0c15a2Owen Lin @Override 2167260f6f74d465520e4497b23fe56f98abb0c15a2Owen Lin public void onContentChanged() { 2177260f6f74d465520e4497b23fe56f98abb0c15a2Owen Lin mSlotView.invalidate(); 218f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 219f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 220f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 221f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public void pause() { 222f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mDataWindow.pause(); 223f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 224f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 225f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public void resume() { 226f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mDataWindow.resume(); 2277260f6f74d465520e4497b23fe56f98abb0c15a2Owen Lin } 2287260f6f74d465520e4497b23fe56f98abb0c15a2Owen Lin 2297260f6f74d465520e4497b23fe56f98abb0c15a2Owen Lin @Override 2307260f6f74d465520e4497b23fe56f98abb0c15a2Owen Lin public void onVisibleRangeChanged(int visibleStart, int visibleEnd) { 2317260f6f74d465520e4497b23fe56f98abb0c15a2Owen Lin if (mDataWindow != null) { 2327260f6f74d465520e4497b23fe56f98abb0c15a2Owen Lin mDataWindow.setActiveWindow(visibleStart, visibleEnd); 233f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 234f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 2351a4bd273afe5dd11592f7625c2f19853b6f174e9Owen Lin 2361a4bd273afe5dd11592f7625c2f19853b6f174e9Owen Lin @Override 2371a4bd273afe5dd11592f7625c2f19853b6f174e9Owen Lin public void onSlotSizeChanged(int width, int height) { 2381a4bd273afe5dd11592f7625c2f19853b6f174e9Owen Lin if (mDataWindow != null) { 2391a4bd273afe5dd11592f7625c2f19853b6f174e9Owen Lin mDataWindow.onSlotSizeChanged(width, height); 2401a4bd273afe5dd11592f7625c2f19853b6f174e9Owen Lin } 2411a4bd273afe5dd11592f7625c2f19853b6f174e9Owen Lin } 242f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin} 243