Skip to content
This repository has been archived by the owner on Sep 30, 2021. It is now read-only.

Commit

Permalink
project collaborators now can control issue to close #33
Browse files Browse the repository at this point in the history
  • Loading branch information
Kosh committed Mar 2, 2017
1 parent 08a4676 commit e91db38
Show file tree
Hide file tree
Showing 6 changed files with 47 additions and 14 deletions.
11 changes: 5 additions & 6 deletions app/src/main/java/com/fastaccess/data/service/RepoService.java
Original file line number Diff line number Diff line change
Expand Up @@ -59,12 +59,6 @@ public interface RepoService {
@POST("/repos/{owner}/{repo}/forks")
Observable<RepoModel> forkRepo(@NonNull @Path("owner") String login, @NonNull @Path("repo") String repoId);

@GET("repos/{owner}/{repo}/subscribers")
Observable<Pageable<UserModel>> getRepoWatchers(@Path("owner") String owner, @Path("repo") String repo, @Query("page") int page);

@GET("users/{username}/subscriptions")
Observable<Pageable<RepoModel>> getWatchedRepos(@Path("username") String username, @Query("page") int page);

@GET("user/subscriptions/{owner}/{repo}")
Observable<Response<Boolean>> isWatchingRepo(@Path("owner") String owner, @Path("repo") String repo);

Expand Down Expand Up @@ -108,4 +102,9 @@ Observable<Pageable<RepoFilesModel>> getRepoFiles(@NonNull @Path("owner") String
@GET("repos/{owner}/{repo}/labels")
Observable<Pageable<LabelModel>> getLabels(@NonNull @Path("owner") String owner, @NonNull @Path("repo") String repo);

@GET("repos/{owner}/{repo}/collaborators/{username}")
Observable<Response<Boolean>> isCollaborator(@NonNull @Path("owner") String owner, @NonNull @Path("repo") String repo,
@NonNull @Path("username") String username);


}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

import com.fastaccess.R;
import com.fastaccess.data.dao.IssueModel;
import com.fastaccess.data.dao.types.IssueState;
import com.fastaccess.helper.ParseDateFormat;
import com.fastaccess.ui.widgets.AvatarLayout;
import com.fastaccess.ui.widgets.FontTextView;
Expand Down Expand Up @@ -38,9 +39,16 @@ public static IssuesViewHolder newInstance(ViewGroup viewGroup, BaseRecyclerAdap

public void bind(@NonNull IssueModel issueModel, boolean withAvatar) {
title.setText(issueModel.getTitle());
details.setText(SpannableBuilder.builder().append(itemView.getResources().getString(issueModel.getState().getStatus()))
.append(" ").append(by).append(" ").append(issueModel.getUser().getLogin()).append(" ")
.append(ParseDateFormat.getTimeAgo(issueModel.getCreatedAt())));
if (issueModel.getState() != null) {
CharSequence data = ParseDateFormat.getTimeAgo(issueModel.getState() == IssueState.open
? issueModel.getCreatedAt() : issueModel.getClosedAt());
details.setText(SpannableBuilder.builder()
.append(itemView.getResources().getString(issueModel.getState().getStatus()))
.append(" ").append(by).append(" ")
.append(issueModel.getState() == IssueState.closed
? issueModel.getClosedBy().getLogin() : issueModel.getUser().getLogin()).append(" ")
.append(data));
}
if (withAvatar) {
avatarLayout.setUrl(issueModel.getUser().getAvatarUrl(), issueModel.getUser().getLogin());
avatarLayout.setVisibility(View.VISIBLE);
Expand Down
1 change: 0 additions & 1 deletion app/src/main/java/com/fastaccess/ui/base/BaseFragment.java
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,6 @@ public abstract class BaseFragment<V extends BaseMvp.FAView, P extends BasePrese
if (savedInstanceState != null && !savedInstanceState.isEmpty()) {
Icepick.restoreInstanceState(this, savedInstanceState);
}
setHasOptionsMenu(true);
}

@Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ interface View extends BaseMvp.FAView, LabelsMvp.SelectedLabelsListener {
void onLabelsRetrieved(@NonNull List<LabelModel> items);

void onLabelsAdded();

void onUpdateMenu();
}

interface Presenter extends BaseMvp.FAPresenter {
Expand All @@ -45,6 +47,8 @@ interface Presenter extends BaseMvp.FAPresenter {

boolean isLocked();

boolean isCollaborator();

void onHandleConfirmDialog(@Nullable Bundle bundle);

void onOpenCloseIssue();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import com.fastaccess.R;
import com.fastaccess.data.dao.IssueModel;
import com.fastaccess.data.dao.IssueRequestModel;
import com.fastaccess.data.dao.LabelListModel;
import com.fastaccess.data.dao.LabelModel;
import com.fastaccess.data.dao.LoginModel;
import com.fastaccess.data.dao.PullsIssuesParser;
Expand Down Expand Up @@ -38,6 +39,7 @@ class IssuePagerPresenter extends BasePresenter<IssuePagerMvp.View> implements I
private int issueNumber;
private String login;
private String repoId;
private boolean isCollaborator;

@Nullable @Override public IssueModel getIssue() {
return issueModel;
Expand Down Expand Up @@ -65,6 +67,12 @@ class IssuePagerPresenter extends BasePresenter<IssuePagerMvp.View> implements I
issueModel.setRepoId(repoId);
issueModel.setLogin(login);
sendToView(IssuePagerMvp.View::onSetupIssue);
manageSubscription(RxHelper.getObserver(RestProvider.getRepoService()
.isCollaborator(login, repoId, LoginModel.getUser().getLogin()))
.subscribe(booleanResponse -> {
isCollaborator = booleanResponse.code() == 204;
sendToView(IssuePagerMvp.View::onUpdateMenu);
}, Throwable::printStackTrace));
});
return;
}
Expand Down Expand Up @@ -104,6 +112,10 @@ class IssuePagerPresenter extends BasePresenter<IssuePagerMvp.View> implements I
return getIssue() != null && getIssue().isLocked();
}

@Override public boolean isCollaborator() {
return isCollaborator;
}

@Override public void onHandleConfirmDialog(@Nullable Bundle bundle) {
if (bundle != null) {
boolean proceedCloseIssue = bundle.getBoolean(BundleConstant.EXTRA);
Expand Down Expand Up @@ -183,7 +195,13 @@ class IssuePagerPresenter extends BasePresenter<IssuePagerMvp.View> implements I
makeRestCall(RestProvider.getIssueService().putLabels(login, repoId, issueNumber,
Stream.of(labels).filter(value -> value != null && value.getName() != null)
.map(LabelModel::getName).collect(Collectors.toList())),
labelModels -> sendToView(view -> view.onLabelsAdded()));
labelModels -> {
sendToView(IssuePagerMvp.View::onLabelsAdded);
LabelListModel listModel = new LabelListModel();
listModel.addAll(labels);
issueModel.setLabels(listModel);
manageSubscription(issueModel.save().subscribe());
});
}

@Override public String getLogin() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -154,10 +154,11 @@ public static Intent createIntent(@NonNull Context context, @NonNull String repo
MenuItem lockIssue = menu.findItem(R.id.lockIssue);
boolean isOwner = getPresenter().isOwner();
boolean isLocked = getPresenter().isLocked();
boolean isCollaborator = getPresenter().isCollaborator();
Logger.e(isOwner);
menu.findItem(R.id.closeIssue).setVisible(isOwner);
menu.findItem(R.id.lockIssue).setVisible(isOwner);
menu.findItem(R.id.labels).setVisible(getPresenter().isRepoOwner());
menu.findItem(R.id.closeIssue).setVisible(isOwner || isCollaborator);
menu.findItem(R.id.lockIssue).setVisible(isOwner || isCollaborator);
menu.findItem(R.id.labels).setVisible(getPresenter().isRepoOwner() || isCollaborator);
if (isOwner) {
//noinspection ConstantConditions ( getIssue at this stage is not null but AS doesn't know. )
closeIssue.setTitle(getPresenter().getIssue().getState() == IssueState.closed ? getString(R.string.re_open) : getString(R.string.close));
Expand Down Expand Up @@ -230,6 +231,10 @@ public static Intent createIntent(@NonNull Context context, @NonNull String repo
}
}

@Override public void onUpdateMenu() {
supportInvalidateOptionsMenu();
}

@Override public void onMessageDialogActionClicked(boolean isOk, @Nullable Bundle bundle) {
super.onMessageDialogActionClicked(isOk, bundle);
if (isOk) {
Expand Down

0 comments on commit e91db38

Please sign in to comment.