diff --git a/res/menu/home_nav_drawer.xml b/res/menu/home_nav_drawer.xml
index 4f62a74ba..e01f6a182 100644
--- a/res/menu/home_nav_drawer.xml
+++ b/res/menu/home_nav_drawer.xml
@@ -41,6 +41,10 @@
android:id="@+id/bookmarks"
android:title="@string/bookmarks"
android:icon="@drawable/icon_bookmark" />
+
@string/my_gists
- @string/search
- @string/bookmarks
+ - @string/starred_repositories
- @string/pub_timeline
- @string/trend
- @string/blog
@@ -32,6 +33,7 @@
- gists
- search
- bookmarks
+ - stars
- timeline
- trends
- blog
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 3dbea9624..af3ce7235 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -103,6 +103,7 @@
Mentioned
Participating
My repositories
+ Starred repositories
My issues
My pull requests
My gists
diff --git a/src/com/gh4a/activities/RepositoryListActivity.java b/src/com/gh4a/activities/RepositoryListActivity.java
index b57b43b2b..a6871df4b 100644
--- a/src/com/gh4a/activities/RepositoryListActivity.java
+++ b/src/com/gh4a/activities/RepositoryListActivity.java
@@ -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
diff --git a/src/com/gh4a/activities/home/HomeActivity.java b/src/com/gh4a/activities/home/HomeActivity.java
index 3afd4e4c1..38f2e1d9b 100644
--- a/src/com/gh4a/activities/home/HomeActivity.java
+++ b/src/com/gh4a/activities/home/HomeActivity.java
@@ -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 mUserCallback = new LoaderCallbacks(this) {
@@ -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:
@@ -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:
diff --git a/src/com/gh4a/activities/home/RepositoryFactory.java b/src/com/gh4a/activities/home/RepositoryFactory.java
index 5bf87ee78..53c9b5c53 100644
--- a/src/com/gh4a/activities/home/RepositoryFactory.java
+++ b/src/com/gh4a/activities/home/RepositoryFactory.java
@@ -9,10 +9,14 @@
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;
@@ -20,40 +24,50 @@ public class RepositoryFactory extends FragmentFactory {
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
@@ -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);
}
diff --git a/src/com/gh4a/fragment/RepositoryListContainerFragment.java b/src/com/gh4a/fragment/RepositoryListContainerFragment.java
index 3ea2f8479..59fe71a5d 100644
--- a/src/com/gh4a/fragment/RepositoryListContainerFragment.java
+++ b/src/com/gh4a/fragment/RepositoryListContainerFragment.java
@@ -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;
@@ -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);
@@ -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();
@@ -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")
@@ -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 SORT_LOOKUP = new SparseArray<>();
static {
@@ -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() {
diff --git a/src/com/gh4a/fragment/StarredRepositoryListContainerFragment.java b/src/com/gh4a/fragment/StarredRepositoryListContainerFragment.java
new file mode 100644
index 000000000..9fde9e3bb
--- /dev/null
+++ b/src/com/gh4a/fragment/StarredRepositoryListContainerFragment.java
@@ -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;
+ }
+}
\ No newline at end of file