some UI enhancements

This commit is contained in:
Kosh 2017-05-30 21:25:24 +08:00
parent ec3b3fa175
commit 9e66424645
13 changed files with 99 additions and 63 deletions

View File

@ -92,9 +92,5 @@ public class IssuePullsTimelineAdapter extends BaseRecyclerAdapter<TimelineModel
return getData().get(position).getType();
}
@Override public void insertItems(@NonNull List<TimelineModel> items) {
super.insertItems(items);
}
}

View File

@ -3,6 +3,7 @@ package com.fastaccess.ui.adapter.viewholder;
import android.net.Uri;
import android.support.annotation.NonNull;
import android.support.v4.content.ContextCompat;
import android.text.method.LinkMovementMethod;
import android.view.View;
import android.view.ViewGroup;
@ -76,11 +77,10 @@ public class PullStatusViewHolder extends BaseViewHolder<PullRequestStatusModel>
.forEach(statusesModel -> builder
.append(ContextCompat.getDrawable(statuses.getContext(), statusesModel.getState().getDrawableRes()))
.append(" ")
.url(statusesModel.getDescription(), v -> {
SchemeParser.launchUri(v.getContext(), Uri.parse(statusesModel.getTargetUrl()));
})
.url(statusesModel.getDescription(), v -> SchemeParser.launchUri(v.getContext(), Uri.parse(statusesModel.getTargetUrl())))
.append("\n"));
if (!InputHelper.isEmpty(builder)) {
statuses.setMovementMethod(LinkMovementMethod.getInstance());
statuses.setText(builder);
statuses.setVisibility(View.VISIBLE);
} else {

View File

@ -264,14 +264,18 @@ public class IssuePagerActivity extends BaseActivity<IssuePagerMvp.View, IssuePa
.append(parsedDate).append("\n").append(issueModel.getRepoId()));
avatarLayout.setUrl(userModel.getAvatarUrl(), userModel.getLogin());
}
pager.setAdapter(new FragmentsPagerAdapter(getSupportFragmentManager(), FragmentPagerAdapterModel.buildForIssues(this, issueModel)));
if (!getPresenter().isLocked() || getPresenter().isOwner()) {
pager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override public void onPageSelected(int position) {
super.onPageSelected(position);
hideShowFab();
}
});
if (pager.getAdapter() == null) {
pager.setAdapter(new FragmentsPagerAdapter(getSupportFragmentManager(), FragmentPagerAdapterModel.buildForIssues(this, issueModel)));
if (!getPresenter().isLocked() || getPresenter().isOwner()) {
pager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override public void onPageSelected(int position) {
super.onPageSelected(position);
hideShowFab();
}
});
}
} else {
onUpdateTimeline();
}
hideShowFab();
}
@ -308,8 +312,8 @@ public class IssuePagerActivity extends BaseActivity<IssuePagerMvp.View, IssuePa
@Override public void onUpdateTimeline() {
showMessage(R.string.success, R.string.labels_added_successfully);
IssueTimelineFragment issueDetailsView = (IssueTimelineFragment) pager.getAdapter().instantiateItem(pager, 0);
if (issueDetailsView != null) {
issueDetailsView.onRefresh();
if (issueDetailsView != null && getPresenter().getIssue() != null) {
issueDetailsView.onRefresh(getPresenter().getIssue());
}
}

View File

@ -69,7 +69,7 @@ public class IssueTimelineFragment extends BaseFragment<IssueTimelineMvp.View, I
return;
}
if (page == 1) {
items.add(0, TimelineModel.constructHeader(getPresenter().issue));
items.add(0, TimelineModel.constructHeader(getPresenter().getIssue()));
adapter.insertItems(items);
} else {
adapter.addItems(items);
@ -211,6 +211,11 @@ public class IssueTimelineFragment extends BaseFragment<IssueTimelineMvp.View, I
}
}
@Override public void onRefresh(@NonNull Issue issue) {
getPresenter().onUpdateIssue(issue);
onRefresh();
}
@Override public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK) {

View File

@ -8,6 +8,7 @@ import android.support.v4.widget.SwipeRefreshLayout;
import com.fastaccess.data.dao.TimelineModel;
import com.fastaccess.data.dao.model.Comment;
import com.fastaccess.data.dao.model.Issue;
import com.fastaccess.data.dao.model.User;
import com.fastaccess.data.dao.types.ReactionTypes;
import com.fastaccess.provider.rest.loadmore.OnLoadMore;
@ -48,6 +49,8 @@ public interface IssueTimelineMvp {
void showReactionsPopup(@NonNull ReactionTypes type, @NonNull String login, @NonNull String repoId, long idOrNumber, boolean isHeadre);
void onSetHeader(@NonNull TimelineModel timelineModel);
void onRefresh(@NonNull Issue issue);
}
interface Presenter extends BaseMvp.FAPresenter, BaseViewHolder.OnItemClickListener<TimelineModel>,
@ -72,5 +75,7 @@ public interface IssueTimelineMvp {
void onHandleReaction(@IdRes int viewId, long id, @ReactionsProvider.ReactionType int reactionType);
boolean isCallingApi(long id, int vId);
void onUpdateIssue(@NonNull Issue issue);
}
}

