From a10c183efd33f5716481bd58133c1022201e5a03 Mon Sep 17 00:00:00 2001 From: Robert Collins Date: Wed, 10 Apr 2013 10:34:13 -0700 Subject: [PATCH 1/4] Expanding MenuDrawerItem to allow instances to provide selection and visibility - WPActionBarActivity no longer needs a giant switch statement to figure out what to do when an item is selected - The action to perform is now associated directly to the menu item - Adding an item to the menu is now configured in a single location --- .../wordpress/android/ui/MenuDrawerItem.java | 78 +++++ .../android/ui/WPActionBarActivity.java | 327 ++++-------------- 2 files changed, 152 insertions(+), 253 deletions(-) create mode 100644 src/org/wordpress/android/ui/MenuDrawerItem.java diff --git a/src/org/wordpress/android/ui/MenuDrawerItem.java b/src/org/wordpress/android/ui/MenuDrawerItem.java new file mode 100644 index 000000000000..8e2aea96313e --- /dev/null +++ b/src/org/wordpress/android/ui/MenuDrawerItem.java @@ -0,0 +1,78 @@ +package org.wordpress.android.ui; + +import android.view.View; +import android.content.Intent; + +abstract class MenuDrawerItem { + public static int NO_ITEM_ID = -1; + + /** + * When menu item is selected this method is called. Returns the intent that will be started. + */ + abstract public Intent onSelectItem(); + /** + * Determines if the menu item should be displayed in the menu + */ + public Boolean isVisible(){ + return true; + }; + /** + * Determines if the item + */ + public Boolean isSelected(){ + return false; + } + /** + * Method to allow the menu item to provide additional configuration to the view + */ + public void onConfigureView(View view){}; + + // Resource id for the title string + protected int mTitle; + // Resource id for the icon drawable + protected int mIconRes; + // ID for the item for remembering which item was selected + private int mItemId; + /** + * Creates a MenuDrawerItem with the specific id, string resource id and drawable resource id + */ + MenuDrawerItem(int itemId, int stringRes, int iconRes) { + mTitle = stringRes; + mIconRes = iconRes; + mItemId = itemId; + } + /** + * Creates a MenuDrawerItem with NO_ITEM_ID for it's id for items that shouldn't be remembered + * between application launches. + */ + MenuDrawerItem(int stringRes, int iconRes){ + this(NO_ITEM_ID, stringRes, iconRes); + } + public boolean hasItemId(){ + return getItemId() != NO_ITEM_ID; + } + public int getItemId(){ + return mItemId; + } + public String toString(){ + return ""; + } + + public int getTitleRes(){ + return mTitle; + } + + public int getIconRes(){ + return mIconRes; + } + + public Intent selectItem(){ + return onSelectItem(); + } + + public void configureView(View v){ + // By default do nothing + onConfigureView(v); + } + +} diff --git a/src/org/wordpress/android/ui/WPActionBarActivity.java b/src/org/wordpress/android/ui/WPActionBarActivity.java index 4edb67c016f5..846d6cd32d5e 100644 --- a/src/org/wordpress/android/ui/WPActionBarActivity.java +++ b/src/org/wordpress/android/ui/WPActionBarActivity.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.Iterator; import android.content.Context; import android.content.Intent; @@ -44,6 +45,7 @@ import org.wordpress.android.R; import org.wordpress.android.WordPress; import org.wordpress.android.models.Blog; +import org.wordpress.android.ui.MenuDrawerItem; import org.wordpress.android.ui.accounts.NewAccountActivity; import org.wordpress.android.ui.comments.CommentsActivity; import org.wordpress.android.ui.posts.EditPostActivity; @@ -84,6 +86,8 @@ public abstract class WPActionBarActivity extends SherlockFragmentActivity { protected static final int DASHBOARD_ACTIVITY = 8; protected static final int SETTINGS_ACTIVITY = 9; + protected static final String LAST_ACTIVITY_PREFERENCE = "wp_pref_last_activity"; + protected MenuDrawer mMenuDrawer; private static int[] blogIDs; protected boolean isAnimatingRefreshButton; @@ -95,15 +99,16 @@ public abstract class WPActionBarActivity extends SherlockFragmentActivity { private int mActivePosition; private MenuAdapter mAdapter; + private List mMenuItems = new ArrayList(); private ListView mListView; private IcsSpinner mBlogSpinner; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - if ((getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == 4) - mIsXLargeDevice = true; + mIsXLargeDevice = true; + } @Override @@ -203,13 +208,33 @@ private void initMenuDrawer() { mListView.setDivider(null); mListView.setDividerHeight(0); mListView.setCacheColorHint(android.R.color.transparent); - + mAdapter = new MenuAdapter(this); String[] blogNames = getBlogNames(); if (blogNames.length > 1) { addBlogSpinner(blogNames); } - - mListView.setOnItemClickListener(mItemClickListener); + + mListView.setOnItemClickListener(new AdapterView.OnItemClickListener(){ + public void onItemClick(AdapterView parent, View view, int position, long id) { + SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(WPActionBarActivity.this); + SharedPreferences.Editor editor = settings.edit(); + MenuDrawerItem item = mAdapter.getItem(position); + // if the item has an id, remember it for launch + if (item.hasItemId()) + editor.putInt(LAST_ACTIVITY_PREFERENCE, item.getItemId()); + // only perform selection if the item isn't already selected + Intent intent = null; + if (!item.isSelected()) + intent = item.selectItem(); + // save the last activity preference + editor.commit(); + // close the menu drawer + mMenuDrawer.closeMenu(); + // if we have an intent, start the new activity + if (intent != null) + startActivityWithDelay(intent); + } + }); mListView.setOnScrollListener(new AbsListView.OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { @@ -223,7 +248,29 @@ public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCoun }); mMenuDrawer.setMenuView(mListView); - + mListView.setAdapter(mAdapter); + + // configure all the available menu items + mMenuItems.add(new MenuDrawerItem(READER_ACTIVITY, R.string.reader, R.drawable.dashboard_icon_subs){ + @Override + public Boolean isVisible(){ + return WordPress.currentBlog != null && WordPress.currentBlog.isDotcomFlag(); + } + @Override + public Boolean isSelected(){ + return WPActionBarActivity.this instanceof ReaderActivity; + } + @Override + public Intent onSelectItem(){ + if (!(WPActionBarActivity.this instanceof ReaderActivity)) + mShouldFinish = true; + int readerBlogID = WordPress.wpDB.getWPCOMBlogID(); + Intent intent = new Intent(WPActionBarActivity.this, ReaderActivity.class); + intent.putExtra("id", readerBlogID); + intent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); + return intent; + } + }); updateMenuDrawer(); } @@ -271,240 +318,37 @@ public void run() { * blog. */ protected void updateMenuDrawer() { - - mIsDotComBlog = WordPress.currentBlog != null && WordPress.currentBlog.isDotcomFlag(); - - List items = new ArrayList(); - Resources resources = getResources(); - if (mIsDotComBlog) - items.add(new MenuDrawerItem(resources.getString(R.string.reader), - R.drawable.dashboard_icon_subs)); - items.add(new MenuDrawerItem(resources.getString(R.string.posts), - R.drawable.dashboard_icon_posts)); - items.add(new MenuDrawerItem(resources.getString(R.string.pages), - R.drawable.dashboard_icon_pages)); - items.add(new MenuDrawerItem(resources.getString(R.string.tab_comments), - R.drawable.dashboard_icon_comments)); - items.add(new MenuDrawerItem(resources.getString(R.string.tab_stats), - R.drawable.dashboard_icon_stats)); - items.add(new MenuDrawerItem(resources.getString(R.string.quick_photo), - R.drawable.dashboard_icon_photo)); - items.add(new MenuDrawerItem(resources.getString(R.string.quick_video), - R.drawable.dashboard_icon_video)); - items.add(new MenuDrawerItem(resources.getString(R.string.view_site), - R.drawable.dashboard_icon_view)); - items.add(new MenuDrawerItem(resources.getString(R.string.wp_admin), - R.drawable.dashboard_icon_wp)); - items.add(new MenuDrawerItem(resources.getString(R.string.settings), - R.drawable.dashboard_icon_settings)); - - if ((WPActionBarActivity.this instanceof ReaderActivity)) - mActivePosition = 0; - - if ((WPActionBarActivity.this instanceof PostsActivity)) - mActivePosition = 1; - - if ((WPActionBarActivity.this instanceof PagesActivity)) - mActivePosition = 2; - else if ((WPActionBarActivity.this instanceof CommentsActivity)) - mActivePosition = 3; - else if ((WPActionBarActivity.this instanceof StatsActivity)) - mActivePosition = 4; - else if ((WPActionBarActivity.this instanceof ViewSiteActivity)) - mActivePosition = 7; - else if ((WPActionBarActivity.this instanceof DashboardActivity)) - mActivePosition = 8; - - mAdapter = new MenuAdapter(items); - mListView.setAdapter(mAdapter); - } - - private AdapterView.OnItemClickListener mItemClickListener = new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - // Adjust position if only one blog is in the app - if (mListView.getHeaderViewsCount() > 0 && position > 0) - position--; - - if (!mIsDotComBlog) - position++; - - if (position == mActivePosition) { - // Same row selected - mMenuDrawer.closeMenu(); - return; - } - - int activityTag = (Integer) view.getTag(); - - mActivePosition = position; - mAdapter.notifyDataSetChanged(); - Intent intent = null; - - SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(WPActionBarActivity.this); - SharedPreferences.Editor editor = settings.edit(); - - switch (activityTag) { - case READER_ACTIVITY: - if (!(WPActionBarActivity.this instanceof ReaderActivity)) - mShouldFinish = true; - int readerBlogID = WordPress.wpDB.getWPCOMBlogID(); - if - (WordPress.currentBlog.isDotcomFlag()) { - intent = new Intent(WPActionBarActivity.this, ReaderActivity.class); - intent.putExtra("id", readerBlogID); - intent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); - editor.putInt("wp_pref_last_activity", READER_ACTIVITY); - } - break; - case POSTS_ACTIVITY: - if (!(WPActionBarActivity.this instanceof PostsActivity) - || (WPActionBarActivity.this instanceof PagesActivity)) - mShouldFinish = true; - intent = new - Intent(WPActionBarActivity.this, PostsActivity.class); - intent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); - editor.putInt("wp_pref_last_activity", POSTS_ACTIVITY); - break; - case PAGES_ACTIVITY: - if (!(WPActionBarActivity.this instanceof PagesActivity)) - mShouldFinish = true; - intent = new Intent(WPActionBarActivity.this, PagesActivity.class); - intent.putExtra("id", WordPress.currentBlog.getId()); - intent.putExtra("isNew", - true); - intent.putExtra("viewPages", true); - intent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); - editor.putInt("wp_pref_last_activity", PAGES_ACTIVITY); - break; - case COMMENTS_ACTIVITY: - if (!(WPActionBarActivity.this instanceof CommentsActivity)) - mShouldFinish = true; - intent = new Intent(WPActionBarActivity.this, CommentsActivity.class); - intent.putExtra("id", WordPress.currentBlog.getId()); - intent.putExtra("isNew", - true); - intent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); - editor.putInt("wp_pref_last_activity", COMMENTS_ACTIVITY); - break; - case STATS_ACTIVITY: - if (!(WPActionBarActivity.this instanceof StatsActivity)) - mShouldFinish = true; - intent = new Intent(WPActionBarActivity.this, StatsActivity.class); - intent.putExtra("id", WordPress.currentBlog.getId()); - intent.putExtra("isNew", - true); - intent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); - editor.putInt("wp_pref_last_activity", STATS_ACTIVITY); - break; - case QUICK_PHOTO_ACTIVITY: - mShouldFinish = false; - PackageManager pm = WPActionBarActivity.this.getPackageManager(); - intent = new Intent(WPActionBarActivity.this, EditPostActivity.class); - if - (pm.hasSystemFeature(PackageManager.FEATURE_CAMERA)) { - intent.putExtra("quick-media", Constants.QUICK_POST_PHOTO_CAMERA); - } else { - intent.putExtra("quick-media", Constants.QUICK_POST_PHOTO_LIBRARY); - } - intent.putExtra("isNew", true); - break; - case QUICK_VIDEO_ACTIVITY: - mShouldFinish = false; - PackageManager vpm = WPActionBarActivity.this.getPackageManager(); - intent = new Intent(WPActionBarActivity.this, EditPostActivity.class); - if (vpm.hasSystemFeature(PackageManager.FEATURE_CAMERA)) { - intent.putExtra("quick-media", Constants.QUICK_POST_VIDEO_CAMERA); - } else { - intent.putExtra("quick-media", Constants.QUICK_POST_VIDEO_LIBRARY); - } - intent.putExtra("isNew", true); - break; - case VIEW_SITE_ACTIVITY: - if (!(WPActionBarActivity.this instanceof ViewSiteActivity)) - mShouldFinish = true; - intent = new Intent(WPActionBarActivity.this, ViewSiteActivity.class); - intent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); - editor.putInt("wp_pref_last_activity", VIEW_SITE_ACTIVITY); - break; - case DASHBOARD_ACTIVITY: - if (!(WPActionBarActivity.this instanceof DashboardActivity)) - mShouldFinish = true; - intent = new Intent(WPActionBarActivity.this, DashboardActivity.class); - intent.putExtra("loadAdmin", true); - intent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); - editor.putInt("wp_pref_last_activity", DASHBOARD_ACTIVITY); - break; - case SETTINGS_ACTIVITY: - // Settings shouldn't be launched with a delay, or close the drawer - mShouldFinish = false; - Intent settingsIntent = new Intent(WPActionBarActivity.this, PreferencesActivity.class); - startActivityForResult(settingsIntent, SETTINGS_REQUEST); - return; + mAdapter.clear(); + // iterate over the available menu items and only show the ones that should be visible + Iterator availableItems = mMenuItems.iterator(); + while(availableItems.hasNext()){ + MenuDrawerItem item = availableItems.next(); + if (item.isVisible()) { + mAdapter.add(item); } - - editor.commit(); - if (intent != null) { - mMenuDrawer.closeMenu(); - startActivityWithDelay(intent); - } - } - }; - - private class MenuAdapter extends BaseAdapter { - - private List mItems; - - MenuAdapter(List items) { - mItems = items; - } - - @Override - public int getCount() { - return mItems.size(); - } - - @Override - public Object getItem(int position) { - return mItems.get(position); - } - - @Override - public long getItemId(int position) { - return position; } + mAdapter.notifyDataSetChanged(); - @Override - public int getItemViewType(int position) { - return getItem(position) instanceof MenuItem ? 0 : 1; - } + } + + public static class MenuAdapter extends ArrayAdapter { - @Override - public int getViewTypeCount() { - return 2; + MenuAdapter(Context context) { + super(context, R.layout.menu_drawer_row, R.id.menu_row_title, new ArrayList()); } @Override public View getView(int position, View convertView, ViewGroup parent) { - View v = convertView; - Object item = getItem(position); - - if (v == null) { - v = getLayoutInflater().inflate(R.layout.menu_drawer_row, parent, false); - } + View v = super.getView(position, convertView, parent); + MenuDrawerItem item = getItem(position); TextView titleTextView = (TextView) v.findViewById(R.id.menu_row_title); - titleTextView.setText(((MenuDrawerItem) item).mTitle); + titleTextView.setText(item.getTitleRes()); ImageView iconImageView = (ImageView) v.findViewById(R.id.menu_row_icon); - iconImageView.setImageResource(((MenuDrawerItem) item).mIconRes); - - v.setTag((mIsDotComBlog) ? position : position + 1); - - int positionCheck = mActivePosition; - if (!mIsDotComBlog) - positionCheck--; - if ((position) == positionCheck) { + iconImageView.setImageResource(item.getIconRes()); + + if (item.isSelected()) { // http://stackoverflow.com/questions/5890379/setbackgroundresource-discards-my-xml-layout-attributes int bottom = v.getPaddingBottom(); int top = v.getPaddingTop(); @@ -516,36 +360,13 @@ public View getView(int position, View convertView, ViewGroup parent) { v.setBackgroundResource(R.drawable.md_list_selector); } - - TextView bagdeTextView = (TextView) v.findViewById(R.id.menu_row_badge); - int commentRow = (mIsDotComBlog) ? 3 : 2; - if (position == commentRow && WordPress.currentBlog != null) { - int commentCount = WordPress.currentBlog.getUnmoderatedCommentCount(); - if (commentCount > 0) { - bagdeTextView.setVisibility(View.VISIBLE); - } else - { - bagdeTextView.setVisibility(View.GONE); - } - bagdeTextView.setText(String.valueOf(commentCount)); - } else { - bagdeTextView.setVisibility(View.GONE); - } + // allow the menudrawer item to configure the view + item.configureView(v); return v; } } - private static class MenuDrawerItem { - - String mTitle; - int mIconRes; - - MenuDrawerItem(String title, int iconRes) { - mTitle = title; - mIconRes = iconRes; - } - } /** * Called when the activity has detected the user's press of the back key. From e25a4ae82a2ac0d91a2b42008b35a3808b5a9654 Mon Sep 17 00:00:00 2001 From: Robert Collins Date: Wed, 10 Apr 2013 10:35:05 -0700 Subject: [PATCH 2/4] Re-implementing all the menu items with the improved MenuDrawerItem class --- .../wordpress/android/ui/MenuDrawerItem.java | 47 ++- .../android/ui/WPActionBarActivity.java | 292 +++++++++++++++--- 2 files changed, 284 insertions(+), 55 deletions(-) diff --git a/src/org/wordpress/android/ui/MenuDrawerItem.java b/src/org/wordpress/android/ui/MenuDrawerItem.java index 8e2aea96313e..cf98fadb65b9 100644 --- a/src/org/wordpress/android/ui/MenuDrawerItem.java +++ b/src/org/wordpress/android/ui/MenuDrawerItem.java @@ -1,29 +1,38 @@ +/** + * Represents a single item in the WPActionBarActivity's menu drawer. A MenuDrawerItem determines + * the label and icon to use in the menu, its presence in the menu, its selection state, and the + * action that happens when the item is selected. + */ package org.wordpress.android.ui; import android.view.View; import android.content.Intent; abstract class MenuDrawerItem { + /** + * Signifies that the item has no unique ID so should not be tracked in the last selected + * item preference. + */ public static int NO_ITEM_ID = -1; - /** - * When menu item is selected this method is called. Returns the intent that will be started. + * Called when the menu item is selected. */ - abstract public Intent onSelectItem(); + abstract public void onSelectItem(); /** - * Determines if the menu item should be displayed in the menu + * Determines if the menu item should be displayed in the menu. Default is always true. */ public Boolean isVisible(){ return true; }; /** - * Determines if the item + * Determines if the item is selected. Default is always false. */ public Boolean isSelected(){ return false; } /** - * Method to allow the menu item to provide additional configuration to the view + * Method to allow the menu item to provide additional configuration to the view, default + * implementation does nothing. */ public void onConfigureView(View view){}; @@ -48,30 +57,44 @@ public Boolean isSelected(){ MenuDrawerItem(int stringRes, int iconRes){ this(NO_ITEM_ID, stringRes, iconRes); } + /** + * Determines if the item has an id for remembering the last selected item + */ public boolean hasItemId(){ return getItemId() != NO_ITEM_ID; } + /** + * Get's the item's unique ID + */ public int getItemId(){ return mItemId; } + /** + * Returns the item's string representation (used by ArrayAdapter.getView) + */ public String toString(){ return ""; } - + /** + * The resource id to use for the menu item's title + */ public int getTitleRes(){ return mTitle; } - + /** + * The resource id to use for the menu item's icon + */ public int getIconRes(){ return mIconRes; } - public Intent selectItem(){ - return onSelectItem(); + public void selectItem(){ + onSelectItem(); } - + /** + * Allows the menu item to do additional manipulation to the view + */ public void configureView(View v){ - // By default do nothing onConfigureView(v); } diff --git a/src/org/wordpress/android/ui/WPActionBarActivity.java b/src/org/wordpress/android/ui/WPActionBarActivity.java index 846d6cd32d5e..d46c415f87e6 100644 --- a/src/org/wordpress/android/ui/WPActionBarActivity.java +++ b/src/org/wordpress/android/ui/WPActionBarActivity.java @@ -216,23 +216,26 @@ private void initMenuDrawer() { mListView.setOnItemClickListener(new AdapterView.OnItemClickListener(){ public void onItemClick(AdapterView parent, View view, int position, long id) { - SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(WPActionBarActivity.this); - SharedPreferences.Editor editor = settings.edit(); - MenuDrawerItem item = mAdapter.getItem(position); + // account for header views + int menuPosition = position - mListView.getHeaderViewsCount(); + // bail if the adjusted position is out of bounds for the adapter + if (menuPosition < 0 || menuPosition >= mAdapter.getCount()) + return; + MenuDrawerItem item = mAdapter.getItem(menuPosition); // if the item has an id, remember it for launch - if (item.hasItemId()) + if (item.hasItemId()){ + SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(WPActionBarActivity.this); + SharedPreferences.Editor editor = settings.edit(); editor.putInt(LAST_ACTIVITY_PREFERENCE, item.getItemId()); + editor.commit(); + } // only perform selection if the item isn't already selected - Intent intent = null; if (!item.isSelected()) - intent = item.selectItem(); + item.selectItem(); // save the last activity preference - editor.commit(); // close the menu drawer mMenuDrawer.closeMenu(); // if we have an intent, start the new activity - if (intent != null) - startActivityWithDelay(intent); } }); mListView.setOnScrollListener(new AbsListView.OnScrollListener() { @@ -251,26 +254,18 @@ public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCoun mListView.setAdapter(mAdapter); // configure all the available menu items - mMenuItems.add(new MenuDrawerItem(READER_ACTIVITY, R.string.reader, R.drawable.dashboard_icon_subs){ - @Override - public Boolean isVisible(){ - return WordPress.currentBlog != null && WordPress.currentBlog.isDotcomFlag(); - } - @Override - public Boolean isSelected(){ - return WPActionBarActivity.this instanceof ReaderActivity; - } - @Override - public Intent onSelectItem(){ - if (!(WPActionBarActivity.this instanceof ReaderActivity)) - mShouldFinish = true; - int readerBlogID = WordPress.wpDB.getWPCOMBlogID(); - Intent intent = new Intent(WPActionBarActivity.this, ReaderActivity.class); - intent.putExtra("id", readerBlogID); - intent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); - return intent; - } - }); + // mMenuItems.add(new NotificationsMenuItem()); + mMenuItems.add(new ReaderMenuItem()); + mMenuItems.add(new PostsMenuItem()); + mMenuItems.add(new PagesMenuItem()); + mMenuItems.add(new CommentsMenuItem()); + mMenuItems.add(new StatsMenuItem()); + mMenuItems.add(new QuickPhotoMenuItem()); + mMenuItems.add(new QuickVideoMenuItem()); + mMenuItems.add(new ViewSiteMenuItem()); + mMenuItems.add(new AdminMenuItem()); + mMenuItems.add(new SettingsMenuItem()); + updateMenuDrawer(); } @@ -339,31 +334,32 @@ public static class MenuAdapter extends ArrayAdapter { @Override public View getView(int position, View convertView, ViewGroup parent) { - View v = super.getView(position, convertView, parent); + View view = super.getView(position, convertView, parent); MenuDrawerItem item = getItem(position); - TextView titleTextView = (TextView) v.findViewById(R.id.menu_row_title); + TextView titleTextView = (TextView) view.findViewById(R.id.menu_row_title); titleTextView.setText(item.getTitleRes()); - ImageView iconImageView = (ImageView) v.findViewById(R.id.menu_row_icon); + ImageView iconImageView = (ImageView) view.findViewById(R.id.menu_row_icon); iconImageView.setImageResource(item.getIconRes()); + // Hide the badge always + view.findViewById(R.id.menu_row_badge).setVisibility(View.GONE); if (item.isSelected()) { // http://stackoverflow.com/questions/5890379/setbackgroundresource-discards-my-xml-layout-attributes - int bottom = v.getPaddingBottom(); - int top = v.getPaddingTop(); - int right = v.getPaddingRight(); - int left = v.getPaddingLeft(); - v.setBackgroundResource(R.drawable.menu_drawer_selected); - v.setPadding(left, top, right, bottom); + int bottom = view.getPaddingBottom(); + int top = view.getPaddingTop(); + int right = view.getPaddingRight(); + int left = view.getPaddingLeft(); + view.setBackgroundResource(R.drawable.menu_drawer_selected); + view.setPadding(left, top, right, bottom); } else { - v.setBackgroundResource(R.drawable.md_list_selector); + view.setBackgroundResource(R.drawable.md_list_selector); } - // allow the menudrawer item to configure the view - item.configureView(v); + item.configureView(view); - return v; + return view; } } @@ -542,7 +538,7 @@ public void stopAnimatingRefreshButton(MenuItem refreshItem) { refreshItem.setActionView(null); } } - + @Override public void onConfigurationChanged(Configuration newConfig) { @@ -557,4 +553,214 @@ public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); } + + private class ReaderMenuItem extends MenuDrawerItem { + + ReaderMenuItem(){ + super(READER_ACTIVITY, R.string.reader, R.drawable.dashboard_icon_subs); + } + + @Override + public Boolean isVisible(){ + return WordPress.currentBlog != null && WordPress.currentBlog.isDotcomFlag(); + } + + @Override + public Boolean isSelected(){ + return WPActionBarActivity.this instanceof ReaderActivity; + } + @Override + public void onSelectItem(){ + if (!(WPActionBarActivity.this instanceof ReaderActivity)) + mShouldFinish = true; + int readerBlogID = WordPress.wpDB.getWPCOMBlogID(); + Intent intent = new Intent(WPActionBarActivity.this, ReaderActivity.class); + intent.putExtra("id", readerBlogID); + intent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); + startActivityWithDelay(intent); + } + + } + + private class PostsMenuItem extends MenuDrawerItem { + PostsMenuItem(){ + super(POSTS_ACTIVITY, R.string.posts, R.drawable.dashboard_icon_posts); + } + @Override + public Boolean isSelected(){ + WPActionBarActivity activity = WPActionBarActivity.this; + return (activity instanceof PostsActivity) && !(activity instanceof PagesActivity); + } + @Override + public void onSelectItem(){ + if (!(WPActionBarActivity.this instanceof PostsActivity) + || (WPActionBarActivity.this instanceof PagesActivity)) + mShouldFinish = true; + Intent intent = new Intent(WPActionBarActivity.this, PostsActivity.class); + intent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); + startActivityWithDelay(intent); + } + } + + private class PagesMenuItem extends MenuDrawerItem { + PagesMenuItem(){ + super(PAGES_ACTIVITY, R.string.pages, R.drawable.dashboard_icon_pages); + } + @Override + public Boolean isSelected(){ + return WPActionBarActivity.this instanceof PagesActivity; + } + @Override + public void onSelectItem(){ + if (!(WPActionBarActivity.this instanceof PagesActivity)) + mShouldFinish = true; + Intent intent = new Intent(WPActionBarActivity.this, PagesActivity.class); + intent.putExtra("id", WordPress.currentBlog.getId()); + intent.putExtra("isNew", + true); + intent.putExtra("viewPages", true); + intent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); + startActivityWithDelay(intent); + } + } + + private class CommentsMenuItem extends MenuDrawerItem { + CommentsMenuItem(){ + super(COMMENTS_ACTIVITY, R.string.tab_comments, R.drawable.dashboard_icon_comments); + } + @Override + public Boolean isSelected(){ + return WPActionBarActivity.this instanceof CommentsActivity; + } + @Override + public void onSelectItem(){ + if (!(WPActionBarActivity.this instanceof CommentsActivity)) + mShouldFinish = true; + Intent intent = new Intent(WPActionBarActivity.this, CommentsActivity.class); + intent.putExtra("id", WordPress.currentBlog.getId()); + intent.putExtra("isNew", + true); + intent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); + startActivityWithDelay(intent); + } + @Override + public void configureView(View view){ + TextView bagdeTextView = (TextView) view.findViewById(R.id.menu_row_badge); + int commentCount = WordPress.currentBlog.getUnmoderatedCommentCount(); + if (commentCount > 0) { + bagdeTextView.setVisibility(View.VISIBLE); + } else + { + bagdeTextView.setVisibility(View.GONE); + } + bagdeTextView.setText(String.valueOf(commentCount)); + } + } + + private class StatsMenuItem extends MenuDrawerItem { + StatsMenuItem(){ + super(STATS_ACTIVITY, R.string.tab_stats, R.drawable.dashboard_icon_stats); + } + @Override + public Boolean isSelected(){ + return WPActionBarActivity.this instanceof StatsActivity; + } + @Override + public void onSelectItem(){ + if (!(WPActionBarActivity.this instanceof StatsActivity)) + mShouldFinish = true; + Intent intent = new Intent(WPActionBarActivity.this, StatsActivity.class); + intent.putExtra("id", WordPress.currentBlog.getId()); + intent.putExtra("isNew", + true); + intent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); + startActivityWithDelay(intent); + } + } + + private class QuickPhotoMenuItem extends MenuDrawerItem { + QuickPhotoMenuItem(){ + super(R.string.quick_photo, R.drawable.dashboard_icon_photo); + } + @Override + public void onSelectItem(){ + mShouldFinish = false; + PackageManager pm = WPActionBarActivity.this.getPackageManager(); + Intent intent = new Intent(WPActionBarActivity.this, EditPostActivity.class); + if (pm.hasSystemFeature(PackageManager.FEATURE_CAMERA)) { + intent.putExtra("quick-media", Constants.QUICK_POST_PHOTO_CAMERA); + } else { + intent.putExtra("quick-media", Constants.QUICK_POST_PHOTO_LIBRARY); + } + intent.putExtra("isNew", true); + startActivityWithDelay(intent); + } + } + + private class QuickVideoMenuItem extends MenuDrawerItem { + QuickVideoMenuItem(){ + super(R.string.quick_video, R.drawable.dashboard_icon_video); + } + @Override + public void onSelectItem(){ + mShouldFinish = false; + PackageManager pm = WPActionBarActivity.this.getPackageManager(); + Intent intent = new Intent(WPActionBarActivity.this, EditPostActivity.class); + if (pm.hasSystemFeature(PackageManager.FEATURE_CAMERA)) { + intent.putExtra("quick-media", Constants.QUICK_POST_VIDEO_CAMERA); + } else { + intent.putExtra("quick-media", Constants.QUICK_POST_VIDEO_LIBRARY); + } + intent.putExtra("isNew", true); + startActivityWithDelay(intent); + } + } + + private class ViewSiteMenuItem extends MenuDrawerItem { + ViewSiteMenuItem(){ + super(VIEW_SITE_ACTIVITY, R.string.view_site, R.drawable.dashboard_icon_view); + } + @Override + public Boolean isSelected(){ + return WPActionBarActivity.this instanceof ViewSiteActivity; + } + @Override + public void onSelectItem(){ + if (!(WPActionBarActivity.this instanceof ViewSiteActivity)) + mShouldFinish = true; + Intent intent = new Intent(WPActionBarActivity.this, ViewSiteActivity.class); + intent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); + startActivityWithDelay(intent); + } + } + + private class AdminMenuItem extends MenuDrawerItem { + AdminMenuItem(){ + super(DASHBOARD_ACTIVITY, R.string.wp_admin, R.drawable.dashboard_icon_wp); + } + @Override + public Boolean isSelected(){ + return WPActionBarActivity.this instanceof DashboardActivity; + } + @Override + public void onSelectItem(){ + if (!(WPActionBarActivity.this instanceof DashboardActivity)) + mShouldFinish = true; + Intent intent = new Intent(WPActionBarActivity.this, DashboardActivity.class); + intent.putExtra("loadAdmin", true); + intent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); + startActivityWithDelay(intent); + } + } + private class SettingsMenuItem extends MenuDrawerItem { + SettingsMenuItem(){ + super(SETTINGS_ACTIVITY, R.string.settings, R.drawable.dashboard_icon_settings); + } + @Override + public void onSelectItem(){ + mShouldFinish = false; + Intent settingsIntent = new Intent(WPActionBarActivity.this, PreferencesActivity.class); + startActivityForResult(settingsIntent, SETTINGS_REQUEST); + } + } } From 8947a6c1f3c8d36bc79c5a7c63c908fb3a1dad4a Mon Sep 17 00:00:00 2001 From: Robert Collins Date: Wed, 10 Apr 2013 11:30:25 -0700 Subject: [PATCH 3/4] Removing random new line --- src/org/wordpress/android/ui/MenuDrawerItem.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/org/wordpress/android/ui/MenuDrawerItem.java b/src/org/wordpress/android/ui/MenuDrawerItem.java index cf98fadb65b9..c8cf296a7f22 100644 --- a/src/org/wordpress/android/ui/MenuDrawerItem.java +++ b/src/org/wordpress/android/ui/MenuDrawerItem.java @@ -6,7 +6,6 @@ package org.wordpress.android.ui; import android.view.View; -import android.content.Intent; abstract class MenuDrawerItem { /** From ea6c411d5d94ba753c13941725bb9a1094c51377 Mon Sep 17 00:00:00 2001 From: Robert Collins Date: Wed, 10 Apr 2013 11:30:36 -0700 Subject: [PATCH 4/4] Removing unused import --- src/org/wordpress/android/ui/WPActionBarActivity.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/org/wordpress/android/ui/WPActionBarActivity.java b/src/org/wordpress/android/ui/WPActionBarActivity.java index d46c415f87e6..1011d79dc7f6 100644 --- a/src/org/wordpress/android/ui/WPActionBarActivity.java +++ b/src/org/wordpress/android/ui/WPActionBarActivity.java @@ -616,8 +616,7 @@ public void onSelectItem(){ mShouldFinish = true; Intent intent = new Intent(WPActionBarActivity.this, PagesActivity.class); intent.putExtra("id", WordPress.currentBlog.getId()); - intent.putExtra("isNew", - true); + intent.putExtra("isNew", true); intent.putExtra("viewPages", true); intent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); startActivityWithDelay(intent);