From 7b95764d655543cd7af5f36b6beb26e96bcc174a Mon Sep 17 00:00:00 2001 From: Kosh Date: Thu, 11 May 2017 19:27:35 +0800 Subject: [PATCH 1/2] this commit fixes #461 and #142 and adds repo topics to be displayed under repo name in repo activity. --- .../data/dao/model/AbstractLogin.java | 9 ++ .../fastaccess/ui/adapter/TopicsAdapter.java | 40 +++++ .../com/fastaccess/ui/base/BaseActivity.java | 2 +- .../ui/modules/main/MainActivity.java | 4 + .../fastaccess/ui/modules/main/MainMvp.java | 2 + .../ui/modules/main/MainPresenter.java | 13 ++ .../ui/modules/repos/RepoPagerActivity.java | 11 +- .../layout/title_header_layout.xml | 151 ++++++++++-------- .../row_layouts/layout/topics_row_item.xml | 14 ++ 9 files changed, 177 insertions(+), 69 deletions(-) create mode 100644 app/src/main/java/com/fastaccess/ui/adapter/TopicsAdapter.java create mode 100644 app/src/main/res/layouts/row_layouts/layout/topics_row_item.xml diff --git a/app/src/main/java/com/fastaccess/data/dao/model/AbstractLogin.java b/app/src/main/java/com/fastaccess/data/dao/model/AbstractLogin.java index 3edbdae8..8c3e95b2 100644 --- a/app/src/main/java/com/fastaccess/data/dao/model/AbstractLogin.java +++ b/app/src/main/java/com/fastaccess/data/dao/model/AbstractLogin.java @@ -4,6 +4,7 @@ import android.os.Parcel; import android.os.Parcelable; import com.fastaccess.App; +import com.fastaccess.helper.PrefGetter; import java.util.Date; @@ -12,6 +13,7 @@ import io.requery.Entity; import io.requery.Key; import io.requery.Nullable; import lombok.NoArgsConstructor; +import rx.Observable; /** * Created by Kosh on 16 Mar 2017, 7:36 PM @@ -52,6 +54,13 @@ import lombok.NoArgsConstructor; int contributions; @Nullable boolean isLoggedIn; + public Observable update(Login login) { + login.setToken(PrefGetter.getToken()); + login.setIsLoggedIn(true); + return App.getInstance().getDataStore().update(login) + .toObservable(); + } + public void save(Login entity) { // Login login = getUser(); // if (login != null) { diff --git a/app/src/main/java/com/fastaccess/ui/adapter/TopicsAdapter.java b/app/src/main/java/com/fastaccess/ui/adapter/TopicsAdapter.java new file mode 100644 index 00000000..656eeef2 --- /dev/null +++ b/app/src/main/java/com/fastaccess/ui/adapter/TopicsAdapter.java @@ -0,0 +1,40 @@ +package com.fastaccess.ui.adapter; + +import android.support.annotation.ColorInt; +import android.support.annotation.NonNull; +import android.view.ViewGroup; + +import com.fastaccess.R; +import com.fastaccess.helper.AppHelper; +import com.fastaccess.helper.ViewHelper; +import com.fastaccess.ui.adapter.viewholder.SimpleViewHolder; +import com.fastaccess.ui.widgets.recyclerview.BaseRecyclerAdapter; +import com.fastaccess.ui.widgets.recyclerview.BaseViewHolder; + +import java.util.List; + +/** + * Created by Kosh on 11 May 2017, 6:58 PM + */ + +public class TopicsAdapter extends BaseRecyclerAdapter, BaseViewHolder.OnItemClickListener> { + private boolean isLightTheme = true; + @ColorInt private int cardBackground; + + public TopicsAdapter(@NonNull List data) { + super(data); + } + + @Override protected SimpleViewHolder viewHolder(ViewGroup parent, int viewType) { + isLightTheme = !AppHelper.isNightMode(parent.getResources()); + cardBackground = ViewHelper.getCardBackground(parent.getContext()); + return new SimpleViewHolder<>(BaseViewHolder.getView(parent, R.layout.topics_row_item), null); + } + + @Override protected void onBindView(SimpleViewHolder holder, int position) { + if (isLightTheme) { + holder.itemView.setBackgroundColor(cardBackground); + } + holder.bind(getItem(position)); + } +} diff --git a/app/src/main/java/com/fastaccess/ui/base/BaseActivity.java b/app/src/main/java/com/fastaccess/ui/base/BaseActivity.java index 1ee0434e..c959a379 100644 --- a/app/src/main/java/com/fastaccess/ui/base/BaseActivity.java +++ b/app/src/main/java/com/fastaccess/ui/base/BaseActivity.java @@ -70,7 +70,7 @@ public abstract class BaseActivity impl getPresenter().onModuleChanged(getSupportFragmentManager(), navType); } + @Override public void onUpdateDrawerMenuHeader() { + setupNavigationView(extraNav); + } + @Shortcut(id = "myIssues", icon = R.drawable.ic_issues_shortcut, shortLabelRes = R.string.issues, rank = 2, action = "myIssues") public void myIssues() {}//do nothing diff --git a/app/src/main/java/com/fastaccess/ui/modules/main/MainMvp.java b/app/src/main/java/com/fastaccess/ui/modules/main/MainMvp.java index 97cb5b21..358bf3d9 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/main/MainMvp.java +++ b/app/src/main/java/com/fastaccess/ui/modules/main/MainMvp.java @@ -33,6 +33,8 @@ interface MainMvp { interface View extends BaseMvp.FAView { void onNavigationChanged(@NavigationType int navType); + + void onUpdateDrawerMenuHeader(); } interface Presenter extends BaseMvp.FAPresenter, diff --git a/app/src/main/java/com/fastaccess/ui/modules/main/MainPresenter.java b/app/src/main/java/com/fastaccess/ui/modules/main/MainPresenter.java index 6270681d..b7518f1a 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/main/MainPresenter.java +++ b/app/src/main/java/com/fastaccess/ui/modules/main/MainPresenter.java @@ -8,6 +8,8 @@ import android.support.v4.view.GravityCompat; import android.support.v4.widget.DrawerLayout; import com.fastaccess.R; +import com.fastaccess.helper.RxHelper; +import com.fastaccess.provider.rest.RestProvider; import com.fastaccess.ui.base.mvp.presenter.BasePresenter; import com.fastaccess.ui.modules.feeds.FeedsFragment; import com.fastaccess.ui.modules.main.issues.pager.MyIssuesPagerFragment; @@ -22,6 +24,17 @@ import static com.fastaccess.helper.AppHelper.getFragmentByTag; class MainPresenter extends BasePresenter implements MainMvp.Presenter { + + MainPresenter() { + manageSubscription(RxHelper.getObserver(RestProvider.getUserService().getUser()) + .flatMap(login -> login.update(login)) + .subscribe(login -> { + if (login != null) { + sendToView(MainMvp.View::onUpdateDrawerMenuHeader); + } + }, Throwable::printStackTrace/*fail silently*/)); + } + @Override public boolean canBackPress(@NonNull DrawerLayout drawerLayout) { return !drawerLayout.isDrawerOpen(GravityCompat.START); } diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/RepoPagerActivity.java b/app/src/main/java/com/fastaccess/ui/modules/repos/RepoPagerActivity.java index 3cae3c59..55d747dd 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/repos/RepoPagerActivity.java +++ b/app/src/main/java/com/fastaccess/ui/modules/repos/RepoPagerActivity.java @@ -11,6 +11,7 @@ import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.design.widget.FloatingActionButton; import android.support.v4.widget.TextViewCompat; +import android.support.v7.widget.RecyclerView; import android.text.format.Formatter; import android.view.Menu; import android.view.MenuItem; @@ -33,6 +34,7 @@ import com.fastaccess.helper.PrefGetter; import com.fastaccess.helper.TypeFaceHelper; import com.fastaccess.helper.ViewHelper; import com.fastaccess.provider.tasks.git.GithubActionService; +import com.fastaccess.ui.adapter.TopicsAdapter; import com.fastaccess.ui.base.BaseActivity; import com.fastaccess.ui.modules.filter.issues.FilterIssuesActivity; import com.fastaccess.ui.modules.main.MainActivity; @@ -86,6 +88,7 @@ public class RepoPagerActivity extends BaseActivity - - + tools:showIn="@layout/header_title_with_toolbar"> - + - + - + android:layout_gravity="center" + android:layout_weight="1" + android:orientation="vertical"> + android:layout_gravity="top" + android:layout_marginEnd="@dimen/spacing_normal" + android:ellipsize="end" + android:maxLines="2" + android:textColor="?android:textColorPrimary" + tools:text="One must invent the visitor in order to Bliss happens when you follow art so compassionately that whatsoever you are luring is your relativity.praise the sinner of remarkable vision."/> - + android:orientation="horizontal"> - + + + + + + + + + - - + + \ No newline at end of file diff --git a/app/src/main/res/layouts/row_layouts/layout/topics_row_item.xml b/app/src/main/res/layouts/row_layouts/layout/topics_row_item.xml new file mode 100644 index 00000000..579af55b --- /dev/null +++ b/app/src/main/res/layouts/row_layouts/layout/topics_row_item.xml @@ -0,0 +1,14 @@ + + \ No newline at end of file From 8683ab9a206d95ad5aef24f75ff1a661b6bce860 Mon Sep 17 00:00:00 2001 From: Kosh Date: Thu, 11 May 2017 19:59:27 +0800 Subject: [PATCH 2/2] this commit adds the possibility to change issues sort order from the list itself as mentioned in #389 WIP --- .../fastaccess/data/service/IssueService.java | 3 +- .../ui/modules/repos/RepoPagerActivity.java | 28 +++++++++---- .../repos/issues/RepoIssuesPagerFragment.java | 10 ++++- .../repos/issues/RepoIssuesPagerMvp.java | 2 + .../issue/RepoClosedIssuesFragment.java | 5 +++ .../repos/issues/issue/RepoIssuesMvp.java | 4 ++ .../issues/issue/RepoIssuesPresenter.java | 11 ++++- .../issue/RepoOpenedIssuesFragment.java | 5 +++ .../main/res/layout/filter_issues_popup.xml | 42 +++++++++++++++++++ .../layout/repo_pager_activity.xml | 28 +------------ 10 files changed, 99 insertions(+), 39 deletions(-) create mode 100644 app/src/main/res/layout/filter_issues_popup.xml diff --git a/app/src/main/java/com/fastaccess/data/service/IssueService.java b/app/src/main/java/com/fastaccess/data/service/IssueService.java index ffd142d0..be1f3ac1 100644 --- a/app/src/main/java/com/fastaccess/data/service/IssueService.java +++ b/app/src/main/java/com/fastaccess/data/service/IssueService.java @@ -31,7 +31,8 @@ public interface IssueService { @GET("repos/{owner}/{repo}/issues") Observable> getRepositoryIssues(@Path("owner") String owner, @Path("repo") String repo, - @Query("state") String state, @Query("page") int page); + @Query("state") String state, @Query("sort") String sortBy, + @Query("page") int page); @GET("search/issues") Observable> getIssuesWithCount(@NonNull @Query(value = "q", encoded = true) String query, @Query("page") int page); diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/RepoPagerActivity.java b/app/src/main/java/com/fastaccess/ui/modules/repos/RepoPagerActivity.java index 55d747dd..fb8a518e 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/repos/RepoPagerActivity.java +++ b/app/src/main/java/com/fastaccess/ui/modules/repos/RepoPagerActivity.java @@ -17,6 +17,7 @@ import android.view.Menu; import android.view.MenuItem; import android.view.MotionEvent; import android.view.View; +import android.widget.CheckBox; import com.fastaccess.R; import com.fastaccess.data.dao.LicenseModel; @@ -53,6 +54,7 @@ import com.fastaccess.ui.widgets.dialog.MessageDialogView; import java.text.NumberFormat; import butterknife.BindView; +import butterknife.OnCheckedChanged; import butterknife.OnClick; import butterknife.OnLongClick; import icepick.State; @@ -89,6 +91,7 @@ public class RepoPagerActivity extends BaseActivity implements RepoIssuesPagerMvp.View { - public static final String TAG = RepoIssuesPagerFragment.class.getSimpleName(); @BindView(R.id.tabs) TabLayout tabs; @BindView(R.id.pager) ViewPagerView pager; @State HashSet counts = new HashSet<>(); - public static RepoIssuesPagerFragment newInstance(@NonNull String repoId, @NonNull String login) { RepoIssuesPagerFragment view = new RepoIssuesPagerFragment(); view.setArguments(Bundler.start() @@ -100,6 +98,14 @@ public class RepoIssuesPagerFragment extends BaseFragment implements R private int previousTotal; private int lastPage = Integer.MAX_VALUE; private IssueState issueState; + private boolean isLastUpdated; @Override public int getCurrentPage() { return page; @@ -71,8 +72,12 @@ class RepoIssuesPresenter extends BasePresenter implements R sendToView(RepoIssuesMvp.View::hideProgress); return; } + String sortBy = "created"; + if (isLastUpdated) { + sortBy = "updated"; + } setCurrentPage(page); - makeRestCall(RestProvider.getIssueService().getRepositoryIssues(login, repoId, parameter.name(), page), + makeRestCall(RestProvider.getIssueService().getRepositoryIssues(login, repoId, parameter.name(), sortBy, page), issues -> { lastPage = issues.getLast(); List filtered = Stream.of(issues.getItems()) @@ -126,6 +131,10 @@ class RepoIssuesPresenter extends BasePresenter implements R return login; } + @Override public void onSetSortBy(boolean isLastUpdated) { + this.isLastUpdated = isLastUpdated; + } + @Override public void onItemClick(int position, View v, Issue item) { PullsIssuesParser parser = PullsIssuesParser.getForIssue(item.getHtmlUrl()); if (parser != null && getView() != null) { diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/issues/issue/RepoOpenedIssuesFragment.java b/app/src/main/java/com/fastaccess/ui/modules/repos/issues/issue/RepoOpenedIssuesFragment.java index dc8e955d..e43d5c06 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/repos/issues/issue/RepoOpenedIssuesFragment.java +++ b/app/src/main/java/com/fastaccess/ui/modules/repos/issues/issue/RepoOpenedIssuesFragment.java @@ -180,6 +180,11 @@ public class RepoOpenedIssuesFragment extends BaseFragment + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layouts/main_layouts/layout/repo_pager_activity.xml b/app/src/main/res/layouts/main_layouts/layout/repo_pager_activity.xml index 3afd5720..af8f8a65 100644 --- a/app/src/main/res/layouts/main_layouts/layout/repo_pager_activity.xml +++ b/app/src/main/res/layouts/main_layouts/layout/repo_pager_activity.xml @@ -38,33 +38,7 @@ app:cardCornerRadius="@dimen/spacing_normal" tools:visibility="visible"> - - - - - - +