View File

@ -30,12 +30,13 @@ import java.util.ArrayList;
import java.util.List;
import io.reactivex.Observable;
import lombok.Getter;
/**
* Created by Kosh on 31 Mar 2017, 7:17 PM
*/
public class IssueTimelinePresenter extends BasePresenter<IssueTimelineMvp.View> implements IssueTimelineMvp.Presenter {
@Getter public class IssueTimelinePresenter extends BasePresenter<IssueTimelineMvp.View> implements IssueTimelineMvp.Presenter {
@icepick.State Issue issue;
private ArrayList<TimelineModel> timeline = new ArrayList<>();
private ReactionsProvider reactionsProvider;
@ -201,6 +202,10 @@ public class IssueTimelinePresenter extends BasePresenter<IssueTimelineMvp.View>
return getReactionsProvider().isCallingApi(id, vId);
}
@Override public void onUpdateIssue(@NonNull Issue issue) {
this.issue = issue;
}
@NonNull private ReactionsProvider getReactionsProvider() {
if (reactionsProvider == null) {
reactionsProvider = new ReactionsProvider();

View File

@ -259,48 +259,53 @@ public class PullRequestPagerActivity extends BaseActivity<PullRequestPagerMvp.V
title.setText(SpannableBuilder.builder().append(pullRequest.getTitle()));
}
detailsIcon.setVisibility(InputHelper.isEmpty(pullRequest.getTitle()) || !ViewHelper.isEllipsed(title) ? View.GONE : View.VISIBLE);
pager.setAdapter(new FragmentsPagerAdapter(getSupportFragmentManager(), FragmentPagerAdapterModel.buildForPullRequest(this, pullRequest)));
tabs.setupWithViewPager(pager);
if (!getPresenter().isLocked() || getPresenter().isOwner()) {
pager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override public void onPageSelected(int position) {
super.onPageSelected(position);
if (pager.getAdapter() == null) {
pager.setAdapter(new FragmentsPagerAdapter(getSupportFragmentManager(), FragmentPagerAdapterModel.buildForPullRequest(this,
pullRequest)));
tabs.setupWithViewPager(pager);
if (!getPresenter().isLocked() || getPresenter().isOwner()) {
pager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override public void onPageSelected(int position) {
super.onPageSelected(position);
}
});
}
tabs.addOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(pager) {
@Override public void onTabReselected(TabLayout.Tab tab) {
super.onTabReselected(tab);
onScrollTop(tab.getPosition());
}
});
}
tabs.addOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(pager) {
@Override public void onTabReselected(TabLayout.Tab tab) {
super.onTabReselected(tab);
onScrollTop(tab.getPosition());
if (tabs.getTabAt(2) != null) {
tabs.getTabAt(2)
.setText(SpannableBuilder.builder()
.append(getString(R.string.files))
.append(" ")
.append("(")
.append(String.valueOf(pullRequest.getChangedFiles()))
.append(")"));
}
});
if (tabs.getTabAt(2) != null) {
tabs.getTabAt(2)
.setText(SpannableBuilder.builder()
.append(getString(R.string.files))
.append(" ")
.append("(")
.append(String.valueOf(pullRequest.getChangedFiles()))
.append(")"));
}
if (tabs.getTabAt(1) != null) {
tabs.getTabAt(1)
.setText(SpannableBuilder.builder()
.append(getString(R.string.commits))
.append(" ")
.append("(")
.append(String.valueOf(pullRequest.getCommits()))
.append(")"));
}
if (tabs.getTabAt(0) != null) {
tabs.getTabAt(0)
.setText(SpannableBuilder.builder()
.append(getString(R.string.details))
.append(" ")
.append("(")
.append(String.valueOf(pullRequest.getComments()))
.append(")"));
if (tabs.getTabAt(1) != null) {
tabs.getTabAt(1)
.setText(SpannableBuilder.builder()
.append(getString(R.string.commits))
.append(" ")
.append("(")
.append(String.valueOf(pullRequest.getCommits()))
.append(")"));
}
if (tabs.getTabAt(0) != null) {
tabs.getTabAt(0)
.setText(SpannableBuilder.builder()
.append(getString(R.string.details))
.append(" ")
.append("(")
.append(String.valueOf(pullRequest.getComments()))
.append(")"));
}
} else {
onUpdateTimeline();
}
hideShowFab();
}
@ -361,8 +366,8 @@ public class PullRequestPagerActivity extends BaseActivity<PullRequestPagerMvp.V
@Override public void onUpdateTimeline() {
showMessage(R.string.success, R.string.labels_added_successfully);
PullRequestTimelineFragment pullRequestDetailsView = (PullRequestTimelineFragment) pager.getAdapter().instantiateItem(pager, 0);
if (pullRequestDetailsView != null) {
pullRequestDetailsView.onRefresh();
if (pullRequestDetailsView != null && getPresenter().getPullRequest() != null) {
pullRequestDetailsView.onRefresh(getPresenter().getPullRequest());
}
}

View File

@ -284,6 +284,11 @@ public class PullRequestTimelineFragment extends BaseFragment<PullRequestTimelin
}
}
@Override public void onRefresh(@NonNull PullRequest pullRequest) {
getPresenter().onUpdatePullRequest(pullRequest);
onRefresh();
}
@Override public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK) {

View File

@ -10,6 +10,7 @@ import com.fastaccess.data.dao.EditReviewCommentModel;
import com.fastaccess.data.dao.ReviewCommentModel;
import com.fastaccess.data.dao.TimelineModel;
import com.fastaccess.data.dao.model.Comment;
import com.fastaccess.data.dao.model.PullRequest;
import com.fastaccess.data.dao.model.User;
import com.fastaccess.data.dao.types.ReactionTypes;
import com.fastaccess.provider.rest.loadmore.OnLoadMore;
@ -64,6 +65,8 @@ public interface PullRequestTimelineMvp {
void onRemoveReviewComment(int groupPosition, int commentPosition);
void onSetHeader(@NonNull TimelineModel timelineModel);
void onRefresh(@NonNull PullRequest pullRequest);
}
interface Presenter extends BaseMvp.FAPresenter, BaseViewHolder.OnItemClickListener<TimelineModel>,
@ -90,5 +93,7 @@ public interface PullRequestTimelineMvp {
boolean isMerged();
boolean isCallingApi(long id, int vId);
void onUpdatePullRequest(@NonNull PullRequest pullRequest);
}
}

