Skip to content

Commit 1a36a67

Browse files
committed
Add sort order to list of starred repos
1 parent 69e8024 commit 1a36a67

File tree

8 files changed

+97
-26
lines changed

8 files changed

+97
-26
lines changed

app/src/main/java/com/gh4a/activities/RepositoryListActivity.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,8 +97,8 @@ protected int[] getRightNavigationDrawerMenuResources() {
9797
protected void onPrepareRightNavigationDrawerMenu(Menu menu) {
9898
if (mFragment != null) {
9999
mFilterDrawerHelper.selectFilterType(menu, mFragment.getFilterType());
100-
mSortDrawerHelper.selectSortType(menu,
101-
mFragment.getSortOrder(), mFragment.getSortDirection());
100+
mSortDrawerHelper.selectSortType(menu, mFragment.getSortOrder(),
101+
mFragment.getSortDirection(), false);
102102
}
103103
}
104104

app/src/main/java/com/gh4a/activities/home/BookmarkFactory.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ protected int[] getTabTitleResIds() {
3333
@Override
3434
protected Fragment makeFragment(int position) {
3535
if (position == 1) {
36-
return StarredRepositoryListFragment.newInstance(mUserLogin, "", ""); // TODO
36+
return StarredRepositoryListFragment.newInstance(mUserLogin);
3737
}
3838
return BookmarkListFragment.newInstance();
3939
}

app/src/main/java/com/gh4a/activities/home/RepositoryFactory.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,8 @@ protected void prepareToolDrawerMenu(Menu menu) {
6161
super.prepareToolDrawerMenu(menu);
6262
if (mFragment != null) {
6363
mFilterDrawerHelper.selectFilterType(menu, mFragment.getFilterType());
64-
mSortDrawerHelper.selectSortType(menu,
65-
mFragment.getSortOrder(), mFragment.getSortDirection());
64+
mSortDrawerHelper.selectSortType(menu, mFragment.getSortOrder(),
65+
mFragment.getSortDirection(), false);
6666
}
6767
}
6868

app/src/main/java/com/gh4a/fragment/PagedDataBaseFragment.java

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,13 +35,14 @@
3535

3636
public abstract class PagedDataBaseFragment<T> extends LoadingListFragmentBase implements
3737
RootAdapter.OnItemClickListener<T>, RootAdapter.OnScrolledToFooterListener {
38+
private static final String STATE_KEY_ITERATOR_STATE = "iterator_state";
39+
private static final int ID_LOADER_CONTENT = 0;
40+
3841
private RootAdapter<T, ? extends RecyclerView.ViewHolder> mAdapter;
3942
private PageIteratorWithSaveableState<T> mIterator;
4043
private boolean mIsLoadCompleted;
4144
private View mLoadingView;
4245

43-
private static final String STATE_KEY_ITERATOR_STATE = "iterator_state";
44-
4546
private final LoaderCallbacks<PageIteratorLoader<T>.LoadedPage> mLoaderCallback =
4647
new LoaderCallbacks<PageIteratorLoader<T>.LoadedPage>(this) {
4748
@Override
@@ -65,12 +66,12 @@ public void onActivityCreated(Bundle savedInstanceState) {
6566

6667
setContentShown(false);
6768

68-
mIterator = (PageIteratorWithSaveableState<T>) onCreateIterator();
69+
recreateIterator();
6970
if (savedInstanceState != null) {
7071
mIterator.restoreState(savedInstanceState.getBundle(STATE_KEY_ITERATOR_STATE));
7172
}
7273

73-
getLoaderManager().initLoader(0, null, mLoaderCallback);
74+
getLoaderManager().initLoader(ID_LOADER_CONTENT, null, mLoaderCallback);
7475
}
7576

7677
@Override
@@ -87,7 +88,17 @@ public void onRefresh() {
8788
mAdapter.clear();
8889
}
8990
mIsLoadCompleted = false;
90-
hideContentAndRestartLoaders(0);
91+
hideContentAndRestartLoaders(ID_LOADER_CONTENT);
92+
}
93+
94+
protected void recreateIterator() {
95+
mIterator = (PageIteratorWithSaveableState<T>) onCreateIterator();
96+
}
97+
98+
protected void recreateIteratorAndRefresh() {
99+
recreateIterator();
100+
getLoaderManager().restartLoader(ID_LOADER_CONTENT, null, mLoaderCallback);
101+
onRefresh();
91102
}
92103

93104
@Override
@@ -141,7 +152,7 @@ protected void onAddData(RootAdapter<T, ? extends RecyclerView.ViewHolder> adapt
141152
public void onScrolledToFooter() {
142153
if (mIsLoadCompleted && mLoadingView.getVisibility() == View.VISIBLE) {
143154
mIsLoadCompleted = false;
144-
getLoaderManager().getLoader(0).forceLoad();
155+
getLoaderManager().getLoader(ID_LOADER_CONTENT).forceLoad();
145156
}
146157
}
147158

app/src/main/java/com/gh4a/fragment/RepositoryListContainerFragment.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -433,12 +433,17 @@ public int getMenuResId() {
433433
return TextUtils.equals(mFilterType, "watched") ? 0 : R.menu.repo_sort;
434434
}
435435

436-
public void selectSortType(Menu menu, String order, String direction) {
436+
public void selectSortType(Menu menu, String order, String direction,
437+
boolean updateSingleItem) {
437438
int selectedId = 0;
438439
for (int i = 0; i < SORT_LOOKUP.size(); i++) {
439440
String[] value = SORT_LOOKUP.valueAt(i);
440441
if (value[0].equals(order) && value[1].equals(direction)) {
441442
selectedId = SORT_LOOKUP.keyAt(i);
443+
if (updateSingleItem) {
444+
menu.findItem(selectedId).setChecked(true);
445+
return;
446+
}
442447
break;
443448
}
444449
}

app/src/main/java/com/gh4a/fragment/StarredRepositoryListFragment.java

Lines changed: 49 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,45 +15,82 @@
1515
*/
1616
package com.gh4a.fragment;
1717

18-
import org.eclipse.egit.github.core.Repository;
19-
import org.eclipse.egit.github.core.client.PageIterator;
20-
import org.eclipse.egit.github.core.service.StarService;
21-
2218
import android.os.Bundle;
2319
import android.support.v7.widget.RecyclerView;
20+
import android.view.Menu;
21+
import android.view.MenuInflater;
22+
import android.view.MenuItem;
2423

2524
import com.gh4a.Gh4Application;
2625
import com.gh4a.R;
2726
import com.gh4a.activities.RepositoryActivity;
2827
import com.gh4a.adapter.RepositoryAdapter;
2928
import com.gh4a.adapter.RootAdapter;
3029

30+
import org.eclipse.egit.github.core.Repository;
31+
import org.eclipse.egit.github.core.client.PageIterator;
32+
import org.eclipse.egit.github.core.service.StarService;
33+
3134
import java.util.HashMap;
3235

3336
public class StarredRepositoryListFragment extends PagedDataBaseFragment<Repository> {
34-
public static StarredRepositoryListFragment newInstance(String login,
35-
String sortOrder, String sortDirection) {
37+
private static final String STATE_KEY_SORT_ORDER = "sort_order";
38+
private static final String STATE_KEY_SORT_DIRECTION = "sort_direction";
39+
40+
public static StarredRepositoryListFragment newInstance(String login) {
3641
StarredRepositoryListFragment f = new StarredRepositoryListFragment();
3742

3843
Bundle args = new Bundle();
3944
args.putString("user", login);
40-
args.putString("sort_order", sortOrder);
41-
args.putString("sort_direction", sortDirection);
4245
f.setArguments(args);
4346

4447
return f;
4548
}
4649

4750
private String mLogin;
48-
private String mSortOrder;
49-
private String mSortDirection;
51+
private String mSortOrder = "created";
52+
private String mSortDirection = "desc";
53+
private RepositoryListContainerFragment.SortDrawerHelper mSortHelper;
5054

5155
@Override
5256
public void onCreate(Bundle savedInstanceState) {
5357
super.onCreate(savedInstanceState);
5458
mLogin = getArguments().getString("user");
55-
mSortOrder = getArguments().getString("sort_order");
56-
mSortDirection = getArguments().getString("sort_direction");
59+
60+
mSortHelper = new RepositoryListContainerFragment.SortDrawerHelper();
61+
62+
if (savedInstanceState != null && savedInstanceState.containsKey(STATE_KEY_SORT_ORDER)) {
63+
mSortOrder = savedInstanceState.getString(STATE_KEY_SORT_ORDER);
64+
mSortDirection = savedInstanceState.getString(STATE_KEY_SORT_DIRECTION);
65+
}
66+
setHasOptionsMenu(true);
67+
}
68+
69+
@Override
70+
public void onSaveInstanceState(Bundle outState) {
71+
super.onSaveInstanceState(outState);
72+
outState.putString(STATE_KEY_SORT_ORDER, mSortOrder);
73+
outState.putString(STATE_KEY_SORT_DIRECTION, mSortDirection);
74+
}
75+
76+
@Override
77+
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
78+
super.onCreateOptionsMenu(menu, inflater);
79+
inflater.inflate(R.menu.repo_starred_list_menu, menu);
80+
mSortHelper.selectSortType(menu, mSortOrder, mSortDirection, true);
81+
}
82+
83+
@Override
84+
public boolean onOptionsItemSelected(MenuItem item) {
85+
String[] sortOrderAndDirection = mSortHelper.handleSelectionAndGetSortOrder(item);
86+
if (sortOrderAndDirection == null) {
87+
return false;
88+
}
89+
mSortOrder = sortOrderAndDirection[0];
90+
mSortDirection = sortOrderAndDirection[1];
91+
item.setChecked(true);
92+
recreateIteratorAndRefresh();
93+
return true;
5794
}
5895

5996
@Override
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
2+
android:width="24dp"
3+
android:height="24dp"
4+
android:viewportHeight="24.0"
5+
android:viewportWidth="24.0">
6+
<path
7+
android:fillColor="#ffffff"
8+
android:pathData="M3,18h6v-2L3,16v2zM3,6v2h18L21,6L3,6zM3,13h12v-2L3,11v2z" />
9+
</vector>

app/src/main/res/menu/repo_starred_sort.xml renamed to app/src/main/res/menu/repo_starred_list_menu.xml

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
11
<?xml version="1.0" encoding="utf-8"?>
2-
<menu xmlns:android="http://schemas.android.com/apk/res/android">
3-
<item android:title="@string/repo_sort">
2+
<menu xmlns:android="http://schemas.android.com/apk/res/android"
3+
xmlns:app="http://schemas.android.com/apk/res-auto">
4+
5+
<item
6+
android:id="@+id/sort_order"
7+
android:icon="@drawable/sort_order"
8+
android:title="@string/repo_sort"
9+
app:showAsAction="always">
10+
411
<menu>
512
<group android:checkableBehavior="single">
613
<item
@@ -17,5 +24,7 @@
1724
android:title="@string/repo_sort_order_pushed_desc" />
1825
</group>
1926
</menu>
27+
2028
</item>
29+
2130
</menu>

0 commit comments

Comments
 (0)