Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions res/menu/home_nav_drawer.xml
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,10 @@
android:id="@+id/bookmarks"
android:title="@string/bookmarks"
android:icon="@drawable/icon_bookmark" />
<item
android:id="@+id/starred_repos"
android:title="@string/starred_repositories"
android:icon="@drawable/unstar" />
</group>
<group
android:id="@+id/explore"
Expand Down
2 changes: 2 additions & 0 deletions res/values/arrays.xml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
<item>@string/my_gists</item>
<item>@string/search</item>
<item>@string/bookmarks</item>
<item>@string/starred_repositories</item>
<item>@string/pub_timeline</item>
<item>@string/trend</item>
<item>@string/blog</item>
Expand All @@ -32,6 +33,7 @@
<item>gists</item>
<item>search</item>
<item>bookmarks</item>
<item>stars</item>
<item>timeline</item>
<item>trends</item>
<item>blog</item>
Expand Down
1 change: 1 addition & 0 deletions res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,7 @@
<string name="mentioned">Mentioned</string>
<string name="participating">Participating</string>
<string name="my_repositories">My repositories</string>
<string name="starred_repositories">Starred repositories</string>
<string name="my_issues">My issues</string>
<string name="my_pull_requests">My pull requests</string>
<string name="my_gists">My gists</string>
Expand Down
2 changes: 1 addition & 1 deletion src/com/gh4a/activities/RepositoryListActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ protected void onInitExtras(Bundle extras) {

mFilterDrawerHelper = RepositoryListContainerFragment.FilterDrawerHelper.create(
mUserLogin, mUserIsOrg);
mSortDrawerHelper = new RepositoryListContainerFragment.SortDrawerHelper();
mSortDrawerHelper = new RepositoryListContainerFragment.SortDrawerHelper(false);
}

@Override
Expand Down
5 changes: 4 additions & 1 deletion src/com/gh4a/activities/home/HomeActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ public class HomeActivity extends BasePagerActivity implements
START_PAGE_MAPPING.put(R.id.blog, "blog");
START_PAGE_MAPPING.put(R.id.bookmarks, "bookmarks");
START_PAGE_MAPPING.put(R.id.search, "search");
START_PAGE_MAPPING.put(R.id.starred_repos, "stars");
}