View File

@ -227,6 +227,10 @@ public class PullRequestTimelinePresenter extends BasePresenter<PullRequestTimel
return getReactionsProvider().isCallingApi(id, vId);
}
@Override public void onUpdatePullRequest(@NonNull PullRequest pullRequest) {
this.pullRequest = pullRequest;
}
@Override public boolean isPreviouslyReacted(long commentId, int vId) {
return getReactionsProvider().isPreviouslyReacted(commentId, vId);
}

View File

@ -9,7 +9,8 @@
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="top|center">
android:layout_gravity="top|center"
android:layout_marginTop="@dimen/spacing_xs_large">
<android.support.v7.widget.CardView
android:layout_width="match_parent"
@ -32,8 +33,8 @@
android:id="@+id/userInformation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="@dimen/spacing_xs_large"
android:orientation="horizontal">
android:orientation="horizontal"
android:paddingBottom="@dimen/spacing_xs_large">
<com.fastaccess.ui.widgets.AvatarLayout
android:id="@+id/avatarLayout"

View File

@ -12,6 +12,7 @@
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/spacing_xs_large"
android:orientation="vertical">
<LinearLayout
@ -46,7 +47,6 @@
<android.support.v7.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/spacing_xs_large"
app:cardBackgroundColor="?card_background"
app:cardCornerRadius="0dp"
app:cardUseCompatPadding="false"

View File

@ -43,6 +43,7 @@
style="@style/TextAppearance.AppCompat.Small"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clickable="true"
tools:text="Hello World"/>
</LinearLayout>