diff options
Diffstat (limited to 'src/com/android/gallery3d/app/ManageCachePage.java')
-rw-r--r-- | src/com/android/gallery3d/app/ManageCachePage.java | 419 |
1 files changed, 0 insertions, 419 deletions
diff --git a/src/com/android/gallery3d/app/ManageCachePage.java b/src/com/android/gallery3d/app/ManageCachePage.java deleted file mode 100644 index 4f5c35819..000000000 --- a/src/com/android/gallery3d/app/ManageCachePage.java +++ /dev/null @@ -1,419 +0,0 @@ -/* - * Copyright (C) 2010 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.gallery3d.app; - -import android.app.Activity; -import android.content.res.Configuration; -import android.os.Bundle; -import android.os.Handler; -import android.os.Message; -import android.text.format.Formatter; -import android.view.LayoutInflater; -import android.view.View; -import android.view.View.OnClickListener; -import android.widget.FrameLayout; -import android.widget.ProgressBar; -import android.widget.TextView; -import android.widget.Toast; - -import com.android.gallery3d.R; -import com.android.gallery3d.common.Utils; -import com.android.gallery3d.data.MediaObject; -import com.android.gallery3d.data.MediaSet; -import com.android.gallery3d.data.Path; -import com.android.gallery3d.glrenderer.GLCanvas; -import com.android.gallery3d.ui.CacheStorageUsageInfo; -import com.android.gallery3d.ui.GLRoot; -import com.android.gallery3d.ui.GLView; -import com.android.gallery3d.ui.ManageCacheDrawer; -import com.android.gallery3d.ui.MenuExecutor; -import com.android.gallery3d.ui.SelectionManager; -import com.android.gallery3d.ui.SlotView; -import com.android.gallery3d.ui.SynchronizedHandler; -import com.android.gallery3d.util.Future; -import com.android.gallery3d.util.GalleryUtils; -import com.android.gallery3d.util.ThreadPool.Job; -import com.android.gallery3d.util.ThreadPool.JobContext; - -import java.util.ArrayList; - -public class ManageCachePage extends ActivityState implements - SelectionManager.SelectionListener, MenuExecutor.ProgressListener, - EyePosition.EyePositionListener, OnClickListener { - public static final String KEY_MEDIA_PATH = "media-path"; - - @SuppressWarnings("unused") - private static final String TAG = "ManageCachePage"; - - private static final int DATA_CACHE_SIZE = 256; - private static final int MSG_REFRESH_STORAGE_INFO = 1; - private static final int MSG_REQUEST_LAYOUT = 2; - private static final int PROGRESS_BAR_MAX = 10000; - - private SlotView mSlotView; - private MediaSet mMediaSet; - - protected SelectionManager mSelectionManager; - protected ManageCacheDrawer mSelectionDrawer; - private AlbumSetDataLoader mAlbumSetDataAdapter; - - private EyePosition mEyePosition; - - // The eyes' position of the user, the origin is at the center of the - // device and the unit is in pixels. - private float mX; - private float mY; - private float mZ; - - private int mAlbumCountToMakeAvailableOffline; - private View mFooterContent; - private CacheStorageUsageInfo mCacheStorageInfo; - private Future<Void> mUpdateStorageInfo; - private Handler mHandler; - private boolean mLayoutReady = false; - - @Override - protected int getBackgroundColorId() { - return R.color.cache_background; - } - - private GLView mRootPane = new GLView() { - private float mMatrix[] = new float[16]; - - @Override - protected void renderBackground(GLCanvas view) { - view.clearBuffer(getBackgroundColor()); - } - - @Override - protected void onLayout( - boolean changed, int left, int top, int right, int bottom) { - // Hack: our layout depends on other components on the screen. - // We assume the other components will complete before we get a change - // to run a message in main thread. - if (!mLayoutReady) { - mHandler.sendEmptyMessage(MSG_REQUEST_LAYOUT); - return; - } - mLayoutReady = false; - - mEyePosition.resetPosition(); - int slotViewTop = mActivity.getGalleryActionBar().getHeight(); - int slotViewBottom = bottom - top; - - View footer = mActivity.findViewById(R.id.footer); - if (footer != null) { - int location[] = {0, 0}; - footer.getLocationOnScreen(location); - slotViewBottom = location[1]; - } - - mSlotView.layout(0, slotViewTop, right - left, slotViewBottom); - } - - @Override - protected void render(GLCanvas canvas) { - canvas.save(GLCanvas.SAVE_FLAG_MATRIX); - GalleryUtils.setViewPointMatrix(mMatrix, - getWidth() / 2 + mX, getHeight() / 2 + mY, mZ); - canvas.multiplyMatrix(mMatrix, 0); - super.render(canvas); - canvas.restore(); - } - }; - - @Override - public void onEyePositionChanged(float x, float y, float z) { - mRootPane.lockRendering(); - mX = x; - mY = y; - mZ = z; - mRootPane.unlockRendering(); - mRootPane.invalidate(); - } - - private void onDown(int index) { - mSelectionDrawer.setPressedIndex(index); - } - - private void onUp() { - mSelectionDrawer.setPressedIndex(-1); - } - - public void onSingleTapUp(int slotIndex) { - MediaSet targetSet = mAlbumSetDataAdapter.getMediaSet(slotIndex); - if (targetSet == null) return; // Content is dirty, we shall reload soon - - // ignore selection action if the target set does not support cache - // operation (like a local album). - if ((targetSet.getSupportedOperations() - & MediaSet.SUPPORT_CACHE) == 0) { - showToastForLocalAlbum(); - return; - } - - Path path = targetSet.getPath(); - boolean isFullyCached = - (targetSet.getCacheFlag() == MediaObject.CACHE_FLAG_FULL); - boolean isSelected = mSelectionManager.isItemSelected(path); - - if (!isFullyCached) { - // We only count the media sets that will be made available offline - // in this session. - if (isSelected) { - --mAlbumCountToMakeAvailableOffline; - } else { - ++mAlbumCountToMakeAvailableOffline; - } - } - - long sizeOfTarget = targetSet.getCacheSize(); - mCacheStorageInfo.increaseTargetCacheSize( - (isFullyCached ^ isSelected) ? -sizeOfTarget : sizeOfTarget); - refreshCacheStorageInfo(); - - mSelectionManager.toggle(path); - mSlotView.invalidate(); - } - - @Override - public void onCreate(Bundle data, Bundle restoreState) { - super.onCreate(data, restoreState); - mCacheStorageInfo = new CacheStorageUsageInfo(mActivity); - initializeViews(); - initializeData(data); - mEyePosition = new EyePosition(mActivity.getAndroidContext(), this); - mHandler = new SynchronizedHandler(mActivity.getGLRoot()) { - @Override - public void handleMessage(Message message) { - switch (message.what) { - case MSG_REFRESH_STORAGE_INFO: - refreshCacheStorageInfo(); - break; - case MSG_REQUEST_LAYOUT: { - mLayoutReady = true; - removeMessages(MSG_REQUEST_LAYOUT); - mRootPane.requestLayout(); - break; - } - } - } - }; - } - - @Override - public void onConfigurationChanged(Configuration config) { - // We use different layout resources for different configs - initializeFooterViews(); - FrameLayout layout = (FrameLayout) ((Activity) mActivity).findViewById(R.id.footer); - if (layout.getVisibility() == View.VISIBLE) { - layout.removeAllViews(); - layout.addView(mFooterContent); - } - } - - @Override - public void onPause() { - super.onPause(); - mAlbumSetDataAdapter.pause(); - mSelectionDrawer.pause(); - mEyePosition.pause(); - - if (mUpdateStorageInfo != null) { - mUpdateStorageInfo.cancel(); - mUpdateStorageInfo = null; - } - mHandler.removeMessages(MSG_REFRESH_STORAGE_INFO); - - FrameLayout layout = (FrameLayout) ((Activity) mActivity).findViewById(R.id.footer); - layout.removeAllViews(); - layout.setVisibility(View.INVISIBLE); - } - - private Job<Void> mUpdateStorageInfoJob = new Job<Void>() { - @Override - public Void run(JobContext jc) { - mCacheStorageInfo.loadStorageInfo(jc); - if (!jc.isCancelled()) { - mHandler.sendEmptyMessage(MSG_REFRESH_STORAGE_INFO); - } - return null; - } - }; - - @Override - public void onResume() { - super.onResume(); - setContentPane(mRootPane); - mAlbumSetDataAdapter.resume(); - mSelectionDrawer.resume(); - mEyePosition.resume(); - mUpdateStorageInfo = mActivity.getThreadPool().submit(mUpdateStorageInfoJob); - FrameLayout layout = (FrameLayout) ((Activity) mActivity).findViewById(R.id.footer); - layout.addView(mFooterContent); - layout.setVisibility(View.VISIBLE); - } - - private void initializeData(Bundle data) { - String mediaPath = data.getString(ManageCachePage.KEY_MEDIA_PATH); - mMediaSet = mActivity.getDataManager().getMediaSet(mediaPath); - mSelectionManager.setSourceMediaSet(mMediaSet); - - // We will always be in selection mode in this page. - mSelectionManager.setAutoLeaveSelectionMode(false); - mSelectionManager.enterSelectionMode(); - - mAlbumSetDataAdapter = new AlbumSetDataLoader( - mActivity, mMediaSet, DATA_CACHE_SIZE); - mSelectionDrawer.setModel(mAlbumSetDataAdapter); - } - - private void initializeViews() { - Activity activity = mActivity; - - mSelectionManager = new SelectionManager(mActivity, true); - mSelectionManager.setSelectionListener(this); - - Config.ManageCachePage config = Config.ManageCachePage.get(activity); - mSlotView = new SlotView(mActivity, config.slotViewSpec); - mSelectionDrawer = new ManageCacheDrawer(mActivity, mSelectionManager, mSlotView, - config.labelSpec, config.cachePinSize, config.cachePinMargin); - mSlotView.setSlotRenderer(mSelectionDrawer); - mSlotView.setListener(new SlotView.SimpleListener() { - @Override - public void onDown(int index) { - ManageCachePage.this.onDown(index); - } - - @Override - public void onUp(boolean followedByLongPress) { - ManageCachePage.this.onUp(); - } - - @Override - public void onSingleTapUp(int slotIndex) { - ManageCachePage.this.onSingleTapUp(slotIndex); - } - }); - mRootPane.addComponent(mSlotView); - initializeFooterViews(); - } - - private void initializeFooterViews() { - Activity activity = mActivity; - - LayoutInflater inflater = activity.getLayoutInflater(); - mFooterContent = inflater.inflate(R.layout.manage_offline_bar, null); - - mFooterContent.findViewById(R.id.done).setOnClickListener(this); - refreshCacheStorageInfo(); - } - - @Override - public void onClick(View view) { - Utils.assertTrue(view.getId() == R.id.done); - GLRoot root = mActivity.getGLRoot(); - root.lockRenderThread(); - try { - ArrayList<Path> ids = mSelectionManager.getSelected(false); - if (ids.size() == 0) { - onBackPressed(); - return; - } - showToast(); - - MenuExecutor menuExecutor = new MenuExecutor(mActivity, mSelectionManager); - menuExecutor.startAction(R.id.action_toggle_full_caching, - R.string.process_caching_requests, this); - } finally { - root.unlockRenderThread(); - } - } - - private void showToast() { - if (mAlbumCountToMakeAvailableOffline > 0) { - Activity activity = mActivity; - Toast.makeText(activity, activity.getResources().getQuantityString( - R.plurals.make_albums_available_offline, - mAlbumCountToMakeAvailableOffline), - Toast.LENGTH_SHORT).show(); - } - } - - private void showToastForLocalAlbum() { - Activity activity = mActivity; - Toast.makeText(activity, activity.getResources().getString( - R.string.try_to_set_local_album_available_offline), - Toast.LENGTH_SHORT).show(); - } - - private void refreshCacheStorageInfo() { - ProgressBar progressBar = (ProgressBar) mFooterContent.findViewById(R.id.progress); - TextView status = (TextView) mFooterContent.findViewById(R.id.status); - progressBar.setMax(PROGRESS_BAR_MAX); - long totalBytes = mCacheStorageInfo.getTotalBytes(); - long usedBytes = mCacheStorageInfo.getUsedBytes(); - long expectedBytes = mCacheStorageInfo.getExpectedUsedBytes(); - long freeBytes = mCacheStorageInfo.getFreeBytes(); - - Activity activity = mActivity; - if (totalBytes == 0) { - progressBar.setProgress(0); - progressBar.setSecondaryProgress(0); - - // TODO: get the string translated - String label = activity.getString(R.string.free_space_format, "-"); - status.setText(label); - } else { - progressBar.setProgress((int) (usedBytes * PROGRESS_BAR_MAX / totalBytes)); - progressBar.setSecondaryProgress( - (int) (expectedBytes * PROGRESS_BAR_MAX / totalBytes)); - String label = activity.getString(R.string.free_space_format, - Formatter.formatFileSize(activity, freeBytes)); - status.setText(label); - } - } - - @Override - public void onProgressComplete(int result) { - onBackPressed(); - } - - @Override - public void onProgressUpdate(int index) { - } - - @Override - public void onSelectionModeChange(int mode) { - } - - @Override - public void onSelectionChange(Path path, boolean selected) { - } - - @Override - public void onConfirmDialogDismissed(boolean confirmed) { - } - - @Override - public void onConfirmDialogShown() { - } - - @Override - public void onProgressStart() { - } -} |