diff options
Diffstat (limited to 'src/com/android/gallery3d/app')
-rw-r--r-- | src/com/android/gallery3d/app/AlbumPage.java | 4 | ||||
-rw-r--r-- | src/com/android/gallery3d/app/AlbumSetDataAdapter.java | 2 | ||||
-rw-r--r-- | src/com/android/gallery3d/app/AlbumSetPage.java | 25 | ||||
-rw-r--r-- | src/com/android/gallery3d/app/Config.java | 49 | ||||
-rw-r--r-- | src/com/android/gallery3d/app/GalleryActionBar.java | 110 | ||||
-rw-r--r-- | src/com/android/gallery3d/app/ManageCachePage.java | 4 |
6 files changed, 111 insertions, 83 deletions
diff --git a/src/com/android/gallery3d/app/AlbumPage.java b/src/com/android/gallery3d/app/AlbumPage.java index 672c0da99..7d7054897 100644 --- a/src/com/android/gallery3d/app/AlbumPage.java +++ b/src/com/android/gallery3d/app/AlbumPage.java @@ -357,8 +357,8 @@ public class AlbumPage extends ActivityState implements GalleryActionBar.Cluster mSelectionManager.setSelectionListener(this); mGridDrawer = new GridDrawer((Context) mActivity, mSelectionManager); Config.AlbumPage config = Config.AlbumPage.get((Context) mActivity); - mAlbumView = new AlbumView(mActivity, - config.slotWidth, config.slotHeight, config.displayItemSize); + mAlbumView = new AlbumView(mActivity, config.slotViewSpec, + 0 /* don't cache thumbnail */); mAlbumView.setSelectionDrawer(mGridDrawer); mRootPane.addComponent(mAlbumView); mAlbumView.setListener(new SlotView.SimpleListener() { diff --git a/src/com/android/gallery3d/app/AlbumSetDataAdapter.java b/src/com/android/gallery3d/app/AlbumSetDataAdapter.java index 85f3bf532..8322d2b19 100644 --- a/src/com/android/gallery3d/app/AlbumSetDataAdapter.java +++ b/src/com/android/gallery3d/app/AlbumSetDataAdapter.java @@ -41,7 +41,7 @@ public class AlbumSetDataAdapter implements AlbumSetView.Model { private static final int INDEX_NONE = -1; private static final int MIN_LOAD_COUNT = 4; - private static final int MAX_COVER_COUNT = 4; + private static final int MAX_COVER_COUNT = 1; private static final int MSG_LOAD_START = 1; private static final int MSG_LOAD_FINISH = 2; diff --git a/src/com/android/gallery3d/app/AlbumSetPage.java b/src/com/android/gallery3d/app/AlbumSetPage.java index 097057293..eac1abce2 100644 --- a/src/com/android/gallery3d/app/AlbumSetPage.java +++ b/src/com/android/gallery3d/app/AlbumSetPage.java @@ -63,7 +63,7 @@ public class AlbumSetPage extends ActivityState implements public static final String KEY_MEDIA_PATH = "media-path"; public static final String KEY_SET_TITLE = "set-title"; public static final String KEY_SET_SUBTITLE = "set-subtitle"; - public static final String KEY_SELECTED_TAB_TYPE = "selected-tab"; + public static final String KEY_SELECTED_CLUSTER_TYPE = "selected-cluster"; private static final int DATA_CACHE_SIZE = 256; private static final int REQUEST_DO_ANIMATION = 1; @@ -76,7 +76,8 @@ public class AlbumSetPage extends ActivityState implements private MediaSet mMediaSet; private String mTitle; private String mSubtitle; - private boolean mShowClusterTabs; + private boolean mShowClusterMenu; + private int mSelectedAction; protected SelectionManager mSelectionManager; private AlbumSetDataAdapter mAlbumSetDataAdapter; @@ -229,7 +230,7 @@ public class AlbumSetPage extends ActivityState implements String newPath = FilterUtils.switchClusterPath(basePath, clusterType); Bundle data = new Bundle(getData()); data.putString(AlbumSetPage.KEY_MEDIA_PATH, newPath); - data.putInt(KEY_SELECTED_TAB_TYPE, clusterType); + data.putInt(KEY_SELECTED_CLUSTER_TYPE, clusterType); mAlbumSetView.savePositions(PositionRepository.getInstance(mActivity)); mActivity.getStateManager().switchState(this, AlbumSetPage.class, data); } @@ -260,8 +261,8 @@ public class AlbumSetPage extends ActivityState implements mDetailsSource = new MyDetailsSource(); GalleryActionBar actionBar = mActivity.getGalleryActionBar(); if (actionBar != null) { - actionBar.setSelectedTab(data.getInt( - AlbumSetPage.KEY_SELECTED_TAB_TYPE, FilterUtils.CLUSTER_BY_ALBUM)); + mSelectedAction = data.getInt( + AlbumSetPage.KEY_SELECTED_CLUSTER_TYPE, FilterUtils.CLUSTER_BY_ALBUM); } startTransition(); } @@ -277,7 +278,7 @@ public class AlbumSetPage extends ActivityState implements mEyePosition.pause(); DetailsHelper.pause(); GalleryActionBar actionBar = mActivity.getGalleryActionBar(); - if (actionBar != null) actionBar.hideClusterTabs(); + if (actionBar != null) actionBar.hideClusterMenu(); } @Override @@ -291,7 +292,7 @@ public class AlbumSetPage extends ActivityState implements mEyePosition.resume(); mActionModeHandler.resume(); GalleryActionBar actionBar = mActivity.getGalleryActionBar(); - if (mShowClusterTabs && actionBar != null) actionBar.showClusterTabs(this); + if (mShowClusterMenu && actionBar != null) actionBar.showClusterMenu(mSelectedAction, this); } private void initializeData(Bundle data) { @@ -313,9 +314,7 @@ public class AlbumSetPage extends ActivityState implements mGridDrawer = new GridDrawer((Context) mActivity, mSelectionManager); Config.AlbumSetPage config = Config.AlbumSetPage.get((Context) mActivity); mAlbumSetView = new AlbumSetView(mActivity, mGridDrawer, - config.slotWidth, config.slotHeight, - config.displayItemSize, config.labelFontSize, - config.labelOffsetY, config.labelMargin); + config.slotViewSpec, config.labelSpec); mAlbumSetView.setListener(new SlotView.SimpleListener() { @Override public void onSingleTapUp(int slotIndex) { @@ -363,7 +362,7 @@ public class AlbumSetPage extends ActivityState implements inflater.inflate(R.menu.pickup, menu); actionBar.setTitle(R.string.select_album); } else { - mShowClusterTabs = !inAlbum; + mShowClusterMenu = !inAlbum; inflater.inflate(R.menu.albumset, menu); if (mTitle != null) { actionBar.setTitle(mTitle); @@ -485,13 +484,13 @@ public class AlbumSetPage extends ActivityState implements switch (mode) { case SelectionManager.ENTER_SELECTION_MODE: { - mActivity.getGalleryActionBar().hideClusterTabs(); + mActivity.getGalleryActionBar().hideClusterMenu(); mActionMode = mActionModeHandler.startActionMode(); break; } case SelectionManager.LEAVE_SELECTION_MODE: { mActionMode.finish(); - mActivity.getGalleryActionBar().showClusterTabs(this); + mActivity.getGalleryActionBar().showClusterMenu(mSelectedAction, this); mRootPane.invalidate(); break; } diff --git a/src/com/android/gallery3d/app/Config.java b/src/com/android/gallery3d/app/Config.java index 4586235f6..0cea6c852 100644 --- a/src/com/android/gallery3d/app/Config.java +++ b/src/com/android/gallery3d/app/Config.java @@ -17,6 +17,8 @@ package com.android.gallery3d.app; import com.android.gallery3d.R; +import com.android.gallery3d.ui.SlotView; +import com.android.gallery3d.ui.AlbumSetView; import android.content.Context; import android.content.res.Resources; @@ -25,12 +27,8 @@ final class Config { public static class AlbumSetPage { private static AlbumSetPage sInstance; - public final int slotWidth; - public final int slotHeight; - public final int displayItemSize; - public final int labelFontSize; - public final int labelOffsetY; - public final int labelMargin; + public SlotView.Spec slotViewSpec; + public AlbumSetView.LabelSpec labelSpec; public static synchronized AlbumSetPage get(Context context) { if (sInstance == null) { @@ -41,21 +39,34 @@ final class Config { private AlbumSetPage(Context context) { Resources r = context.getResources(); - slotWidth = r.getDimensionPixelSize(R.dimen.albumset_slot_width); - slotHeight = r.getDimensionPixelSize(R.dimen.albumset_slot_height); - displayItemSize = r.getDimensionPixelSize(R.dimen.albumset_display_item_size); - labelFontSize = r.getDimensionPixelSize(R.dimen.albumset_label_font_size); - labelOffsetY = r.getDimensionPixelSize(R.dimen.albumset_label_offset_y); - labelMargin = r.getDimensionPixelSize(R.dimen.albumset_label_margin); + + slotViewSpec = new SlotView.Spec(); + slotViewSpec.rowsLand = r.getInteger(R.integer.albumset_rows_land); + slotViewSpec.rowsPort = r.getInteger(R.integer.albumset_rows_port); + slotViewSpec.slotGap = r.getDimensionPixelSize(R.dimen.albumset_slot_gap); + + labelSpec = new AlbumSetView.LabelSpec(); + labelSpec.darkStripHeight = r.getDimensionPixelSize( + R.dimen.albumset_dark_strip_height); + labelSpec.titleOffset = r.getDimensionPixelSize( + R.dimen.albumset_title_offset); + labelSpec.numberOffset = r.getDimensionPixelSize( + R.dimen.albumset_number_offset); + labelSpec.titleFontSize = r.getDimensionPixelSize( + R.dimen.albumset_title_font_size); + labelSpec.numberFontSize = r.getDimensionPixelSize( + R.dimen.albumset_number_font_size); + labelSpec.leftMargin = r.getDimensionPixelSize( + R.dimen.albumset_left_margin); + labelSpec.iconSize = r.getDimensionPixelSize( + R.dimen.albumset_icon_size); } } public static class AlbumPage { private static AlbumPage sInstance; - public final int slotWidth; - public final int slotHeight; - public final int displayItemSize; + public SlotView.Spec slotViewSpec; public static synchronized AlbumPage get(Context context) { if (sInstance == null) { @@ -66,9 +77,11 @@ final class Config { private AlbumPage(Context context) { Resources r = context.getResources(); - slotWidth = r.getDimensionPixelSize(R.dimen.album_slot_width); - slotHeight = r.getDimensionPixelSize(R.dimen.album_slot_height); - displayItemSize = r.getDimensionPixelSize(R.dimen.album_display_item_size); + + slotViewSpec = new SlotView.Spec(); + slotViewSpec.rowsLand = r.getInteger(R.integer.album_rows_land); + slotViewSpec.rowsPort = r.getInteger(R.integer.album_rows_port); + slotViewSpec.slotGap = r.getDimensionPixelSize(R.dimen.album_slot_gap); } } diff --git a/src/com/android/gallery3d/app/GalleryActionBar.java b/src/com/android/gallery3d/app/GalleryActionBar.java index 3df5e91e7..7d792dd23 100644 --- a/src/com/android/gallery3d/app/GalleryActionBar.java +++ b/src/com/android/gallery3d/app/GalleryActionBar.java @@ -19,19 +19,28 @@ package com.android.gallery3d.app; import com.android.gallery3d.R; import android.app.ActionBar; -import android.app.ActionBar.Tab; import android.app.Activity; import android.app.AlertDialog; import android.app.FragmentTransaction; import android.content.Context; import android.content.DialogInterface; +import android.text.TextUtils.TruncateAt; +import android.view.Gravity; +import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AbsListView; +import android.widget.BaseAdapter; import android.widget.ShareActionProvider; +import android.widget.SpinnerAdapter; +import android.widget.TextView; +import android.widget.LinearLayout.LayoutParams; import java.util.ArrayList; -public class GalleryActionBar implements ActionBar.TabListener { +public class GalleryActionBar implements ActionBar.OnNavigationListener { private static final String TAG = "GalleryActionBar"; public interface ClusterRunner { @@ -42,7 +51,7 @@ public class GalleryActionBar implements ActionBar.TabListener { public int action; public boolean enabled; public boolean visible; - public int tabTitle; + public int spinnerTitle; public int dialogTitle; public int clusterBy; @@ -51,11 +60,11 @@ public class GalleryActionBar implements ActionBar.TabListener { this(action, applied, enabled, title, title, clusterBy); } - public ActionItem(int action, boolean applied, boolean enabled, int tabTitle, + public ActionItem(int action, boolean applied, boolean enabled, int spinnerTitle, int dialogTitle, int clusterBy) { this.action = action; this.enabled = enabled; - this.tabTitle = tabTitle; + this.spinnerTitle = spinnerTitle; this.dialogTitle = dialogTitle; this.clusterBy = clusterBy; this.visible = true; @@ -75,23 +84,45 @@ public class GalleryActionBar implements ActionBar.TabListener { R.string.group_by_tags) }; + private class ClusterAdapter extends BaseAdapter { + + public int getCount() { + return sClusterItems.length; + } + + public Object getItem(int position) { + return sClusterItems[position]; + } + + public long getItemId(int position) { + return sClusterItems[position].action; + } + + public View getView(int position, View convertView, ViewGroup parent) { + if (convertView == null) { + convertView = (TextView) mInflater.inflate(R.layout.action_bar_text, + parent, false); + } + TextView view = (TextView) convertView; + view.setText(sClusterItems[position].spinnerTitle); + return convertView; + } + } + private ClusterRunner mClusterRunner; private CharSequence[] mTitles; private ArrayList<Integer> mActions; private Context mContext; + private LayoutInflater mInflater; private ActionBar mActionBar; - // We need this because ActionBar.getSelectedTab() doesn't work when - // ActionBar is hidden. - private Tab mCurrentTab; + private int mCurrentIndex; + private ClusterAdapter mAdapter = new ClusterAdapter(); public GalleryActionBar(Activity activity) { mActionBar = activity.getActionBar(); mContext = activity; - - for (ActionItem item : sClusterItems) { - mActionBar.addTab(mActionBar.newTab().setText(item.tabTitle). - setTag(item).setTabListener(this)); - } + mInflater = activity.getLayoutInflater(); + mCurrentIndex = 0; } public static int getHeight(Activity activity) { @@ -131,12 +162,7 @@ public class GalleryActionBar implements ActionBar.TabListener { } public int getClusterTypeAction() { - if (mCurrentTab != null) { - ActionItem item = (ActionItem) mCurrentTab.getTag(); - return item.action; - } - // By default, it's group-by-album - return FilterUtils.CLUSTER_BY_ALBUM; + return sClusterItems[mCurrentIndex].action; } public static String getClusterByTypeString(Context context, int type) { @@ -157,19 +183,19 @@ public class GalleryActionBar implements ActionBar.TabListener { return shareActionProvider; } - public void showClusterTabs(ClusterRunner runner) { - Log.v(TAG, "showClusterTabs: runner=" + runner); - // setNavigationMode will trigger onTabSelected, so we should avoid - // triggering any callback here + public void showClusterMenu(int action, ClusterRunner runner) { + Log.v(TAG, "showClusterMenu: runner=" + runner); + // Don't set cluster runner until action bar is ready. mClusterRunner = null; - mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); + mActionBar.setListNavigationCallbacks(mAdapter, this); + mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); + setSelectedAction(action); mClusterRunner = runner; } - public void hideClusterTabs() { + public void hideClusterMenu() { mClusterRunner = null; mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); - Log.v(TAG, "hideClusterTabs: runner=" + mClusterRunner); } public void showClusterDialog(final ClusterRunner clusterRunner) { @@ -203,31 +229,23 @@ public class GalleryActionBar implements ActionBar.TabListener { return mActionBar == null ? 0 : mActionBar.getHeight(); } - @Override - public void onTabSelected(Tab tab, FragmentTransaction ft) { - if (mCurrentTab == tab) return; - mCurrentTab = tab; - ActionItem item = (ActionItem) tab.getTag(); - Log.v(TAG, "onTabSelected: clusterrRunner=" + mClusterRunner); - if (mClusterRunner != null) mClusterRunner.doCluster(item.action); - } - - @Override - public void onTabUnselected(Tab tab, FragmentTransaction ft) { - } - - @Override - public void onTabReselected(Tab tab, FragmentTransaction ft) { - } - - public boolean setSelectedTab(int type) { - for (int i = 0, n = sClusterItems.length; i < n; ++i) { + public boolean setSelectedAction(int type) { + for (int i = 0, n = sClusterItems.length; i < n; i++) { ActionItem item = sClusterItems[i]; if (item.visible && item.action == type) { - mActionBar.selectTab(mActionBar.getTabAt(i)); + mActionBar.setSelectedNavigationItem(i); + mCurrentIndex = i; return true; } } return false; } + + public boolean onNavigationItemSelected(int itemPosition, long itemId) { + if (itemPosition != mCurrentIndex && mClusterRunner != null) { + mClusterRunner.doCluster(sClusterItems[itemPosition].action); + } + + return false; + } } diff --git a/src/com/android/gallery3d/app/ManageCachePage.java b/src/com/android/gallery3d/app/ManageCachePage.java index 940f1be08..7e301f28c 100644 --- a/src/com/android/gallery3d/app/ManageCachePage.java +++ b/src/com/android/gallery3d/app/ManageCachePage.java @@ -283,9 +283,7 @@ public class ManageCachePage extends ActivityState implements (Context) mActivity, mSelectionManager); Config.ManageCachePage config = Config.ManageCachePage.get(activity); mAlbumSetView = new AlbumSetView(mActivity, mSelectionDrawer, - config.slotWidth, config.slotHeight, - config.displayItemSize, config.labelFontSize, - config.labelOffsetY, config.labelMargin); + config.slotViewSpec, config.labelSpec); mAlbumSetView.setListener(new SlotView.SimpleListener() { @Override public void onSingleTapUp(int slotIndex) { |