added settings to toggle clicking twice to exit app to close #115.

and adds commits to be filtered by the branch selected, however its broken until i fix it.
This commit is contained in:
Kosh 2017-03-11 03:07:27 +08:00
parent c0c8b97091
commit cf1e903780
12 changed files with 120 additions and 40 deletions

View File

@ -69,7 +69,7 @@ public class FragmentPagerAdapterModel {
@NonNull String defaultBranch) {
return Stream.of(new FragmentPagerAdapterModel(context.getString(R.string.readme), ViewerView.newInstance(url, true)),
new FragmentPagerAdapterModel(context.getString(R.string.files), RepoFilePathView.newInstance(login, repoId, null, defaultBranch)),
new FragmentPagerAdapterModel(context.getString(R.string.commits), RepoCommitsView.newInstance(repoId, login)),
new FragmentPagerAdapterModel(context.getString(R.string.commits), RepoCommitsView.newInstance(repoId, login, defaultBranch)),
new FragmentPagerAdapterModel(context.getString(R.string.releases), RepoReleasesView.newInstance(repoId, login)),
new FragmentPagerAdapterModel(context.getString(R.string.contributors), RepoContributorsView.newInstance(repoId, login)))
.collect(Collectors.toList());

View File

@ -35,93 +35,94 @@ import rx.Observable;
public interface RepoService {
@GET @Headers("Accept: application/vnd.github.VERSION.raw")
@NonNull @GET @Headers("Accept: application/vnd.github.VERSION.raw")
Observable<String> getFileAsStream(@Url String url);
@POST("markdown")
@NonNull @POST("markdown")
Observable<String> convertReadmeToHtml(@Body MarkdownModel model);
@GET("repos/{login}/{repoId}") @Headers({"Accept: application/vnd.github.drax-preview+json"})
@NonNull @GET("repos/{login}/{repoId}") @Headers({"Accept: application/vnd.github.drax-preview+json"})
Observable<RepoModel> getRepo(@Path("login") String login, @Path("repoId") String repoId);
@DELETE("repos/{login}/{repoId}")
@NonNull @DELETE("repos/{login}/{repoId}")
Observable<Response<Boolean>> deleteRepo(@Path("login") String login, @Path("repoId") String repoId);
@GET @Headers("Accept: application/vnd.github.html")
@NonNull @GET @Headers("Accept: application/vnd.github.html")
Observable<String> getReadmeHtml(@NonNull @Url String url);
@GET("user/starred/{owner}/{repo}")
@NonNull @GET("user/starred/{owner}/{repo}")
Observable<Response<Boolean>> checkStarring(@NonNull @Path("owner") String login, @NonNull @Path("repo") String repoId);
@PUT("user/starred/{owner}/{repo}")
@NonNull @PUT("user/starred/{owner}/{repo}")
Observable<Response<Boolean>> starRepo(@NonNull @Path("owner") String login, @NonNull @Path("repo") String repoId);
@DELETE("user/starred/{owner}/{repo}")
@NonNull @DELETE("user/starred/{owner}/{repo}")
Observable<Response<Boolean>> unstarRepo(@NonNull @Path("owner") String login, @NonNull @Path("repo") String repoId);
@POST("/repos/{owner}/{repo}/forks")
@NonNull @POST("/repos/{owner}/{repo}/forks")
Observable<RepoModel> forkRepo(@NonNull @Path("owner") String login, @NonNull @Path("repo") String repoId);
@GET("user/subscriptions/{owner}/{repo}")
@NonNull @GET("user/subscriptions/{owner}/{repo}")
Observable<Response<Boolean>> isWatchingRepo(@Path("owner") String owner, @Path("repo") String repo);
@PUT("user/subscriptions/{owner}/{repo}")
@NonNull @PUT("user/subscriptions/{owner}/{repo}")
Observable<Response<Boolean>> watchRepo(@Path("owner") String owner, @Path("repo") String repo);
@DELETE("user/subscriptions/{owner}/{repo}")
@NonNull @DELETE("user/subscriptions/{owner}/{repo}")
Observable<Response<Boolean>> unwatchRepo(@Path("owner") String owner, @Path("repo") String repo);
@GET("repos/{owner}/{repo}/commits")
Observable<Pageable<CommitModel>> getCommits(@Path("owner") String owner, @Path("repo") String repo, @Query("page") int page);
@NonNull @GET("repos/{owner}/{repo}/commits/{branch}")
Observable<Pageable<CommitModel>> getCommits(@Path("owner") String owner, @Path("repo") String repo,
@NonNull @Path("branch") String branch, @Query("page") int page);
@GET("repos/{owner}/{repo}/releases")
@NonNull @GET("repos/{owner}/{repo}/releases")
@Headers("Accept: application/vnd.github.VERSION.full+json")
Observable<Pageable<ReleasesModel>> getReleases(@Path("owner") String owner, @Path("repo") String repo, @Query("page") int page);
@GET("repos/{owner}/{repo}/contributors")
@NonNull @GET("repos/{owner}/{repo}/contributors")
Observable<Pageable<UserModel>> getContributors(@Path("owner") String owner, @Path("repo") String repo, @Query("page") int page);
@GET("repos/{owner}/{repo}/commits/{sha}")
@NonNull @GET("repos/{owner}/{repo}/commits/{sha}")
Observable<CommitModel> getCommit(@Path("owner") String owner, @Path("repo") String repo, @Path("sha") String sha);
@GET("repos/{owner}/{repo}/commits/{sha}/comments")
@NonNull @GET("repos/{owner}/{repo}/commits/{sha}/comments")
Observable<Pageable<CommentsModel>> getCommitComments(@NonNull @Path("owner") String owner, @NonNull @Path("repo") String repo,
@NonNull @Path("sha") String ref, @Query("page") int page);
@POST("repos/{owner}/{repo}/commits/{sha}/comments")
@NonNull @POST("repos/{owner}/{repo}/commits/{sha}/comments")
@Headers("Accept: application/vnd.github.VERSION.full+json")
Observable<CommentsModel> postCommitComment(@NonNull @Path("owner") String owner, @NonNull @Path("repo") String repo,
@NonNull @Path("sha") String ref, @Body CommentRequestModel model);
@PATCH("repos/{owner}/{repo}/comments/{id}")
@NonNull @PATCH("repos/{owner}/{repo}/comments/{id}")
@Headers("Accept: application/vnd.github.VERSION.full+json")
Observable<CommentsModel> editCommitComment(@Path("owner") String owner, @Path("repo") String repo, @Path("id") long id,
@Body CommentRequestModel body);
@DELETE("repos/{owner}/{repo}/comments/{id}")
@NonNull @DELETE("repos/{owner}/{repo}/comments/{id}")
Observable<Response<Boolean>> deleteComment(@Path("owner") String owner, @Path("repo") String repo, @Path("id") long id);
@GET("repos/{owner}/{repo}/contents/{path}")
@NonNull @GET("repos/{owner}/{repo}/contents/{path}")
Observable<Pageable<RepoFilesModel>> getRepoFiles(@NonNull @Path("owner") String owner, @NonNull @Path("repo") String repo,
@NonNull @Path("path") String path, @NonNull @Query("ref") String ref);
@GET("repos/{owner}/{repo}/labels")
@NonNull @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}")
@NonNull @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);
@GET("repos/{owner}/{repo}/branches")
@NonNull @GET("repos/{owner}/{repo}/branches")
Observable<Pageable<BranchesModel>> getBranches(@NonNull @Path("owner") String owner, @NonNull @Path("repo") String repo);
@GET("repos/{owner}/{repo}/milestones")
@NonNull @GET("repos/{owner}/{repo}/milestones")
Observable<Pageable<MilestoneModel>> getMilestones(@Path("owner") String owner, @Path("repo") String repo);
@POST("repos/{owner}/{repo}/milestones")
@NonNull @POST("repos/{owner}/{repo}/milestones")
Observable<MilestoneModel> createMilestone(@Path("owner") String owner, @Path("repo") String repo,
@Body CreateMilestoneModel create);
@GET("repos/{owner}/{repo}/assignees")
@NonNull @GET("repos/{owner}/{repo}/assignees")
Observable<Pageable<UserModel>> getAssignees(@Path("owner") String owner, @Path("repo") String repo);
}