private final LoaderCallbacks<User> mUserCallback = new LoaderCallbacks<User>(this) {
Expand Down Expand Up @@ -237,7 +238,7 @@ private FragmentFactory getFactoryForItem(int id) {
case R.id.notifications:
return new NotificationListFactory(this);
case R.id.my_repos:
return new RepositoryFactory(this, mUserLogin, getPrefs());
return new RepositoryFactory(this, mUserLogin, getPrefs(), false);
case R.id.my_issues:
return new IssueListFactory(this, mUserLogin, false);
case R.id.my_prs:
Expand All @@ -248,6 +249,8 @@ private FragmentFactory getFactoryForItem(int id) {
return new SearchFactory(this);
case R.id.bookmarks:
return new BookmarkFactory(this);
case R.id.starred_repos:
return new RepositoryFactory(this, mUserLogin, getPrefs(), true);
case R.id.pub_timeline:
return new TimelineFactory(this);
case R.id.blog:
Expand Down
31 changes: 24 additions & 7 deletions src/com/gh4a/activities/home/RepositoryFactory.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,51 +9,65 @@

import com.gh4a.R;
import com.gh4a.fragment.RepositoryListContainerFragment;
import com.gh4a.fragment.StarredRepositoryListContainerFragment;

public class RepositoryFactory extends FragmentFactory {
private static final int[] TAB_TITLES = new int[] {
R.string.my_repositories
R.string.my_repositories
};
private static final int[] STARRED_TAB_TITLES = new int[] {
R.string.starred_repositories
};

private final String mUserLogin;
private final RepositoryListContainerFragment.FilterDrawerHelper mFilterDrawerHelper;
private final RepositoryListContainerFragment.SortDrawerHelper mSortDrawerHelper;
private RepositoryListContainerFragment mFragment;
private final SharedPreferences mPrefs;
private final boolean mOnlyStarred;

private static final String STATE_KEY_FRAGMENT = "repoFactoryFragment";
private static final String PREF_KEY_FILTER = "home_repo_list_filter";
private static final String PREF_KEY_SORT_ORDER = "home_repo_list_sort_order";
private static final String PREF_KEY_SORT_DIR = "home_repo_list_sort_dir";

public RepositoryFactory(HomeActivity activity, String userLogin, SharedPreferences prefs) {
public RepositoryFactory(HomeActivity activity, String userLogin, SharedPreferences prefs,
boolean onlyStarred) {
super(activity);
mUserLogin = userLogin;
mOnlyStarred = onlyStarred;

mFilterDrawerHelper = RepositoryListContainerFragment.FilterDrawerHelper.create(mUserLogin, false);
mSortDrawerHelper = new RepositoryListContainerFragment.SortDrawerHelper();
mSortDrawerHelper = new RepositoryListContainerFragment.SortDrawerHelper(mOnlyStarred);
mPrefs = prefs;
}

@Override
protected @StringRes int getTitleResId() {
return R.string.my_repositories;
return getTabTitleResIds()[0];
}

@Override
protected int[] getTabTitleResIds() {
return TAB_TITLES;
return mOnlyStarred ? STARRED_TAB_TITLES : TAB_TITLES;
}

@Override
protected int[] getToolDrawerMenuResIds() {
int sortMenuResId = mSortDrawerHelper.getMenuResId();

if (mOnlyStarred) {
if (sortMenuResId == 0) {
return new int[] {};
}
return new int[] { sortMenuResId };
}

int filterMenuResId = mFilterDrawerHelper.getMenuResId();
if (sortMenuResId == 0) {
return new int[] { filterMenuResId };
} else {
return new int[] { sortMenuResId, filterMenuResId };
}
return new int[] { sortMenuResId, filterMenuResId };
}

@Override
Expand Down Expand Up @@ -118,6 +132,9 @@ protected void onRestoreInstanceState(Bundle state) {

@Override
protected Fragment makeFragment(int position) {
if (mOnlyStarred) {
return StarredRepositoryListContainerFragment.newInstance(mUserLogin, false);
}
return RepositoryListContainerFragment.newInstance(mUserLogin, false);
}

Expand Down
34 changes: 25 additions & 9 deletions src/com/gh4a/fragment/RepositoryListContainerFragment.java
Original file line number Diff line number Diff line change
Expand Up @@ -31,18 +31,20 @@ public class RepositoryListContainerFragment extends Fragment implements
MenuItemCompat.OnActionExpandListener, SwipeRefreshLayout.ChildScrollDelegate {
public static RepositoryListContainerFragment newInstance(String userLogin, boolean isOrg) {
RepositoryListContainerFragment f = new RepositoryListContainerFragment();
Bundle args = new Bundle();
f.setArguments(createArgs(userLogin, isOrg));
return f;
}

protected static Bundle createArgs(String userLogin, boolean isOrg) {
Bundle args = new Bundle();
args.putString("user", userLogin);
args.putBoolean("is_org", isOrg);
f.setArguments(args);

return f;
return args;
}

private String mUserLogin;
private boolean mIsOrg;
private String mFilterType = "all";
private String mFilterType = displayOnlyStarredRepos() ? "starred" : "all";
private String mSortOrder = "full_name";
private String mSortDirection = "asc";
private boolean mSearchVisible;
Expand All @@ -69,7 +71,8 @@ public void onCreate(Bundle savedInstanceState) {
mIsOrg = data.getBoolean("is_org");

if (savedInstanceState != null && savedInstanceState.containsKey(STATE_KEY_FILTER_TYPE)) {
mFilterType = savedInstanceState.getString(STATE_KEY_FILTER_TYPE);
mFilterType = displayOnlyStarredRepos()
? "starred" : savedInstanceState.getString(STATE_KEY_FILTER_TYPE);
mSortOrder = savedInstanceState.getString(STATE_KEY_SORT_ORDER);
mSortDirection = savedInstanceState.getString(STATE_KEY_SORT_DIRECTION);
mSearchVisible = savedInstanceState.getBoolean(STATE_KEY_SEARCH_VISIBLE);
Expand Down Expand Up @@ -140,6 +143,10 @@ public void onSaveInstanceState(Bundle outState) {
}

public void setFilterType(String type) {
if (displayOnlyStarredRepos()) {
return;
}

if (!TextUtils.equals(type, mFilterType)) {
mFilterType = type;
applyFilterTypeAndSortOrder();
Expand All @@ -155,6 +162,10 @@ public void setSortOrder(String sortOrder, String direction) {
}
}

protected boolean displayOnlyStarredRepos() {
return false;
}

private void validateSortOrder() {
if (TextUtils.equals(mFilterType, "starred")) {
if (!TextUtils.equals(mSortOrder, "updated")
Expand Down Expand Up @@ -393,7 +404,8 @@ public String handleSelectionAndGetFilterType(MenuItem item) {
}

public static class SortDrawerHelper {
private String mFilterType = "all";
private final boolean mOnlyStarredRepos;
private String mFilterType;

private static final SparseArray<String[]> SORT_LOOKUP = new SparseArray<>();
static {
Expand All @@ -407,11 +419,15 @@ public static class SortDrawerHelper {
SORT_LOOKUP.put(R.id.sort_updated_desc, new String[] { "updated", "desc" });
}

public SortDrawerHelper() {
public SortDrawerHelper(boolean onlyStarredRepos) {
mOnlyStarredRepos = onlyStarredRepos;
mFilterType = mOnlyStarredRepos ? "starred" : "all";
}

public void setFilterType(String type) {
mFilterType = type;
if (!mOnlyStarredRepos) {
mFilterType = type;
}
}

public int getMenuResId() {
Expand Down
15 changes: 15 additions & 0 deletions src/com/gh4a/fragment/StarredRepositoryListContainerFragment.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.gh4a.fragment;

public class StarredRepositoryListContainerFragment extends RepositoryListContainerFragment {
public static StarredRepositoryListContainerFragment newInstance(String userLogin,
boolean isOrg) {
StarredRepositoryListContainerFragment f = new StarredRepositoryListContainerFragment();
f.setArguments(createArgs(userLogin, isOrg));
return f;
}

@Override
protected boolean displayOnlyStarredRepos() {
return true;
}
}