From 91a2cc15f7feefeb04b4cf545aab17e868a50dbd Mon Sep 17 00:00:00 2001
From: Kosh
Date: Sat, 3 Jun 2017 13:16:08 +0800
Subject: [PATCH 01/14] this commit fixes #597
improves trending overall and some layouts improvements
---
README.md | 2 +
.../data/dao/FragmentPagerAdapterModel.java | 7 +-
.../fastaccess/data/dao/TimelineModel.java | 5 +
.../data/service/TrendingService.java | 1 +
.../provider/colors/ColorsProvider.java | 5 +
.../provider/rest/RestProvider.java | 2 +-
.../AuthenticationInterceptor.java | 5 +-
.../provider/timeline/HtmlHelper.java | 75 +--------
.../ui/adapter/IssuePullsTimelineAdapter.java | 6 +-
.../viewholder/IssueDetailsViewHolder.java | 43 ++---
.../ui/modules/editor/EditorActivity.java | 69 ++++----
.../ui/modules/repos/RepoPagerActivity.java | 4 +-
.../commit/details/CommitPagerActivity.java | 5 +-
.../issues/create/CreateIssueActivity.java | 4 +-
.../issues/create/CreateIssuePresenter.java | 3 +
.../issue/details/IssuePagerActivity.java | 105 +++++++------
.../issues/issue/details/IssuePagerMvp.java | 9 +-
.../issue/details/IssuePagerPresenter.java | 56 +++----
.../timeline/IssueTimelineFragment.java | 92 +++++++----
.../details/timeline/IssueTimelineMvp.java | 18 +--
.../timeline/IssueTimelinePresenter.java | 75 +++------
.../details/PullRequestPagerActivity.java | 147 ++++++++++--------
.../details/PullRequestPagerMvp.java | 10 +-
.../details/PullRequestPagerPresenter.java | 86 +++++-----
.../timeline/PullRequestTimelineFragment.java | 116 +++++++++-----
.../timeline/PullRequestTimelineMvp.java | 20 +--
.../PullRequestTimelinePresenter.java | 92 ++++-------
.../ui/modules/trending/TrendingActivity.kt | 6 +-
.../ui/modules/trending/TrendingPresenter.kt | 6 +-
.../fastaccess/ui/widgets/DiffLineSpan.java | 13 +-
.../row_layouts/layout/comments_row_item.xml | 6 +-
.../layout/issue_detail_header_row_item.xml | 6 +-
.../layout/no_emojies_comments_row_item.xml | 6 +-
.../layout/review_comments_row_item.xml | 6 +-
app/src/main/res/values/strings.xml | 3 +
debug_gradle.properties | 3 +-
36 files changed, 560 insertions(+), 557 deletions(-)
diff --git a/README.md b/README.md
index ebcf5523..46454a2a 100644
--- a/README.md
+++ b/README.md
@@ -34,6 +34,7 @@ grab **FastHub** from [Here](https://github.com/thermatk/FastHub-Libre) maintain
- Notifications overview and "Mark all as read"
- Search users/orgs, repos, issues/prs & code.
- Pinned Repos
+ - Trending
- **Repositories**
- Search Repos
- Browse and search Repos
@@ -81,6 +82,7 @@ Ads are no longer available until further notice
# Specs / Open-source libraries:
- Minimum **SDK 21**, _but AppCompat is used all the way ;-)_
+- **Kotlin** all new modules starting from 2.5.3 will be written in **#Kotlin**.
- **MVP**-architecture: [**ThirtyInch**](https://github.com/grandcentrix/ThirtyInch) because its ThirtyInch.
- [**RxJava2**](https://github.com/ReactiveX/RxJava) & [**RxAndroid**](https://github.com/ReactiveX/RxAndroid) for Retrofit & background threads
- [**Retrofit**](https://github.com/square/retrofit) for constructing the REST API
diff --git a/app/src/main/java/com/fastaccess/data/dao/FragmentPagerAdapterModel.java b/app/src/main/java/com/fastaccess/data/dao/FragmentPagerAdapterModel.java
index 32a1985a..4412f896 100644
--- a/app/src/main/java/com/fastaccess/data/dao/FragmentPagerAdapterModel.java
+++ b/app/src/main/java/com/fastaccess/data/dao/FragmentPagerAdapterModel.java
@@ -9,7 +9,6 @@ import com.annimon.stream.Stream;
import com.fastaccess.R;
import com.fastaccess.data.dao.model.Commit;
import com.fastaccess.data.dao.model.Gist;
-import com.fastaccess.data.dao.model.Issue;
import com.fastaccess.data.dao.model.Login;
import com.fastaccess.data.dao.model.PullRequest;
import com.fastaccess.data.dao.types.IssueState;
@@ -101,8 +100,8 @@ import lombok.Setter;
.collect(Collectors.toList());
}
- @NonNull public static List buildForIssues(@NonNull Context context, @NonNull Issue issueModel) {
- return Stream.of(new FragmentPagerAdapterModel(context.getString(R.string.details), IssueTimelineFragment.newInstance(issueModel)))
+ @NonNull public static List buildForIssues(@NonNull Context context) {
+ return Stream.of(new FragmentPagerAdapterModel(context.getString(R.string.details), IssueTimelineFragment.newInstance()))
.collect(Collectors.toList());
}
@@ -111,7 +110,7 @@ import lombok.Setter;
String login = pullRequest.getLogin();
String repoId = pullRequest.getRepoId();
int number = pullRequest.getNumber();
- return Stream.of(new FragmentPagerAdapterModel(context.getString(R.string.details), PullRequestTimelineFragment.newInstance(pullRequest)),
+ return Stream.of(new FragmentPagerAdapterModel(context.getString(R.string.details), PullRequestTimelineFragment.newInstance()),
new FragmentPagerAdapterModel(context.getString(R.string.commits), PullRequestCommitsFragment.newInstance(repoId, login, number)),
new FragmentPagerAdapterModel(context.getString(R.string.files), PullRequestFilesFragment.newInstance(repoId, login, number)))
.collect(Collectors.toList());
diff --git a/app/src/main/java/com/fastaccess/data/dao/TimelineModel.java b/app/src/main/java/com/fastaccess/data/dao/TimelineModel.java
index 9b9f2dfc..98b15d70 100644
--- a/app/src/main/java/com/fastaccess/data/dao/TimelineModel.java
+++ b/app/src/main/java/com/fastaccess/data/dao/TimelineModel.java
@@ -280,6 +280,7 @@ import static com.annimon.stream.Collectors.toList;
return comment != null ? (int) comment.getId() : 0;
}
+
@Override public int describeContents() { return 0; }
@Override public void writeToParcel(Parcel dest, int flags) {
@@ -290,6 +291,8 @@ import static com.annimon.stream.Collectors.toList;
dest.writeParcelable(this.pullRequest, flags);
dest.writeParcelable(this.status, flags);
dest.writeParcelable(this.review, flags);
+ dest.writeParcelable(this.groupedReview, flags);
+ dest.writeParcelable(this.reviewComment, flags);
dest.writeLong(this.sortedDate != null ? this.sortedDate.getTime() : -1);
}
@@ -301,6 +304,8 @@ import static com.annimon.stream.Collectors.toList;
this.pullRequest = in.readParcelable(PullRequest.class.getClassLoader());
this.status = in.readParcelable(PullRequestStatusModel.class.getClassLoader());
this.review = in.readParcelable(ReviewModel.class.getClassLoader());
+ this.groupedReview = in.readParcelable(GroupedReviewModel.class.getClassLoader());
+ this.reviewComment = in.readParcelable(ReviewCommentModel.class.getClassLoader());
long tmpSortedDate = in.readLong();
this.sortedDate = tmpSortedDate == -1 ? null : new Date(tmpSortedDate);
}
diff --git a/app/src/main/java/com/fastaccess/data/service/TrendingService.java b/app/src/main/java/com/fastaccess/data/service/TrendingService.java
index 5f39e54c..9e625e7a 100644
--- a/app/src/main/java/com/fastaccess/data/service/TrendingService.java
+++ b/app/src/main/java/com/fastaccess/data/service/TrendingService.java
@@ -1,5 +1,6 @@
package com.fastaccess.data.service;
+
import com.fastaccess.data.dao.TrendingResponse;
import com.github.florent37.retrojsoup.annotations.Select;
diff --git a/app/src/main/java/com/fastaccess/provider/colors/ColorsProvider.java b/app/src/main/java/com/fastaccess/provider/colors/ColorsProvider.java
index 8490b5ea..d8127261 100644
--- a/app/src/main/java/com/fastaccess/provider/colors/ColorsProvider.java
+++ b/app/src/main/java/com/fastaccess/provider/colors/ColorsProvider.java
@@ -23,6 +23,7 @@ import java.io.InputStreamReader;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.LinkedHashMap;
+import java.util.List;
import java.util.Map;
import io.reactivex.Observable;
@@ -33,6 +34,9 @@ import io.reactivex.Observable;
public class ColorsProvider {
+ private static List popularLanguages = Stream.of("Java", "Kotlin", "Javascript", "Python", "CSS", "PHP",
+ "Ruby", "C++", "C", "GO", "Swift").toList();//predefined languages.
+
private static Map colors = new LinkedHashMap<>();
public static void load() {
@@ -60,6 +64,7 @@ public class ColorsProvider {
return Stream.of(colors)
.filter(value -> value != null && !InputHelper.isEmpty(value.getKey()))
.map(Map.Entry::getKey)
+ .sortBy(s -> !popularLanguages.contains(s))
.collect(Collectors.toCollection(ArrayList::new));
}
diff --git a/app/src/main/java/com/fastaccess/provider/rest/RestProvider.java b/app/src/main/java/com/fastaccess/provider/rest/RestProvider.java
index 467b0e3d..13645339 100644
--- a/app/src/main/java/com/fastaccess/provider/rest/RestProvider.java
+++ b/app/src/main/java/com/fastaccess/provider/rest/RestProvider.java
@@ -60,7 +60,7 @@ public class RestProvider {
.setPrettyPrinting()
.create();
- public static OkHttpClient provideOkHttpClient(boolean isRawString) {
+ private static OkHttpClient provideOkHttpClient(boolean isRawString) {
if (okHttpClient == null) {
OkHttpClient.Builder client = new OkHttpClient.Builder();
if (BuildConfig.DEBUG) {
diff --git a/app/src/main/java/com/fastaccess/provider/rest/interceptors/AuthenticationInterceptor.java b/app/src/main/java/com/fastaccess/provider/rest/interceptors/AuthenticationInterceptor.java
index 273d6acb..70c15ffe 100644
--- a/app/src/main/java/com/fastaccess/provider/rest/interceptors/AuthenticationInterceptor.java
+++ b/app/src/main/java/com/fastaccess/provider/rest/interceptors/AuthenticationInterceptor.java
@@ -1,5 +1,7 @@
package com.fastaccess.provider.rest.interceptors;
+import android.support.annotation.NonNull;
+
import com.fastaccess.data.service.NotificationService;
import com.fastaccess.helper.InputHelper;
@@ -18,7 +20,7 @@ public class AuthenticationInterceptor implements Interceptor {
private String authToken;
private String otp;
- @Override public Response intercept(Chain chain) throws IOException {
+ @Override public Response intercept(@NonNull Chain chain) throws IOException {
Request original = chain.request();
if (original.url() != HttpUrl.get(URI.create(NotificationService.SUBSCRIPTION_URL))) {
Request.Builder builder = original.newBuilder();
@@ -28,6 +30,7 @@ public class AuthenticationInterceptor implements Interceptor {
if (!InputHelper.isEmpty(otp)) {
builder.addHeader("X-GitHub-OTP", otp.trim());
}
+ builder.addHeader("User-Agent", "FastHub");
Request request = builder.build();
return chain.proceed(request);
}
diff --git a/app/src/main/java/com/fastaccess/provider/timeline/HtmlHelper.java b/app/src/main/java/com/fastaccess/provider/timeline/HtmlHelper.java
index ddc64214..a30d215b 100644
--- a/app/src/main/java/com/fastaccess/provider/timeline/HtmlHelper.java
+++ b/app/src/main/java/com/fastaccess/provider/timeline/HtmlHelper.java
@@ -90,12 +90,6 @@ public class HtmlHelper {
return mySpanner;
}
- private static final String TAG_ROOT = "githubroot";
-
- private static final String ROOT_START = '<' + TAG_ROOT + '>';
-
- private static final String ROOT_END = "" + TAG_ROOT + '>';
-
private static final String TOGGLE_START = "";
private static final String TOGGLE_END = " ";
@@ -122,23 +116,16 @@ public class HtmlHelper {
private static final String PARAGRAPH_END = "
";
- private static final String BLOCKQUOTE_START = "";
-
- private static final String BLOCKQUOTE_END = " ";
-
//https://github.com/k0shk0sh/GitHubSdk/blob/master/library/src/main/java/com/meisolsson/githubsdk/core/HtmlUtils.java
@NonNull public static CharSequence format(final String html) {
if (html == null || html.length() == 0) return "";
StringBuilder formatted = new StringBuilder(html);
strip(formatted, TOGGLE_START, TOGGLE_END);
strip(formatted, SIGNATURE_START, SIGNATURE_END);
- replace(formatted, REPLY_START, REPLY_END, BLOCKQUOTE_START, BLOCKQUOTE_END);
+ strip(formatted, REPLY_START, REPLY_END);
strip(formatted, HIDDEN_REPLY_START, HIDDEN_REPLY_END);
if (replace(formatted, PARAGRAPH_START, BREAK)) replace(formatted, PARAGRAPH_END, BREAK);
- formatEmailFragments(formatted);
trim(formatted);
- formatted.insert(0, ROOT_START);
- formatted.append(ROOT_END);
return formatted;
}
@@ -165,65 +152,15 @@ public class HtmlHelper {
return true;
}
- private static void replace(final StringBuilder input, final String fromStart, final String fromEnd,
- final String toStart, final String toEnd) {
- int start = input.indexOf(fromStart);
- if (start == -1)
- return;
- final int fromStartLength = fromStart.length();
- final int fromEndLength = fromEnd.length();
- final int toStartLength = toStart.length();
- while (start != -1) {
- input.replace(start, start + fromStartLength, toStart);
- int end = input.indexOf(fromEnd, start + toStartLength);
- if (end != -1)
- input.replace(end, end + fromEndLength, toEnd);
-
- start = input.indexOf(fromStart);
- }
- }
-
- private static void formatEmailFragments(final StringBuilder input) {
- int emailStart = input.indexOf(EMAIL_START);
- int breakAdvance = BREAK.length() - 1;
- while (emailStart != -1) {
- int startLength = EMAIL_START.length();
- int emailEnd = input.indexOf(EMAIL_END, emailStart + startLength);
- if (emailEnd == -1)
- break;
-
- input.delete(emailEnd, emailEnd + EMAIL_END.length());
- input.delete(emailStart, emailStart + startLength);
-
- int fullEmail = emailEnd - startLength;
- for (int i = emailStart; i < fullEmail; i++)
- if (input.charAt(i) == '\n') {
- input.deleteCharAt(i);
- input.insert(i, BREAK);
- i += breakAdvance;
- fullEmail += breakAdvance;
- }
-
- emailStart = input.indexOf(EMAIL_START, fullEmail);
- }
- }
-
private static void trim(final StringBuilder input) {
int length = input.length();
int breakLength = BREAK.length();
-
while (length > 0) {
- if (input.indexOf(BREAK) == 0)
- input.delete(0, breakLength);
- else if (length >= breakLength
- && input.lastIndexOf(BREAK) == length - breakLength)
- input.delete(length - breakLength, length);
- else if (Character.isWhitespace(input.charAt(0)))
- input.deleteCharAt(0);
- else if (Character.isWhitespace(input.charAt(length - 1)))
- input.deleteCharAt(length - 1);
- else
- break;
+ if (input.indexOf(BREAK) == 0) input.delete(0, breakLength);
+ else if (length >= breakLength && input.lastIndexOf(BREAK) == length - breakLength) input.delete(length - breakLength, length);
+ else if (Character.isWhitespace(input.charAt(0))) input.deleteCharAt(0);
+ else if (Character.isWhitespace(input.charAt(length - 1))) input.deleteCharAt(length - 1);
+ else break;
length = input.length();
}
}
diff --git a/app/src/main/java/com/fastaccess/ui/adapter/IssuePullsTimelineAdapter.java b/app/src/main/java/com/fastaccess/ui/adapter/IssuePullsTimelineAdapter.java
index 69fae96a..6ba0b835 100644
--- a/app/src/main/java/com/fastaccess/ui/adapter/IssuePullsTimelineAdapter.java
+++ b/app/src/main/java/com/fastaccess/ui/adapter/IssuePullsTimelineAdapter.java
@@ -66,11 +66,7 @@ public class IssuePullsTimelineAdapter extends BaseRecyclerAdapter {
}
private void bind(@NonNull Issue issueModel) {
- avatar.setUrl(issueModel.getUser().getAvatarUrl(), issueModel.getUser().getLogin());
- name.setText(issueModel.getUser().getLogin());
- date.setText(ParseDateFormat.getTimeAgo(issueModel.getCreatedAt()));
- if (!InputHelper.isEmpty(issueModel.getBodyHtml())) {
- HtmlHelper.htmlIntoTextView(comment, issueModel.getBodyHtml());
- } else {
- comment.setText(R.string.no_description_provided);
- }
- if (issueModel.getReactions() != null) {
- appendEmojies(issueModel.getReactions());
- }
+ setup(issueModel.getUser(), issueModel.getBodyHtml(), issueModel.getReactions());
+ setupDate(issueModel.getCreatedAt(), issueModel.getUpdatedAt());
}
private void bind(@NonNull PullRequest pullRequest) {
- avatar.setUrl(pullRequest.getUser().getAvatarUrl(), pullRequest.getUser().getLogin());
- name.setText(pullRequest.getUser().getLogin());
- date.setText(ParseDateFormat.getTimeAgo(pullRequest.getCreatedAt()));
- if (!InputHelper.isEmpty(pullRequest.getBodyHtml())) {
- HtmlHelper.htmlIntoTextView(comment, pullRequest.getBodyHtml());
+ setup(pullRequest.getUser(), pullRequest.getBodyHtml(), pullRequest.getReactions());
+ setupDate(pullRequest.getCreatedAt(), pullRequest.getUpdatedAt());
+ }
+
+ private void setup(User user, String description, ReactionsModel reactionsModel) {
+ avatar.setUrl(user.getAvatarUrl(), user.getLogin(), user.isOrganizationType());
+ name.setText(user.getLogin());
+ if (reactionsModel != null) {
+ appendEmojies(reactionsModel);
+ }
+ if (!InputHelper.isEmpty(description)) {
+ HtmlHelper.htmlIntoTextView(comment, description);
} else {
comment.setText(R.string.no_description_provided);
}
- if (pullRequest.getReactions() != null) {
- appendEmojies(pullRequest.getReactions());
+ }
+
+ private void setupDate(@NonNull Date createdDate, @NonNull Date updated) {
+ if (createdDate.before(updated)) {
+ date.setText(String.format("%s %s", ParseDateFormat.getTimeAgo(updated),
+ date.getResources().getString(R.string.edited)));
+ } else {
+ date.setText(ParseDateFormat.getTimeAgo(createdDate));
}
}
diff --git a/app/src/main/java/com/fastaccess/ui/modules/editor/EditorActivity.java b/app/src/main/java/com/fastaccess/ui/modules/editor/EditorActivity.java
index 5c209f5e..ac0dfb02 100644
--- a/app/src/main/java/com/fastaccess/ui/modules/editor/EditorActivity.java
+++ b/app/src/main/java/com/fastaccess/ui/modules/editor/EditorActivity.java
@@ -18,6 +18,7 @@ import android.widget.CheckBox;
import android.widget.LinearLayout;
import android.widget.ListView;
+import com.evernote.android.state.State;
import com.fastaccess.BuildConfig;
import com.fastaccess.R;
import com.fastaccess.data.dao.EditReviewCommentModel;
@@ -46,7 +47,6 @@ import butterknife.OnClick;
import butterknife.OnItemClick;
import butterknife.OnTextChanged;
import es.dmoral.toasty.Toasty;
-import com.evernote.android.state.State;
import uk.co.samuelwall.materialtaptargetprompt.MaterialTapTargetPrompt;
import static android.view.View.GONE;
@@ -70,16 +70,15 @@ public class EditorActivity extends BaseActivity mentions = new ArrayList<>();
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 97211b97..dd44fcda 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
@@ -20,6 +20,7 @@ import android.view.MotionEvent;
import android.view.View;
import android.widget.CheckBox;
+import com.evernote.android.state.State;
import com.fastaccess.R;
import com.fastaccess.data.dao.LicenseModel;
import com.fastaccess.data.dao.NameParser;
@@ -58,7 +59,6 @@ import butterknife.BindView;
import butterknife.OnCheckedChanged;
import butterknife.OnClick;
import butterknife.OnLongClick;
-import com.evernote.android.state.State;
import it.sephiroth.android.library.bottomnavigation.BottomNavigation;
import uk.co.samuelwall.materialtaptargetprompt.MaterialTapTargetPrompt;
@@ -313,7 +313,7 @@ public class RepoPagerActivity extends BaseActivity imp
if (intent != null && intent.getExtras() != null) {
CharSequence charSequence = intent.getExtras().getCharSequence(BundleConstant.EXTRA);
if (!InputHelper.isEmpty(charSequence)) {
+ Logger.e(charSequence);
sendToView(view -> view.onSetCode(charSequence));
}
}
@@ -61,6 +63,7 @@ public class CreateIssuePresenter extends BasePresenter imp
makeRestCall(RestProvider.getIssueService().editIssue(login, repo, number, requestModel),
issueModel -> {
if (issueModel != null) {
+ Logger.e(issueModel.getBodyHtml());
sendToView(view -> view.onSuccessSubmission(issueModel));
} else {
sendToView(view -> view.showMessage(R.string.error, R.string.error_creating_issue));
diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/issues/issue/details/IssuePagerActivity.java b/app/src/main/java/com/fastaccess/ui/modules/repos/issues/issue/details/IssuePagerActivity.java
index 5310ee01..b1bc6d07 100644
--- a/app/src/main/java/com/fastaccess/ui/modules/repos/issues/issue/details/IssuePagerActivity.java
+++ b/app/src/main/java/com/fastaccess/ui/modules/repos/issues/issue/details/IssuePagerActivity.java
@@ -13,6 +13,7 @@ import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
+import com.evernote.android.state.State;
import com.fastaccess.R;
import com.fastaccess.data.dao.FragmentPagerAdapterModel;
import com.fastaccess.data.dao.LabelModel;
@@ -47,7 +48,6 @@ import java.util.List;
import butterknife.BindView;
import butterknife.OnClick;
-import com.evernote.android.state.State;
/**
* Created by Kosh on 10 Dec 2016, 9:23 AM
@@ -126,7 +126,7 @@ public class IssuePagerActivity extends BaseActivity {
+ void onSetupIssue(boolean isUpdate);
void showSuccessIssueActionMsg(boolean isClose);
@@ -39,6 +39,7 @@ public interface IssuePagerMvp {
void onMileStoneSelected(@NonNull MilestoneModel milestoneModel);
void onFinishActivity();
+
}
interface Presenter extends BaseMvp.FAPresenter {
@@ -82,4 +83,8 @@ public interface IssuePagerMvp {
void onSubscribeOrMute(boolean mute);
}
+ interface IssuePrCallback {
+ @Nullable T getData();
+ }
+
}
diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/issues/issue/details/IssuePagerPresenter.java b/app/src/main/java/com/fastaccess/ui/modules/repos/issues/issue/details/IssuePagerPresenter.java
index 13540a67..bcd1fd7c 100644
--- a/app/src/main/java/com/fastaccess/ui/modules/repos/issues/issue/details/IssuePagerPresenter.java
+++ b/app/src/main/java/com/fastaccess/ui/modules/repos/issues/issue/details/IssuePagerPresenter.java
@@ -70,31 +70,14 @@ class IssuePagerPresenter extends BasePresenter implements I
showToRepoBtn = intent.getExtras().getBoolean(BundleConstant.EXTRA_THREE);
if (issueModel != null) {
issueNumber = issueModel.getNumber();
- sendToView(IssuePagerMvp.View::onSetupIssue);
+ sendToView(view -> view.onSetupIssue(false));
return;
} else if (issueNumber > 0 && !InputHelper.isEmpty(login) && !InputHelper.isEmpty(repoId)) {
getIssueFromApi();
return;
}
}
- sendToView(IssuePagerMvp.View::onSetupIssue);
- }
-
- private void getIssueFromApi() {
- Observable observable = RestProvider.getIssueService().getIssue(login, repoId, issueNumber)
- .flatMap(issue -> RestProvider.getRepoService().isCollaborator(login, repoId, Login.getUser().getLogin()),
- (issue, booleanResponse) -> {
- isCollaborator = booleanResponse.code() == 204;
- return issue;
- });
- makeRestCall(observable, this::setupIssue);
- }
-
- private void setupIssue(Issue issue) {
- issueModel = issue;
- issueModel.setRepoId(repoId);
- issueModel.setLogin(login);
- sendToView(IssuePagerMvp.View::onSetupIssue);
+ sendToView(view -> view.onSetupIssue(false));
}
@Override public void onWorkOffline(long issueNumber, @NonNull String repoId, @NonNull String login) {
@@ -103,7 +86,7 @@ class IssuePagerPresenter extends BasePresenter implements I
.subscribe(issueModel1 -> {
if (issueModel1 != null) {
issueModel = issueModel1;
- sendToView(IssuePagerMvp.View::onSetupIssue);
+ sendToView(view -> view.onSetupIssue(false));
}
}));
} else {
@@ -163,7 +146,7 @@ class IssuePagerPresenter extends BasePresenter implements I
issue.setRepoId(issueModel.getRepoId());
issue.setLogin(issueModel.getLogin());
issueModel = issue;
- sendToView(IssuePagerMvp.View::onSetupIssue);
+ sendToView(view -> view.onSetupIssue(true));
}
})
.subscribe(issue -> {/**/},
@@ -184,7 +167,7 @@ class IssuePagerPresenter extends BasePresenter implements I
int code = booleanResponse.code();
if (code == 204) {
issueModel.setLocked(!isLocked());
- sendToView(IssuePagerMvp.View::onSetupIssue);
+ sendToView(view -> view.onSetupIssue(true));
}
sendToView(IssuePagerMvp.View::hideProgress);
});
@@ -217,7 +200,7 @@ class IssuePagerPresenter extends BasePresenter implements I
issueModel.setLogin(login);
issueModel.setRepoId(repoId);
manageObservable(issue.save(issueModel).toObservable());
- sendToView(IssuePagerMvp.View::onUpdateTimeline);
+ sendToView(view -> updateTimeline(view, R.string.labels_added_successfully));
});
}
@@ -227,7 +210,7 @@ class IssuePagerPresenter extends BasePresenter implements I
Stream.of(labels).filter(value -> value != null && value.getName() != null)
.map(LabelModel::getName).collect(Collectors.toList())),
labelModels -> {
- sendToView(IssuePagerMvp.View::onUpdateTimeline);
+ sendToView(view -> updateTimeline(view, R.string.labels_added_successfully));
LabelListModel listModel = new LabelListModel();
listModel.addAll(labels);
issueModel.setLabels(listModel);
@@ -249,7 +232,7 @@ class IssuePagerPresenter extends BasePresenter implements I
assignee.addAll(users);
issueModel.setAssignees(assignee);
manageObservable(issueModel.save(issueModel).toObservable());
- sendToView(IssuePagerMvp.View::onUpdateTimeline);
+ sendToView(view -> updateTimeline(view, R.string.assignee_added));
}
);
}
@@ -267,7 +250,7 @@ class IssuePagerPresenter extends BasePresenter implements I
this.issueModel.setLogin(login);
this.issueModel.setRepoId(repoId);
manageObservable(issueModel.save(issueModel).toObservable());
- sendToView(IssuePagerMvp.View::onSetupIssue);
+ sendToView(view -> view.onSetupIssue(true));
}
@Override public void onSubscribeOrMute(boolean mute) {
@@ -288,4 +271,25 @@ class IssuePagerPresenter extends BasePresenter implements I
}
});
}
+
+ private void getIssueFromApi() {
+ makeRestCall(RxHelper.getObserver(Observable.zip(RestProvider.getIssueService().getIssue(login, repoId, issueNumber),
+ RestProvider.getRepoService().isCollaborator(login, repoId, Login.getUser().getLogin()),
+ (issue, booleanResponse) -> {
+ isCollaborator = booleanResponse.code() == 204;
+ return issue;
+ })), this::setupIssue);
+ }
+
+ private void setupIssue(Issue issue) {
+ issueModel = issue;
+ issueModel.setRepoId(repoId);
+ issueModel.setLogin(login);
+ sendToView(view -> view.onSetupIssue(false));
+ }
+
+ private void updateTimeline(IssuePagerMvp.View view, int assignee_added) {
+ view.showMessage(R.string.success, assignee_added);
+ view.onUpdateTimeline();
+ }
}
diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/issues/issue/details/timeline/IssueTimelineFragment.java b/app/src/main/java/com/fastaccess/ui/modules/repos/issues/issue/details/timeline/IssueTimelineFragment.java
index 2a73a6d6..faa30889 100644
--- a/app/src/main/java/com/fastaccess/ui/modules/repos/issues/issue/details/timeline/IssueTimelineFragment.java
+++ b/app/src/main/java/com/fastaccess/ui/modules/repos/issues/issue/details/timeline/IssueTimelineFragment.java
@@ -1,6 +1,7 @@
package com.fastaccess.ui.modules.repos.issues.issue.details.timeline;
import android.app.Activity;
+import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
@@ -8,6 +9,7 @@ import android.support.annotation.Nullable;
import android.support.annotation.StringRes;
import android.view.View;
+import com.evernote.android.state.State;
import com.fastaccess.R;
import com.fastaccess.data.dao.TimelineModel;
import com.fastaccess.data.dao.model.Comment;
@@ -24,6 +26,7 @@ import com.fastaccess.ui.adapter.IssuePullsTimelineAdapter;
import com.fastaccess.ui.adapter.viewholder.TimelineCommentsViewHolder;
import com.fastaccess.ui.base.BaseFragment;
import com.fastaccess.ui.modules.editor.EditorActivity;
+import com.fastaccess.ui.modules.repos.issues.issue.details.IssuePagerMvp;
import com.fastaccess.ui.modules.repos.reactions.ReactionsDialogFragment;
import com.fastaccess.ui.widgets.AppbarRefreshLayout;
import com.fastaccess.ui.widgets.StateLayout;
@@ -36,7 +39,6 @@ import java.util.LinkedHashMap;
import java.util.List;
import butterknife.BindView;
-import com.evernote.android.state.State;
/**
* Created by Kosh on 31 Mar 2017, 7:35 PM
@@ -50,16 +52,32 @@ public class IssueTimelineFragment extends BaseFragment toggleMap = new LinkedHashMap<>();
private IssuePullsTimelineAdapter adapter;
- private OnLoadMore onLoadMore;
+ private OnLoadMore onLoadMore;
+ private IssuePagerMvp.IssuePrCallback issueCallback;
- public static IssueTimelineFragment newInstance(@NonNull Issue issueModel) {
- IssueTimelineFragment view = new IssueTimelineFragment();
- view.setArguments(Bundler.start().put(BundleConstant.ITEM, issueModel).end());//TODO fix this
- return view;
+ @NonNull public static IssueTimelineFragment newInstance() {
+ return new IssueTimelineFragment();
+ }
+
+ @SuppressWarnings("unchecked") @Override public void onAttach(Context context) {
+ super.onAttach(context);
+ if (getParentFragment() instanceof IssuePagerMvp.IssuePrCallback) {
+ issueCallback = (IssuePagerMvp.IssuePrCallback) getParentFragment();
+ } else if (context instanceof IssuePagerMvp.IssuePrCallback) {
+ issueCallback = (IssuePagerMvp.IssuePrCallback) context;
+ } else {
+ throw new IllegalArgumentException(String.format("%s or parent fragment must implement IssuePagerMvp.IssuePrCallback", context.getClass()
+ .getSimpleName()));
+ }
+ }
+
+ @Override public void onDetach() {
+ issueCallback = null;
+ super.onDetach();
}
@Override public void onRefresh() {
- getPresenter().onCallApi(1, null);
+ getPresenter().onCallApi(1, getIssue());
}
@Override public void onNotifyAdapter(@Nullable List items, int page) {
@@ -69,17 +87,16 @@ public class IssueTimelineFragment extends BaseFragment getLoadMore() {
if (onLoadMore == null) {
- onLoadMore = new OnLoadMore(getPresenter());
+ onLoadMore = new OnLoadMore<>(getPresenter());
}
+ onLoadMore.setParameter(getIssue());
return onLoadMore;
}
@@ -88,12 +105,15 @@ public class IssueTimelineFragment extends BaseFragment items, int page);
- @NonNull OnLoadMore getLoadMore();
+ @NonNull OnLoadMore getLoadMore();
void onEditComment(@NonNull Comment item);
@@ -50,32 +50,24 @@ public interface IssueTimelineMvp {
void onSetHeader(@NonNull TimelineModel timelineModel);
- void onRefresh(@NonNull Issue issue);
+ @Nullable Issue getIssue();
+
+ void onUpdateHeader();
}
interface Presenter extends BaseMvp.FAPresenter, BaseViewHolder.OnItemClickListener,
- BaseMvp.PaginationListener {
+ BaseMvp.PaginationListener {
boolean isPreviouslyReacted(long commentId, int vId);
@NonNull ArrayList getEvents();
- void onFragmentCreated(@Nullable Bundle bundle);
-
void onWorkOffline();
void onHandleDeletion(@Nullable Bundle bundle);
- @Nullable String repoId();
-
- @Nullable String login();
-
- int number();
-
void onHandleReaction(@IdRes int viewId, long id, @ReactionsProvider.ReactionType int reactionType);
boolean isCallingApi(long id, int vId);
-
- void onUpdateIssue(@NonNull Issue issue);
}
}
diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/issues/issue/details/timeline/IssueTimelinePresenter.java b/app/src/main/java/com/fastaccess/ui/modules/repos/issues/issue/details/timeline/IssueTimelinePresenter.java
index f8c0e5da..513e73a7 100644
--- a/app/src/main/java/com/fastaccess/ui/modules/repos/issues/issue/details/timeline/IssueTimelinePresenter.java
+++ b/app/src/main/java/com/fastaccess/ui/modules/repos/issues/issue/details/timeline/IssueTimelinePresenter.java
@@ -37,7 +37,6 @@ import lombok.Getter;
*/
@Getter public class IssueTimelinePresenter extends BasePresenter implements IssueTimelineMvp.Presenter {
- @com.evernote.android.state.State Issue issue;
private ArrayList timeline = new ArrayList<>();
private ReactionsProvider reactionsProvider;
private int page;
@@ -51,12 +50,13 @@ import lombok.Getter;
@Override public void onItemClick(int position, View v, TimelineModel item) {
if (getView() != null) {
if (item.getType() == TimelineModel.COMMENT) {
- if (getHeader() == null) return;
+ if (getView().getIssue() == null) return;
+ Issue issue = getView().getIssue();
if (v.getId() == R.id.commentMenu) {
PopupMenu popupMenu = new PopupMenu(v.getContext(), v);
popupMenu.inflate(R.menu.comments_menu);
String username = Login.getUser().getLogin();
- boolean isOwner = CommentsHelper.isOwner(username, getHeader().getLogin(), item.getComment().getUser().getLogin());
+ boolean isOwner = CommentsHelper.isOwner(username, issue.getLogin(), item.getComment().getUser().getLogin());
popupMenu.getMenu().findItem(R.id.delete).setVisible(isOwner);
popupMenu.getMenu().findItem(R.id.edit).setVisible(isOwner);
popupMenu.setOnMenuItemClickListener(item1 -> {
@@ -113,8 +113,10 @@ import lombok.Getter;
@Override public void onItemLongClick(int position, View v, TimelineModel item) {
if (getView() == null) return;
if (item.getType() == TimelineModel.COMMENT || item.getType() == TimelineModel.HEADER) {
- String login = login();
- String repoId = repoId();
+ if (getView().getIssue() == null) return;
+ Issue issue = getView().getIssue();
+ String login = issue.getLogin();
+ String repoId = issue.getRepoId();
if (!InputHelper.isEmpty(login) && !InputHelper.isEmpty(repoId)) {
ReactionTypes type = ReactionTypes.get(v.getId());
if (type != null) {
@@ -136,23 +138,6 @@ import lombok.Getter;
return timeline;
}
- @Override protected void onCreate() {
- super.onCreate();
- if (issue != null && timeline.isEmpty()) {
- sendToView(view -> view.onSetHeader(TimelineModel.constructHeader(issue)));
- onCallApi(1, null);
- }
- }
-
- @Override public void onFragmentCreated(@Nullable Bundle bundle) {
- if (bundle == null) throw new NullPointerException("Bundle is null?");
- issue = bundle.getParcelable(BundleConstant.ITEM);
- if (timeline.isEmpty() && issue != null) {
- sendToView(view -> view.onSetHeader(TimelineModel.constructHeader(issue)));
- onCallApi(1, null);
- }
- }
-
@Override public void onWorkOffline() {
//TODO
}
@@ -161,7 +146,9 @@ import lombok.Getter;
if (bundle != null) {
long commId = bundle.getLong(BundleConstant.EXTRA, 0);
if (commId != 0) {
- makeRestCall(RestProvider.getIssueService().deleteIssueComment(login(), repoId(), commId),
+ if (getView() == null || getView().getIssue() == null) return;
+ Issue issue = getView().getIssue();
+ makeRestCall(RestProvider.getIssueService().deleteIssueComment(issue.getLogin(), issue.getRepoId(), commId),
booleanResponse -> sendToView(view -> {
if (booleanResponse.code() == 204) {
Comment comment = new Comment();
@@ -175,25 +162,11 @@ import lombok.Getter;
}
}
- @Nullable @Override public String repoId() {
- return getHeader() != null ? getHeader().getRepoId() : null;
- }
-
- @Nullable @Override public String login() {
- return getHeader() != null ? getHeader().getLogin() : null;
- }
-
- @Override public int number() {
- return getHeader() != null ? getHeader().getNumber() : -1;
- }
-
- @Nullable private Issue getHeader() {
- return issue;
- }
-
@Override public void onHandleReaction(int viewId, long id, @ReactionsProvider.ReactionType int reactionType) {
- String login = login();
- String repoId = repoId();
+ if (getView() == null || getView().getIssue() == null) return;
+ Issue issue = getView().getIssue();
+ String login = issue.getLogin();
+ String repoId = issue.getRepoId();
Observable observable = getReactionsProvider().onHandleReaction(viewId, id, login, repoId, reactionType);
if (observable != null) manageObservable(observable);
}
@@ -202,10 +175,6 @@ import lombok.Getter;
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();
@@ -229,8 +198,8 @@ import lombok.Getter;
this.previousTotal = previousTotal;
}
- @Override public void onCallApi(int page, @Nullable Object parameter) {
- if (getHeader() == null) {
+ @Override public void onCallApi(int page, @Nullable Issue parameter) {
+ if (parameter == null) {
sendToView(BaseMvp.FAView::hideProgress);
return;
}
@@ -243,19 +212,19 @@ import lombok.Getter;
return;
}
setCurrentPage(page);
- String login = getHeader().getLogin();
- String repoID = getHeader().getRepoId();
- int number = getHeader().getNumber();
+ String login = parameter.getLogin();
+ String repoId = parameter.getRepoId();
+ int number = parameter.getNumber();
Observable> observable;
if (page > 1) {
- observable = RestProvider.getIssueService().getIssueComments(login, repoID, number, page)
+ observable = RestProvider.getIssueService().getIssueComments(login, repoId, number, page)
.map(comments -> {
lastPage = comments != null ? comments.getLast() : 0;
return TimelineModel.construct(comments != null ? comments.getItems() : null);
});
} else {
- observable = Observable.zip(RestProvider.getIssueService().getTimeline(login, repoID, number),
- RestProvider.getIssueService().getIssueComments(login, repoID, number, page),
+ observable = Observable.zip(RestProvider.getIssueService().getTimeline(login, repoId, number),
+ RestProvider.getIssueService().getIssueComments(login, repoId, number, page),
(issueEventPageable, commentPageable) -> {
lastPage = commentPageable != null ? commentPageable.getLast() : 0;
return TimelineModel.construct(commentPageable != null ? commentPageable.getItems() : null,
diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/details/PullRequestPagerActivity.java b/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/details/PullRequestPagerActivity.java
index b49a550b..8d2cf11a 100644
--- a/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/details/PullRequestPagerActivity.java
+++ b/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/details/PullRequestPagerActivity.java
@@ -13,6 +13,7 @@ import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
+import com.evernote.android.state.State;
import com.fastaccess.R;
import com.fastaccess.data.dao.FragmentPagerAdapterModel;
import com.fastaccess.data.dao.LabelModel;
@@ -49,7 +50,6 @@ import java.util.List;
import butterknife.BindView;
import butterknife.OnClick;
-import com.evernote.android.state.State;
/**
* Created by Kosh on 10 Dec 2016, 9:23 AM
@@ -127,7 +127,7 @@ public class PullRequestPagerActivity extends BaseActivity labels) {
Logger.e(labels, labels.size());
getPresenter().onPutLabels(labels);
@@ -364,10 +336,9 @@ public class PullRequestPagerActivity extends BaseActivity {
- void onSetupIssue();
+ void onSetupIssue(boolean update);
void onLabelsRetrieved(@NonNull List items);
- void onUpdateMenu();
-
void showSuccessIssueActionMsg(boolean isClose);
void showErrorIssueActionMsg(boolean isClose);
@@ -88,6 +88,8 @@ public interface PullRequestPagerMvp {
boolean isCollaborator();
void onUpdatePullRequest(@NonNull PullRequest pullRequestModel);
+
+ void onRefresh();
}
}
diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/details/PullRequestPagerPresenter.java b/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/details/PullRequestPagerPresenter.java
index 5fe17e59..696478de 100644
--- a/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/details/PullRequestPagerPresenter.java
+++ b/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/details/PullRequestPagerPresenter.java
@@ -67,33 +67,14 @@ class PullRequestPagerPresenter extends BasePresenter
repoId = intent.getExtras().getString(BundleConstant.EXTRA_TWO);
showToRepoBtn = intent.getExtras().getBoolean(BundleConstant.EXTRA_THREE);
if (pullRequest != null) {
- sendToView(PullRequestPagerMvp.View::onSetupIssue);
+ sendToView(view -> view.onSetupIssue(false));
return;
} else if (issueNumber > 0 && !InputHelper.isEmpty(login) && !InputHelper.isEmpty(repoId)) {
- makeRestCall(RestProvider.getPullRequestService()
- .getPullRequest(login, repoId, issueNumber)
- .flatMap(pullRequest1 -> RestProvider.getRepoService().isCollaborator(login, repoId, Login.getUser().getLogin()),
- (pullRequest1, booleanResponse) -> {
- isCollaborator = booleanResponse.code() == 204;
- return pullRequest1;
- })
- .flatMap(pullRequest1 -> RestProvider.getIssueService().getIssue(login, repoId, issueNumber),
- (pullRequest1, issue) -> {//hack to get reactions from issue api
- if (issue != null) {
- pullRequest1.setReactions(issue.getReactions());
- }
- return pullRequest1;
- }), pullRequestModelResponse -> {
- pullRequest = pullRequestModelResponse;
- pullRequest.setRepoId(repoId);
- pullRequest.setLogin(login);
- sendToView(PullRequestPagerMvp.View::onSetupIssue);
- manageObservable(pullRequest.save(pullRequest).toObservable());
- });
+ callApi();
return;
}
}
- sendToView(PullRequestPagerMvp.View::onSetupIssue);
+ sendToView(view -> view.onSetupIssue(false));
}
@Override public void onWorkOffline() {
@@ -102,7 +83,7 @@ class PullRequestPagerPresenter extends BasePresenter
.subscribe(pullRequestModel -> {
if (pullRequestModel != null) {
pullRequest = pullRequestModel;
- sendToView(PullRequestPagerMvp.View::onSetupIssue);
+ sendToView(view -> view.onSetupIssue(false));
}
}));
}
@@ -158,7 +139,7 @@ class PullRequestPagerPresenter extends BasePresenter
int code = booleanResponse.code();
if (code == 204) {
pullRequest.setLocked(!isLocked());
- sendToView(PullRequestPagerMvp.View::onSetupIssue);
+ sendToView(view -> view.onSetupIssue(false));
}
});
}
@@ -175,7 +156,7 @@ class PullRequestPagerPresenter extends BasePresenter
issue.setRepoId(getPullRequest().getRepoId());
issue.setLogin(getPullRequest().getLogin());
pullRequest = issue;
- sendToView(PullRequestPagerMvp.View::onSetupIssue);
+ sendToView(view -> view.onSetupIssue(false));
}
}, throwable -> sendToView(view -> view.showErrorIssueActionMsg(getPullRequest().getState() == IssueState.open))));
}
@@ -195,9 +176,7 @@ class PullRequestPagerPresenter extends BasePresenter
} else {
sendToView(view -> view.showMessage(R.string.error, R.string.no_labels));
}
- }, throwable -> {
- sendToView(view -> view.showMessage(R.string.error, R.string.no_labels));
- })
+ }, throwable -> sendToView(view -> view.showMessage(R.string.error, R.string.no_labels)))
);
}
@@ -206,7 +185,7 @@ class PullRequestPagerPresenter extends BasePresenter
Stream.of(labels).filter(value -> value != null && value.getName() != null)
.map(LabelModel::getName).collect(Collectors.toList())),
labelModels -> {
- sendToView(PullRequestPagerMvp.View::onUpdateTimeline);
+ sendToView(view -> updateTimeline(view, R.string.labels_added_successfully));
LabelListModel listModel = new LabelListModel();
listModel.addAll(labels);
pullRequest.setLabels(listModel);
@@ -223,7 +202,7 @@ class PullRequestPagerPresenter extends BasePresenter
pullRequest.setLogin(login);
pullRequest.setRepoId(repoId);
manageObservable(pr.save(pullRequest).toObservable());
- sendToView(PullRequestPagerMvp.View::onUpdateTimeline);
+ sendToView(view -> updateTimeline(view, R.string.labels_added_successfully));
});
}
@@ -244,13 +223,13 @@ class PullRequestPagerPresenter extends BasePresenter
assignee.addAll(users);
pullRequest.setAssignees(assignee);
manageObservable(pullRequest.save(pullRequest).toObservable());
- sendToView(PullRequestPagerMvp.View::onUpdateTimeline);
+ sendToView(view -> updateTimeline(view, R.string.assignee_added));
}
);
} else {
assigneesRequestModel.setReviewers(assignees);
makeRestCall(RestProvider.getPullRequestService().putReviewers(login, repoId, issueNumber, assigneesRequestModel),
- pullRequestResponse -> sendToView(PullRequestPagerMvp.View::onUpdateTimeline)
+ pullRequestResponse -> sendToView(view -> updateTimeline(view, R.string.reviewer_added))
);
}
}
@@ -266,10 +245,7 @@ class PullRequestPagerPresenter extends BasePresenter
.doOnSubscribe(disposable -> sendToView(view -> view.showProgress(0)))
.subscribe(mergeResponseModel -> {
if (mergeResponseModel.isMerged()) {
- sendToView(view -> {
- view.showMessage(R.string.success, R.string.success_merge);
- view.onUpdateTimeline();
- });
+ sendToView(view -> updateTimeline(view, R.string.success_merge));
} else {
sendToView(view -> view.showErrorMessage(mergeResponseModel.getMessage()));
}
@@ -291,10 +267,44 @@ class PullRequestPagerPresenter extends BasePresenter
}
@Override public void onUpdatePullRequest(@NonNull PullRequest pullRequestModel) {
- this.pullRequest = pullRequestModel;
+ this.pullRequest.setTitle(pullRequestModel.getTitle());
+ this.pullRequest.setBody(pullRequestModel.getBody());
+ this.pullRequest.setBodyHtml(pullRequestModel.getBodyHtml());
this.pullRequest.setLogin(login);
this.pullRequest.setRepoId(repoId);
manageObservable(pullRequest.save(pullRequest).toObservable());
- sendToView(PullRequestPagerMvp.View::onSetupIssue);
+ sendToView(view -> view.onSetupIssue(true));
+ }
+
+ @Override public void onRefresh() {
+ callApi();
+ }
+
+ private void callApi() {
+ makeRestCall(RxHelper.getObserver(Observable.zip(RestProvider.getPullRequestService()
+ .getPullRequest(login, repoId, issueNumber),
+ RestProvider.getRepoService().isCollaborator(login, repoId, Login.getUser().getLogin()),
+ RestProvider.getIssueService().getIssue(login, repoId, issueNumber),
+ (pullRequestModel, booleanResponse, issue) -> {
+ this.pullRequest = pullRequestModel;
+ if (issue != null) {
+ this.pullRequest.setReactions(issue.getReactions());
+ this.pullRequest.setTitle(issue.getTitle());
+ this.pullRequest.setBody(issue.getBody());
+ this.pullRequest.setBodyHtml(issue.getBodyHtml());
+ }
+ this.pullRequest.setLogin(login);
+ this.pullRequest.setRepoId(repoId);
+ isCollaborator = booleanResponse.code() == 204;
+ return pullRequest;
+ })), pullRequest -> {
+ sendToView(view -> view.onSetupIssue(false));
+ manageObservable(pullRequest.save(pullRequest).toObservable());
+ });
+ }
+
+ private void updateTimeline(PullRequestPagerMvp.View view, int assignee_added) {
+ view.showMessage(R.string.success, assignee_added);
+ view.onUpdateTimeline();
}
}
diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/details/timeline/timeline/PullRequestTimelineFragment.java b/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/details/timeline/timeline/PullRequestTimelineFragment.java
index cd27b7af..ce80b9ec 100644
--- a/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/details/timeline/timeline/PullRequestTimelineFragment.java
+++ b/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/details/timeline/timeline/PullRequestTimelineFragment.java
@@ -1,6 +1,7 @@
package com.fastaccess.ui.modules.repos.pull_requests.pull_request.details.timeline.timeline;
import android.app.Activity;
+import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
@@ -8,6 +9,7 @@ import android.support.annotation.Nullable;
import android.support.annotation.StringRes;
import android.view.View;
+import com.evernote.android.state.State;
import com.fastaccess.R;
import com.fastaccess.data.dao.EditReviewCommentModel;
import com.fastaccess.data.dao.ReviewCommentModel;
@@ -25,6 +27,7 @@ import com.fastaccess.ui.adapter.IssuePullsTimelineAdapter;
import com.fastaccess.ui.adapter.viewholder.TimelineCommentsViewHolder;
import com.fastaccess.ui.base.BaseFragment;
import com.fastaccess.ui.modules.editor.EditorActivity;
+import com.fastaccess.ui.modules.repos.issues.issue.details.IssuePagerMvp;
import com.fastaccess.ui.modules.repos.reactions.ReactionsDialogFragment;
import com.fastaccess.ui.widgets.AppbarRefreshLayout;
import com.fastaccess.ui.widgets.StateLayout;
@@ -37,7 +40,6 @@ import java.util.LinkedHashMap;
import java.util.List;
import butterknife.BindView;
-import com.evernote.android.state.State;
/**
* Created by Kosh on 31 Mar 2017, 7:35 PM
@@ -52,16 +54,33 @@ public class PullRequestTimelineFragment extends BaseFragment toggleMap = new LinkedHashMap<>();
private IssuePullsTimelineAdapter adapter;
- private OnLoadMore onLoadMore;
+ private OnLoadMore onLoadMore;
- public static PullRequestTimelineFragment newInstance(@NonNull PullRequest pullRequest) {
- PullRequestTimelineFragment view = new PullRequestTimelineFragment();
- view.setArguments(Bundler.start().put(BundleConstant.ITEM, pullRequest).end());//TODO fix this
- return view;
+ private IssuePagerMvp.IssuePrCallback issueCallback;
+
+ @NonNull public static PullRequestTimelineFragment newInstance() {
+ return new PullRequestTimelineFragment();
+ }
+
+ @SuppressWarnings("unchecked") @Override public void onAttach(Context context) {
+ super.onAttach(context);
+ if (getParentFragment() instanceof IssuePagerMvp.IssuePrCallback) {
+ issueCallback = (IssuePagerMvp.IssuePrCallback) getParentFragment();
+ } else if (context instanceof IssuePagerMvp.IssuePrCallback) {
+ issueCallback = (IssuePagerMvp.IssuePrCallback) context;
+ } else {
+ throw new IllegalArgumentException(String.format("%s or parent fragment must implement IssuePagerMvp.IssuePrCallback", context.getClass()
+ .getSimpleName()));
+ }
+ }
+
+ @Override public void onDetach() {
+ issueCallback = null;
+ super.onDetach();
}
@Override public void onRefresh() {
- getPresenter().onCallApi(1, null);
+ getPresenter().onCallApi(1, getPullRequest());
}
@Override protected int fragmentLayout() {
@@ -69,24 +88,27 @@ public class PullRequestTimelineFragment extends BaseFragment getLoadMore() {
if (onLoadMore == null) {
- onLoadMore = new OnLoadMore(getPresenter());
+ onLoadMore = new OnLoadMore<>(getPresenter());
}
+ onLoadMore.setParameter(getPullRequest());
return onLoadMore;
}
@Override public void onEditComment(@NonNull Comment item) {
Intent intent = new Intent(getContext(), EditorActivity.class);
+ if (getPullRequest() == null) return;
intent.putExtras(Bundler
.start()
- .put(BundleConstant.ID, getPresenter().repoId())
- .put(BundleConstant.EXTRA_TWO, getPresenter().login())
- .put(BundleConstant.EXTRA_THREE, getPresenter().number())
+ .put(BundleConstant.ID, getPullRequest().getRepoId())
+ .put(BundleConstant.EXTRA_TWO, getPullRequest().getLogin())
+ .put(BundleConstant.EXTRA_THREE, getPullRequest().getNumber())
.put(BundleConstant.EXTRA_FOUR, item.getId())
.put(BundleConstant.EXTRA, item.getBody())
.put(BundleConstant.EXTRA_TYPE, BundleConstant.ExtraTYpe.EDIT_ISSUE_COMMENT_EXTRA)
@@ -170,11 +192,12 @@ public class PullRequestTimelineFragment extends BaseFragment items, int page);
- @NonNull OnLoadMore getLoadMore();
+ @NonNull OnLoadMore getLoadMore();
void onEditComment(@NonNull Comment item);
@@ -66,34 +66,26 @@ public interface PullRequestTimelineMvp {
void onSetHeader(@NonNull TimelineModel timelineModel);
- void onRefresh(@NonNull PullRequest pullRequest);
+ @Nullable PullRequest getPullRequest();
+
+ void onUpdateHeader();
}
interface Presenter extends BaseMvp.FAPresenter, BaseViewHolder.OnItemClickListener,
- ReviewCommentCallback, BaseMvp.PaginationListener {
+ ReviewCommentCallback, BaseMvp.PaginationListener {
@NonNull ArrayList getEvents();
- void onFragmentCreated(@Nullable Bundle bundle);
-
void onWorkOffline();
void onHandleDeletion(@Nullable Bundle bundle);
- @Nullable String repoId();
-
- @Nullable String login();
-
- int number();
-
boolean isPreviouslyReacted(long commentId, int vId);
void onHandleReaction(@IdRes int vId, long idOrNumber, @ReactionsProvider.ReactionType int reactionType);
- boolean isMerged();
+ boolean isMerged(PullRequest pullRequest);
boolean isCallingApi(long id, int vId);
-
- void onUpdatePullRequest(@NonNull PullRequest pullRequest);
}
}
diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/details/timeline/timeline/PullRequestTimelinePresenter.java b/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/details/timeline/timeline/PullRequestTimelinePresenter.java
index 1a03c564..ca89fca3 100644
--- a/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/details/timeline/timeline/PullRequestTimelinePresenter.java
+++ b/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/details/timeline/timeline/PullRequestTimelinePresenter.java
@@ -41,20 +41,19 @@ import io.reactivex.Observable;
public class PullRequestTimelinePresenter extends BasePresenter implements PullRequestTimelineMvp.Presenter {
private ArrayList timeline = new ArrayList<>();
private ReactionsProvider reactionsProvider;
- @com.evernote.android.state.State PullRequest pullRequest;
private int page;
private int previousTotal;
private int lastPage = Integer.MAX_VALUE;
@Override public void onItemClick(int position, View v, TimelineModel item) {
- if (getView() != null) {
+ if (getView() != null && getView().getPullRequest() != null) {
if (item.getType() == TimelineModel.COMMENT) {
- if (getHeader() == null) return;
+ PullRequest pullRequest = getView().getPullRequest();
if (v.getId() == R.id.commentMenu) {
PopupMenu popupMenu = new PopupMenu(v.getContext(), v);
popupMenu.inflate(R.menu.comments_menu);
String username = Login.getUser().getLogin();
- boolean isOwner = CommentsHelper.isOwner(username, getHeader().getLogin(), item.getComment().getUser().getLogin());
+ boolean isOwner = CommentsHelper.isOwner(username, pullRequest.getLogin(), item.getComment().getUser().getLogin());
popupMenu.getMenu().findItem(R.id.delete).setVisible(isOwner);
popupMenu.getMenu().findItem(R.id.edit).setVisible(isOwner);
popupMenu.setOnMenuItemClickListener(item1 -> {
@@ -119,10 +118,11 @@ public class PullRequestTimelinePresenter extends BasePresenter view.onSetHeader(TimelineModel.constructHeader(pullRequest)));
- onCallApi(1, null);
- }
- }
-
- @Override public void onFragmentCreated(@Nullable Bundle bundle) {
- if (bundle == null) throw new NullPointerException("Bundle is null?");
- pullRequest = bundle.getParcelable(BundleConstant.ITEM);
- if (timeline.isEmpty() && pullRequest != null) {
- sendToView(view -> view.onSetHeader(TimelineModel.constructHeader(pullRequest)));
- onCallApi(1, null);
- }
- }
-
@Override public void onWorkOffline() {
//TODO
}
- @Nullable private PullRequest getHeader() {
- return pullRequest;
- }
-
@Override public void onHandleDeletion(@Nullable Bundle bundle) {
+ if (getView() == null || getView().getPullRequest() == null) return;
if (bundle != null) {
+ PullRequest pullRequest = getView().getPullRequest();
+ String login = pullRequest.getLogin();
+ String repoId = pullRequest.getRepoId();
long commId = bundle.getLong(BundleConstant.EXTRA, 0);
boolean isReviewComment = bundle.getBoolean(BundleConstant.YES_NO_EXTRA);
if (commId != 0 && !isReviewComment) {
- makeRestCall(RestProvider.getIssueService().deleteIssueComment(login(), repoId(), commId),
+ makeRestCall(RestProvider.getIssueService().deleteIssueComment(login, repoId, commId),
booleanResponse -> sendToView(view -> {
if (booleanResponse.code() == 204) {
Comment comment = new Comment();
@@ -187,7 +170,7 @@ public class PullRequestTimelinePresenter extends BasePresenter sendToView(view -> {
if (booleanResponse.code() == 204) {
view.onRemoveReviewComment(groupPosition, commentPosition);
@@ -199,38 +182,24 @@ public class PullRequestTimelinePresenter extends BasePresenter {
@@ -275,9 +244,10 @@ public class PullRequestTimelinePresenter extends BasePresenter view.getLoadMore().reset());
@@ -321,7 +291,7 @@ public class PullRequestTimelinePresenter extends BasePresenter(), Tr
@State var selectedTitle: String = ""
fun onDailyClicked() {
- Toasty.info(applicationContext, "Hello").show()
Logger.e()
daily.isSelected = true
weekly.isSelected = false
@@ -40,7 +38,6 @@ class TrendingActivity : BaseActivity(), Tr
}
fun onWeeklyClicked() {
- Toasty.info(applicationContext, "Hello").show()
weekly.isSelected = true
daily.isSelected = false
monthly.isSelected = false
@@ -48,7 +45,6 @@ class TrendingActivity : BaseActivity(), Tr
}
fun onMonthlyClicked() {
- Toasty.info(applicationContext, "Hello").show()
monthly.isSelected = true
weekly.isSelected = false
daily.isSelected = false
@@ -137,4 +133,4 @@ class TrendingActivity : BaseActivity(), Tr
else -> return "daily"
}
}
-}
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/fastaccess/ui/modules/trending/TrendingPresenter.kt b/app/src/main/java/com/fastaccess/ui/modules/trending/TrendingPresenter.kt
index c4d46a99..50759383 100644
--- a/app/src/main/java/com/fastaccess/ui/modules/trending/TrendingPresenter.kt
+++ b/app/src/main/java/com/fastaccess/ui/modules/trending/TrendingPresenter.kt
@@ -10,9 +10,7 @@ import io.reactivex.Observable
class TrendingPresenter : BasePresenter(), TrendingMvp.Presenter {
override fun onLoadLanguage() {
- manageObservable(Observable.create {
- ColorsProvider.languages().forEach({ t: String? -> it.onNext(t) })
- it.onComplete()
- }.doOnNext({ t: String -> sendToView({ it.onAppend(t) }) }))
+ manageObservable(Observable.fromIterable(ColorsProvider.languages())
+ .doOnNext({ t: String -> sendToView({ it.onAppend(t) }) }))
}
}
diff --git a/app/src/main/java/com/fastaccess/ui/widgets/DiffLineSpan.java b/app/src/main/java/com/fastaccess/ui/widgets/DiffLineSpan.java
index 0d654c91..5011658e 100644
--- a/app/src/main/java/com/fastaccess/ui/widgets/DiffLineSpan.java
+++ b/app/src/main/java/com/fastaccess/ui/widgets/DiffLineSpan.java
@@ -20,7 +20,6 @@ import android.text.style.TypefaceSpan;
import com.fastaccess.App;
import com.fastaccess.R;
import com.fastaccess.helper.InputHelper;
-import com.fastaccess.helper.Logger;
public class DiffLineSpan extends MetricAffectingSpan implements LineBackgroundSpan {
private Rect rect = new Rect();
@@ -68,8 +67,8 @@ public class DiffLineSpan extends MetricAffectingSpan implements LineBackgroundS
String[] split = text.split("\\r?\\n|\\r");
if (split.length > 0) {
int lines = split.length;
+ int index = -1;
for (int i = 0; i < lines; i++) {
- Logger.e(lines, i, lines + i, lines - i);
if (truncate && (lines - i) > 3) continue;
String token = split[i];
if (i < (lines - 1)) {
@@ -85,7 +84,7 @@ public class DiffLineSpan extends MetricAffectingSpan implements LineBackgroundS
color = patchRefColor;
} else if (firstChar == '\\') {
token = token.replace("\\ No newline at end of file", "");
- noNewlineRemoved = true;
+ index = i;
}
SpannableString spannableDiff = new SpannableString(token);
if (color != Color.TRANSPARENT) {
@@ -94,12 +93,12 @@ public class DiffLineSpan extends MetricAffectingSpan implements LineBackgroundS
}
builder.append(spannableDiff);
}
+ if (index != -1) {
+ builder.insert(index, SpannableBuilder.builder()
+ .append(ContextCompat.getDrawable(App.getInstance(), R.drawable.ic_newline)));
+ }
}
}
- if (noNewlineRemoved) {
- builder.insert(builder.length() - 1, SpannableBuilder.builder()
- .append(ContextCompat.getDrawable(App.getInstance(), R.drawable.ic_newline)));
- }
builder.setSpan(new TypefaceSpan("monospace"), 0, builder.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
return builder;
}
diff --git a/app/src/main/res/layouts/row_layouts/layout/comments_row_item.xml b/app/src/main/res/layouts/row_layouts/layout/comments_row_item.xml
index 932e4888..69b187a3 100644
--- a/app/src/main/res/layouts/row_layouts/layout/comments_row_item.xml
+++ b/app/src/main/res/layouts/row_layouts/layout/comments_row_item.xml
@@ -82,10 +82,10 @@
android:id="@+id/comment"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_marginBottom="@dimen/spacing_normal"
+ android:layout_marginBottom="@dimen/spacing_micro"
android:layout_marginEnd="@dimen/spacing_xs_large"
- android:layout_marginStart="@dimen/avatar_margin"
- android:layout_marginTop="@dimen/spacing_normal"
+ android:layout_marginStart="@dimen/spacing_xs_large"
+ android:layout_marginTop="@dimen/spacing_micro"
android:textIsSelectable="true"/>
diff --git a/app/src/main/res/layouts/row_layouts/layout/review_comments_row_item.xml b/app/src/main/res/layouts/row_layouts/layout/review_comments_row_item.xml
index f46318e2..1bb0da7a 100644
--- a/app/src/main/res/layouts/row_layouts/layout/review_comments_row_item.xml
+++ b/app/src/main/res/layouts/row_layouts/layout/review_comments_row_item.xml
@@ -80,10 +80,10 @@
android:id="@+id/comment"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_marginBottom="@dimen/spacing_normal"
+ android:layout_marginBottom="@dimen/spacing_micro"
android:layout_marginEnd="@dimen/spacing_xs_large"
- android:layout_marginStart="@dimen/avatar_margin"
- android:layout_marginTop="@dimen/spacing_normal"
+ android:layout_marginStart="@dimen/spacing_xs_large"
+ android:layout_marginTop="@dimen/spacing_micro"
android:textIsSelectable="true"
tools:text="Hello World"/>
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index e49e7275..631892e6 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -475,4 +475,7 @@
Type
Sort
Sort direction
+ Assignee added successfully
+ Reviewer added successfully
+ Milestone added successfully
diff --git a/debug_gradle.properties b/debug_gradle.properties
index 95f8cf7a..d0ba5760 100644
--- a/debug_gradle.properties
+++ b/debug_gradle.properties
@@ -5,4 +5,5 @@ android_key_alias=ALIAS
github_client_id=GITHUB_CLIENT_ID
github_secret=GITHUB_SECRET
imgur_client_id=imgur_client_id
-imgur_secret=imgur_secret
\ No newline at end of file
+imgur_secret=imgur_secret
+redirect_url=fasthub://login
\ No newline at end of file
From 921ef05da2101ea97895a53cac7c781befae867f Mon Sep 17 00:00:00 2001
From: Kosh
Date: Sat, 3 Jun 2017 14:22:52 +0800
Subject: [PATCH 02/14] this commit handles trending deeplinking
---
.../provider/colors/ColorsProvider.java | 2 +-
.../AuthenticationInterceptor.java | 16 +++++-
.../rest/jsoup/RetroJsoupProvider.java | 5 +-
.../provider/scheme/LinkParserHelper.java | 2 +-
.../provider/scheme/SchemeParser.java | 23 +++++++-
.../com/fastaccess/ui/base/BaseActivity.java | 7 +++
.../ui/modules/trending/TrendingActivity.kt | 56 ++++++++++++++++---
.../ui/modules/trending/TrendingPresenter.kt | 3 +-
.../trending/fragment/TrendingFragment.kt | 4 +-
.../layout/trending_activity_layout.xml | 6 ++
10 files changed, 105 insertions(+), 19 deletions(-)
diff --git a/app/src/main/java/com/fastaccess/provider/colors/ColorsProvider.java b/app/src/main/java/com/fastaccess/provider/colors/ColorsProvider.java
index d8127261..bfddffcb 100644
--- a/app/src/main/java/com/fastaccess/provider/colors/ColorsProvider.java
+++ b/app/src/main/java/com/fastaccess/provider/colors/ColorsProvider.java
@@ -34,7 +34,7 @@ import io.reactivex.Observable;
public class ColorsProvider {
- private static List popularLanguages = Stream.of("Java", "Kotlin", "Javascript", "Python", "CSS", "PHP",
+ private static List popularLanguages = Stream.of("Java", "Kotlin", "JavaScript", "Python", "CSS", "PHP",
"Ruby", "C++", "C", "GO", "Swift").toList();//predefined languages.
private static Map colors = new LinkedHashMap<>();
diff --git a/app/src/main/java/com/fastaccess/provider/rest/interceptors/AuthenticationInterceptor.java b/app/src/main/java/com/fastaccess/provider/rest/interceptors/AuthenticationInterceptor.java
index 70c15ffe..214f302c 100644
--- a/app/src/main/java/com/fastaccess/provider/rest/interceptors/AuthenticationInterceptor.java
+++ b/app/src/main/java/com/fastaccess/provider/rest/interceptors/AuthenticationInterceptor.java
@@ -8,17 +8,27 @@ import com.fastaccess.helper.InputHelper;
import java.io.IOException;
import java.net.URI;
-import lombok.AllArgsConstructor;
import okhttp3.HttpUrl;
import okhttp3.Interceptor;
import okhttp3.Request;
import okhttp3.Response;
-@AllArgsConstructor
public class AuthenticationInterceptor implements Interceptor {
private String authToken;
private String otp;
+ private boolean isScrapping;
+
+ public AuthenticationInterceptor(String authToken, String otp) {
+ this.authToken = authToken;
+ this.otp = otp;
+ }
+
+ public AuthenticationInterceptor(String authToken, String otp, boolean isScrapping) {
+ this.authToken = authToken;
+ this.otp = otp;
+ this.isScrapping = isScrapping;
+ }
@Override public Response intercept(@NonNull Chain chain) throws IOException {
Request original = chain.request();
@@ -30,7 +40,7 @@ public class AuthenticationInterceptor implements Interceptor {
if (!InputHelper.isEmpty(otp)) {
builder.addHeader("X-GitHub-OTP", otp.trim());
}
- builder.addHeader("User-Agent", "FastHub");
+ if (!isScrapping) builder.addHeader("User-Agent", "FastHub");
Request request = builder.build();
return chain.proceed(request);
}
diff --git a/app/src/main/java/com/fastaccess/provider/rest/jsoup/RetroJsoupProvider.java b/app/src/main/java/com/fastaccess/provider/rest/jsoup/RetroJsoupProvider.java
index db899bb7..73e36901 100644
--- a/app/src/main/java/com/fastaccess/provider/rest/jsoup/RetroJsoupProvider.java
+++ b/app/src/main/java/com/fastaccess/provider/rest/jsoup/RetroJsoupProvider.java
@@ -28,7 +28,7 @@ public class RetroJsoupProvider {
client.addInterceptor(new HttpLoggingInterceptor()
.setLevel(HttpLoggingInterceptor.Level.BODY));
}
- client.addInterceptor(new AuthenticationInterceptor(PrefGetter.getToken(), PrefGetter.getOtpCode()));
+ client.addInterceptor(new AuthenticationInterceptor(PrefGetter.getToken(), PrefGetter.getOtpCode(), true));
okHttpClient = client.build();
}
return okHttpClient;
@@ -36,7 +36,8 @@ public class RetroJsoupProvider {
public static TrendingService getTrendingService(@NonNull String since, @Nullable String lang) {
return new RetroJsoup.Builder()
- .url("https://github.com/trending/" + (!InputHelper.isEmpty(lang) ? lang : "") + "?since=" + since)
+ .url("https://github.com/trending/" + (!InputHelper.isEmpty(lang) ? lang.replaceAll(" ", "-") : "").toLowerCase()
+ + "?since=" + since)
.client(provideOkHttpClient())
.build()
.create(TrendingService.class);
diff --git a/app/src/main/java/com/fastaccess/provider/scheme/LinkParserHelper.java b/app/src/main/java/com/fastaccess/provider/scheme/LinkParserHelper.java
index 37f7c8b3..d71193ac 100644
--- a/app/src/main/java/com/fastaccess/provider/scheme/LinkParserHelper.java
+++ b/app/src/main/java/com/fastaccess/provider/scheme/LinkParserHelper.java
@@ -23,7 +23,7 @@ class LinkParserHelper {
static final String API_AUTHORITY = "api.github.com";
static final String PROTOCOL_HTTPS = "https";
static final ArrayList IGNORED_LIST = Stream.of("notifications", "settings", "blog", "explore",
- "dashboard", "repositories", "logout", "sessions", "site", "security", "contact", "about", "logos", "login", "trending", "")
+ "dashboard", "repositories", "logout", "sessions", "site", "security", "contact", "about", "logos", "login", "")
.collect(Collectors.toCollection(ArrayList::new));
diff --git a/app/src/main/java/com/fastaccess/provider/scheme/SchemeParser.java b/app/src/main/java/com/fastaccess/provider/scheme/SchemeParser.java
index 0254213e..4cd47ee5 100644
--- a/app/src/main/java/com/fastaccess/provider/scheme/SchemeParser.java
+++ b/app/src/main/java/com/fastaccess/provider/scheme/SchemeParser.java
@@ -23,6 +23,7 @@ import com.fastaccess.ui.modules.repos.code.releases.ReleasesListActivity;
import com.fastaccess.ui.modules.repos.issues.create.CreateIssueActivity;
import com.fastaccess.ui.modules.repos.issues.issue.details.IssuePagerActivity;
import com.fastaccess.ui.modules.repos.pull_requests.pull_request.details.PullRequestPagerActivity;
+import com.fastaccess.ui.modules.trending.TrendingActivity;
import com.fastaccess.ui.modules.user.UserPagerActivity;
import java.util.List;
@@ -108,6 +109,7 @@ public class SchemeParser {
String authority = data.getAuthority();
if (TextUtils.equals(authority, HOST_DEFAULT) || TextUtils.equals(authority, RAW_AUTHORITY) ||
TextUtils.equals(authority, API_AUTHORITY)) {
+ Intent trending = getTrending(context, data);
Intent userIntent = getUser(context, data);
Intent repoIssues = getRepoIssueIntent(context, data);
Intent repoPulls = getRepoPullRequestIntent(context, data);
@@ -119,7 +121,7 @@ public class SchemeParser {
Intent commit = getCommit(context, data, showRepoBtn);
Intent commits = getCommits(context, data, showRepoBtn);
Intent blob = getBlob(context, data);
- Optional intentOptional = returnNonNull(userIntent, repoIssues, repoPulls, pullRequestIntent, commit, commits,
+ Optional intentOptional = returnNonNull(trending, userIntent, repoIssues, repoPulls, pullRequestIntent, commit, commits,
createIssueIntent, issueIntent, releasesIntent, repoIntent, blob);
Optional empty = Optional.empty();
if (intentOptional != null && intentOptional.isPresent() && intentOptional != empty) {
@@ -324,6 +326,25 @@ public class SchemeParser {
return null;
}
+ @Nullable private static Intent getTrending(@NonNull Context context, @NonNull Uri uri) {
+ List segments = uri.getPathSegments();
+ if (segments != null && !segments.isEmpty()) {
+ if (uri.getPathSegments().get(0).equals("trending")) {
+ String query = "";
+ String lang = "";
+ if (uri.getPathSegments().size() > 1) {
+ lang = uri.getPathSegments().get(1);
+ }
+ if (uri.getQueryParameterNames() != null && !uri.getQueryParameterNames().isEmpty()) {
+ query = uri.getQueryParameter("since");
+ }
+ return TrendingActivity.TrendingIntent.getTrendingIntent(context, lang, query);
+ }
+ return null;
+ }
+ return null;
+ }
+
/**
* https://github.com/owner/repo/issues/new
*/
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 28b87b52..5e5e8b19 100644
--- a/app/src/main/java/com/fastaccess/ui/base/BaseActivity.java
+++ b/app/src/main/java/com/fastaccess/ui/base/BaseActivity.java
@@ -340,6 +340,13 @@ public abstract class BaseActivity(), Tr
@State var selectedTitle: String = ""
+ companion object TrendingIntent {
+ fun getTrendingIntent(context: Context, lang: String?, query: String?): Intent {
+ val intent = Intent(context, TrendingActivity::class.java)
+ intent.putExtras(Bundler.start()
+ .put(BundleConstant.EXTRA, lang)
+ .put(BundleConstant.EXTRA_TWO, query)
+ .end())
+ return intent
+ }
+ }
+
fun onDailyClicked() {
Logger.e()
daily.isSelected = true
@@ -73,17 +88,14 @@ class TrendingActivity : BaseActivity(), Tr
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
- Logger.e(selectedTitle)
trendingFragment = supportFragmentManager.findFragmentById(R.id.trendingFragment) as TrendingFragment?
daily.setOnClickListener { onDailyClicked() }
weekly.setOnClickListener { onWeeklyClicked() }
monthly.setOnClickListener { onMonthlyClicked() }
- presenter.onLoadLanguage()
navMenu.setNavigationItemSelectedListener(this)
- if (savedInstanceState == null) {
- daily.isSelected = true
- setValues()
- }
+ setupIntent(savedInstanceState)
+ presenter.onLoadLanguage()
+ onSelectTrending()
}
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
@@ -102,7 +114,7 @@ class TrendingActivity : BaseActivity(), Tr
override fun onAppend(title: String) {
navMenu.menu.add(R.id.languageGroup, title.hashCode(), Menu.NONE, title)
.setCheckable(true)
- .isChecked = title == selectedTitle
+ .isChecked = title.toLowerCase() == selectedTitle.toLowerCase()
}
private fun onItemClicked(item: MenuItem?): Boolean {
@@ -122,6 +134,7 @@ class TrendingActivity : BaseActivity(), Tr
private fun setValues() {
closeDrawerLayout()
+ Logger.e(selectedTitle, getSince())
trendingFragment?.onSetQuery(selectedTitle, getSince())
}
@@ -133,4 +146,33 @@ class TrendingActivity : BaseActivity(), Tr
else -> return "daily"
}
}
+
+ private fun setupIntent(savedInstanceState: Bundle?) {
+ if (savedInstanceState == null) {
+ if (intent != null && intent.extras != null) {
+ val bundle = intent.extras
+ if (bundle != null) {
+ val lang: String = bundle.getString(BundleConstant.EXTRA)
+ val query: String = bundle.getString(BundleConstant.EXTRA_TWO)
+ if (!lang.isNullOrEmpty()) {
+ selectedTitle = lang
+ }
+ if (!query.isNullOrEmpty()) {
+ when (query.toLowerCase()) {
+ "daily" -> daily.isSelected = true
+ "weekly" -> weekly.isSelected = true
+ "monthly" -> monthly.isSelected = true
+ }
+ } else {
+ daily.isSelected = true
+ }
+ } else {
+ daily.isSelected = true
+ }
+ } else {
+ daily.isSelected = true
+ }
+ setValues()
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/fastaccess/ui/modules/trending/TrendingPresenter.kt b/app/src/main/java/com/fastaccess/ui/modules/trending/TrendingPresenter.kt
index 50759383..a400d57a 100644
--- a/app/src/main/java/com/fastaccess/ui/modules/trending/TrendingPresenter.kt
+++ b/app/src/main/java/com/fastaccess/ui/modules/trending/TrendingPresenter.kt
@@ -1,5 +1,6 @@
package com.fastaccess.ui.modules.trending
+import com.fastaccess.helper.RxHelper
import com.fastaccess.provider.colors.ColorsProvider
import com.fastaccess.ui.base.mvp.presenter.BasePresenter
import io.reactivex.Observable
@@ -10,7 +11,7 @@ import io.reactivex.Observable
class TrendingPresenter : BasePresenter(), TrendingMvp.Presenter {
override fun onLoadLanguage() {
- manageObservable(Observable.fromIterable(ColorsProvider.languages())
+ manageObservable(RxHelper.getObserver(Observable.fromIterable(ColorsProvider.languages()))
.doOnNext({ t: String -> sendToView({ it.onAppend(t) }) }))
}
}
diff --git a/app/src/main/java/com/fastaccess/ui/modules/trending/fragment/TrendingFragment.kt b/app/src/main/java/com/fastaccess/ui/modules/trending/fragment/TrendingFragment.kt
index 8385053c..f30709f3 100644
--- a/app/src/main/java/com/fastaccess/ui/modules/trending/fragment/TrendingFragment.kt
+++ b/app/src/main/java/com/fastaccess/ui/modules/trending/fragment/TrendingFragment.kt
@@ -62,9 +62,7 @@ class TrendingFragment : BaseFragment
@@ -69,6 +70,7 @@
android:clickable="true"
android:focusable="true"
android:gravity="center"
+ android:maxLines="1"
android:padding="@dimen/spacing_normal"
android:text="@string/weekly"
android:textColor="@color/search_tab_highlighter"/>
@@ -83,6 +85,7 @@
android:clickable="true"
android:focusable="true"
android:gravity="center"
+ android:maxLines="1"
android:padding="@dimen/spacing_normal"
android:text="@string/monthly"
android:textColor="@color/search_tab_highlighter"/>
@@ -105,4 +108,7 @@
+
+
+
\ No newline at end of file
From 753ca85daccabccc5029229656955deb29e2db62 Mon Sep 17 00:00:00 2001
From: Kosh
Date: Sat, 3 Jun 2017 17:35:17 +0800
Subject: [PATCH 03/14] this commit fixes #441
---
app/build.gradle | 4 +
.../data/dao/FragmentPagerAdapterModel.java | 8 +-
.../com/fastaccess/data/dao/Pageable.java | 12 +-
.../com/fastaccess/data/dao/PayloadModel.java | 22 +--
.../fastaccess/data/dao/SimpleUrlsModel.java | 5 +-
.../data/service/UserRestService.java | 16 ++-
.../provider/scheme/SchemeParser.java | 2 +-
.../modules/profile/events/ProfileEvents.kt | 32 +++++
.../profile/events/ProfileEventsFragment.kt | 132 ++++++++++++++++++
.../profile/events/ProfileEventsPresenter.kt | 127 +++++++++++++++++
.../issue/details/IssuePagerActivity.java | 4 +-
.../issue/details/IssuePagerPresenter.java | 4 +-
.../ui/modules/trending/TrendingActivity.kt | 2 +-
.../ui/modules/user/UserPagerActivity.java | 48 ++++---
build.gradle | 2 +-
15 files changed, 365 insertions(+), 55 deletions(-)
create mode 100644 app/src/main/java/com/fastaccess/ui/modules/profile/events/ProfileEvents.kt
create mode 100644 app/src/main/java/com/fastaccess/ui/modules/profile/events/ProfileEventsFragment.kt
create mode 100644 app/src/main/java/com/fastaccess/ui/modules/profile/events/ProfileEventsPresenter.kt
diff --git a/app/build.gradle b/app/build.gradle
index bbc68083..07473fe7 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -92,6 +92,10 @@ android {
compileOptions.incremental = false
}
+kapt {
+ generateStubs = true
+}
+
repositories {
maven { url "https://clojars.org/repo/" }
maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
diff --git a/app/src/main/java/com/fastaccess/data/dao/FragmentPagerAdapterModel.java b/app/src/main/java/com/fastaccess/data/dao/FragmentPagerAdapterModel.java
index 4412f896..27392c78 100644
--- a/app/src/main/java/com/fastaccess/data/dao/FragmentPagerAdapterModel.java
+++ b/app/src/main/java/com/fastaccess/data/dao/FragmentPagerAdapterModel.java
@@ -20,6 +20,7 @@ import com.fastaccess.ui.modules.main.issues.MyIssuesFragment;
import com.fastaccess.ui.modules.main.pullrequests.MyPullRequestFragment;
import com.fastaccess.ui.modules.notification.all.AllNotificationsFragment;
import com.fastaccess.ui.modules.notification.unread.UnreadNotificationsFragment;
+import com.fastaccess.ui.modules.profile.events.ProfileEventsFragment;
import com.fastaccess.ui.modules.profile.followers.ProfileFollowersFragment;
import com.fastaccess.ui.modules.profile.following.ProfileFollowingFragment;
import com.fastaccess.ui.modules.profile.gists.ProfileGistsFragment;
@@ -73,6 +74,7 @@ import lombok.Setter;
@NonNull public static List buildForProfile(@NonNull Context context, @NonNull String login) {
return Stream.of(new FragmentPagerAdapterModel(context.getString(R.string.overview), ProfileOverviewFragment.newInstance(login)),
+ new FragmentPagerAdapterModel(context.getString(R.string.feeds), ProfileEventsFragment.Companion.newInstance(login)),
new FragmentPagerAdapterModel(context.getString(R.string.repos), ProfileReposFragment.newInstance(login)),
new FragmentPagerAdapterModel(context.getString(R.string.starred), ProfileStarredFragment.newInstance(login)),
new FragmentPagerAdapterModel(context.getString(R.string.gists), ProfileGistsFragment.newInstance(login)),
@@ -85,7 +87,8 @@ import lombok.Setter;
@NonNull String login, @NonNull String url,
@NonNull String defaultBranch) {
return Stream.of(new FragmentPagerAdapterModel(context.getString(R.string.readme), ViewerFragment.newInstance(url, true)),
- new FragmentPagerAdapterModel(context.getString(R.string.files), RepoFilePathFragment.newInstance(login, repoId, null, defaultBranch)),
+ new FragmentPagerAdapterModel(context.getString(R.string.files), RepoFilePathFragment.newInstance(login, repoId, null,
+ defaultBranch)),
new FragmentPagerAdapterModel(context.getString(R.string.commits), RepoCommitsFragment.newInstance(repoId, login, defaultBranch)),
new FragmentPagerAdapterModel(context.getString(R.string.releases), RepoReleasesFragment.newInstance(repoId, login)),
new FragmentPagerAdapterModel(context.getString(R.string.contributors), RepoContributorsFragment.newInstance(repoId, login)))
@@ -160,7 +163,8 @@ import lombok.Setter;
public static List buildForGists(@NonNull Context context) {
- return Stream.of(new FragmentPagerAdapterModel(context.getString(R.string.my_gists), ProfileGistsFragment.newInstance(Login.getUser().getLogin())),
+ return Stream.of(new FragmentPagerAdapterModel(context.getString(R.string.my_gists), ProfileGistsFragment.newInstance(Login.getUser()
+ .getLogin())),
new FragmentPagerAdapterModel(context.getString(R.string.public_gists), GistsFragment.newInstance()))
.collect(Collectors.toList());
}
diff --git a/app/src/main/java/com/fastaccess/data/dao/Pageable.java b/app/src/main/java/com/fastaccess/data/dao/Pageable.java
index e7c9233c..cbfafe6c 100644
--- a/app/src/main/java/com/fastaccess/data/dao/Pageable.java
+++ b/app/src/main/java/com/fastaccess/data/dao/Pageable.java
@@ -17,12 +17,12 @@ import lombok.Setter;
@Getter @Setter @NoArgsConstructor
public class Pageable implements Parcelable {
- private int first;
- private int next;
- private int prev;
- private int last;
- private int totalCount;
- private boolean incompleteResults;
+ public int first;
+ public int next;
+ public int prev;
+ public int last;
+ public int totalCount;
+ public boolean incompleteResults;
public List items;
@Override public int describeContents() { return 0; }
diff --git a/app/src/main/java/com/fastaccess/data/dao/PayloadModel.java b/app/src/main/java/com/fastaccess/data/dao/PayloadModel.java
index 7d6b39ac..0e5ac668 100644
--- a/app/src/main/java/com/fastaccess/data/dao/PayloadModel.java
+++ b/app/src/main/java/com/fastaccess/data/dao/PayloadModel.java
@@ -22,17 +22,17 @@ import lombok.Setter;
@Getter @Setter @NoArgsConstructor
public class PayloadModel implements Parcelable {
- private String action;
- private Repo forkee;
- private Issue issue;
- private PullRequest pullRequest;
- private String ref;
- private String refType;
- private Comment comment;
- private User target;
- private User member;
- private String head;
- private TeamsModel team;
+ public String action;
+ public Repo forkee;
+ public Issue issue;
+ public PullRequest pullRequest;
+ public String ref;
+ public String refType;
+ public Comment comment;
+ public User target;
+ public User member;
+ public String head;
+ public TeamsModel team;
@Override public int describeContents() { return 0; }
diff --git a/app/src/main/java/com/fastaccess/data/dao/SimpleUrlsModel.java b/app/src/main/java/com/fastaccess/data/dao/SimpleUrlsModel.java
index cbbf08c7..ddff012b 100644
--- a/app/src/main/java/com/fastaccess/data/dao/SimpleUrlsModel.java
+++ b/app/src/main/java/com/fastaccess/data/dao/SimpleUrlsModel.java
@@ -14,8 +14,9 @@ import lombok.Setter;
@Getter @Setter
public class SimpleUrlsModel implements Parcelable {
- private String item;
- private String url;
+ public String item;
+ public String url;
+
public SimpleUrlsModel(String item, String url) {
this.item = item;
this.url = url;
diff --git a/app/src/main/java/com/fastaccess/data/service/UserRestService.java b/app/src/main/java/com/fastaccess/data/service/UserRestService.java
index b935d97e..a5fd9fe9 100644
--- a/app/src/main/java/com/fastaccess/data/service/UserRestService.java
+++ b/app/src/main/java/com/fastaccess/data/service/UserRestService.java
@@ -34,11 +34,15 @@ public interface UserRestService {
@GET("users/{username}/received_events")
Observable> getReceivedEvents(@NonNull @Path("username") String userName, @Query("page") int page);
- @GET("/users/{username}/repos")
- Observable> getRepos(@Path("username") @NonNull String username, @QueryMap(encoded=true) Map filterParams, @Query("page") int page);
+ @GET("users/{username}/events")
+ Observable> getUserEvents(@NonNull @Path("username") String userName, @Query("page") int page);
- @GET("/user/repos")
- Observable> getRepos(@QueryMap(encoded=true) Map filterParams, @Query(value = "page") int page);
+ @GET("users/{username}/repos")
+ Observable> getRepos(@Path("username") @NonNull String username, @QueryMap(encoded = true) Map filterParams,
+ @Query("page") int page);
+
+ @GET("user/repos")
+ Observable> getRepos(@QueryMap(encoded = true) Map filterParams, @Query(value = "page") int page);
@GET("users/{username}/starred") Observable>
getStarred(@Path("username") @NonNull String username, @Query("page") int page);
@@ -52,10 +56,10 @@ public interface UserRestService {
@GET("user/following/{username}")
Observable> getFollowStatus(@Path("username") @NonNull String username);
- @PUT("/user/following/{username}")
+ @PUT("user/following/{username}")
Observable> followUser(@Path("username") @NonNull String username);
- @DELETE("/user/following/{username}")
+ @DELETE("user/following/{username}")
Observable> unfollowUser(@Path("username") @NonNull String username);
@GET Observable getContributions(@Url String url);
diff --git a/app/src/main/java/com/fastaccess/provider/scheme/SchemeParser.java b/app/src/main/java/com/fastaccess/provider/scheme/SchemeParser.java
index 4cd47ee5..bc99fe2e 100644
--- a/app/src/main/java/com/fastaccess/provider/scheme/SchemeParser.java
+++ b/app/src/main/java/com/fastaccess/provider/scheme/SchemeParser.java
@@ -338,7 +338,7 @@ public class SchemeParser {
if (uri.getQueryParameterNames() != null && !uri.getQueryParameterNames().isEmpty()) {
query = uri.getQueryParameter("since");
}
- return TrendingActivity.TrendingIntent.getTrendingIntent(context, lang, query);
+ return TrendingActivity.Companion.getTrendingIntent(context, lang, query);
}
return null;
}
diff --git a/app/src/main/java/com/fastaccess/ui/modules/profile/events/ProfileEvents.kt b/app/src/main/java/com/fastaccess/ui/modules/profile/events/ProfileEvents.kt
new file mode 100644
index 00000000..9e867ccb
--- /dev/null
+++ b/app/src/main/java/com/fastaccess/ui/modules/profile/events/ProfileEvents.kt
@@ -0,0 +1,32 @@
+package com.fastaccess.ui.modules.profile.events
+
+import android.support.v4.widget.SwipeRefreshLayout
+import com.fastaccess.data.dao.SimpleUrlsModel
+import com.fastaccess.data.dao.model.Event
+import com.fastaccess.provider.rest.loadmore.OnLoadMore
+import com.fastaccess.ui.base.mvp.BaseMvp
+import com.fastaccess.ui.widgets.dialog.ListDialogView
+import com.fastaccess.ui.widgets.recyclerview.BaseViewHolder
+
+/**
+ * Created by Kosh on 03 Jun 2017, 4:49 PM
+ */
+interface ProfileEvents {
+
+ interface View : BaseMvp.FAView, SwipeRefreshLayout.OnRefreshListener,
+ android.view.View.OnClickListener, ListDialogView.onSimpleItemSelection {
+ fun onNotifyAdapter(events: List?, page: Int)
+
+ fun onOpenRepoChooser(models: ArrayList)
+
+ fun getLoadMore(): OnLoadMore
+ }
+
+ interface Presenter : BaseMvp.FAPresenter,
+ BaseViewHolder.OnItemClickListener,
+ BaseMvp.PaginationListener {
+ fun getEvents(): ArrayList
+
+ fun onWorkOffline()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/fastaccess/ui/modules/profile/events/ProfileEventsFragment.kt b/app/src/main/java/com/fastaccess/ui/modules/profile/events/ProfileEventsFragment.kt
new file mode 100644
index 00000000..66e1a6f9
--- /dev/null
+++ b/app/src/main/java/com/fastaccess/ui/modules/profile/events/ProfileEventsFragment.kt
@@ -0,0 +1,132 @@
+package com.fastaccess.ui.modules.profile.events
+
+import android.net.Uri
+import android.os.Bundle
+import android.support.annotation.StringRes
+import android.support.v4.widget.SwipeRefreshLayout
+import android.view.View
+import com.fastaccess.R
+import com.fastaccess.data.dao.SimpleUrlsModel
+import com.fastaccess.data.dao.model.Event
+import com.fastaccess.helper.BundleConstant
+import com.fastaccess.helper.Bundler
+import com.fastaccess.provider.rest.loadmore.OnLoadMore
+import com.fastaccess.provider.scheme.SchemeParser
+import com.fastaccess.ui.adapter.FeedsAdapter
+import com.fastaccess.ui.base.BaseFragment
+import com.fastaccess.ui.widgets.StateLayout
+import com.fastaccess.ui.widgets.dialog.ListDialogView
+import com.fastaccess.ui.widgets.recyclerview.DynamicRecyclerView
+import java.util.*
+
+/**
+ * Created by Kosh on 11 Nov 2016, 12:36 PM
+ */
+
+open class ProfileEventsFragment : BaseFragment(), ProfileEvents.View {
+
+ val recycler by lazy { view!!.findViewById(R.id.recycler) as DynamicRecyclerView }
+ val refresh by lazy { view!!.findViewById(R.id.refresh) as SwipeRefreshLayout }
+ val stateLayout by lazy { view!!.findViewById(R.id.stateLayout) as StateLayout }
+ val adapter by lazy { FeedsAdapter(presenter.getEvents()) }
+ private var onLoadMore: OnLoadMore? = null
+
+ override fun fragmentLayout(): Int {
+ return R.layout.micro_grid_refresh_list
+ }
+
+ override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
+ stateLayout.setEmptyText(R.string.no_feeds)
+ stateLayout.setOnReloadListener(this)
+ refresh.setOnRefreshListener(this)
+ recycler.setEmptyView(stateLayout, refresh)
+ adapter.listener = presenter
+ getLoadMore().setCurrent_page(presenter.currentPage, presenter.previousTotal)
+ recycler.adapter = adapter
+ recycler.addOnScrollListener(getLoadMore())
+ if (presenter.getEvents().isEmpty() && !presenter.isApiCalled) {
+ onRefresh()
+ }
+ }
+
+ override fun onRefresh() {
+ presenter.onCallApi(1, arguments.getString(BundleConstant.EXTRA))
+ }
+
+ override fun onNotifyAdapter(events: List?, page: Int) {
+ hideProgress()
+ if (events == null || events.isEmpty()) {
+ adapter.clear()
+ return
+ }
+ if (page <= 1) {
+ adapter.insertItems(events)
+ } else {
+ adapter.addItems(events)
+ }
+ }
+
+ override fun showProgress(@StringRes resId: Int) {
+ refresh.isRefreshing = true
+ stateLayout.showProgress()
+ }
+
+ override fun hideProgress() {
+ refresh.isRefreshing = false
+ stateLayout.hideProgress()
+ }
+
+ override fun showErrorMessage(message: String) {
+ showReload()
+ super.showErrorMessage(message)
+ }
+
+ override fun showMessage(titleRes: Int, msgRes: Int) {
+ showReload()
+ super.showMessage(titleRes, msgRes)
+ }
+
+ override fun onOpenRepoChooser(models: ArrayList) {
+ val dialogView = ListDialogView()
+ dialogView.initArguments(getString(R.string.repo_chooser), models)
+ dialogView.show(childFragmentManager, "ListDialogView")
+ }
+
+ override fun providePresenter(): ProfileEventsPresenter {
+ return ProfileEventsPresenter()
+ }
+
+ override fun getLoadMore(): OnLoadMore {
+ if (onLoadMore == null) {
+ onLoadMore = OnLoadMore(presenter)
+ }
+ onLoadMore!!.parameter = arguments.getString(BundleConstant.EXTRA)
+ return onLoadMore as OnLoadMore
+ }
+
+ override fun onDestroyView() {
+ recycler.removeOnScrollListener(getLoadMore())
+ super.onDestroyView()
+ }
+
+ override fun onClick(view: View) {
+ onRefresh()
+ }
+
+ override fun onItemSelected(item: SimpleUrlsModel) {
+ SchemeParser.launchUri(context, Uri.parse(item.item))
+ }
+
+ private fun showReload() {
+ hideProgress()
+ stateLayout.showReload(adapter.itemCount)
+ }
+
+ companion object {
+ fun newInstance(login: String): ProfileEventsFragment {
+ val fragment = ProfileEventsFragment()
+ fragment.arguments = Bundler.start().put(BundleConstant.EXTRA, login).end()
+ return fragment
+ }
+ }
+}
diff --git a/app/src/main/java/com/fastaccess/ui/modules/profile/events/ProfileEventsPresenter.kt b/app/src/main/java/com/fastaccess/ui/modules/profile/events/ProfileEventsPresenter.kt
new file mode 100644
index 00000000..0f1db9ed
--- /dev/null
+++ b/app/src/main/java/com/fastaccess/ui/modules/profile/events/ProfileEventsPresenter.kt
@@ -0,0 +1,127 @@
+package com.fastaccess.ui.modules.profile.events
+
+import android.net.Uri
+import android.view.View
+import com.annimon.stream.Collectors
+import com.annimon.stream.Stream
+import com.fastaccess.data.dao.NameParser
+import com.fastaccess.data.dao.Pageable
+import com.fastaccess.data.dao.SimpleUrlsModel
+import com.fastaccess.data.dao.model.Event
+import com.fastaccess.data.dao.types.EventsType
+import com.fastaccess.helper.RxHelper
+import com.fastaccess.provider.rest.RestProvider
+import com.fastaccess.provider.scheme.SchemeParser
+import com.fastaccess.ui.base.mvp.presenter.BasePresenter
+import com.fastaccess.ui.modules.repos.RepoPagerActivity
+import com.fastaccess.ui.modules.repos.code.commit.details.CommitPagerActivity
+import java.util.*
+
+/**
+ * Created by Kosh on 11 Nov 2016, 12:36 PM
+ */
+
+class ProfileEventsPresenter : BasePresenter(), ProfileEvents.Presenter {
+ private val eventsModels = ArrayList()
+ private var page: Int = 0
+ private var previousTotal: Int = 0
+ private var lastPage = Integer.MAX_VALUE
+
+ override fun getCurrentPage(): Int {
+ return page
+ }
+
+ override fun getPreviousTotal(): Int {
+ return previousTotal
+ }
+
+ override fun setCurrentPage(page: Int) {
+ this.page = page
+ }
+
+ override fun setPreviousTotal(previousTotal: Int) {
+ this.previousTotal = previousTotal
+ }
+
+ override fun onCallApi(page: Int, parameter: String?) {
+ if (page == 1 || parameter.isNullOrEmpty()) {
+ lastPage = Integer.MAX_VALUE
+ sendToView { view -> view.getLoadMore().reset() }
+ }
+ if (page > lastPage || lastPage == 0) {
+ sendToView({ it.hideProgress() })
+ return
+ }
+ currentPage = page
+ makeRestCall>(RestProvider.getUserService().getUserEvents(parameter!!, page)) { response ->
+ lastPage = response.last
+ sendToView { view -> view.onNotifyAdapter(response.items, page) }
+ }
+ }
+
+ override fun onSubscribed() {
+ sendToView { view -> view.showProgress(0) }
+ }
+
+ override fun onError(throwable: Throwable) {
+ onWorkOffline()
+ super.onError(throwable)
+ }
+
+ override fun getEvents(): ArrayList {
+ return eventsModels
+ }
+
+ override fun onWorkOffline() {
+ if (eventsModels.isEmpty()) {
+ manageDisposable(RxHelper.getObserver(Event.getEvents().toObservable())
+ .subscribe({ modelList ->
+ if (modelList != null) {
+ sendToView { view -> view.onNotifyAdapter(modelList, 1) }
+ }
+ }, { it.printStackTrace() }))
+ } else {
+ sendToView({ it.hideProgress() })
+ }
+ }
+
+ override fun onItemClick(position: Int, v: View, item: Event) {
+ if (item.type == EventsType.ForkEvent) {
+ val parser = NameParser(item.payload.forkee.htmlUrl)
+ RepoPagerActivity.startRepoPager(v.context, parser)
+ } else {
+ val payloadModel = item.payload
+ if (payloadModel != null) {
+ if (payloadModel.head != null) {
+ val repoModel = item.repo
+ val uri = Uri.parse(repoModel.name)
+ if (uri == null || uri.pathSegments.size < 1) return
+ val intent = CommitPagerActivity.createIntent(v.context, uri.lastPathSegment, uri.pathSegments[0],
+ payloadModel.head, true)
+ v.context.startActivity(intent)
+ } else if (item.payload.issue != null) {
+ SchemeParser.launchUri(v.context, Uri.parse(item.payload.issue.htmlUrl), true)
+ } else if (item.payload.pullRequest != null) {
+ SchemeParser.launchUri(v.context, Uri.parse(item.payload.pullRequest.htmlUrl), true)
+ } else if (item.payload.comment != null) {
+ SchemeParser.launchUri(v.context, Uri.parse(item.payload.comment.htmlUrl), true)
+ } else {
+ val repoModel = item.repo
+ if (item.repo != null) SchemeParser.launchUri(v.context, Uri.parse(repoModel.name), true)
+ }
+ }
+ }
+ }
+
+ override fun onItemLongClick(position: Int, v: View, item: Event) {
+ if (item.type == EventsType.ForkEvent) {
+ if (view != null) {
+ view!!.onOpenRepoChooser(Stream.of(SimpleUrlsModel(item.repo.name, item.repo.url),
+ SimpleUrlsModel(item.payload.forkee.fullName, item.payload.forkee.htmlUrl))
+ .collect(Collectors.toCollection(::arrayListOf)))
+ }
+ } else {
+ onItemClick(position, v, item)
+ }
+ }
+}
diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/issues/issue/details/IssuePagerActivity.java b/app/src/main/java/com/fastaccess/ui/modules/repos/issues/issue/details/IssuePagerActivity.java
index b1bc6d07..d78497d8 100644
--- a/app/src/main/java/com/fastaccess/ui/modules/repos/issues/issue/details/IssuePagerActivity.java
+++ b/app/src/main/java/com/fastaccess/ui/modules/repos/issues/issue/details/IssuePagerActivity.java
@@ -139,7 +139,9 @@ public class IssuePagerActivity extends BaseActivity implements I
}
@Override public void onUpdateIssue(@NonNull Issue issue) {
- this.issueModel = issue;
+ this.issueModel.setBody(issue.getBody());
+ this.issueModel.setBodyHtml(issue.getBodyHtml());
+ this.issueModel.setTitle(issue.getTitle());
this.issueModel.setLogin(login);
this.issueModel.setRepoId(repoId);
manageObservable(issueModel.save(issueModel).toObservable());
diff --git a/app/src/main/java/com/fastaccess/ui/modules/trending/TrendingActivity.kt b/app/src/main/java/com/fastaccess/ui/modules/trending/TrendingActivity.kt
index 946c0a96..da31dad7 100644
--- a/app/src/main/java/com/fastaccess/ui/modules/trending/TrendingActivity.kt
+++ b/app/src/main/java/com/fastaccess/ui/modules/trending/TrendingActivity.kt
@@ -33,7 +33,7 @@ class TrendingActivity : BaseActivity(), Tr
@State var selectedTitle: String = ""
- companion object TrendingIntent {
+ companion object {
fun getTrendingIntent(context: Context, lang: String?, query: String?): Intent {
val intent = Intent(context, TrendingActivity::class.java)
intent.putExtras(Bundler.start()
diff --git a/app/src/main/java/com/fastaccess/ui/modules/user/UserPagerActivity.java b/app/src/main/java/com/fastaccess/ui/modules/user/UserPagerActivity.java
index a1bd9b2b..508e0d27 100644
--- a/app/src/main/java/com/fastaccess/ui/modules/user/UserPagerActivity.java
+++ b/app/src/main/java/com/fastaccess/ui/modules/user/UserPagerActivity.java
@@ -6,9 +6,10 @@ import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.TabLayout;
-import android.support.v4.view.ViewPager;
import android.support.v4.app.Fragment;
+import android.support.v4.view.ViewPager;
+import com.evernote.android.state.State;
import com.fastaccess.R;
import com.fastaccess.data.dao.FragmentPagerAdapterModel;
import com.fastaccess.data.dao.model.Login;
@@ -19,14 +20,12 @@ import com.fastaccess.ui.adapter.FragmentsPagerAdapter;
import com.fastaccess.ui.base.BaseActivity;
import com.fastaccess.ui.base.BaseFragment;
import com.fastaccess.ui.modules.main.MainActivity;
-import com.fastaccess.ui.modules.changelog.ChangelogBottomSheetDialog;
import com.fastaccess.ui.modules.profile.org.repos.OrgReposFragment;
import com.fastaccess.ui.modules.profile.repos.ProfileReposFragment;
import com.fastaccess.ui.widgets.ViewPagerView;
import butterknife.BindView;
import butterknife.OnClick;
-import com.evernote.android.state.State;
import shortbread.Shortcut;
/**
@@ -125,25 +124,13 @@ public class UserPagerActivity extends BaseActivity
Date: Sat, 3 Jun 2017 20:29:32 +0300
Subject: [PATCH 04/14] Finish Lithuanian translations
---
app/src/main/res/values-lt/strings.xml | 311 ++++++++++++-------------
1 file changed, 154 insertions(+), 157 deletions(-)
diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml
index bfe48633..bf5b25a6 100644
--- a/app/src/main/res/values-lt/strings.xml
+++ b/app/src/main/res/values-lt/strings.xml
@@ -105,12 +105,12 @@
Naudotojai
Pavadinimas
Failas
- Slenksčiai (etapai)
+ Tikslai (slenksčiai arba etapai)
Skirti sau
Pateikti taloną
Nepavyko sukurti taloną
Kurti taloną
- Please un-select highlighting to continue editing.
+ Atrinkite pažymėjimą, norint toliau redaguoti tekstą.
Pranešimai
Turite neperskaitytų pranešimų
Atverti
@@ -130,32 +130,32 @@
Prisijungti
Gisto aprašymas
Gali peržiūrėti žmonių profilius, jeigu spustelėsi ant jų profilio paveikslėlių.
- Long click on a fork event to open either the original or the forked repo.
+ Ilgiau spustelėk ant kopijavimo (fork) mygtuko, jei nori atverti orginalią talpyklą arba kopijuotą talpyklą (repo).
Parsiųsti leidimą (-us)
Pasirinkimai
- Download file or share directory
- Tap a comment to tag its author or to edit your comment.
- \nLong press your comment to delete it.
+ Parsiųsti failą arba dalintis duomenimis
+ Spausk komentarą, jei nori pridėti etiketę arba keisti komentarą.
+ \nIlgiau spaustelėk savo komentarą, norint jį ištrinti.
Žvaigždės žymėjimas
Stebėti
Stebėti talpyklą (repo)
- Pin repos to access them faster from the navigation drawer.
- Dismiss All
- No URL found
- Last updated
- Preview
- Syntax highlighter
- Toggle syntax highlighting.
- \nScroll the Markdown editor icons for more options.
- Creation date
- When the file was created
- When the file was last updated
- Mark all as read
- All notifications
- Unread
- All
- Delete Repo
- Deleting this repo can\'t be undone
+ Prisegtas talpyklas galima lengvai matyti viename sąraše, kuris randamas meniu.
+ Atmesti viską
+ Nuoroda nebuvo rasta
+ Pask. kart. atnaujinta
+ Peržiūrėti
+ Sintaksės pabrėžimas
+ Sintaksės pabrėžimas
+ \nSlinkite ikonus „Markdown“ rengyklėje, jei norite daugiau pasirinkimų.
+ Sukūrimo data
+ Kada failas buvo sukurtas
+ Kada failas buvo preitą kartą atnaujintas
+ Perskaičiau
+ Visi pranešimai
+ Neperskaityta
+ Viskas
+ Ištrinti talpyklą (repo)
+ Jeigu ištrinsite šią talpyklą (repo), jos duomenys dings amžinai
30 min.
20 min.
10 min.
@@ -171,118 +171,117 @@
Paliko komentarą
Narys
PR komentaras
- Pushed to
+ Nustumti pakeitimai (push; commit)
Komandos narys
Ištrynė
Nežinoma(-s)
- Commented on commit
- Switch branch
- Assignees
- Edit
- \u2022 edited
- Update Issue
- Update Pull Request
- No milestones
- Add
- Done
- Home
- Create Milestone
- Error creating milestone
- Due on
- No assignees
- this
- Commits have been switched to the selected branch
- General
- Change how frequently FastHub checks for new notifications
- Notification Sync Interval
- Every
- Behavior
- Customization
- Enable list animations
- List Animation
- Disable dialog preventing accidental app closure
- Press Back to Exit
- Restore
- Backup
- Successfully backed up!
- Select Backup to Restore
- Permission Not Granted.
- Last update: %s
- Now
- Any unsaved changes will be discarded
- Private
- Use rounded rectangle avatars instead of circular avatars
- Avatar Appearance
- Rate this app
- Author
- Fork on GitHub
- Send an email
- Question concerning FastHub
- Feedback
- Report an issue
- Having an issue? Report it here
- About
- Notification
- Turn off
- Unauthorized user
- Two factors OTP is required
- No issue
- Copy
- Copied
- Commit message
- Error occurred while communicating to the server
- Unexpected error while requesting API
- Error requesting server, please try again later
- Marking notification as read
- Forking gist
- Login using your default browser (OAuth)
- OR
- Disable Notification Read Status
- Disable marking as read upon clicking a notification.
- Choose Theme
- Choose your default theme
- Choose theme accent color
- Theme Accent Color
+ Paliktas komentaras po pokyčių (commito)
+ Keisti skyrių (branch)
+ Paskirtieji
+ Atnaujinti
+ \u2022 pakeitė
+ Atnajinti taloną
+ Atnaujinti PR
+ Nepavyko sukurti tikslo (milestonų)
+ Pridėti
+ Baigta
+ Namai
+ Sukurti tikslą
+ Nepavyko sukurti tikslą
+ Pabaigti pagal šią datą:
+ Nepaskirta
+ tai
+ Pakeitimai (commit) buvo pakeisti į pasirinktą skyrių (branch)
+ Bendra
+ Kas kiek laiko „FastHub“ turėtų žiūrėti, ar yra naujų pranešimų automatiškai?
+ Pranešimų grėbimo intervalas
+ Kiekvieną/kas
+ Elgesys
+ Pritaikymas tau
+ Įgalinti sąrašo animacija
+ Sąrašo animacija
+ Klausti ar noriu užverti „FastHub“
+ Dar kart spausk atgal, jei nori užverti programą
+ Parsiųsti atsarg. kopijos duomenis
+ Įkelti duomenis
+ Padaryta atsarg. kopija!
+ Padaryti atsarg. kopiją
+ Nėra leidimo
+ Atnaujinta: %s
+ Dabar
+ Jeigu neišsaugosite savo pakeitimų, jie dings
+ Nėra paviešinta
+ Rodyti stačiakampius arba apskritimo tipo profilio nuotraukas
+ Profilio nuotraukų išvaizda
+ Įvertink programėlę
+ Autorius
+ Kopijuoti (fork) „GitHub“
+ Siųsti el. paštu
+ Klausimas apie programą
+ Atsiliepimai
+ Pranešti problemą
+ Pranešk savo problemą (tik angl.)
+ Apie
+ Pranešimas
+ Išjungti
+ Neautorizuotas naudotojas
+ Reikia 2FA OTP kodo
+ Nėra talonų(-o)
+ Kopijuoti
+ Nukopijuota
+ Pakeitimo (commito) pastabos
+ Nepavyko susisiekti su serveriu
+ Supyko API serveris
+ Serveris supyko, pabandykite užkrauti iš naujo
+ Kategorizuojamas, kaip perskaitytas
+ Kopijuojamas (fork) gistą
+ Prisijungti naudojant naršykle (OAuth)
+ arba
+ Perskaičius pranešimą, nepažymėti kaip perskaitytą
+ Nepažymėti pranešimą, kaip perskaitytą, kai jį noriu perskaityti
+ Pasirinkti temą
+ Pasirinkti numatytą temą
+ Pasirinkti akcentinę spalvą
+ Akcentinė spalva
Svetainė
- Support Development
- Thanks for being extremely awesome!
- If the theme didn\'t apply properly, please kill and open the app manually.
- Pin
- Pinned
- Unpin
- No pinned repositories yet, pin some to see them here
- Yes
- No
- No feeds
- No gists
- No comments
- No notifications
- No followers
- No followings
- No repositories
- No starred repositories
- No commits
- No contributors
- No releases
- No closed issues
- No open issues
- No events
- No open pull requests
- No closed pull requests
- No search results
- Please accept the permissions in order for FastHub to
- store the files on your device to be able to view them
+ Paremkite programos autorių
+ Ačiū. Tu šaunus vaikinas (arba šauni panelė)!
+ Jeigu nematote pakeitimų, iš naujo įjunkite programėlę
+ Prisegti
+ Prisegta
+ Atsegti
+ Nėra prisegtų talpyklų (repų)
+ Taip
+ Ne
+ Nėra sratų
+ Nėra gistų
+ Nėra komentarų
+ Nėra pranešimų
+ Niekas neseka
+ Nieko neseka
+ Nėra talpyklų (repo)
+ Nėra žvaigžzde pažymėtų talpyklų (repo)
+ Nėra pakeitimų
+ Nėra bendrų autorių
+ Nėra leidimų
+ Nėra užvertų talonų
+ Nėra atvertų talonų
+ Nėra įvykių
+ Nėra atvirų PR
+ Nėra užvertų PR
+ Paieška nieko nerado
+ Leiskite programėlei talpinti failus, jeigu norite peržiūrėti juos
Vieši gistai
Rodyti reklamas
- No issues
- No unread notifications.
+ Nėra talonų
+ Visi pranešimai perskaityti
Mano gistai
Pakeitimai
- Click to open notifications list or swipe to dismiss
- Long press to navigate to main screen from anywhere
- Created
- Assigned
- Mentioned
+ Spausk čia, jei nori peržiūrėti pranešimus ir slink pranešimo kortelę ant dešinės, jei nori pašalinti iš sąrašo
+ Spustelėkite ilgiau, jei norite aplankyti pagr. ekraną bet kur
+ Sukurta
+ Paskirta
+ Paminėta
Pavadinimas
Spalva
Sukurti etiketę
@@ -294,40 +293,40 @@
Nėra narių
Nėra grupelių
Nęra organizacijų
- Pažymėti, kad perskaitei
+ Perskaičiau
Animacijos
Įgalinti sarąšo animaciją
Animacinis efektas
- Slenksčiai (etapai)
- Assignee
+ Tikslai
+ Paskirtasis
Patikrinime buvo rasta problemų
Vyksta patikrinimas
Viskas OK
Rūšiuoti
Naujausia (-s)
Seniausia (-s)
- Most commented
- Least commented
- Recently updated
- Least recently updated
- You\'re up to date!
- A new version is available.
+ Daugiausiai koment.
+ Mažiausiai koment.
+ Neseniai atnauj.
+ Seniaus. atnauj.
+ Viskas atnaujinta!
+ Nauja versija pasiekiama
Kažką parašyk į tuščią laukelį!
- Long press to create issue ticket on the fly
- This pull request can be merged
+ Spustelėkite truputį ilgiau, jei norite sukurti taloną iš karto
+ Šie pakeitimai neturi konfliktų (PR)
peržiūrėjo
- dismissed their review
- approved these changes
- No reactions
- Reactions
- Wrap content
- Wrap code in code viewer by default
- Wrap Code
- Open source libraries
- Enable notification sound once a notification is received.
+ atmetė jų peržiūra (PR)
+ priėmė šiuos pakeitimus (PR)
+ Nėra reakcijų
+ Reakcijos
+ Teksto kėlimas į kitą liniją
+ Kelti tekstą į kitą liniją, kai peržiūriamas turinys
+ Teksto kėlimas į kitą liniją
+ Atviro kodo „bibliotekos“
+ Groti garsą, kai gaunu pranešimą.
Įgalinti pranešimų garsą
Įgalinti pranešimus
- Prisijungti su „Personal Token“
+ Prisijungti su „asmeniniu tokenu“
Naudoti asmeninį tokeną
Prisijungti „paprastai“
Nematai savo organizacijų? Žiūrėk čia:\nhttps://help.github.com/articles/about-third-party-application-restrictions\nArba iš naujo prisijunk naudodama (-s) tokeną, angl. „access token“.
@@ -341,7 +340,7 @@
Programos kalba
Kalba
Pasirinkti kalbą
- Pasirinkite tokią, kuri jums lengviausia
+ Pasirinkite tokią, kuri jums lengviausia suprasti
Atšaukti prenumeratą
nuo
viduje
@@ -358,7 +357,7 @@
Pavyko pakviesti
Atsakyti
Nepavyko užkrauti paveikslėlį
- noriu sujungti kodą
+ noriu sujungti kodą (PR)
Stebėtojai
Vertintojai
Nėra vertintojų
@@ -370,14 +369,12 @@
Etiketės
Pridėti komentarą
Nauja funkcija: profilio viršeliai
- With FastHub 2.5.0, you can now better express yourself with banners
- for your profile page.\n\nAnyone using the FastHub app, will see your header, and you\'ll
- begin seeing other peoples headers as well! If you\'d like to create a banner for yourself,
- make it 1280x384 or divisible, otherwise, it may get cropped.\n\nYou can add or change your
- banner at any time, by creating a gist described "header.fst" with a file containing a
- direct link to the header image.\n\nOr even simpler, just use the built-in image chooser!
+ Pastabos: Profilio viršelius mato tik „FastHub“ 2.5+ programėlės vartotojai.
+ Geriausias dydis viršeliui yra: 1280x384. Jeigu neturite „FastHub“ programėlės, bet vistiek
+ norite pakeisti viršelį, sukurkite gistą, kuris pavadintas „header.fst“. Jis gali nustatyti
+ jūsų viršelį. Giste turi būti nuoroda, kurioje yra patalpintas viršelis (pvz. „Imgur direct link“).
- PASIRINKTI VIRŠLIO NUOTRAUKĄ
+ Pasirinkti viršelio nuotrauką
Nepavyko įkrauti paveikslėlį, dar kartą pabandykite vėliau.
Populiaru
„GitHub“ neleidžia rūšiuoti pagal jaustukus dėl techninių limitacijų.
From 500efcf8e607ffb3a6d2a077f543286982f203cc Mon Sep 17 00:00:00 2001
From: Kosh
Date: Sun, 4 Jun 2017 03:42:15 +0800
Subject: [PATCH 05/14] this commit fixes #544 and makes fastScroller to
paginate as per #556 & preparing for 3.0.0
---
app/build.gradle | 4 +-
.../vending/billing/IInAppBillingService.aidl | 144 ------------------
.../data/service/UserRestService.java | 3 +
.../java/com/fastaccess/helper/RxHelper.java | 1 -
.../timeline/handler/ListsHandler.java | 2 -
.../fastaccess/ui/adapter/FeedsAdapter.java | 13 +-
.../adapter/viewholder/FeedsViewHolder.java | 20 ++-
.../com/fastaccess/ui/base/BaseFragment.java | 8 +-
.../filter/issues/FilterIssuesActivity.java | 65 ++++----
.../profile/events/ProfileEventsFragment.kt | 8 +-
.../profile/events/ProfileEventsPresenter.kt | 12 +-
.../starred/ProfileStarredFragment.java | 26 +++-
.../profile/starred/ProfileStarredMvp.java | 2 +
.../starred/ProfileStarredPresenter.java | 40 +++--
.../code/commit/RepoCommitsPresenter.java | 11 +-
.../commit/details/CommitPagerPresenter.java | 44 +++---
.../repos/code/files/RepoFilesPresenter.java | 7 +-
.../code/prettifier/ViewerPresenter.java | 73 +++++----
.../code/releases/RepoReleasesPresenter.java | 16 +-
.../timeline/IssueTimelineFragment.java | 1 +
.../timeline/PullRequestTimelineFragment.java | 1 +
.../ui/modules/trending/TrendingActivity.kt | 16 +-
.../trending/fragment/TrendingFragment.kt | 3 +-
.../ui/modules/user/UserPagerActivity.java | 37 ++++-
.../ui/modules/user/UserPagerMvp.java | 3 +-
.../scroll/RecyclerFastScroller.java | 86 ++++++-----
.../layout/feeds_row_no_image_item.xml | 16 +-
27 files changed, 311 insertions(+), 351 deletions(-)
delete mode 100755 app/src/main/aidl/com/android/vending/billing/IInAppBillingService.aidl
diff --git a/app/build.gradle b/app/build.gradle
index 07473fe7..43601ee7 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -28,8 +28,8 @@ android {
applicationId "com.fastaccess.github"
minSdkVersion 21
targetSdkVersion 26
- versionCode 253
- versionName "2.5.3"
+ versionCode 300
+ versionName "3.0.0"
signingConfig signingConfigs.signing
buildConfigString "GITHUB_CLIENT_ID", (buildProperties.secrets['github_client_id'] | buildProperties.notThere['github_client_id']).string
buildConfigString "GITHUB_SECRET", (buildProperties.secrets['github_secret'] | buildProperties.notThere['github_secret']).string
diff --git a/app/src/main/aidl/com/android/vending/billing/IInAppBillingService.aidl b/app/src/main/aidl/com/android/vending/billing/IInAppBillingService.aidl
deleted file mode 100755
index 2a492f78..00000000
--- a/app/src/main/aidl/com/android/vending/billing/IInAppBillingService.aidl
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.vending.billing;
-
-import android.os.Bundle;
-
-/**
- * InAppBillingService is the service that provides in-app billing version 3 and beyond.
- * This service provides the following features:
- * 1. Provides a new API to get details of in-app items published for the app including
- * price, type, title and description.
- * 2. The purchase flow is synchronous and purchase information is available immediately
- * after it completes.
- * 3. Purchase information of in-app purchases is maintained within the Google Play system
- * till the purchase is consumed.
- * 4. An API to consume a purchase of an inapp item. All purchases of one-time
- * in-app items are consumable and thereafter can be purchased again.
- * 5. An API to get current purchases of the user immediately. This will not contain any
- * consumed purchases.
- *
- * All calls will give a response code with the following possible values
- * RESULT_OK = 0 - success
- * RESULT_USER_CANCELED = 1 - user pressed back or canceled a dialog
- * RESULT_BILLING_UNAVAILABLE = 3 - this billing API version is not supported for the type requested
- * RESULT_ITEM_UNAVAILABLE = 4 - requested SKU is not available for purchase
- * RESULT_DEVELOPER_ERROR = 5 - invalid arguments provided to the API
- * RESULT_ERROR = 6 - Fatal error during the API action
- * RESULT_ITEM_ALREADY_OWNED = 7 - Failure to purchase since item is already owned
- * RESULT_ITEM_NOT_OWNED = 8 - Failure to consume since item is not owned
- */
-interface IInAppBillingService {
- /**
- * Checks support for the requested billing API version, package and in-app type.
- * Minimum API version supported by this interface is 3.
- * @param apiVersion the billing version which the app is using
- * @param packageName the package name of the calling app
- * @param type type of the in-app item being purchased "inapp" for one-time purchases
- * and "subs" for subscription.
- * @return RESULT_OK(0) on success, corresponding result code on failures
- */
- int isBillingSupported(int apiVersion, String packageName, String type);
-
- /**
- * Provides details of a list of SKUs
- * Given a list of SKUs of a valid type in the skusBundle, this returns a bundle
- * with a list JSON strings containing the productId, price, title and description.
- * This API can be called with a maximum of 20 SKUs.
- * @param apiVersion billing API version that the Third-party is using
- * @param packageName the package name of the calling app
- * @param skusBundle bundle containing a StringArrayList of SKUs with key "ITEM_ID_LIST"
- * @return Bundle containing the following key-value pairs
- * "RESPONSE_CODE" with int value, RESULT_OK(0) if success, other response codes on
- * failure as listed above.
- * "DETAILS_LIST" with a StringArrayList containing purchase information
- * in JSON format similar to:
- * '{ "productId" : "exampleSku", "type" : "inapp", "price" : "$5.00",
- * "title : "Example Title", "description" : "This is an example description" }'
- */
- Bundle getSkuDetails(int apiVersion, String packageName, String type, in Bundle skusBundle);
-
- /**
- * Returns a pending intent to launch the purchase flow for an in-app item by providing a SKU,
- * the type, a unique purchase token and an optional developer payload.
- * @param apiVersion billing API version that the app is using
- * @param packageName package name of the calling app
- * @param sku the SKU of the in-app item as published in the developer console
- * @param type the type of the in-app item ("inapp" for one-time purchases
- * and "subs" for subscription).
- * @param developerPayload optional argument to be sent back with the purchase information
- * @return Bundle containing the following key-value pairs
- * "RESPONSE_CODE" with int value, RESULT_OK(0) if success, other response codes on
- * failure as listed above.
- * "BUY_INTENT" - PendingIntent to start the purchase flow
- *
- * The Pending intent should be launched with startIntentSenderForResult. When purchase flow
- * has completed, the onActivityResult() will give a resultCode of OK or CANCELED.
- * If the purchase is successful, the result data will contain the following key-value pairs
- * "RESPONSE_CODE" with int value, RESULT_OK(0) if success, other response codes on
- * failure as listed above.
- * "INAPP_PURCHASE_DATA" - String in JSON format similar to
- * '{"orderId":"12999763169054705758.1371079406387615",
- * "packageName":"com.example.app",
- * "productId":"exampleSku",
- * "purchaseTime":1345678900000,
- * "purchaseToken" : "122333444455555",
- * "developerPayload":"example developer payload" }'
- * "INAPP_DATA_SIGNATURE" - String containing the signature of the purchase data that
- * was signed with the private key of the developer
- * TODO: change this to app-specific keys.
- */
- Bundle getBuyIntent(int apiVersion, String packageName, String sku, String type,
- String developerPayload);
-
- /**
- * Returns the current SKUs owned by the user of the type and package name specified along with
- * purchase information and a signature of the data to be validated.
- * This will return all SKUs that have been purchased in V3 and managed items purchased using
- * V1 and V2 that have not been consumed.
- * @param apiVersion billing API version that the app is using
- * @param packageName package name of the calling app
- * @param type the type of the in-app items being requested
- * ("inapp" for one-time purchases and "subs" for subscription).
- * @param continuationToken to be set as null for the first call, if the number of owned
- * skus are too many, a continuationToken is returned in the response bundle.
- * This method can be called again with the continuation token to get the next set of
- * owned skus.
- * @return Bundle containing the following key-value pairs
- * "RESPONSE_CODE" with int value, RESULT_OK(0) if success, other response codes on
- * failure as listed above.
- * "INAPP_PURCHASE_ITEM_LIST" - StringArrayList containing the list of SKUs
- * "INAPP_PURCHASE_DATA_LIST" - StringArrayList containing the purchase information
- * "INAPP_DATA_SIGNATURE_LIST"- StringArrayList containing the signatures
- * of the purchase information
- * "INAPP_CONTINUATION_TOKEN" - String containing a continuation token for the
- * next set of in-app purchases. Only set if the
- * user has more owned skus than the current list.
- */
- Bundle getPurchases(int apiVersion, String packageName, String type, String continuationToken);
-
- /**
- * Consume the last purchase of the given SKU. This will result in this item being removed
- * from all subsequent responses to getPurchases() and allow re-purchase of this item.
- * @param apiVersion billing API version that the app is using
- * @param packageName package name of the calling app
- * @param purchaseToken token in the purchase information JSON that identifies the purchase
- * to be consumed
- * @return 0 if consumption succeeded. Appropriate error values for failures.
- */
- int consumePurchase(int apiVersion, String packageName, String purchaseToken);
-}
diff --git a/app/src/main/java/com/fastaccess/data/service/UserRestService.java b/app/src/main/java/com/fastaccess/data/service/UserRestService.java
index a5fd9fe9..520d5806 100644
--- a/app/src/main/java/com/fastaccess/data/service/UserRestService.java
+++ b/app/src/main/java/com/fastaccess/data/service/UserRestService.java
@@ -47,6 +47,9 @@ public interface UserRestService {
@GET("users/{username}/starred") Observable>
getStarred(@Path("username") @NonNull String username, @Query("page") int page);
+ @GET("users/{username}/starred?per_page=1") Observable>
+ getStarredCount(@Path("username") @NonNull String username);
+
@GET("users/{username}/following")
Observable> getFollowing(@Path("username") @NonNull String username, @Query("page") int page);
diff --git a/app/src/main/java/com/fastaccess/helper/RxHelper.java b/app/src/main/java/com/fastaccess/helper/RxHelper.java
index 502f18a7..daf6431e 100644
--- a/app/src/main/java/com/fastaccess/helper/RxHelper.java
+++ b/app/src/main/java/com/fastaccess/helper/RxHelper.java
@@ -21,7 +21,6 @@ public class RxHelper {
public static Observable safeObservable(@NonNull Observable observable) {
return getObserver(observable)
- .onErrorReturn(throwable -> (T) new Object())
.doOnError(Throwable::printStackTrace);
}
diff --git a/app/src/main/java/com/fastaccess/provider/timeline/handler/ListsHandler.java b/app/src/main/java/com/fastaccess/provider/timeline/handler/ListsHandler.java
index 1b210377..f9cc16e8 100644
--- a/app/src/main/java/com/fastaccess/provider/timeline/handler/ListsHandler.java
+++ b/app/src/main/java/com/fastaccess/provider/timeline/handler/ListsHandler.java
@@ -4,7 +4,6 @@ import android.graphics.drawable.Drawable;
import android.support.annotation.Nullable;
import android.text.SpannableStringBuilder;
-import com.fastaccess.helper.Logger;
import com.fastaccess.ui.widgets.SpannableBuilder;
import net.nightwhistler.htmlspanner.TagNodeHandler;
@@ -47,7 +46,6 @@ import lombok.NoArgsConstructor;
TodoItems todoItem = null;
if (node.getChildTags() != null && node.getChildTags().length > 0) {
for (TagNode tagNode : node.getChildTags()) {
- Logger.e(tagNode.getName(), tagNode.getAttributes(), tagNode.getText());
if (tagNode.getName() != null && tagNode.getName().equals("input")) {
todoItem = new TodoItems();
todoItem.isChecked = tagNode.getAttributeByName("checked") != null;
diff --git a/app/src/main/java/com/fastaccess/ui/adapter/FeedsAdapter.java b/app/src/main/java/com/fastaccess/ui/adapter/FeedsAdapter.java
index d6e35821..43cf047e 100644
--- a/app/src/main/java/com/fastaccess/ui/adapter/FeedsAdapter.java
+++ b/app/src/main/java/com/fastaccess/ui/adapter/FeedsAdapter.java
@@ -16,12 +16,19 @@ import java.util.ArrayList;
public class FeedsAdapter extends BaseRecyclerAdapter> {
- public FeedsAdapter(@NonNull ArrayList Events) {
- super(Events);
+ private boolean noImage;
+
+ public FeedsAdapter(@NonNull ArrayList events) {
+ this(events, false);
+ }
+
+ public FeedsAdapter(@NonNull ArrayList events, boolean noImage) {
+ super(events);
+ this.noImage = noImage;
}
@Override protected FeedsViewHolder viewHolder(ViewGroup parent, int viewType) {
- return new FeedsViewHolder(FeedsViewHolder.getView(parent), this);
+ return new FeedsViewHolder(FeedsViewHolder.getView(parent, noImage), this);
}
@Override protected void onBindView(FeedsViewHolder holder, int position) {
diff --git a/app/src/main/java/com/fastaccess/ui/adapter/viewholder/FeedsViewHolder.java b/app/src/main/java/com/fastaccess/ui/adapter/viewholder/FeedsViewHolder.java
index c4a9a0d3..5550959d 100644
--- a/app/src/main/java/com/fastaccess/ui/adapter/viewholder/FeedsViewHolder.java
+++ b/app/src/main/java/com/fastaccess/ui/adapter/viewholder/FeedsViewHolder.java
@@ -29,7 +29,7 @@ import butterknife.BindView;
public class FeedsViewHolder extends BaseViewHolder {
- @BindView(R.id.avatarLayout) AvatarLayout avatar;
+ @Nullable @BindView(R.id.avatarLayout) AvatarLayout avatar;
@BindView(R.id.description) FontTextView description;
@BindView(R.id.title) FontTextView title;
@BindView(R.id.date) FontTextView date;
@@ -40,15 +40,21 @@ public class FeedsViewHolder extends BaseViewHolder {
super(itemView, adapter);
}
- public static View getView(@NonNull ViewGroup viewGroup) {
- return getView(viewGroup, R.layout.feeds_row_item);
+ public static View getView(@NonNull ViewGroup viewGroup, boolean noImage) {
+ if (noImage) {
+ return getView(viewGroup, R.layout.feeds_row_no_image_item);
+ } else {
+ return getView(viewGroup, R.layout.feeds_row_item);
+ }
}
@Override public void bind(@NonNull Event eventsModel) {
- if (eventsModel.getActor() != null) {
- avatar.setUrl(eventsModel.getActor().getAvatarUrl(), eventsModel.getActor().getLogin(), eventsModel.getActor().isOrganizationType());
- } else {
- avatar.setUrl(null, null);
+ if (avatar != null) {
+ if (eventsModel.getActor() != null) {
+ avatar.setUrl(eventsModel.getActor().getAvatarUrl(), eventsModel.getActor().getLogin(), eventsModel.getActor().isOrganizationType());
+ } else {
+ avatar.setUrl(null, null);
+ }
}
SpannableBuilder spannableBuilder = SpannableBuilder.builder();
spannableBuilder.append(eventsModel.getActor() != null ? eventsModel.getActor().getLogin() : "N/A").append(" ");
diff --git a/app/src/main/java/com/fastaccess/ui/base/BaseFragment.java b/app/src/main/java/com/fastaccess/ui/base/BaseFragment.java
index dff26516..70cbe91c 100644
--- a/app/src/main/java/com/fastaccess/ui/base/BaseFragment.java
+++ b/app/src/main/java/com/fastaccess/ui/base/BaseFragment.java
@@ -114,13 +114,9 @@ public abstract class BaseFragment lists = new ArrayList<>();
Collections.addAll(lists, getResources().getStringArray(R.array.sort_prs_issues));
lists.add(CommentsHelper.getThumbsUp());
@@ -301,12 +287,23 @@ public class FilterIssuesActivity extends BaseActivity new Handler().postDelayed(() -> {
+ //hacky way to dismiss on re-selecting tab.
+ if (assignee == null || milestone == null || sort == null || labels == null) return;
+ assignee.setTag(null);
+ milestone.setTag(null);
+ sort.setTag(null);
+ labels.setTag(null);
+ }, 100));
}
- return false;
+ popupWindow.setContentView(viewHolder.view);
}
private void onSearch() {
@@ -470,7 +467,7 @@ public class FilterIssuesActivity extends BaseActivity? = null
override fun fragmentLayout(): Int {
@@ -44,6 +44,7 @@ open class ProfileEventsFragment : BaseFragment(), ProfileEvent
}
override fun onWorkOffline() {
- if (eventsModels.isEmpty()) {
- manageDisposable(RxHelper.getObserver(Event.getEvents().toObservable())
- .subscribe({ modelList ->
- if (modelList != null) {
- sendToView { view -> view.onNotifyAdapter(modelList, 1) }
- }
- }, { it.printStackTrace() }))
- } else {
- sendToView({ it.hideProgress() })
- }
+ //TODO
+ sendToView({ it.hideProgress() })
}
override fun onItemClick(position: Int, v: View, item: Event) {
diff --git a/app/src/main/java/com/fastaccess/ui/modules/profile/starred/ProfileStarredFragment.java b/app/src/main/java/com/fastaccess/ui/modules/profile/starred/ProfileStarredFragment.java
index 92ddf34c..c5d51b2c 100644
--- a/app/src/main/java/com/fastaccess/ui/modules/profile/starred/ProfileStarredFragment.java
+++ b/app/src/main/java/com/fastaccess/ui/modules/profile/starred/ProfileStarredFragment.java
@@ -1,5 +1,6 @@
package com.fastaccess.ui.modules.profile.starred;
+import android.content.Context;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
@@ -14,6 +15,7 @@ import com.fastaccess.helper.Bundler;
import com.fastaccess.provider.rest.loadmore.OnLoadMore;
import com.fastaccess.ui.adapter.ReposAdapter;
import com.fastaccess.ui.base.BaseFragment;
+import com.fastaccess.ui.modules.repos.RepoPagerMvp;
import com.fastaccess.ui.widgets.StateLayout;
import com.fastaccess.ui.widgets.recyclerview.DynamicRecyclerView;
@@ -32,6 +34,7 @@ public class ProfileStarredFragment extends BaseFragment onLoadMore;
private ReposAdapter adapter;
+ private RepoPagerMvp.TabsBadgeListener tabsBadgeListener;
public static ProfileStarredFragment newInstance(@NonNull String username) {
ProfileStarredFragment view = new ProfileStarredFragment();
@@ -39,6 +42,21 @@ public class ProfileStarredFragment extends BaseFragment items, int page) {
hideProgress();
if (items == null || items.isEmpty()) {
@@ -81,9 +99,7 @@ public class ProfileStarredFragment extends BaseFragment items, int page);
@NonNull OnLoadMore getLoadMore();
+
+ void onUpdateCount(int starredCount);
}
interface Presenter extends BaseMvp.FAPresenter,
diff --git a/app/src/main/java/com/fastaccess/ui/modules/profile/starred/ProfileStarredPresenter.java b/app/src/main/java/com/fastaccess/ui/modules/profile/starred/ProfileStarredPresenter.java
index 9c8bb7fb..26cba3da 100644
--- a/app/src/main/java/com/fastaccess/ui/modules/profile/starred/ProfileStarredPresenter.java
+++ b/app/src/main/java/com/fastaccess/ui/modules/profile/starred/ProfileStarredPresenter.java
@@ -5,6 +5,7 @@ import android.support.annotation.Nullable;
import android.view.View;
import com.fastaccess.data.dao.NameParser;
+import com.fastaccess.data.dao.Pageable;
import com.fastaccess.data.dao.model.Repo;
import com.fastaccess.helper.RxHelper;
import com.fastaccess.provider.rest.RestProvider;
@@ -13,12 +14,15 @@ import com.fastaccess.ui.modules.repos.RepoPagerActivity;
import java.util.ArrayList;
+import io.reactivex.Observable;
+
/**
* Created by Kosh on 03 Dec 2016, 3:48 PM
*/
class ProfileStarredPresenter extends BasePresenter implements ProfileStarredMvp.Presenter {
+ @com.evernote.android.state.State int starredCount = -1;
private ArrayList repos = new ArrayList<>();
private int page;
private int previousTotal;
@@ -62,14 +66,28 @@ class ProfileStarredPresenter extends BasePresenter impl
sendToView(ProfileStarredMvp.View::hideProgress);
return;
}
- makeRestCall(RestProvider.getUserService().getStarred(parameter, page),
- repoModelPageable -> {
- lastPage = repoModelPageable.getLast();
- if (getCurrentPage() == 1) {
- manageObservable(Repo.saveStarred(repoModelPageable.getItems(), parameter));
- }
- sendToView(view -> view.onNotifyAdapter(repoModelPageable.getItems(), page));
- });
+ Observable> observable;
+ if (starredCount == -1) {
+ observable = Observable.zip(RestProvider.getUserService().getStarred(parameter, page),
+ RestProvider.getUserService().getStarredCount(parameter), (repoPageable, count) -> {
+ if (count != null) {
+ starredCount = count.getLast();
+ }
+ return repoPageable;
+ });
+ } else {
+ observable = RestProvider.getUserService().getStarred(parameter, page);
+ }
+ makeRestCall(observable, repoModelPageable -> {
+ lastPage = repoModelPageable.getLast();
+ if (getCurrentPage() == 1) {
+ manageObservable(Repo.saveStarred(repoModelPageable.getItems(), parameter));
+ }
+ sendToView(view -> {
+ view.onUpdateCount(starredCount);
+ view.onNotifyAdapter(repoModelPageable.getItems(), page);
+ });
+ });
}
@NonNull @Override public ArrayList getRepos() {
@@ -79,7 +97,11 @@ class ProfileStarredPresenter extends BasePresenter impl
@Override public void onWorkOffline(@NonNull String login) {
if (repos.isEmpty()) {
manageDisposable(RxHelper.getObserver(Repo.getStarred(login).toObservable()).subscribe(repoModels ->
- sendToView(view -> view.onNotifyAdapter(repoModels, 1))));
+ sendToView(view -> {
+ starredCount = -1;
+ view.onUpdateCount(repoModels != null ? repoModels.size() : 0);
+ view.onNotifyAdapter(repoModels, 1);
+ })));
} else {
sendToView(ProfileStarredMvp.View::hideProgress);
}
diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/code/commit/RepoCommitsPresenter.java b/app/src/main/java/com/fastaccess/ui/modules/repos/code/commit/RepoCommitsPresenter.java
index 815a85d6..9ad02dbf 100644
--- a/app/src/main/java/com/fastaccess/ui/modules/repos/code/commit/RepoCommitsPresenter.java
+++ b/app/src/main/java/com/fastaccess/ui/modules/repos/code/commit/RepoCommitsPresenter.java
@@ -93,14 +93,14 @@ class RepoCommitsPresenter extends BasePresenter implements
RestProvider.getRepoService().getTags(login, repoId),
(branchPageable, tags) -> {
ArrayList branchesModels = new ArrayList<>();
- if (branchPageable.getItems() != null) {
+ if (branchPageable != null && branchPageable.getItems() != null) {
branchesModels.addAll(Stream.of(branchPageable.getItems())
.map(branchesModel -> {
branchesModel.setTag(false);
return branchesModel;
}).collect(Collectors.toList()));
}
- if (tags != null) {
+ if (tags != null && tags.getItems() != null) {
branchesModels.addAll(Stream.of(tags.getItems())
.map(branchesModel -> {
branchesModel.setTag(true);
@@ -112,12 +112,11 @@ class RepoCommitsPresenter extends BasePresenter implements
}));
manageDisposable(observable
.doOnSubscribe(disposable -> sendToView(RepoCommitsMvp.View::showBranchesProgress))
- .doOnNext(branchesModels -> {
+ .subscribe(branchesModels -> {
branches.clear();
branches.addAll(branchesModels);
sendToView(view -> view.setBranchesData(branches, true));
- })
- .subscribe(branchesModels -> {/**/}, throwable -> sendToView(view -> view.setBranchesData(branches, true))));
+ }, throwable -> sendToView(view -> view.setBranchesData(branches, true))));
}
if (!InputHelper.isEmpty(login) && !InputHelper.isEmpty(repoId)) {
onCallApi(1, null);
@@ -166,6 +165,6 @@ class RepoCommitsPresenter extends BasePresenter implements
if (response != null) {
sendToView(view -> view.onShowCommitCount(response.getLast()));
}
- }));
+ }, Throwable::printStackTrace));
}
}
diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/code/commit/details/CommitPagerPresenter.java b/app/src/main/java/com/fastaccess/ui/modules/repos/code/commit/details/CommitPagerPresenter.java
index 565d341f..b1dd13d7 100644
--- a/app/src/main/java/com/fastaccess/ui/modules/repos/code/commit/details/CommitPagerPresenter.java
+++ b/app/src/main/java/com/fastaccess/ui/modules/repos/code/commit/details/CommitPagerPresenter.java
@@ -49,29 +49,27 @@ class CommitPagerPresenter extends BasePresenter implements
return;
} else if (!InputHelper.isEmpty(sha) && !InputHelper.isEmpty(login) && !InputHelper.isEmpty(repoId)) {
makeRestCall(RestProvider.getRepoService()
- .getCommit(login, repoId, sha)
- .flatMap(commit -> {
- if (commit.getGitCommit() != null && commit.getGitCommit().getMessage() != null) {
- MarkdownModel markdownModel = new MarkdownModel();
- markdownModel.setContext(login + "/" + repoId);
- markdownModel.setText(commit.getGitCommit().getMessage());
- return RestProvider.getRepoService().convertReadmeToHtml(markdownModel)
- .onErrorReturn(throwable -> null);
- }
- return Observable.just(commit);
- }, (commit, u) -> {
- if (!InputHelper.isEmpty(u) && u instanceof String) {
- commit.getGitCommit().setMessage(u.toString());
- }
- return commit;
- }),
- commit -> {
- commitModel = commit;
- commitModel.setRepoId(repoId);
- commitModel.setLogin(login);
- sendToView(CommitPagerMvp.View::onSetup);
- manageObservable(commitModel.save(commitModel).toObservable());
- });
+ .getCommit(login, repoId, sha)
+ .flatMap(commit -> {
+ if (commit.getGitCommit() != null && commit.getGitCommit().getMessage() != null) {
+ MarkdownModel markdownModel = new MarkdownModel();
+ markdownModel.setContext(login + "/" + repoId);
+ markdownModel.setText(commit.getGitCommit().getMessage());
+ return RestProvider.getRepoService().convertReadmeToHtml(markdownModel);
+ }
+ return Observable.just(commit);
+ }, (commit, u) -> {
+ if (!InputHelper.isEmpty(u) && u instanceof String) {
+ commit.getGitCommit().setMessage(u.toString());
+ }
+ return commit;
+ }), commit -> {
+ commitModel = commit;
+ commitModel.setRepoId(repoId);
+ commitModel.setLogin(login);
+ sendToView(CommitPagerMvp.View::onSetup);
+ manageObservable(commitModel.save(commitModel).toObservable());
+ });
return;
}
}
diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/code/files/RepoFilesPresenter.java b/app/src/main/java/com/fastaccess/ui/modules/repos/code/files/RepoFilesPresenter.java
index b27e6770..34c3505c 100644
--- a/app/src/main/java/com/fastaccess/ui/modules/repos/code/files/RepoFilesPresenter.java
+++ b/app/src/main/java/com/fastaccess/ui/modules/repos/code/files/RepoFilesPresenter.java
@@ -59,10 +59,9 @@ class RepoFilesPresenter extends BasePresenter implements Rep
})
.toList()
.subscribe(models -> {
- files.addAll(models);
- sendToView(RepoFilesMvp.View::onNotifyAdapter);
- }
- ));
+ files.addAll(models);
+ sendToView(RepoFilesMvp.View::onNotifyAdapter);
+ }));
}
@Override public void onCallApi(@Nullable RepoFile toAppend) {
diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/code/prettifier/ViewerPresenter.java b/app/src/main/java/com/fastaccess/ui/modules/repos/code/prettifier/ViewerPresenter.java
index ae896f41..7b0e7e06 100644
--- a/app/src/main/java/com/fastaccess/ui/modules/repos/code/prettifier/ViewerPresenter.java
+++ b/app/src/main/java/com/fastaccess/ui/modules/repos/code/prettifier/ViewerPresenter.java
@@ -103,45 +103,44 @@ class ViewerPresenter extends BasePresenter implements ViewerMvp
? RestProvider.getRepoService(true).getFileAsHtmlStream(url)
: RestProvider.getRepoService(true).getFileAsStream(url);
makeRestCall(isRepo ? RestProvider.getRepoService(true).getReadmeHtml(url)
- : streamObservable,
- content -> {
- downloadedStream = content;
- ViewerFile fileModel = new ViewerFile();
- fileModel.setContent(downloadedStream);
- fileModel.setFullUrl(url);
- fileModel.setRepo(isRepo);
- if (isRepo) {
- fileModel.setMarkdown(true);
- isMarkdown = true;
- isRepo = true;
- sendToView(view -> view.onSetMdText(downloadedStream, url));
+ : streamObservable, content -> {
+ downloadedStream = content;
+ ViewerFile fileModel = new ViewerFile();
+ fileModel.setContent(downloadedStream);
+ fileModel.setFullUrl(url);
+ fileModel.setRepo(isRepo);
+ if (isRepo) {
+ fileModel.setMarkdown(true);
+ isMarkdown = true;
+ isRepo = true;
+ sendToView(view -> view.onSetMdText(downloadedStream, url));
+ } else {
+ isMarkdown = MarkDownProvider.isMarkdown(url);
+ if (isMarkdown) {
+ MarkdownModel model = new MarkdownModel();
+ model.setText(downloadedStream);
+ NameParser parser = new NameParser(url);
+ if (parser.getUsername() != null && parser.getName() != null) {
+ model.setContext(parser.getUsername() + "/" + parser.getName());
} else {
- isMarkdown = MarkDownProvider.isMarkdown(url);
- if (isMarkdown) {
- MarkdownModel model = new MarkdownModel();
- model.setText(downloadedStream);
- NameParser parser = new NameParser(url);
- if (parser.getUsername() != null && parser.getName() != null) {
- model.setContext(parser.getUsername() + "/" + parser.getName());
- } else {
- model.setContext("");
- }
- Logger.e(model.getContext());
- makeRestCall(RestProvider.getRepoService().convertReadmeToHtml(model), string -> {
- isMarkdown = true;
- downloadedStream = string;
- fileModel.setMarkdown(true);
- fileModel.setContent(downloadedStream);
- manageObservable(fileModel.save(fileModel).toObservable());
- sendToView(view -> view.onSetMdText(downloadedStream, url));
- });
- return;
- }
- fileModel.setMarkdown(false);
- sendToView(view -> view.onSetCode(downloadedStream));
+ model.setContext("");
}
- manageObservable(fileModel.save(fileModel).toObservable());
- });
+ Logger.e(model.getContext());
+ makeRestCall(RestProvider.getRepoService().convertReadmeToHtml(model), string -> {
+ isMarkdown = true;
+ downloadedStream = string;
+ fileModel.setMarkdown(true);
+ fileModel.setContent(downloadedStream);
+ manageObservable(fileModel.save(fileModel).toObservable());
+ sendToView(view -> view.onSetMdText(downloadedStream, url));
+ });
+ return;
+ }
+ fileModel.setMarkdown(false);
+ sendToView(view -> view.onSetCode(downloadedStream));
+ }
+ manageObservable(fileModel.save(fileModel).toObservable());
+ });
}
@Override public boolean isRepo() {
diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/code/releases/RepoReleasesPresenter.java b/app/src/main/java/com/fastaccess/ui/modules/repos/code/releases/RepoReleasesPresenter.java
index 0dd0af81..63378544 100644
--- a/app/src/main/java/com/fastaccess/ui/modules/repos/code/releases/RepoReleasesPresenter.java
+++ b/app/src/main/java/com/fastaccess/ui/modules/repos/code/releases/RepoReleasesPresenter.java
@@ -71,14 +71,6 @@ class RepoReleasesPresenter extends BasePresenter implemen
}
- private void onResponse(Pageable response) {
- lastPage = response.getLast();
- if (getCurrentPage() == 1) {
- manageObservable(Release.save(response.getItems(), repoId, login));
- }
- sendToView(view -> view.onNotifyAdapter(response.getItems(), getCurrentPage()));
- }
-
@Override public void onFragmentCreated(@NonNull Bundle bundle) {
repoId = bundle.getString(BundleConstant.ID);
login = bundle.getString(BundleConstant.EXTRA);
@@ -110,4 +102,12 @@ class RepoReleasesPresenter extends BasePresenter implemen
}
@Override public void onItemLongClick(int position, View v, Release item) {}
+
+ private void onResponse(Pageable response) {
+ lastPage = response.getLast();
+ if (getCurrentPage() == 1) {
+ manageObservable(Release.save(response.getItems(), repoId, login));
+ }
+ sendToView(view -> view.onNotifyAdapter(response.getItems(), getCurrentPage()));
+ }
}
diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/issues/issue/details/timeline/IssueTimelineFragment.java b/app/src/main/java/com/fastaccess/ui/modules/repos/issues/issue/details/timeline/IssueTimelineFragment.java
index faa30889..a73d0441 100644
--- a/app/src/main/java/com/fastaccess/ui/modules/repos/issues/issue/details/timeline/IssueTimelineFragment.java
+++ b/app/src/main/java/com/fastaccess/ui/modules/repos/issues/issue/details/timeline/IssueTimelineFragment.java
@@ -116,6 +116,7 @@ public class IssueTimelineFragment extends BaseFragment(), Tr
}
override fun onOptionsItemSelected(item: MenuItem?): Boolean {
- if (item?.itemId == R.id.menu) {
- drawerLayout.openDrawer(Gravity.END)
- return true
+ when (item?.itemId) {
+ R.id.menu -> {
+ drawerLayout.openDrawer(Gravity.END)
+ return true
+ }
+ android.R.id.home -> {
+ startActivity(Intent(this, MainActivity::class.java))
+ finish()
+ return true
+ }
+ else -> return super.onOptionsItemSelected(item)
}
- return super.onOptionsItemSelected(item)
}
override fun onAppend(title: String) {
diff --git a/app/src/main/java/com/fastaccess/ui/modules/trending/fragment/TrendingFragment.kt b/app/src/main/java/com/fastaccess/ui/modules/trending/fragment/TrendingFragment.kt
index f30709f3..908fa28c 100644
--- a/app/src/main/java/com/fastaccess/ui/modules/trending/fragment/TrendingFragment.kt
+++ b/app/src/main/java/com/fastaccess/ui/modules/trending/fragment/TrendingFragment.kt
@@ -25,13 +25,12 @@ class TrendingFragment : BaseFragment counts = new HashSet<>();
public static void startActivity(@NonNull Context context, @NonNull String login) {
startActivity(context, login, false);
@@ -130,6 +138,11 @@ public class UserPagerActivity extends BaseActivity= barHeight) {
+ setTranslationX(mHiddenTranslationX);
+ mHideOverride = true;
+ return;
+ }
+
+ mHideOverride = false;
+
+ float y = ratio * (barHeight - calculatedHandleHeight);
+
+ mHandle.layout(mHandle.getLeft(), (int) y, mHandle.getRight(), (int) y + calculatedHandleHeight);
+ }
+
private void updateHandleColorsAndInset() {
StateListDrawable drawable = new StateListDrawable();
@@ -202,8 +234,7 @@ public class RecyclerFastScroller extends FrameLayout {
public void attachRecyclerView(RecyclerView recyclerView) {
mRecyclerView = recyclerView;
mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
- @Override
- public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
+ @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
RecyclerFastScroller.this.show();
}
@@ -217,9 +248,6 @@ public class RecyclerFastScroller extends FrameLayout {
}
}
- /**
- * Show the fast scroller and hide after delay
- */
public void show() {
requestLayout();
@@ -262,48 +290,22 @@ public class RecyclerFastScroller extends FrameLayout {
}
}
- @Override
- protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
- super.onLayout(changed, left, top, right, bottom);
- if (mRecyclerView == null) return;
-
- int scrollOffset = mRecyclerView.computeVerticalScrollOffset();
- int verticalScrollRange = mRecyclerView.computeVerticalScrollRange() + mRecyclerView.getPaddingBottom();
-
- int barHeight = mBar.getHeight();
- float ratio = (float) scrollOffset / (verticalScrollRange - barHeight);
-
- int calculatedHandleHeight = (int) ((float) barHeight / verticalScrollRange * barHeight);
- if (calculatedHandleHeight < mMinScrollHandleHeight) {
- calculatedHandleHeight = mMinScrollHandleHeight;
- }
-
- if (calculatedHandleHeight >= barHeight) {
- setTranslationX(mHiddenTranslationX);
- mHideOverride = true;
- return;
- }
-
- mHideOverride = false;
-
- float y = ratio * (barHeight - calculatedHandleHeight);
-
- mHandle.layout(mHandle.getLeft(), (int) y, mHandle.getRight(), (int) y + calculatedHandleHeight);
- }
-
- private static boolean isRTL(Context context) {
- return context.getResources().getConfiguration().getLayoutDirection() == View.LAYOUT_DIRECTION_RTL;
- }
-
- @ColorInt
- public static int resolveColor(Context context, @AttrRes int color) {
+ @ColorInt public static int resolveColor(Context context, @AttrRes int color) {
TypedArray a = context.obtainStyledAttributes(new int[]{color});
int resId = a.getColor(0, 0);
a.recycle();
return resId;
}
+ private static boolean isRTL(Context context) {
+ return context.getResources().getConfiguration().getLayoutDirection() == View.LAYOUT_DIRECTION_RTL;
+ }
+
public static int convertDpToPx(Context context, float dp) {
return (int) (dp * context.getResources().getDisplayMetrics().density + 0.5f);
}
+
+ public void setOnLoadMore(OnLoadMore onLoadMore) {
+ this.onLoadMore = onLoadMore;
+ }
}
\ No newline at end of file
diff --git a/app/src/main/res/layouts/row_layouts/layout/feeds_row_no_image_item.xml b/app/src/main/res/layouts/row_layouts/layout/feeds_row_no_image_item.xml
index 82eb04bb..3c0234d0 100644
--- a/app/src/main/res/layouts/row_layouts/layout/feeds_row_no_image_item.xml
+++ b/app/src/main/res/layouts/row_layouts/layout/feeds_row_no_image_item.xml
@@ -28,13 +28,27 @@
android:transitionName="@string/title_transition"
tools:text="When one acquires music and afterlife, one is able to capture heaven."/>
+
+
+
\ No newline at end of file
From 6e520e5f137b4811323517927e35a703b614c063 Mon Sep 17 00:00:00 2001
From: Kosh
Date: Sun, 4 Jun 2017 15:22:44 +0800
Subject: [PATCH 06/14] this commit fixes #542
---
app/build.gradle | 4 +-
app/proguard-rules.pro | 9 +-
.../data/dao/FragmentPagerAdapterModel.java | 2 +-
.../modules/about/FastHubAboutActivity.java | 169 +++++++++++-------
.../ui/modules/settings/SettingsActivity.java | 26 ++-
.../ui/modules/settings/SettingsMvp.java | 13 --
.../modules/settings/SettingsPresenter.java | 9 -
.../category/SettingsCategoryActivity.java | 7 +-
.../category/SettingsCategoryFragment.java | 58 ++----
.../GitHubContributionsView.java | 82 ++++-----
app/src/main/res/header-.svg | 1 -
.../layout-v26/login_form_layout.xml | 168 -----------------
app/src/main/res/values/strings.xml | 1 +
app/src/main/res/xml/fasthub_settings.xml | 37 +---
14 files changed, 189 insertions(+), 397 deletions(-)
delete mode 100644 app/src/main/java/com/fastaccess/ui/modules/settings/SettingsMvp.java
delete mode 100644 app/src/main/java/com/fastaccess/ui/modules/settings/SettingsPresenter.java
delete mode 100644 app/src/main/res/header-.svg
delete mode 100644 app/src/main/res/layouts/main_layouts/layout-v26/login_form_layout.xml
diff --git a/app/build.gradle b/app/build.gradle
index 43601ee7..c6ff87d0 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -49,7 +49,7 @@ android {
buildTypes {
release {
minifyEnabled true
- shrinkResources true
+ shrinkResources false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
@@ -105,8 +105,6 @@ repositories {
mavenCentral()
}
-
-
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile "com.android.support:appcompat-v7:${supportVersion}"
diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro
index eda99f73..ece94ad6 100644
--- a/app/proguard-rules.pro
+++ b/app/proguard-rules.pro
@@ -72,7 +72,8 @@
-keepclasseswithmembernames class * {
@icepick.* ;
}
--keep class com.fastaccess.data.dao.** { *; }
+-keep class com.fastaccess.data.** { *; }
+-keep class com.fastaccess.provider.rest.** { *; }
-keepclassmembers class com.prettifier.pretty.callback.MarkDownInterceptorInterface {
public *;
}
@@ -101,11 +102,13 @@
;
}
--keep class net.nightwhistler.** {*;}
--keep class org.htmlcleaner.** {*;}
+-keep class net.nightwhistler.** { *; }
+-keep class org.htmlcleaner.** { *; }
-dontwarn org.jaxen.**
-dontwarn org.jdom.**
-dontwarn com.google.android.gms.**
-dontwarn android.animation.**
-dontwarn java.io.**
-dontwarn android.content.**
+-keeppackagenames org.jsoup.nodes
+-keep class com.github.florent37.** { *; }
diff --git a/app/src/main/java/com/fastaccess/data/dao/FragmentPagerAdapterModel.java b/app/src/main/java/com/fastaccess/data/dao/FragmentPagerAdapterModel.java
index 27392c78..fd0d1e5c 100644
--- a/app/src/main/java/com/fastaccess/data/dao/FragmentPagerAdapterModel.java
+++ b/app/src/main/java/com/fastaccess/data/dao/FragmentPagerAdapterModel.java
@@ -74,7 +74,7 @@ import lombok.Setter;
@NonNull public static List buildForProfile(@NonNull Context context, @NonNull String login) {
return Stream.of(new FragmentPagerAdapterModel(context.getString(R.string.overview), ProfileOverviewFragment.newInstance(login)),
- new FragmentPagerAdapterModel(context.getString(R.string.feeds), ProfileEventsFragment.Companion.newInstance(login)),
+ new FragmentPagerAdapterModel(context.getString(R.string.feed), ProfileEventsFragment.Companion.newInstance(login)),
new FragmentPagerAdapterModel(context.getString(R.string.repos), ProfileReposFragment.newInstance(login)),
new FragmentPagerAdapterModel(context.getString(R.string.starred), ProfileStarredFragment.newInstance(login)),
new FragmentPagerAdapterModel(context.getString(R.string.gists), ProfileGistsFragment.newInstance(login)),
diff --git a/app/src/main/java/com/fastaccess/ui/modules/about/FastHubAboutActivity.java b/app/src/main/java/com/fastaccess/ui/modules/about/FastHubAboutActivity.java
index 6b797d1a..cb7efcff 100644
--- a/app/src/main/java/com/fastaccess/ui/modules/about/FastHubAboutActivity.java
+++ b/app/src/main/java/com/fastaccess/ui/modules/about/FastHubAboutActivity.java
@@ -2,7 +2,6 @@ package com.fastaccess.ui.modules.about;
import android.content.Context;
import android.content.Intent;
-import android.content.pm.PackageManager;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.content.ContextCompat;
@@ -15,11 +14,14 @@ import com.danielstone.materialaboutlibrary.MaterialAboutActivity;
import com.danielstone.materialaboutlibrary.items.MaterialAboutActionItem;
import com.danielstone.materialaboutlibrary.model.MaterialAboutCard;
import com.danielstone.materialaboutlibrary.model.MaterialAboutList;
+import com.fastaccess.BuildConfig;
import com.fastaccess.R;
+import com.fastaccess.data.dao.model.Release;
import com.fastaccess.helper.ActivityHelper;
import com.fastaccess.helper.AppHelper;
import com.fastaccess.helper.BundleConstant;
import com.fastaccess.helper.PrefGetter;
+import com.fastaccess.ui.modules.changelog.ChangelogBottomSheetDialog;
import com.fastaccess.ui.modules.repos.RepoPagerActivity;
import com.fastaccess.ui.modules.repos.issues.create.CreateIssueActivity;
import com.fastaccess.ui.modules.user.UserPagerActivity;
@@ -27,13 +29,16 @@ import com.mikepenz.aboutlibraries.Libs;
import com.mikepenz.aboutlibraries.LibsBuilder;
import es.dmoral.toasty.Toasty;
+import io.reactivex.disposables.Disposable;
/**
* Created by danielstone on 12 Mar 2017, 1:57 AM
*/
public class FastHubAboutActivity extends MaterialAboutActivity {
- View malRecyclerview;
+ private View malRecyclerview;
+ private Disposable disposable;
+
@Override protected void onCreate(@Nullable Bundle savedInstanceState) {
int themeMode = PrefGetter.getThemeType(getApplicationContext());
@@ -48,70 +53,14 @@ public class FastHubAboutActivity extends MaterialAboutActivity {
@Override protected MaterialAboutList getMaterialAboutList(Context context) {
MaterialAboutCard.Builder appCardBuilder = new MaterialAboutCard.Builder();
- try {
- appCardBuilder.addItem(ConvenienceBuilder.createVersionActionItem(context, ContextCompat.getDrawable(context, R.drawable.ic_issues),
- getString(R.string.version), false));
- } catch (PackageManager.NameNotFoundException e) {
- e.printStackTrace();
- }
-
- appCardBuilder.addItem(ConvenienceBuilder.createRateActionItem(context, ContextCompat.getDrawable(context, R.drawable.ic_star_filled),
- getString(R.string.rate_app), null));
-
- appCardBuilder.addItem(new MaterialAboutActionItem.Builder()
- .text(R.string.report_issue)
- .subText(R.string.report_issue_here)
- .icon(ContextCompat.getDrawable(context, R.drawable.ic_bug))
- .setOnClickListener(b -> CreateIssueActivity.startForResult(this, CreateIssueActivity.startForResult(this), malRecyclerview))
- .build());
- appCardBuilder.addItem(new MaterialAboutActionItem.Builder()
- .text(R.string.open_source_libs)
- .icon(R.drawable.ic_github)
- .setOnClickListener(b -> new LibsBuilder()
- .withActivityStyle(AppHelper.isNightMode(getResources()) ? Libs.ActivityStyle.DARK : Libs.ActivityStyle.LIGHT)
- .withAutoDetect(true)
- .withAboutIconShown(true)
- .withAboutVersionShown(true)
- .start(this))
- .build());
-
+ buildApp(context, appCardBuilder);
+ MaterialAboutCard.Builder miscCardBuilder = new MaterialAboutCard.Builder();
+ buildMisc(context, miscCardBuilder);
MaterialAboutCard.Builder authorCardBuilder = new MaterialAboutCard.Builder();
- authorCardBuilder.title(R.string.author);
- authorCardBuilder.addItem(new MaterialAboutActionItem.Builder()
- .text("Kosh")
- .subText("k0shk0sh")
- .icon(ContextCompat.getDrawable(context, R.drawable.ic_profile))
- .setOnClickListener(b -> UserPagerActivity.startActivity(context, "k0shk0sh"))
- .build());
- authorCardBuilder.addItem(new MaterialAboutActionItem.Builder()
- .text(R.string.fork_github)
- .icon(ContextCompat.getDrawable(context, R.drawable.ic_github))
- .setOnClickListener(b -> startActivity(RepoPagerActivity.createIntent(this, "FastHub", "k0shk0sh")))
- .build());
-
- authorCardBuilder.addItem(ConvenienceBuilder.createEmailItem(context, ContextCompat.getDrawable(context, R.drawable.ic_email),
- getString(R.string.send_email), true, getString(R.string.email_address), getString(R.string.question_concerning_fasthub)));
-
+ buildAuthor(context, authorCardBuilder);
MaterialAboutCard.Builder logoAuthor = new MaterialAboutCard.Builder();
- logoAuthor.title(getString(R.string.logo_designer, "Kevin Aguilar"));
- logoAuthor.addItem(new MaterialAboutActionItem.Builder()
- .text(R.string.google_plus)
- .icon(ContextCompat.getDrawable(context, R.drawable.ic_profile))
- .setOnClickListener(b -> ActivityHelper.startCustomTab(this, "https://plus.google.com/+KevinAguilarC"))
- .build());
- logoAuthor.addItem(new MaterialAboutActionItem.Builder()
- .text(R.string.twitter)
- .icon(ContextCompat.getDrawable(context, R.drawable.ic_profile))
- .setOnClickListener(b -> ActivityHelper.startCustomTab(this, "https://twitter.com/kevttob"))
- .build());
- logoAuthor.addItem(new MaterialAboutActionItem.Builder()
- .text(R.string.website)
- .icon(ContextCompat.getDrawable(context, R.drawable.ic_brower))
- .setOnClickListener(b -> ActivityHelper.startCustomTab(this, "https://www.221pixels.com/"))
- .build());
-
-
- return new MaterialAboutList(appCardBuilder.build(), authorCardBuilder.build(), logoAuthor.build());
+ buildLogo(context, logoAuthor);
+ return new MaterialAboutList(appCardBuilder.build(), miscCardBuilder.build(), authorCardBuilder.build(), logoAuthor.build());
}
@Override protected CharSequence getActivityTitle() {
@@ -131,4 +80,96 @@ public class FastHubAboutActivity extends MaterialAboutActivity {
}
return false;//override
}
+
+ @Override protected void onDestroy() {
+ if (disposable != null && !disposable.isDisposed()) {
+ disposable.dispose();
+ }
+ super.onDestroy();
+ }
+
+ private void buildLogo(Context context, MaterialAboutCard.Builder logoAuthor) {
+ logoAuthor.title(getString(R.string.logo_designer, "Kevin Aguilar"));
+ logoAuthor.addItem(new MaterialAboutActionItem.Builder()
+ .text(R.string.google_plus)
+ .icon(ContextCompat.getDrawable(context, R.drawable.ic_profile))
+ .setOnClickListener(b -> ActivityHelper.startCustomTab(this, "https://plus.google.com/+KevinAguilarC"))
+ .build())
+ .addItem(new MaterialAboutActionItem.Builder()
+ .text(R.string.twitter)
+ .icon(ContextCompat.getDrawable(context, R.drawable.ic_profile))
+ .setOnClickListener(b -> ActivityHelper.startCustomTab(this, "https://twitter.com/kevttob"))
+ .build())
+ .addItem(new MaterialAboutActionItem.Builder()
+ .text(R.string.website)
+ .icon(ContextCompat.getDrawable(context, R.drawable.ic_brower))
+ .setOnClickListener(b -> ActivityHelper.startCustomTab(this, "https://www.221pixels.com/"))
+ .build());
+ }
+
+ private void buildAuthor(Context context, MaterialAboutCard.Builder authorCardBuilder) {
+ authorCardBuilder.title(R.string.author);
+ authorCardBuilder.addItem(new MaterialAboutActionItem.Builder()
+ .text("Kosh Sergani")
+ .subText("k0shk0sh")
+ .icon(ContextCompat.getDrawable(context, R.drawable.ic_profile))
+ .setOnClickListener(b -> UserPagerActivity.startActivity(context, "k0shk0sh"))
+ .build())
+ .addItem(new MaterialAboutActionItem.Builder()
+ .text(R.string.fork_github)
+ .icon(ContextCompat.getDrawable(context, R.drawable.ic_github))
+ .setOnClickListener(b -> startActivity(RepoPagerActivity.createIntent(this, "FastHub", "k0shk0sh")))
+ .build())
+ .addItem(ConvenienceBuilder.createEmailItem(context, ContextCompat.getDrawable(context, R.drawable.ic_email),
+ getString(R.string.send_email), true, getString(R.string.email_address), getString(R.string.question_concerning_fasthub)));
+ }
+
+ private void buildMisc(Context context, MaterialAboutCard.Builder miscCardBuilder) {
+ miscCardBuilder.title(R.string.about)
+ .addItem(new MaterialAboutActionItem.Builder()
+ .text(R.string.changelog)
+ .icon(ContextCompat.getDrawable(context, R.drawable.ic_track_changes))
+ .setOnClickListener(b -> new ChangelogBottomSheetDialog().show(getSupportFragmentManager(), "ChangelogBottomSheetDialog"))
+ .build())
+ .addItem(new MaterialAboutActionItem.Builder()
+ .text(R.string.join_slack)
+ .icon(ContextCompat.getDrawable(context, R.drawable.ic_slack))
+ .setOnClickListener(b -> ActivityHelper.startCustomTab(this, "http://rebrand.ly/fasthub"))
+ .build())
+ .addItem(new MaterialAboutActionItem.Builder()
+ .text(R.string.open_source_libs)
+ .icon(ContextCompat.getDrawable(context, R.drawable.ic_github))
+ .setOnClickListener(b -> new LibsBuilder()
+ .withActivityStyle(AppHelper.isNightMode(getResources()) ? Libs.ActivityStyle.DARK : Libs.ActivityStyle.LIGHT)
+ .withAutoDetect(true)
+ .withAboutIconShown(true)
+ .withAboutVersionShown(true)
+ .start(this))
+ .build());
+ }
+
+ private void buildApp(Context context, MaterialAboutCard.Builder appCardBuilder) {
+ appCardBuilder.addItem(new MaterialAboutActionItem.Builder()
+ .text(getString(R.string.version))
+ .icon(ContextCompat.getDrawable(context, R.drawable.ic_update))
+ .subText(BuildConfig.VERSION_NAME)
+ .setOnClickListener(b -> disposable = Release.get("FastHub", "k0shk0sh")
+ .subscribe(releases -> {
+ if (releases != null && !releases.isEmpty()) {
+ if (releases.get(0).getTagName().contains(BuildConfig.VERSION_NAME))
+ Toasty.success(context, getString(R.string.up_to_date)).show();
+ else
+ Toasty.warning(context, getString(R.string.new_version)).show();
+ }
+ }))
+ .build())
+ .addItem(ConvenienceBuilder.createRateActionItem(context, ContextCompat.getDrawable(context, R.drawable.ic_star_filled),
+ getString(R.string.rate_app), null))
+ .addItem(new MaterialAboutActionItem.Builder()
+ .text(R.string.report_issue)
+ .subText(R.string.report_issue_here)
+ .icon(ContextCompat.getDrawable(context, R.drawable.ic_bug))
+ .setOnClickListener(b -> CreateIssueActivity.startForResult(this, CreateIssueActivity.startForResult(this), malRecyclerview))
+ .build());
+ }
}
diff --git a/app/src/main/java/com/fastaccess/ui/modules/settings/SettingsActivity.java b/app/src/main/java/com/fastaccess/ui/modules/settings/SettingsActivity.java
index abf0ac87..63d58b1b 100644
--- a/app/src/main/java/com/fastaccess/ui/modules/settings/SettingsActivity.java
+++ b/app/src/main/java/com/fastaccess/ui/modules/settings/SettingsActivity.java
@@ -11,6 +11,7 @@ import com.fastaccess.data.dao.SettingsModel;
import com.fastaccess.helper.ActivityHelper;
import com.fastaccess.ui.adapter.SettingsAdapter;
import com.fastaccess.ui.base.BaseActivity;
+import com.fastaccess.ui.base.mvp.presenter.BasePresenter;
import com.fastaccess.ui.modules.settings.category.SettingsCategoryActivity;
import net.grandcentrix.thirtyinch.TiPresenter;
@@ -33,7 +34,7 @@ public class SettingsActivity extends BaseActivity {
case 1:
ActivityHelper.startReveal(this, intent, settingsList, THEME_CHANGE);
break;
- case 5:
+ case 4:
showLanguageList();
break;
default:
@@ -67,29 +68,24 @@ public class SettingsActivity extends BaseActivity {
SettingsModel.newInstance(R.drawable.ic_ring, getString(R.string.notifications), ""),
SettingsModel.newInstance(R.drawable.ic_settings, getString(R.string.behavior), ""),
SettingsModel.newInstance(R.drawable.ic_brush, getString(R.string.customization), ""),
- SettingsModel.newInstance(R.drawable.ic_info, getString(R.string.about), ""),
SettingsModel.newInstance(R.drawable.ic_backup, getString(R.string.backup), ""),
SettingsModel.newInstance(R.drawable.ic_language, getString(R.string.app_language), "")
};
-
settingsList.setAdapter(new SettingsAdapter(this, settings));
}
+ @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+ if (requestCode == THEME_CHANGE)
+ setResult(resultCode);
+ }
+
+ @NonNull @Override public TiPresenter providePresenter() {
+ return new BasePresenter();
+ }
+
private void showLanguageList() {
LanguageBottomSheetDialog languageBottomSheetDialog = new LanguageBottomSheetDialog();
languageBottomSheetDialog.onAttach((Context) this);
languageBottomSheetDialog.show(getSupportFragmentManager(), "LanguageBottomSheetDialog");
}
-
- @Override
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- if (requestCode == THEME_CHANGE)
- setResult(resultCode);
- }
-
- @NonNull
- @Override
- public TiPresenter providePresenter() {
- return new SettingsPresenter();
- }
}
diff --git a/app/src/main/java/com/fastaccess/ui/modules/settings/SettingsMvp.java b/app/src/main/java/com/fastaccess/ui/modules/settings/SettingsMvp.java
deleted file mode 100644
index 13d026d2..00000000
--- a/app/src/main/java/com/fastaccess/ui/modules/settings/SettingsMvp.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.fastaccess.ui.modules.settings;
-
-import com.fastaccess.ui.base.mvp.BaseMvp;
-
-/**
- * Created by JediB on 5/12/2017.
- */
-
-public interface SettingsMvp {
- interface Presenter extends BaseMvp.FAPresenter {
-
- }
-}
diff --git a/app/src/main/java/com/fastaccess/ui/modules/settings/SettingsPresenter.java b/app/src/main/java/com/fastaccess/ui/modules/settings/SettingsPresenter.java
deleted file mode 100644
index ef93cb28..00000000
--- a/app/src/main/java/com/fastaccess/ui/modules/settings/SettingsPresenter.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package com.fastaccess.ui.modules.settings;
-
-import com.fastaccess.ui.base.mvp.presenter.BasePresenter;
-
-/**
- * Created by JediB on 5/12/2017.
- */
-
-class SettingsPresenter extends BasePresenter implements SettingsMvp.Presenter {}
diff --git a/app/src/main/java/com/fastaccess/ui/modules/settings/category/SettingsCategoryActivity.java b/app/src/main/java/com/fastaccess/ui/modules/settings/category/SettingsCategoryActivity.java
index 55e14ad5..62974160 100644
--- a/app/src/main/java/com/fastaccess/ui/modules/settings/category/SettingsCategoryActivity.java
+++ b/app/src/main/java/com/fastaccess/ui/modules/settings/category/SettingsCategoryActivity.java
@@ -3,13 +3,12 @@ package com.fastaccess.ui.modules.settings.category;
import android.os.Bundle;
import android.support.annotation.NonNull;
+import com.evernote.android.state.State;
import com.fastaccess.R;
import com.fastaccess.ui.base.BaseActivity;
import net.grandcentrix.thirtyinch.TiPresenter;
-import com.evernote.android.state.State;
-
public class SettingsCategoryActivity extends BaseActivity {
@State String title;
@@ -35,7 +34,9 @@ public class SettingsCategoryActivity extends BaseActivity {
setResult(RESULT_CANCELED);
if (savedInstanceState == null) {
title = getIntent() != null ? getIntent().getStringExtra("title") : getString(R.string.settings);
- SettingsCategoryFragment settingsCategoryFragment = new SettingsCategoryFragment();
+
+ SettingsCategoryFragment settingsCategoryFragment = SettingsCategoryFragment.
+ newInstance(getIntent().getIntExtra("settings", 0));
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.settingsContainer, settingsCategoryFragment)
diff --git a/app/src/main/java/com/fastaccess/ui/modules/settings/category/SettingsCategoryFragment.java b/app/src/main/java/com/fastaccess/ui/modules/settings/category/SettingsCategoryFragment.java
index 8f5e4bfb..c66bf6d9 100644
--- a/app/src/main/java/com/fastaccess/ui/modules/settings/category/SettingsCategoryFragment.java
+++ b/app/src/main/java/com/fastaccess/ui/modules/settings/category/SettingsCategoryFragment.java
@@ -14,17 +14,14 @@ import android.util.Log;
import android.widget.FrameLayout;
import android.widget.Toast;
-import com.fastaccess.BuildConfig;
import com.fastaccess.R;
-import com.fastaccess.data.dao.model.Release;
-import com.fastaccess.helper.ActivityHelper;
+import com.fastaccess.helper.BundleConstant;
+import com.fastaccess.helper.Bundler;
import com.fastaccess.helper.InputHelper;
import com.fastaccess.helper.PrefGetter;
import com.fastaccess.helper.PrefHelper;
import com.fastaccess.provider.tasks.notification.NotificationSchedulerJobTask;
import com.fastaccess.ui.base.mvp.BaseMvp;
-import com.fastaccess.ui.modules.changelog.ChangelogBottomSheetDialog;
-import com.fastaccess.ui.widgets.SpannableBuilder;
import com.google.gson.Gson;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
@@ -44,7 +41,6 @@ import java.util.Set;
import butterknife.BindView;
import es.dmoral.toasty.Toasty;
-import io.reactivex.disposables.Disposable;
import static android.app.Activity.RESULT_OK;
@@ -64,7 +60,14 @@ public class SettingsCategoryFragment extends PreferenceFragmentCompat implement
private Preference notificationTime;
private Preference notificationRead;
private Preference notificationSound;
- private Disposable disposable;
+
+ @NonNull public static SettingsCategoryFragment newInstance(int settings) {
+ SettingsCategoryFragment fragment = new SettingsCategoryFragment();
+ fragment.setArguments(Bundler.start()
+ .put(BundleConstant.EXTRA, settings)
+ .end());
+ return fragment;
+ }
@Override public void onAttach(Context context) {
super.onAttach(context);
@@ -75,7 +78,7 @@ public class SettingsCategoryFragment extends PreferenceFragmentCompat implement
}
@Override public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
- int settings = getActivity().getIntent().getExtras().getInt("settings", 0);
+ int settings = getArguments().getInt("settings", 0);
switch (settings) {
case 0:
addPreferencesFromResource(R.xml.notification_settings);
@@ -106,37 +109,8 @@ public class SettingsCategoryFragment extends PreferenceFragmentCompat implement
findPreference("appColor").setOnPreferenceChangeListener(this);
break;
case 3:
- addPreferencesFromResource(R.xml.about_settings);
- findPreference("showChangelog").setOnPreferenceClickListener(preference -> {
- new ChangelogBottomSheetDialog().show(getChildFragmentManager(), "ChangelogBottomSheetDialog");
- return true;
- });
- findPreference("joinSlack").setOnPreferenceClickListener(preference -> {
- ActivityHelper.startCustomTab(getActivity(), "http://rebrand.ly/fasthub");
- return true;
- });
- findPreference("currentVersion").setSummary(SpannableBuilder.builder()
- .append(getString(R.string.current_version))
- .append("(")
- .bold(BuildConfig.VERSION_NAME)
- .append(")"));
- findPreference("currentVersion").setOnPreferenceClickListener(preference -> {
- disposable = Release.get("FastHub", "k0shk0sh").subscribe(releases -> {
- if (releases != null) {
- if (releases.get(0).getTagName().equals(BuildConfig.VERSION_NAME))
- Toasty.success(getContext(), getString(R.string.up_to_date)).show();
- else
- Toasty.warning(getContext(), getString(R.string.new_version)).show();
- }
- });
- return true;
- });
- break;
- case 4:
addPreferencesFromResource(R.xml.backup_settings);
findPreference("backup").setOnPreferenceClickListener((Preference preference) -> {
-
-
if (ContextCompat.checkSelfPermission(getActivity(),
Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
Map settings_ = PrefHelper.getAll();
@@ -162,7 +136,7 @@ public class SettingsCategoryFragment extends PreferenceFragmentCompat implement
Log.e(getTag(), "Couldn't backup: " + e.toString());
}
- PrefHelper.set("backed_up", new SimpleDateFormat("MM/dd").format(new Date()));
+ PrefHelper.set("backed_up", new SimpleDateFormat("MM/dd", Locale.ENGLISH).format(new Date()));
} else {
requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, PERMISSION_REQUEST_CODE);
}
@@ -244,7 +218,6 @@ public class SettingsCategoryFragment extends PreferenceFragmentCompat implement
@Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
-
if (requestCode == PERMISSION_REQUEST_CODE) {
if (permissions[0].equals(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
@@ -323,13 +296,6 @@ public class SettingsCategoryFragment extends PreferenceFragmentCompat implement
}
}
- @Override public void onDestroyView() {
- super.onDestroyView();
- if (disposable != null && !disposable.isDisposed()) {
- disposable.dispose();
- }
- }
-
private void showFileChooser() {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("application/json");
diff --git a/app/src/main/java/com/fastaccess/ui/widgets/contributions/GitHubContributionsView.java b/app/src/main/java/com/fastaccess/ui/widgets/contributions/GitHubContributionsView.java
index 6f2fc75c..9b4ac98e 100644
--- a/app/src/main/java/com/fastaccess/ui/widgets/contributions/GitHubContributionsView.java
+++ b/app/src/main/java/com/fastaccess/ui/widgets/contributions/GitHubContributionsView.java
@@ -302,52 +302,54 @@ public class GitHubContributionsView extends View {
}
}
+ Bitmap bitmap = null;
+
private Bitmap drawOnCanvas(Canvas canvas) {
- canvas.getClipBounds(rect);
- int width = rect.width();
- int verticalBlockNumber = 7;
- int horizontalBlockNumber = getHorizontalBlockNumber(contributionsFilter.size(), verticalBlockNumber);
- float marginBlock = (1.0F - 0.1F);
- float blockWidth = width / (float) horizontalBlockNumber * marginBlock;
- float spaceWidth = width / (float) horizontalBlockNumber - blockWidth;
- float topMargin = (displayMonth) ? 7f : 0;
- float monthTextHeight = (displayMonth) ? blockWidth * 1.5F : 0;
- int height = (int) ((blockWidth + spaceWidth) * 7 + topMargin + monthTextHeight);
- Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
- Canvas canvas1 = new Canvas(bitmap);
- // Background
- blockPaint.setColor(backgroundBaseColor);
- canvas1.drawRect(0, (topMargin + monthTextHeight), width, height + monthTextHeight, blockPaint);
- monthTextPaint.setColor(textColor);
- monthTextPaint.setTextSize(monthTextHeight);
- // draw the blocks
- int currentWeekDay = DatesUtils.getWeekDayFromDate(
- contributions.get(0).year,
- contributions.get(0).month,
- contributions.get(0).day);
- float x = 0;
- float y = (currentWeekDay - 7) % 7 * (blockWidth + spaceWidth) + (topMargin + monthTextHeight);
- for (ContributionsDay day : contributionsFilter) {
- blockPaint.setColor(ColorsUtils.calculateLevelColor(baseColor, baseEmptyColor, day.level));
- canvas1.drawRect(x, y, x + blockWidth, y + blockWidth, blockPaint);
+ if (bitmap == null) {
+ canvas.getClipBounds(rect);
+ int width = rect.width();
+ int verticalBlockNumber = 7;
+ int horizontalBlockNumber = getHorizontalBlockNumber(contributionsFilter.size(), verticalBlockNumber);
+ float marginBlock = (1.0F - 0.1F);
+ float blockWidth = width / (float) horizontalBlockNumber * marginBlock;
+ float spaceWidth = width / (float) horizontalBlockNumber - blockWidth;
+ float topMargin = (displayMonth) ? 7f : 0;
+ float monthTextHeight = (displayMonth) ? blockWidth * 1.5F : 0;
+ int height = (int) ((blockWidth + spaceWidth) * 7 + topMargin + monthTextHeight);
+ bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
+ Canvas canvas1 = new Canvas(bitmap);
+ // Background
+ blockPaint.setColor(backgroundBaseColor);
+ canvas1.drawRect(0, (topMargin + monthTextHeight), width, height + monthTextHeight, blockPaint);
+ monthTextPaint.setColor(textColor);
+ monthTextPaint.setTextSize(monthTextHeight);
+ // draw the blocks
+ int currentWeekDay = DatesUtils.getWeekDayFromDate(
+ contributions.get(0).year,
+ contributions.get(0).month,
+ contributions.get(0).day);
+ float x = 0;
+ float y = (currentWeekDay - 7) % 7 * (blockWidth + spaceWidth) + (topMargin + monthTextHeight);
+ for (ContributionsDay day : contributionsFilter) {
+ blockPaint.setColor(ColorsUtils.calculateLevelColor(baseColor, baseEmptyColor, day.level));
+ canvas1.drawRect(x, y, x + blockWidth, y + blockWidth, blockPaint);
+ if (DatesUtils.isFirstDayOfWeek(day.year, day.month, day.day + 1)) {
+ // another column
+ x += blockWidth + spaceWidth;
+ y = topMargin + monthTextHeight;
- if (DatesUtils.isFirstDayOfWeek(day.year, day.month, day.day + 1)) {
- // another column
- x += blockWidth + spaceWidth;
- y = topMargin + monthTextHeight;
+ if (DatesUtils.isFirstWeekOfMount(day.year, day.month, day.day + 1)) {
+ canvas1.drawText(
+ DatesUtils.getShortMonthName(day.year, day.month, day.day + 1),
+ x, monthTextHeight, monthTextPaint);
+ }
- if (DatesUtils.isFirstWeekOfMount(day.year, day.month, day.day + 1)) {
- canvas1.drawText(
- DatesUtils.getShortMonthName(day.year, day.month, day.day + 1),
- x, monthTextHeight, monthTextPaint);
+ } else {
+ y += blockWidth + spaceWidth;
}
-
- } else {
- y += blockWidth + spaceWidth;
}
+ adjustHeight(height);
}
-
- adjustHeight(height);
return bitmap;
}
diff --git a/app/src/main/res/header-.svg b/app/src/main/res/header-.svg
deleted file mode 100644
index 6c36b533..00000000
--- a/app/src/main/res/header-.svg
+++ /dev/null
@@ -1 +0,0 @@
-header-
\ No newline at end of file
diff --git a/app/src/main/res/layouts/main_layouts/layout-v26/login_form_layout.xml b/app/src/main/res/layouts/main_layouts/layout-v26/login_form_layout.xml
deleted file mode 100644
index bb724de0..00000000
--- a/app/src/main/res/layouts/main_layouts/layout-v26/login_form_layout.xml
+++ /dev/null
@@ -1,168 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 631892e6..ecc0cada 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -478,4 +478,5 @@
Assignee added successfully
Reviewer added successfully
Milestone added successfully
+ Feed
diff --git a/app/src/main/res/xml/fasthub_settings.xml b/app/src/main/res/xml/fasthub_settings.xml
index f88d3b88..6a86d3fe 100644
--- a/app/src/main/res/xml/fasthub_settings.xml
+++ b/app/src/main/res/xml/fasthub_settings.xml
@@ -1,7 +1,7 @@
+ >
@@ -10,22 +10,22 @@
android:dialogTitle="@string/every"
android:entries="@array/notification_duration"
android:entryValues="@array/notification_duration"
- android:key="notificationTime"
android:icon="@drawable/ic_time"
+ android:key="notificationTime"
android:summary="@string/background_job_summary"
android:title="@string/background_job_title"/>
@@ -43,8 +43,8 @@
android:dialogTitle="@string/theme_title"
android:entries="@array/theme_modes"
android:entryValues="@array/theme_modes"
- android:key="appTheme"
android:icon="@drawable/ic_brush"
+ android:key="appTheme"
android:summary="@string/theme_summary"
android:title="@string/theme_title"/>
@@ -53,8 +53,8 @@
android:dialogTitle="@string/theme_color_title"
android:entries="@array/theme_colors"
android:entryValues="@array/theme_colors"
- android:key="appColor"
android:icon="@drawable/ic_blank"
+ android:key="appColor"
android:summary="@string/theme_color_summary"
android:title="@string/theme_color_title"/>
@@ -107,29 +107,4 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
From b27e6abbd583ac0742b73398ff286a37f3644fc0 Mon Sep 17 00:00:00 2001
From: Kosh
Date: Sun, 4 Jun 2017 16:44:50 +0800
Subject: [PATCH 07/14] this commit fixes #598
---
.../ui/modules/feeds/FeedsFragment.java | 44 +--------------
.../ui/modules/trending/TrendingActivity.kt | 9 ++--
.../ui/modules/trending/TrendingMvp.kt | 3 +-
.../pretty/helper/PrettifyHelper.java | 53 ++++++++++---------
4 files changed, 36 insertions(+), 73 deletions(-)
diff --git a/app/src/main/java/com/fastaccess/ui/modules/feeds/FeedsFragment.java b/app/src/main/java/com/fastaccess/ui/modules/feeds/FeedsFragment.java
index f494fbb3..cebf29c4 100644
--- a/app/src/main/java/com/fastaccess/ui/modules/feeds/FeedsFragment.java
+++ b/app/src/main/java/com/fastaccess/ui/modules/feeds/FeedsFragment.java
@@ -11,7 +11,6 @@ import android.view.View;
import com.fastaccess.R;
import com.fastaccess.data.dao.SimpleUrlsModel;
import com.fastaccess.data.dao.model.Event;
-import com.fastaccess.helper.ActivityHelper;
import com.fastaccess.helper.PrefGetter;
import com.fastaccess.provider.rest.loadmore.OnLoadMore;
import com.fastaccess.provider.scheme.SchemeParser;
@@ -82,8 +81,7 @@ public class FeedsFragment extends BaseFragment i
}
@Override public void showProgress(@StringRes int resId) {
-
-refresh.setRefreshing(true);
+ refresh.setRefreshing(true);
stateLayout.showProgress();
}
@@ -133,45 +131,7 @@ refresh.setRefreshing(true);
}
@Override public void onShowGuide(@NonNull View itemView, @NonNull Event model) {
- if (!PrefGetter.isUserIconGuideShowed()) {
- final boolean[] dismissed = {false};
- /*new MaterialTapTargetPrompt.Builder(getActivity())
- .setTarget(itemView.findViewById(R.id.avatarLayout))
- .setPrimaryText(R.string.users)
- .setSecondaryText(R.string.avatar_click_hint)
- .setBackgroundColourAlpha(244)
- .setBackgroundColour(ViewHelper.getAccentColor(getContext()))
- .setOnHidePromptListener(new MaterialTapTargetPrompt.OnHidePromptListener() {
- @Override public void onHidePrompt(MotionEvent event, boolean tappedTarget) {}
-
- @Override public void onHidePromptComplete() {
- if (!dismissed[0])
- new MaterialTapTargetPrompt.Builder(getActivity())
- .setTarget(itemView)
- .setPrimaryText(R.string.fork)
- .setSecondaryText(R.string.feeds_fork_hint)
- .setCaptureTouchEventOutsidePrompt(true)
- .setBackgroundColourAlpha(244)
- .setBackgroundColour(ViewHelper.getAccentColor(getContext()))
- .setOnHidePromptListener(new MaterialTapTargetPrompt.OnHidePromptListener() {
- @Override
- public void onHidePrompt(MotionEvent motionEvent, boolean b) {
- ActivityHelper.hideDismissHints(FeedsFragment.this.getContext());
- }
-
- @Override
- public void onHidePromptComplete() {
-
- }
- })
- .show();
- ActivityHelper.bringDismissAllToFront(getContext());
- }
- })
- .setCaptureTouchEventOutsidePrompt(true)
- .show();*/
- ActivityHelper.showDismissHints(getContext(), () -> dismissed[0] = true);
- }
+ if (!PrefGetter.isUserIconGuideShowed()) {}
}
private void showReload() {
diff --git a/app/src/main/java/com/fastaccess/ui/modules/trending/TrendingActivity.kt b/app/src/main/java/com/fastaccess/ui/modules/trending/TrendingActivity.kt
index 266500f4..e7e16369 100644
--- a/app/src/main/java/com/fastaccess/ui/modules/trending/TrendingActivity.kt
+++ b/app/src/main/java/com/fastaccess/ui/modules/trending/TrendingActivity.kt
@@ -93,7 +93,10 @@ class TrendingActivity : BaseActivity(), Tr
daily.setOnClickListener { onDailyClicked() }
weekly.setOnClickListener { onWeeklyClicked() }
monthly.setOnClickListener { onMonthlyClicked() }
- navMenu.setNavigationItemSelectedListener(this)
+ navMenu.setNavigationItemSelectedListener({ item ->
+ closeDrawerLayout()
+ onItemClicked(item)
+ })
setupIntent(savedInstanceState)
presenter.onLoadLanguage()
onSelectTrending()
@@ -131,10 +134,6 @@ class TrendingActivity : BaseActivity(), Tr
return true
}
- override fun onNavigationItemSelected(item: MenuItem): Boolean {
- closeDrawerLayout()
- return onItemClicked(item)
- }
private fun closeDrawerLayout() {
drawerLayout.closeDrawer(Gravity.END)
diff --git a/app/src/main/java/com/fastaccess/ui/modules/trending/TrendingMvp.kt b/app/src/main/java/com/fastaccess/ui/modules/trending/TrendingMvp.kt
index 44cccfcd..57614628 100644
--- a/app/src/main/java/com/fastaccess/ui/modules/trending/TrendingMvp.kt
+++ b/app/src/main/java/com/fastaccess/ui/modules/trending/TrendingMvp.kt
@@ -1,6 +1,5 @@
package com.fastaccess.ui.modules.trending
-import android.support.design.widget.NavigationView
import com.fastaccess.ui.base.mvp.BaseMvp
/**
@@ -8,7 +7,7 @@ import com.fastaccess.ui.base.mvp.BaseMvp
*/
interface TrendingMvp {
- interface View : BaseMvp.FAView, NavigationView.OnNavigationItemSelectedListener {
+ interface View : BaseMvp.FAView{
fun onAppend(title: String)
}
diff --git a/app/src/main/java/com/prettifier/pretty/helper/PrettifyHelper.java b/app/src/main/java/com/prettifier/pretty/helper/PrettifyHelper.java
index d61fdb97..ea303608 100755
--- a/app/src/main/java/com/prettifier/pretty/helper/PrettifyHelper.java
+++ b/app/src/main/java/com/prettifier/pretty/helper/PrettifyHelper.java
@@ -8,29 +8,30 @@ import android.support.annotation.NonNull;
public class PrettifyHelper {
- @NonNull private final static String HTML_CONTENT =
- "\n" +
- "\n" +
- "\n" +
- " \n" +
- " \n" +
- " %s\n" +
- "\n" +
- "\n" +
- "%s \n" +
- "\n" +
- "" +
- "\n" +
- "";
+ @NonNull private static String getHtmlContent(@NonNull String css, @NonNull String text, @NonNull String wrapStyle) {
+ return "\n" +
+ "\n" +
+ "\n" +
+ " \n" +
+ " \n" +
+ " " + wrapStyle + "\n" +
+ "\n" +
+ "\n" +
+ "" + text + " \n" +
+ "\n" +
+ "" +
+ "\n" +
+ "";
+ }
@NonNull private static final String WRAPPED_STYLE =
"
+
+
+ FastHub changelog
+
+ Version 3.0.0 (Trending Finally!)
+
+
+
+ P.S: I’m not asking for to much, if you are facing a problem in FastHub please report it at the issue tracker in GitHub either
+ via FastHub app or from GitHub website, your reviews are what keeps me motivated to further improve FastHub.
+
+ Keep in mind that FastHub is free & open source.
+
+
+
+ Bugs , Enhancements & new Features
+
+
+ (New) Explore trending with all the languages out there.
+ (New) Filter Repos (Thanks to @aadithyabk)
+ (New) See specific user feed.
+ (New) Display amount of starred repos.
+ (New) Copy Repo URL to clipboard
+ (New) Added participated issue sorting to personal issue list
+ (New) Showing multiple build statues.
+ (New) Lithuanian language (Thanks to @mistermantas)
+ (New) no new line at end of file now shows a picture
+ (Enhancement/Fix) Sort issues by reaction
+ (Fix) Issues/PRs editing, was semi-broken in preview release
+ (Fix) Showing missing repo (broken in previous version)
+ (Fix) Support development now works,
+ please use it.
+
+ (Fix) Issue count not updating.
+ (Fix) Emoji’s were joining :crossed_swords:
+ (Fix) Back button when opening FastHub from an external link
+ (Fix) Issue comment were only showing up to 100 comments
+ (Fix) Dropdown menus not closing
+ (Fix) Some tablets had text wrapping issues
+ (Fix) Pictures not loading in PR’s/commits
+ (Fix) Fixed crash when adding a react
+ (Fix) Some tooltips were incorrect
+ (Fix) Stargazers are now updated in pinned repo’s
+ (Fix) Gist links (edited)
+ There are more stuff are not mentioned, find them out :p
+ Lots of bug fixes
+
+
+ Thanks to everyone who contributed either via reporting bugs or via code contribution
+
+
+ Thank you very much
+
-
+