View File

@ -98,4 +98,8 @@ public class PrefGetter {
}
return 0;
}
public static boolean isTwiceBackButtonDisabled() {
return PrefHelper.getBoolean("back_button");
}
}

View File

@ -130,14 +130,25 @@ public class MainView extends BaseActivity<MainMvp.View, MainPresenter> implemen
}
@Override public void onBackPressed() {
boolean clickTwichToExit = !PrefGetter.isTwiceBackButtonDisabled();
if (drawerLayout != null) {
if (getPresenter().canBackPress(drawerLayout)) {
if (canExit()) super.onBackPressed();
superOnBackPressed(clickTwichToExit);
} else {
drawerLayout.closeDrawer(GravityCompat.START);
}
} else {
if (canExit()) super.onBackPressed();
superOnBackPressed(clickTwichToExit);
}
}
private void superOnBackPressed(boolean clickTwichToExit) {
if (clickTwichToExit) {
if (canExit()) {
super.onBackPressed();
}
} else {
super.onBackPressed();
}
}

View File

@ -1,17 +1,21 @@
package com.fastaccess.ui.modules.repos.code;
import android.support.annotation.NonNull;
import com.fastaccess.ui.base.mvp.BaseMvp;
/**
* Created by Kosh on 31 Dec 2016, 1:35 AM
*/
interface RepoCodePagerMvp {
public interface RepoCodePagerMvp {
interface View extends BaseMvp.FAView {
boolean canPressBack();
void onBackPressed();
void onBranchChanged(@NonNull String branch);
}
interface Presenter extends BaseMvp.FAPresenter {}

View File

@ -14,6 +14,7 @@ import com.fastaccess.helper.Bundler;
import com.fastaccess.helper.InputHelper;
import com.fastaccess.ui.adapter.FragmentsPagerAdapter;
import com.fastaccess.ui.base.BaseFragment;
import com.fastaccess.ui.modules.repos.code.commit.RepoCommitsView;
import com.fastaccess.ui.modules.repos.code.files.paths.RepoFilePathView;
import com.fastaccess.ui.widgets.ViewPagerView;
@ -77,4 +78,13 @@ public class RepoCodePagerView extends BaseFragment<RepoCodePagerMvp.View, RepoC
pathView.onBackPressed();
}
}
@Override public void onBranchChanged(@NonNull String branch) {
if (pager != null && pager.getAdapter() != null) {
RepoCommitsView commitsView = (RepoCommitsView) pager.getAdapter().instantiateItem(pager, 2);
if (commitsView != null) {
commitsView.changeBranch(branch);
}
}
}
}

