From 7f268200c8f454dedb87729278d11184e2274d63 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Rutkowski?= Date: Sat, 16 Sep 2017 13:10:47 +0200 Subject: [PATCH 1/2] Move starred repositories to bookmarks screen Related to #578, #624 and #725 --- .../gh4a/activities/home/BookmarkFactory.java | 16 ++++++++++++---- .../com/gh4a/activities/home/HomeActivity.java | 2 +- .../RepositoryListContainerFragment.java | 9 +-------- app/src/main/res/menu/home_nav_drawer.xml | 2 +- app/src/main/res/menu/repo_filter_logged_in.xml | 3 --- app/src/main/res/values/strings.xml | 1 + 6 files changed, 16 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/com/gh4a/activities/home/BookmarkFactory.java b/app/src/main/java/com/gh4a/activities/home/BookmarkFactory.java index d349ede45..a2b5defa1 100644 --- a/app/src/main/java/com/gh4a/activities/home/BookmarkFactory.java +++ b/app/src/main/java/com/gh4a/activities/home/BookmarkFactory.java @@ -5,19 +5,24 @@ import com.gh4a.R; import com.gh4a.fragment.BookmarkListFragment; +import com.gh4a.fragment.StarredRepositoryListFragment; public class BookmarkFactory extends FragmentFactory { private static final int[] TAB_TITLES = new int[] { - R.string.bookmarks + R.string.bookmarks, R.string.starred }; - public BookmarkFactory(HomeActivity activity) { + private final String mUserLogin; + + public BookmarkFactory(HomeActivity activity, String userLogin) { super(activity); + mUserLogin = userLogin; } @Override - protected @StringRes int getTitleResId() { - return R.string.bookmarks; + @StringRes + protected int getTitleResId() { + return R.string.stars_and_bookmarks; } @Override @@ -27,6 +32,9 @@ protected int[] getTabTitleResIds() { @Override protected Fragment makeFragment(int position) { + if (position == 1) { + return StarredRepositoryListFragment.newInstance(mUserLogin, "", ""); // TODO + } return BookmarkListFragment.newInstance(); } } diff --git a/app/src/main/java/com/gh4a/activities/home/HomeActivity.java b/app/src/main/java/com/gh4a/activities/home/HomeActivity.java index 4dddb2f8d..532e010e0 100644 --- a/app/src/main/java/com/gh4a/activities/home/HomeActivity.java +++ b/app/src/main/java/com/gh4a/activities/home/HomeActivity.java @@ -311,7 +311,7 @@ private FragmentFactory getFactoryForItem(int id) { case R.id.search: return new SearchFactory(this); case R.id.bookmarks: - return new BookmarkFactory(this); + return new BookmarkFactory(this, mUserLogin); case R.id.pub_timeline: return new TimelineFactory(this); case R.id.blog: diff --git a/app/src/main/java/com/gh4a/fragment/RepositoryListContainerFragment.java b/app/src/main/java/com/gh4a/fragment/RepositoryListContainerFragment.java index b43ecd44b..6dac89a6d 100644 --- a/app/src/main/java/com/gh4a/fragment/RepositoryListContainerFragment.java +++ b/app/src/main/java/com/gh4a/fragment/RepositoryListContainerFragment.java @@ -188,10 +188,6 @@ private void applyFilterTypeAndSortOrder() { } switch (mFilterType) { - case "starred": - mMainFragment = StarredRepositoryListFragment.newInstance(mUserLogin, - mSortOrder, mSortDirection); - break; case "watched": mMainFragment = WatchedRepositoryListFragment.newInstance(mUserLogin); break; @@ -364,7 +360,6 @@ public static class FilterDrawerHelper { FILTER_LOOKUP.put(R.id.filter_type_sources, "sources"); FILTER_LOOKUP.put(R.id.filter_type_forks, "forks"); FILTER_LOOKUP.put(R.id.filter_type_watched, "watched"); - FILTER_LOOKUP.put(R.id.filter_type_starred, "starred"); } public static FilterDrawerHelper create(String userLogin, boolean isOrg) { @@ -427,9 +422,7 @@ public void setFilterType(String type) { } public int getMenuResId() { - return TextUtils.equals(mFilterType, "starred") ? R.menu.repo_starred_sort - : TextUtils.equals(mFilterType, "watched") ? 0 - : R.menu.repo_sort; + return TextUtils.equals(mFilterType, "watched") ? 0 : R.menu.repo_sort; } public void selectSortType(Menu menu, String order, String direction) { diff --git a/app/src/main/res/menu/home_nav_drawer.xml b/app/src/main/res/menu/home_nav_drawer.xml index 46f40b417..bafd8f9ac 100644 --- a/app/src/main/res/menu/home_nav_drawer.xml +++ b/app/src/main/res/menu/home_nav_drawer.xml @@ -40,7 +40,7 @@ android:icon="@drawable/icon_search"/> - diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 3b23fba55..c445c30e4 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -45,6 +45,7 @@ By Email By OctoDroid Bookmarks + Stars and Bookmarks Other Information View Readme From e4be52bedd7c2e90154c9a43017b963e62ddeaf0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Rutkowski?= Date: Thu, 28 Sep 2017 14:04:25 +0200 Subject: [PATCH 2/2] Add sort order to list of starred repos --- .../activities/RepositoryListActivity.java | 4 +- .../gh4a/activities/home/BookmarkFactory.java | 2 +- .../activities/home/RepositoryFactory.java | 4 +- .../RepositoryListContainerFragment.java | 7 ++- .../StarredRepositoryListFragment.java | 53 ++++++++++++++++--- app/src/main/res/drawable/sort_order.xml | 9 ++++ ...ed_sort.xml => repo_starred_list_menu.xml} | 13 ++++- 7 files changed, 76 insertions(+), 16 deletions(-) create mode 100644 app/src/main/res/drawable/sort_order.xml rename app/src/main/res/menu/{repo_starred_sort.xml => repo_starred_list_menu.xml} (78%) diff --git a/app/src/main/java/com/gh4a/activities/RepositoryListActivity.java b/app/src/main/java/com/gh4a/activities/RepositoryListActivity.java index b4924b1a5..8ebd2a61b 100644 --- a/app/src/main/java/com/gh4a/activities/RepositoryListActivity.java +++ b/app/src/main/java/com/gh4a/activities/RepositoryListActivity.java @@ -105,8 +105,8 @@ protected int[] getRightNavigationDrawerMenuResources() { protected void onPrepareRightNavigationDrawerMenu(Menu menu) { if (mFragment != null) { mFilterDrawerHelper.selectFilterType(menu, mFragment.getFilterType()); - mSortDrawerHelper.selectSortType(menu, - mFragment.getSortOrder(), mFragment.getSortDirection()); + mSortDrawerHelper.selectSortType(menu, mFragment.getSortOrder(), + mFragment.getSortDirection(), false); } } diff --git a/app/src/main/java/com/gh4a/activities/home/BookmarkFactory.java b/app/src/main/java/com/gh4a/activities/home/BookmarkFactory.java index a2b5defa1..744d843c3 100644 --- a/app/src/main/java/com/gh4a/activities/home/BookmarkFactory.java +++ b/app/src/main/java/com/gh4a/activities/home/BookmarkFactory.java @@ -33,7 +33,7 @@ protected int[] getTabTitleResIds() { @Override protected Fragment makeFragment(int position) { if (position == 1) { - return StarredRepositoryListFragment.newInstance(mUserLogin, "", ""); // TODO + return StarredRepositoryListFragment.newInstance(mUserLogin); } return BookmarkListFragment.newInstance(); } diff --git a/app/src/main/java/com/gh4a/activities/home/RepositoryFactory.java b/app/src/main/java/com/gh4a/activities/home/RepositoryFactory.java index 5bf87ee78..0a79a3063 100644 --- a/app/src/main/java/com/gh4a/activities/home/RepositoryFactory.java +++ b/app/src/main/java/com/gh4a/activities/home/RepositoryFactory.java @@ -61,8 +61,8 @@ protected void prepareToolDrawerMenu(Menu menu) { super.prepareToolDrawerMenu(menu); if (mFragment != null) { mFilterDrawerHelper.selectFilterType(menu, mFragment.getFilterType()); - mSortDrawerHelper.selectSortType(menu, - mFragment.getSortOrder(), mFragment.getSortDirection()); + mSortDrawerHelper.selectSortType(menu, mFragment.getSortOrder(), + mFragment.getSortDirection(), false); } } diff --git a/app/src/main/java/com/gh4a/fragment/RepositoryListContainerFragment.java b/app/src/main/java/com/gh4a/fragment/RepositoryListContainerFragment.java index 6dac89a6d..b71cbdbfe 100644 --- a/app/src/main/java/com/gh4a/fragment/RepositoryListContainerFragment.java +++ b/app/src/main/java/com/gh4a/fragment/RepositoryListContainerFragment.java @@ -425,12 +425,17 @@ public int getMenuResId() { return TextUtils.equals(mFilterType, "watched") ? 0 : R.menu.repo_sort; } - public void selectSortType(Menu menu, String order, String direction) { + public void selectSortType(Menu menu, String order, String direction, + boolean updateSingleItem) { int selectedId = 0; for (int i = 0; i < SORT_LOOKUP.size(); i++) { String[] value = SORT_LOOKUP.valueAt(i); if (value[0].equals(order) && value[1].equals(direction)) { selectedId = SORT_LOOKUP.keyAt(i); + if (updateSingleItem) { + menu.findItem(selectedId).setChecked(true); + return; + } break; } } diff --git a/app/src/main/java/com/gh4a/fragment/StarredRepositoryListFragment.java b/app/src/main/java/com/gh4a/fragment/StarredRepositoryListFragment.java index d7e86b210..523bb2c7c 100644 --- a/app/src/main/java/com/gh4a/fragment/StarredRepositoryListFragment.java +++ b/app/src/main/java/com/gh4a/fragment/StarredRepositoryListFragment.java @@ -17,6 +17,9 @@ import android.os.Bundle; import android.support.v7.widget.RecyclerView; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; import com.gh4a.R; import com.gh4a.ServiceFactory; @@ -33,29 +36,63 @@ import retrofit2.Response; public class StarredRepositoryListFragment extends PagedDataBaseFragment { - public static StarredRepositoryListFragment newInstance(String login, - String sortOrder, String sortDirection) { + private static final String STATE_KEY_SORT_ORDER = "sort_order"; + private static final String STATE_KEY_SORT_DIRECTION = "sort_direction"; + + public static StarredRepositoryListFragment newInstance(String login) { StarredRepositoryListFragment f = new StarredRepositoryListFragment(); Bundle args = new Bundle(); args.putString("user", login); - args.putString("sort_order", sortOrder); - args.putString("sort_direction", sortDirection); f.setArguments(args); return f; } private String mLogin; - private String mSortOrder; - private String mSortDirection; + private String mSortOrder = "created"; + private String mSortDirection = "desc"; + private RepositoryListContainerFragment.SortDrawerHelper mSortHelper; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mLogin = getArguments().getString("user"); - mSortOrder = getArguments().getString("sort_order"); - mSortDirection = getArguments().getString("sort_direction"); + + mSortHelper = new RepositoryListContainerFragment.SortDrawerHelper(); + + if (savedInstanceState != null && savedInstanceState.containsKey(STATE_KEY_SORT_ORDER)) { + mSortOrder = savedInstanceState.getString(STATE_KEY_SORT_ORDER); + mSortDirection = savedInstanceState.getString(STATE_KEY_SORT_DIRECTION); + } + setHasOptionsMenu(true); + } + + @Override + public void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + outState.putString(STATE_KEY_SORT_ORDER, mSortOrder); + outState.putString(STATE_KEY_SORT_DIRECTION, mSortDirection); + } + + @Override + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + super.onCreateOptionsMenu(menu, inflater); + inflater.inflate(R.menu.repo_starred_list_menu, menu); + mSortHelper.selectSortType(menu, mSortOrder, mSortDirection, true); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + String[] sortOrderAndDirection = mSortHelper.handleSelectionAndGetSortOrder(item); + if (sortOrderAndDirection == null) { + return false; + } + mSortOrder = sortOrderAndDirection[0]; + mSortDirection = sortOrderAndDirection[1]; + item.setChecked(true); + onRefresh(); + return true; } @Override diff --git a/app/src/main/res/drawable/sort_order.xml b/app/src/main/res/drawable/sort_order.xml new file mode 100644 index 000000000..8011c27eb --- /dev/null +++ b/app/src/main/res/drawable/sort_order.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/menu/repo_starred_sort.xml b/app/src/main/res/menu/repo_starred_list_menu.xml similarity index 78% rename from app/src/main/res/menu/repo_starred_sort.xml rename to app/src/main/res/menu/repo_starred_list_menu.xml index 63721e3bb..c53d18ef3 100644 --- a/app/src/main/res/menu/repo_starred_sort.xml +++ b/app/src/main/res/menu/repo_starred_list_menu.xml @@ -1,6 +1,13 @@ - - + + + + + + \ No newline at end of file