View File

@ -21,6 +21,8 @@ interface RepoCommitsMvp {
void onNotifyAdapter();
@NonNull OnLoadMore getLoadMore();
void changeBranch(@NonNull String branch);
}
interface Presenter extends BaseMvp.FAPresenter,
@ -31,5 +33,7 @@ interface RepoCommitsMvp {
@NonNull ArrayList<CommitModel> getCommits();
void onWorkOffline();
void onBranchChanged(@NonNull String branch);
}
}

View File

@ -3,11 +3,13 @@ package com.fastaccess.ui.modules.repos.code.commit;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.text.TextUtils;
import android.view.View;
import com.fastaccess.data.dao.CommitModel;
import com.fastaccess.helper.BundleConstant;
import com.fastaccess.helper.InputHelper;
import com.fastaccess.helper.Logger;
import com.fastaccess.helper.RxHelper;
import com.fastaccess.provider.rest.RestProvider;
import com.fastaccess.ui.base.mvp.BaseMvp;
@ -16,8 +18,6 @@ import com.fastaccess.ui.modules.repos.code.commit.details.CommitPagerView;
import java.util.ArrayList;
import rx.Observable;
/**
* Created by Kosh on 03 Dec 2016, 3:48 PM
*/
@ -27,6 +27,7 @@ class RepoCommitsPresenter extends BasePresenter<RepoCommitsMvp.View> implements
private ArrayList<CommitModel> commits = new ArrayList<>();
private String login;
private String repoId;
private String branch;
private int page;
private int previousTotal;
private int lastPage = Integer.MAX_VALUE;
@ -63,7 +64,7 @@ class RepoCommitsPresenter extends BasePresenter<RepoCommitsMvp.View> implements
return;
}
if (repoId == null || login == null) return;
makeRestCall(RestProvider.getRepoService().getCommits(login, repoId, page),
makeRestCall(RestProvider.getRepoService().getCommits(login, repoId, branch, page),
response -> {
lastPage = response.getLast();
if (getCurrentPage() == 1) {
@ -78,6 +79,8 @@ class RepoCommitsPresenter extends BasePresenter<RepoCommitsMvp.View> implements
@Override public void onFragmentCreated(@NonNull Bundle bundle) {
repoId = bundle.getString(BundleConstant.ID);
login = bundle.getString(BundleConstant.EXTRA);
branch = bundle.getString(BundleConstant.EXTRA_TWO);
Logger.e(branch);
if (!InputHelper.isEmpty(login) && !InputHelper.isEmpty(repoId)) {
onCallApi(1, null);
}
@ -99,6 +102,13 @@ class RepoCommitsPresenter extends BasePresenter<RepoCommitsMvp.View> implements
}
}
@Override public void onBranchChanged(@NonNull String branch) {
if (!TextUtils.equals(branch, this.branch)) {
this.branch = branch;
onCallApi(1, null);
}
}
@Override public void onItemClick(int position, View v, CommitModel item) {
CommitPagerView.createIntentForOffline(v.getContext(), item);
}

View File

@ -29,11 +29,12 @@ public class RepoCommitsView extends BaseFragment<RepoCommitsMvp.View, RepoCommi
private OnLoadMore onLoadMore;
private CommitsAdapter adapter;
public static RepoCommitsView newInstance(@NonNull String repoId, @NonNull String login) {
public static RepoCommitsView newInstance(@NonNull String repoId, @NonNull String login, @NonNull String branch) {
RepoCommitsView view = new RepoCommitsView();
view.setArguments(Bundler.start()
.put(BundleConstant.ID, repoId)
.put(BundleConstant.EXTRA, login)
.put(BundleConstant.EXTRA_TWO, branch)
.end());
return view;
}
@ -94,6 +95,10 @@ public class RepoCommitsView extends BaseFragment<RepoCommitsMvp.View, RepoCommi
return onLoadMore;
}
@Override public void changeBranch(@NonNull String branch) {
getPresenter().onBranchChanged(branch);
}
@Override public void onRefresh() {
getPresenter().onCallApi(1, null);
}

View File

@ -22,6 +22,7 @@ import com.fastaccess.helper.Logger;
import com.fastaccess.ui.adapter.RepoFilePathsAdapter;
import com.fastaccess.ui.base.BaseFragment;
import com.fastaccess.ui.modules.repos.RepoPagerMvp;
import com.fastaccess.ui.modules.repos.code.RepoCodePagerMvp;
import com.fastaccess.ui.modules.repos.code.files.RepoFilesView;
import java.util.List;
@ -47,6 +48,7 @@ public class RepoFilePathView extends BaseFragment<RepoFilePathMvp.View, RepoFil
private RepoFilePathsAdapter adapter;
private RepoFilesView repoFilesView;
private RepoPagerMvp.View repoCallback;
private RepoCodePagerMvp.View codePagerCallback;
public static RepoFilePathView newInstance(@NonNull String login, @NonNull String repoId, @Nullable String path, @NonNull String defaultBranch) {
RepoFilePathView view = new RepoFilePathView();
@ -72,6 +74,10 @@ public class RepoFilePathView extends BaseFragment<RepoFilePathMvp.View, RepoFil
ref = ((BranchesModel) branches.getItemAtPosition(position)).getName();
getRepoFilesView().onSetData(getPresenter().getLogin(), getPresenter().getRepoId(), "", ref, true);
onBackClicked();
if (codePagerCallback != null) {
codePagerCallback.onBranchChanged(ref);
showMessage(R.string.commits, R.string.commits_reflected);
}
}
}
@ -82,6 +88,11 @@ public class RepoFilePathView extends BaseFragment<RepoFilePathMvp.View, RepoFil
} else if (getParentFragment() instanceof RepoPagerMvp.View) {
repoCallback = (RepoPagerMvp.View) getParentFragment();
}
if (context instanceof RepoCodePagerMvp.View) {
codePagerCallback = (RepoCodePagerMvp.View) context;
} else if (getParentFragment() instanceof RepoCodePagerMvp.View) {
codePagerCallback = (RepoCodePagerMvp.View) getParentFragment();
}
}
@Override public void onDetach() {

View File

@ -228,4 +228,14 @@
<string name="due_on">Due On</string>
<string name="no_assignees">No Assignees</string>
<string name="this_value">This</string>
<string name="commits_reflected">Commits has been switched to the selected branch.</string>
<string name="general_settings">General Settings</string>
<string name="background_job_summary">Change the background notification task time</string>
<string name="background_job_title">Background Notification Sync</string>
<string name="every">Every</string>
<string name="behavior">Behavior</string>
<string name="recycler_view_animation_summary">Disable RecyclerView animation.</string>
<string name="recycler_view_animation_title">RecylerView Animation</string>
<string name="back_button_summary">Disable pressing the back button twice to exit FastHub.</string>
<string name="back_button_title">Back Button Behavior</string>
</resources>

View File

@ -9,14 +9,24 @@
android:entries="@array/notification_duration"
android:entryValues="@array/notification_duration"
android:key="notificationTime"
android:summary="Change the background notification task time"
android:title="Background Notification Sync"/>
android:summary="@string/background_job_summary"
android:title="@string/background_job_title"/>
</PreferenceCategory>
<PreferenceCategory android:title="Behavior">
<SwitchPreference
android:defaultValue="false"
android:key="recylerViewAnimation"
android:summary="Disable RecyclerView animation."
android:title="RecylerView Animation"/>
android:summary="@string/recycler_view_animation_summary"
android:title="@string/recycler_view_animation_title"/>
<SwitchPreference
android:defaultValue="false"
android:key="back_button"
android:summary="@string/back_button_summary"
android:title="@string/back_button_title"/>
</PreferenceCategory>