From 355dc7589a8e2b8adab4aa6b7c910c8c6ecd1ceb Mon Sep 17 00:00:00 2001 From: Jedi Burrell Date: Sat, 13 May 2017 21:50:53 -0400 Subject: [PATCH 01/11] On Tag Click Now Searches Without Additional Input. Previously, when you clicked a tag / topic, it would open the `SearchActivity` with the tag, but would require you to click "Search". Now it does it automatically. --- .../ui/modules/search/SearchActivity.java | 1 + .../ui/modules/search/SearchPresenter.java | 8 ++++---- .../ui/modules/search/code/SearchCodeFragment.java | 14 ++++++++++++++ .../ui/modules/search/code/SearchCodeMvp.java | 4 ++++ .../search/issues/SearchIssuesFragment.java | 7 +++++++ .../ui/modules/search/issues/SearchIssuesMvp.java | 2 ++ .../modules/search/repos/SearchReposFragment.java | 7 +++++++ .../ui/modules/search/repos/SearchReposMvp.java | 2 ++ .../modules/search/users/SearchUsersFragment.java | 7 +++++++ .../ui/modules/search/users/SearchUsersMvp.java | 2 ++ 10 files changed, 50 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/fastaccess/ui/modules/search/SearchActivity.java b/app/src/main/java/com/fastaccess/ui/modules/search/SearchActivity.java index fb782f1d..8908cbb0 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/search/SearchActivity.java +++ b/app/src/main/java/com/fastaccess/ui/modules/search/SearchActivity.java @@ -109,6 +109,7 @@ public class SearchActivity extends BaseActivity implements SearchMvp SearchUsersFragment users = (SearchUsersFragment) viewPager.getAdapter().instantiateItem(viewPager, 1); SearchIssuesFragment issues = (SearchIssuesFragment) viewPager.getAdapter().instantiateItem(viewPager, 2); SearchCodeFragment code = (SearchCodeFragment) viewPager.getAdapter().instantiateItem(viewPager, 3); - repos.onSetSearchQuery(query); - users.onSetSearchQuery(query); - issues.onSetSearchQuery(query); - code.onSetSearchQuery(query, true); + repos.onQueueSearch(query); + users.onQueueSearch(query); + issues.onQueueSearch(query); + code.onQueueSearch(query, true); boolean noneMatch = Stream.of(hints).noneMatch(value -> value.getText().equalsIgnoreCase(query)); if (noneMatch) { SearchHistory searchHistory = new SearchHistory(query); diff --git a/app/src/main/java/com/fastaccess/ui/modules/search/code/SearchCodeFragment.java b/app/src/main/java/com/fastaccess/ui/modules/search/code/SearchCodeFragment.java index 45ece9d5..e86ba414 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/search/code/SearchCodeFragment.java +++ b/app/src/main/java/com/fastaccess/ui/modules/search/code/SearchCodeFragment.java @@ -134,6 +134,20 @@ public class SearchCodeFragment extends BaseFragment getLoadMore() { if (onLoadMore == null) { onLoadMore = new OnLoadMore<>(getPresenter(), searchQuery); diff --git a/app/src/main/java/com/fastaccess/ui/modules/search/code/SearchCodeMvp.java b/app/src/main/java/com/fastaccess/ui/modules/search/code/SearchCodeMvp.java index 5a190432..e008303a 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/search/code/SearchCodeMvp.java +++ b/app/src/main/java/com/fastaccess/ui/modules/search/code/SearchCodeMvp.java @@ -25,6 +25,10 @@ interface SearchCodeMvp { void onSetSearchQuery(@NonNull String query, boolean showRepoName); + void onQueueSearch(@NonNull String query); + + void onQueueSearch(@NonNull String query, boolean showRepoName); + @NonNull OnLoadMore getLoadMore(); void onItemClicked(@NonNull SearchCodeModel item); diff --git a/app/src/main/java/com/fastaccess/ui/modules/search/issues/SearchIssuesFragment.java b/app/src/main/java/com/fastaccess/ui/modules/search/issues/SearchIssuesFragment.java index 61c8f5cc..11a4e86c 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/search/issues/SearchIssuesFragment.java +++ b/app/src/main/java/com/fastaccess/ui/modules/search/issues/SearchIssuesFragment.java @@ -130,6 +130,13 @@ public class SearchIssuesFragment extends BaseFragment getLoadMore() { if (onLoadMore == null) { onLoadMore = new OnLoadMore<>(getPresenter(), searchQuery); diff --git a/app/src/main/java/com/fastaccess/ui/modules/search/issues/SearchIssuesMvp.java b/app/src/main/java/com/fastaccess/ui/modules/search/issues/SearchIssuesMvp.java index 42448bc7..834c2595 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/search/issues/SearchIssuesMvp.java +++ b/app/src/main/java/com/fastaccess/ui/modules/search/issues/SearchIssuesMvp.java @@ -25,6 +25,8 @@ interface SearchIssuesMvp { void onSetSearchQuery(@NonNull String query); + void onQueueSearch(@NonNull String query); + @NonNull OnLoadMore getLoadMore(); } diff --git a/app/src/main/java/com/fastaccess/ui/modules/search/repos/SearchReposFragment.java b/app/src/main/java/com/fastaccess/ui/modules/search/repos/SearchReposFragment.java index 439f53fa..781872ad 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/search/repos/SearchReposFragment.java +++ b/app/src/main/java/com/fastaccess/ui/modules/search/repos/SearchReposFragment.java @@ -131,6 +131,13 @@ public class SearchReposFragment extends BaseFragment getLoadMore() { if (onLoadMore == null) { onLoadMore = new OnLoadMore<>(getPresenter(), searchQuery); diff --git a/app/src/main/java/com/fastaccess/ui/modules/search/repos/SearchReposMvp.java b/app/src/main/java/com/fastaccess/ui/modules/search/repos/SearchReposMvp.java index aad030d8..c0a9abd5 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/search/repos/SearchReposMvp.java +++ b/app/src/main/java/com/fastaccess/ui/modules/search/repos/SearchReposMvp.java @@ -25,6 +25,8 @@ interface SearchReposMvp { void onSetSearchQuery(@NonNull String query); + void onQueueSearch(@NonNull String query); + @NonNull OnLoadMore getLoadMore(); } diff --git a/app/src/main/java/com/fastaccess/ui/modules/search/users/SearchUsersFragment.java b/app/src/main/java/com/fastaccess/ui/modules/search/users/SearchUsersFragment.java index b908c91e..68a23a6e 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/search/users/SearchUsersFragment.java +++ b/app/src/main/java/com/fastaccess/ui/modules/search/users/SearchUsersFragment.java @@ -129,6 +129,13 @@ public class SearchUsersFragment extends BaseFragment getLoadMore() { if (onLoadMore == null) { onLoadMore = new OnLoadMore<>(getPresenter(), searchQuery); diff --git a/app/src/main/java/com/fastaccess/ui/modules/search/users/SearchUsersMvp.java b/app/src/main/java/com/fastaccess/ui/modules/search/users/SearchUsersMvp.java index 9852c639..9f266177 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/search/users/SearchUsersMvp.java +++ b/app/src/main/java/com/fastaccess/ui/modules/search/users/SearchUsersMvp.java @@ -25,6 +25,8 @@ interface SearchUsersMvp { void onSetSearchQuery(@NonNull String query); + void onQueueSearch(@NonNull String query); + @NonNull OnLoadMore getLoadMore(); } From 4d86e5dc002df0b334dc7234e484f6b069ec746b Mon Sep 17 00:00:00 2001 From: Jedi Burrell Date: Sun, 14 May 2017 07:56:45 -0400 Subject: [PATCH 02/11] Fix Issue #475. Previously the feed would show the markdown in comments, but wouldn't format it. This fixes that. --- .../com/fastaccess/ui/adapter/viewholder/FeedsViewHolder.java | 4 +++- app/src/main/java/com/zzhoujay/markdown/MarkDown.java | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) 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 d459539c..2fad317a 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 @@ -3,6 +3,7 @@ package com.fastaccess.ui.adapter.viewholder; import android.net.Uri; import android.support.annotation.NonNull; import android.support.annotation.Nullable; +import android.text.Html; import android.view.Gravity; import android.view.View; import android.view.ViewGroup; @@ -13,6 +14,7 @@ import com.fastaccess.data.dao.model.Event; import com.fastaccess.data.dao.types.EventsType; import com.fastaccess.helper.InputHelper; import com.fastaccess.helper.ParseDateFormat; +import com.fastaccess.provider.markdown.MarkDownProvider; import com.fastaccess.ui.widgets.AvatarLayout; import com.fastaccess.ui.widgets.FontTextView; import com.fastaccess.ui.widgets.SpannableBuilder; @@ -123,7 +125,7 @@ public class FeedsViewHolder extends BaseViewHolder { } if (eventsModel.getPayload() != null) { if (eventsModel.getPayload().getComment() != null) { - description.setText(eventsModel.getPayload().getComment().getBody()); + MarkDownProvider.setMdText(description, eventsModel.getPayload().getComment().getBody()); description.setVisibility(View.VISIBLE); if (eventsModel.getPayload().getIssue() != null) { number = "#" + eventsModel.getPayload().getIssue().getNumber(); diff --git a/app/src/main/java/com/zzhoujay/markdown/MarkDown.java b/app/src/main/java/com/zzhoujay/markdown/MarkDown.java index b42aea43..b82305b4 100755 --- a/app/src/main/java/com/zzhoujay/markdown/MarkDown.java +++ b/app/src/main/java/com/zzhoujay/markdown/MarkDown.java @@ -1,7 +1,9 @@ package com.zzhoujay.markdown; import android.text.Html; +import android.text.Spannable; import android.text.Spanned; +import android.text.style.CharacterStyle; import android.widget.TextView; import com.zzhoujay.markdown.parser.StyleBuilderImpl; From bf7250e1cd0cbd595c11bbed1a15d6143e58488b Mon Sep 17 00:00:00 2001 From: Jedi Burrell Date: Sun, 14 May 2017 19:32:52 -0400 Subject: [PATCH 03/11] Show Language Chooser On Login. ( More details ) Previously, the app would default to English, then you could change the language settings once you've logged in. Now it changes the language setting to the system default on launch, or shows a language chooser button if it's not available. --- .../com/fastaccess/helper/ViewHelper.java | 1 - .../ui/modules/login/LoginActivity.java | 28 +++++++++++- .../main_layouts/layout/editor_layout.xml | 44 ++++++++++++++----- .../layout/login_chooser_layout.xml | 24 ++++++++++ 4 files changed, 85 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/com/fastaccess/helper/ViewHelper.java b/app/src/main/java/com/fastaccess/helper/ViewHelper.java index 8b0740fb..5f106938 100644 --- a/app/src/main/java/com/fastaccess/helper/ViewHelper.java +++ b/app/src/main/java/com/fastaccess/helper/ViewHelper.java @@ -150,7 +150,6 @@ public class ViewHelper { public static boolean isTablet(@NonNull Activity activity) { DisplayMetrics metrics = new DisplayMetrics(); - activity.getWindowManager().getDefaultDisplay().getMetrics(metrics); float yInches = metrics.heightPixels / metrics.ydpi; float xInches = metrics.widthPixels / metrics.xdpi; diff --git a/app/src/main/java/com/fastaccess/ui/modules/login/LoginActivity.java b/app/src/main/java/com/fastaccess/ui/modules/login/LoginActivity.java index c5422352..8d627903 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/login/LoginActivity.java +++ b/app/src/main/java/com/fastaccess/ui/modules/login/LoginActivity.java @@ -14,16 +14,24 @@ import android.support.design.widget.TextInputLayout; import android.view.View; import android.view.inputmethod.InputMethodManager; import android.widget.ProgressBar; +import android.widget.RelativeLayout; +import com.fastaccess.BuildConfig; import com.fastaccess.R; import com.fastaccess.helper.ActivityHelper; import com.fastaccess.helper.AnimHelper; import com.fastaccess.helper.BundleConstant; import com.fastaccess.helper.Bundler; import com.fastaccess.helper.InputHelper; +import com.fastaccess.helper.PrefHelper; import com.fastaccess.ui.base.BaseActivity; import com.fastaccess.ui.modules.main.MainActivity; +import com.fastaccess.ui.modules.settings.LanguageBottomSheetDialog; import com.fastaccess.ui.modules.settings.SlackBottomSheetDialog; +import com.fastaccess.ui.widgets.FontEditText; + +import java.util.Arrays; +import java.util.Locale; import butterknife.BindView; import butterknife.OnClick; @@ -38,7 +46,7 @@ import icepick.State; public class LoginActivity extends BaseActivity implements LoginMvp.View { - + @Nullable @BindView(R.id.language_selector) RelativeLayout language_selector; @Nullable @BindView(R.id.usernameEditText) TextInputEditText usernameEditText; @Nullable @BindView(R.id.username) TextInputLayout username; @Nullable @BindView(R.id.passwordEditText) TextInputEditText passwordEditText; @@ -84,6 +92,10 @@ public class LoginActivity extends BaseActivity i return true; } + @Optional @OnClick(R.id.language_selector_clicker) public void onChangeLanguage() { + showLanguage(); + } + @Override protected int layout() { return R.layout.login_form_layout; } @@ -139,6 +151,20 @@ public class LoginActivity extends BaseActivity i } } if (password != null) password.setHint(isBasicAuth ? getString(R.string.password) : getString(R.string.access_token)); + if (Arrays.asList(getResources().getStringArray(R.array.languages_array_values)).contains(Locale.getDefault().getLanguage())){ + String language = PrefHelper.getString("app_language"); + PrefHelper.set("app_language", Locale.getDefault().getLanguage()); + if(!BuildConfig.DEBUG) + language_selector.setVisibility(View.GONE); + if(!Locale.getDefault().getLanguage().equals(language)) + recreate(); + } + } + + private void showLanguage() { + LanguageBottomSheetDialog languageBottomSheetDialog = new LanguageBottomSheetDialog(); + languageBottomSheetDialog.onAttach((Context) this); + languageBottomSheetDialog.show(getSupportFragmentManager(), "LanguageBottomSheetDialog"); } @Override protected void onNewIntent(Intent intent) { diff --git a/app/src/main/res/layouts/main_layouts/layout/editor_layout.xml b/app/src/main/res/layouts/main_layouts/layout/editor_layout.xml index ef980627..a0d3a971 100644 --- a/app/src/main/res/layouts/main_layouts/layout/editor_layout.xml +++ b/app/src/main/res/layouts/main_layouts/layout/editor_layout.xml @@ -15,18 +15,42 @@ android:clipToPadding="false" android:fillViewport="true"> - + android:orientation="vertical"> + + + + + + + + + diff --git a/app/src/main/res/layouts/main_layouts/layout/login_chooser_layout.xml b/app/src/main/res/layouts/main_layouts/layout/login_chooser_layout.xml index 6e3ac960..7e1d3b5a 100644 --- a/app/src/main/res/layouts/main_layouts/layout/login_chooser_layout.xml +++ b/app/src/main/res/layouts/main_layouts/layout/login_chooser_layout.xml @@ -142,4 +142,28 @@ + + + + + \ No newline at end of file From 79a585cf09481b756ffdc7f067dd29a739b2acc7 Mon Sep 17 00:00:00 2001 From: Jedi Burrell Date: Sun, 14 May 2017 21:01:09 -0400 Subject: [PATCH 04/11] Change "Private" Color & Change "Edited" String. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Previously it said "( edited )", now it says "• edited". Before Forked / Private labels were hard to distinguish. Private is now grey instead of purple to make it easer. --- .../com/fastaccess/ui/adapter/viewholder/ReposViewHolder.java | 2 +- app/src/main/res/values/strings.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/fastaccess/ui/adapter/viewholder/ReposViewHolder.java b/app/src/main/java/com/fastaccess/ui/adapter/viewholder/ReposViewHolder.java index b5cfe20c..5451f3bd 100644 --- a/app/src/main/java/com/fastaccess/ui/adapter/viewholder/ReposViewHolder.java +++ b/app/src/main/java/com/fastaccess/ui/adapter/viewholder/ReposViewHolder.java @@ -41,7 +41,7 @@ public class ReposViewHolder extends BaseViewHolder { @BindString(R.string.forked) String forked; @BindString(R.string.private_repo) String privateRepo; @BindColor(R.color.material_indigo_700) int forkColor; - @BindColor(R.color.material_deep_purple_700) int privateColor; + @BindColor(R.color.material_grey_700) int privateColor; private boolean isStarred; private boolean withImage; diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5fa0c516..6607aefc 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -222,7 +222,7 @@ Switch branch Assignees Edit - ( edited ) + \u2022 edited Update Issue Update Pull Request No milestones From cf768c2a8aa84357363c0f9ee39c6ca055f59a08 Mon Sep 17 00:00:00 2001 From: Jedi Burrell Date: Mon, 15 May 2017 00:45:58 -0400 Subject: [PATCH 05/11] Message You Reply to Is Now Shown in Editor. Previously, when you replied to someone's comment, it would only tag them. Now it shows you what they wrote, and is also selectable for easy quoting. --- .../ui/modules/editor/EditorActivity.java | 12 +++++++++++- .../gists/gist/comments/GistCommentsFragment.java | 13 +++++++++++++ .../gists/gist/comments/GistCommentsMvp.java | 2 ++ .../gist/comments/GistCommentsPresenter.java | 2 +- .../details/comments/CommitCommentsFragments.java | 15 +++++++++++++++ .../details/comments/CommitCommentsMvp.java | 2 ++ .../details/comments/CommitCommentsPresenter.java | 2 +- .../details/timeline/IssueTimelineFragment.java | 15 +++++++++++++++ .../issue/details/timeline/IssueTimelineMvp.java | 2 ++ .../details/timeline/IssueTimelinePresenter.java | 4 ++-- .../timeline/PullRequestTimelineFragment.java | 15 +++++++++++++++ .../timeline/timeline/PullRequestTimelineMvp.java | 2 ++ .../timeline/PullRequestTimelinePresenter.java | 6 +++--- .../layouts/main_layouts/layout/editor_layout.xml | 2 ++ 14 files changed, 86 insertions(+), 8 deletions(-) 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 406fb5ff..a9e7a5bb 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 @@ -12,6 +12,7 @@ import android.view.MotionEvent; import android.view.View; import android.widget.CheckBox; import android.widget.CompoundButton; +import android.widget.LinearLayout; import com.fastaccess.R; import com.fastaccess.data.dao.model.Comment; @@ -28,6 +29,7 @@ import com.fastaccess.provider.markdown.MarkDownProvider; import com.fastaccess.ui.base.BaseActivity; import com.fastaccess.ui.modules.editor.popup.EditorLinkImageDialogFragment; import com.fastaccess.ui.widgets.FontEditText; +import com.fastaccess.ui.widgets.FontTextView; import com.fastaccess.ui.widgets.ForegroundImageView; import com.fastaccess.ui.widgets.dialog.MessageDialogView; @@ -37,6 +39,8 @@ import butterknife.OnTextChanged; import icepick.State; import uk.co.samuelwall.materialtaptargetprompt.MaterialTapTargetPrompt; +import static android.view.View.GONE; + /** * Created by Kosh on 27 Nov 2016, 1:32 AM */ @@ -46,6 +50,8 @@ public class EditorActivity extends BaseActivity { PrefHelper.set("sent_via", isChecked); @@ -148,6 +154,10 @@ public class EditorActivity extends BaseActivity implemen if (item1.getItemId() == R.id.delete) { getView().onShowDeleteMsg(item.getId()); } else if (item1.getItemId() == R.id.reply) { - getView().onTagUser(item.getUser()); + getView().onReply(item.getUser(), item.getBody()); } else if (item1.getItemId() == R.id.edit) { getView().onEditComment(item); } diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/code/commit/details/comments/CommitCommentsFragments.java b/app/src/main/java/com/fastaccess/ui/modules/repos/code/commit/details/comments/CommitCommentsFragments.java index bdb7c67e..61bebc1d 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/repos/code/commit/details/comments/CommitCommentsFragments.java +++ b/app/src/main/java/com/fastaccess/ui/modules/repos/code/commit/details/comments/CommitCommentsFragments.java @@ -179,6 +179,21 @@ refresh.setRefreshing(true); ActivityHelper.startReveal(this, intent, view, BundleConstant.REQUEST_CODE); } + @Override public void onReply(User user, String message) { + Intent intent = new Intent(getContext(), EditorActivity.class); + intent.putExtras(Bundler + .start() + .put(BundleConstant.ID, getPresenter().repoId()) + .put(BundleConstant.EXTRA_TWO, getPresenter().login()) + .put(BundleConstant.EXTRA_THREE, getPresenter().sha()) + .put(BundleConstant.EXTRA, "@" + user.getLogin()) + .put(BundleConstant.EXTRA_TYPE, BundleConstant.ExtraTYpe.NEW_COMMIT_COMMENT_EXTRA) + .put("message", message) + .end()); + View view = getActivity() != null && getActivity().findViewById(R.id.fab) != null ? getActivity().findViewById(R.id.fab) : recycler; + ActivityHelper.startReveal(this, intent, view, BundleConstant.REQUEST_CODE); + } + @Override public void showReactionsPopup(@NonNull ReactionTypes reactionTypes, @NonNull String login, @NonNull String repoId, long commentId) { ReactionsDialogFragment.newInstance(login, repoId, reactionTypes, commentId, ReactionsProvider.COMMIT) .show(getChildFragmentManager(), "ReactionsDialogFragment"); diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/code/commit/details/comments/CommitCommentsMvp.java b/app/src/main/java/com/fastaccess/ui/modules/repos/code/commit/details/comments/CommitCommentsMvp.java index 36e8de7a..3321421a 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/repos/code/commit/details/comments/CommitCommentsMvp.java +++ b/app/src/main/java/com/fastaccess/ui/modules/repos/code/commit/details/comments/CommitCommentsMvp.java @@ -41,6 +41,8 @@ interface CommitCommentsMvp { void onTagUser(@Nullable User user); + void onReply(User user, String message); + void showReactionsPopup(@NonNull ReactionTypes reactionTypes, @NonNull String login, @NonNull String repoId, long commentId); } diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/code/commit/details/comments/CommitCommentsPresenter.java b/app/src/main/java/com/fastaccess/ui/modules/repos/code/commit/details/comments/CommitCommentsPresenter.java index 6e247eaf..587ed567 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/repos/code/commit/details/comments/CommitCommentsPresenter.java +++ b/app/src/main/java/com/fastaccess/ui/modules/repos/code/commit/details/comments/CommitCommentsPresenter.java @@ -145,7 +145,7 @@ class CommitCommentsPresenter extends BasePresenter impl if (item1.getItemId() == R.id.delete) { getView().onShowDeleteMsg(item.getId()); } else if (item1.getItemId() == R.id.reply) { - getView().onTagUser(item.getUser()); + getView().onReply(item.getUser(), item.getBody()); } else if (item1.getItemId() == R.id.edit) { getView().onEditComment(item); } else if (item1.getItemId() == R.id.share) { 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 c5efab19..d8ab86c6 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 @@ -163,6 +163,21 @@ refresh.setRefreshing(true); ActivityHelper.startReveal(this, intent, view, BundleConstant.REQUEST_CODE); } + @Override public void onReply(User user, String message) { + Intent intent = new Intent(getContext(), EditorActivity.class); + intent.putExtras(Bundler + .start() + .put(BundleConstant.ID, getPresenter().repoId()) + .put(BundleConstant.EXTRA_TWO, getPresenter().login()) + .put(BundleConstant.EXTRA_THREE, getPresenter().number()) + .put(BundleConstant.EXTRA, "@" + user.getLogin()) + .put(BundleConstant.EXTRA_TYPE, BundleConstant.ExtraTYpe.NEW_ISSUE_COMMENT_EXTRA) + .put("message", message) + .end()); + View view = getActivity() != null && getActivity().findViewById(R.id.fab) != null ? getActivity().findViewById(R.id.fab) : recycler; + ActivityHelper.startReveal(this, intent, view, BundleConstant.REQUEST_CODE); + } + @Override public void showReactionsPopup(@NonNull ReactionTypes type, @NonNull String login, @NonNull String repoId, long idOrNumber, boolean isHeader) { ReactionsDialogFragment.newInstance(login, repoId, type, idOrNumber, isHeader ? ReactionsProvider.HEADER : ReactionsProvider.COMMENT) diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/issues/issue/details/timeline/IssueTimelineMvp.java b/app/src/main/java/com/fastaccess/ui/modules/repos/issues/issue/details/timeline/IssueTimelineMvp.java index c69105c2..f95ac071 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/repos/issues/issue/details/timeline/IssueTimelineMvp.java +++ b/app/src/main/java/com/fastaccess/ui/modules/repos/issues/issue/details/timeline/IssueTimelineMvp.java @@ -40,6 +40,8 @@ public interface IssueTimelineMvp { void onTagUser(@Nullable User user); + void onReply(User user, String message); + void showReactionsPopup(@NonNull ReactionTypes type, @NonNull String login, @NonNull String repoId, long idOrNumber, boolean isHeadre); } 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 5ae96011..11c85c1b 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 @@ -79,7 +79,7 @@ public class IssueTimelinePresenter extends BasePresenter if (item1.getItemId() == R.id.delete) { getView().onShowDeleteMsg(item.getComment().getId()); } else if (item1.getItemId() == R.id.reply) { - getView().onTagUser(item.getComment().getUser()); + getView().onReply(item.getComment().getUser(), item.getComment().getBody()); } else if (item1.getItemId() == R.id.edit) { getView().onEditComment(item.getComment()); } else if (item1.getItemId() == R.id.share) { @@ -106,7 +106,7 @@ public class IssueTimelinePresenter extends BasePresenter popupMenu.setOnMenuItemClickListener(item1 -> { if (getView() == null) return false; if (item1.getItemId() == R.id.reply) { - getView().onTagUser(item.getIssue().getUser()); + getView().onReply(item.getIssue().getUser(), item.getIssue().getBody()); } else if (item1.getItemId() == R.id.edit) { Activity activity = ActivityHelper.getActivity(v.getContext()); if (activity == null) return false; 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 91f905e5..ba29bcf9 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 @@ -183,6 +183,21 @@ refresh.setRefreshing(true); ActivityHelper.startReveal(this, intent, view, BundleConstant.REQUEST_CODE); } + @Override public void onReply(User user, String message) { + Intent intent = new Intent(getContext(), EditorActivity.class); + intent.putExtras(Bundler + .start() + .put(BundleConstant.ID, getPresenter().repoId()) + .put(BundleConstant.EXTRA_TWO, getPresenter().login()) + .put(BundleConstant.EXTRA_THREE, getPresenter().number()) + .put(BundleConstant.EXTRA, "@" + user.getLogin()) + .put(BundleConstant.EXTRA_TYPE, BundleConstant.ExtraTYpe.NEW_ISSUE_COMMENT_EXTRA) + .put("message", message) + .end()); + View view = getActivity() != null && getActivity().findViewById(R.id.fab) != null ? getActivity().findViewById(R.id.fab) : recycler; + ActivityHelper.startReveal(this, intent, view, BundleConstant.REQUEST_CODE); + } + @Override public void showReactionsPopup(@NonNull ReactionTypes type, @NonNull String login, @NonNull String repoId, long idOrNumber, int reactionType) { ReactionsDialogFragment.newInstance(login, repoId, type, idOrNumber, reactionType).show(getChildFragmentManager(), "ReactionsDialogFragment"); diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/details/timeline/timeline/PullRequestTimelineMvp.java b/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/details/timeline/timeline/PullRequestTimelineMvp.java index 5010672a..97b1f276 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/details/timeline/timeline/PullRequestTimelineMvp.java +++ b/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/details/timeline/timeline/PullRequestTimelineMvp.java @@ -48,6 +48,8 @@ public interface PullRequestTimelineMvp { void onTagUser(@Nullable User user); + void onReply(User user, String message); + void showReactionsPopup(@NonNull ReactionTypes type, @NonNull String login, @NonNull String repoId, long idOrNumber, @ReactionsProvider .ReactionType int reactionType); } 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 626daab3..3c02546d 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 @@ -57,7 +57,7 @@ public class PullRequestTimelinePresenter extends BasePresenter { if (getView() == null) return false; if (item1.getItemId() == R.id.reply) { - getView().onTagUser(item.getPullRequest().getUser()); + getView().onReply(item.getPullRequest().getUser(), item.getPullRequest().getBody()); } else if (item1.getItemId() == R.id.edit) { Activity activity = ActivityHelper.getActivity(v.getContext()); if (activity == null) return false; @@ -254,7 +254,7 @@ public class PullRequestTimelinePresenter extends BasePresenter Date: Mon, 15 May 2017 01:42:03 -0400 Subject: [PATCH 06/11] Appeal Issue #322. This removes FastHub from the `DrawerLayout` and moves it to the pinned repositories. --- .../java/com/fastaccess/ui/base/BaseActivity.java | 2 -- .../ui/modules/pinned/PinnedReposFragment.java | 3 +++ .../ui/modules/pinned/PinnedReposPresenter.java | 3 +++ app/src/main/res/menu/drawer_menu.xml | 14 +++++--------- 4 files changed, 11 insertions(+), 11 deletions(-) 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 cf984d28..3824cdd9 100644 --- a/app/src/main/java/com/fastaccess/ui/base/BaseActivity.java +++ b/app/src/main/java/com/fastaccess/ui/base/BaseActivity.java @@ -212,8 +212,6 @@ public abstract class BaseActivity imp } @Override public void onItemLongClick(int position, View v, PinnedRepos item) { + if (item!=null) + if (item.getRepoFullName().equalsIgnoreCase("k0shk0sh/FastHub")) + return; if (getView() != null) { getView().onDeletePinnedRepo(item.getId(), position); } diff --git a/app/src/main/res/menu/drawer_menu.xml b/app/src/main/res/menu/drawer_menu.xml index a43a48c2..b9ed1909 100644 --- a/app/src/main/res/menu/drawer_menu.xml +++ b/app/src/main/res/menu/drawer_menu.xml @@ -53,15 +53,6 @@ android:title="@string/my_gists"/> - - - - @@ -78,6 +69,11 @@ android:icon="@drawable/ic_settings" android:title="@string/settings"/> + + Date: Mon, 15 May 2017 04:56:57 -0400 Subject: [PATCH 07/11] Combine Gists With Tabs. Previously, you'd select either "my" gists or public gists. Now the gists activity displays both in seperate tabs. --- .../data/dao/FragmentPagerAdapterModel.java | 8 +++ .../ui/modules/gists/GistsListActivity.java | 37 +++++++---- .../layout/gists_activity_layout.xml | 61 +++++++++++++++++++ 3 files changed, 95 insertions(+), 11 deletions(-) create mode 100644 app/src/main/res/layouts/main_layouts/layout/gists_activity_layout.xml 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 f8cc22ba..5938e89c 100644 --- a/app/src/main/java/com/fastaccess/data/dao/FragmentPagerAdapterModel.java +++ b/app/src/main/java/com/fastaccess/data/dao/FragmentPagerAdapterModel.java @@ -10,9 +10,11 @@ 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; import com.fastaccess.data.dao.types.MyIssuesType; +import com.fastaccess.ui.modules.gists.GistsFragment; import com.fastaccess.ui.modules.gists.gist.comments.GistCommentsFragment; import com.fastaccess.ui.modules.gists.gist.files.GistFilesListFragment; import com.fastaccess.ui.modules.main.issues.MyIssuesFragment; @@ -158,6 +160,12 @@ import lombok.Setter; new FragmentPagerAdapterModel(context.getString(R.string.all), new AllNotificationsFragment())).collect(Collectors.toList()); } + public static List buildForGists(@NonNull Context context) { + + 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()); + } + public static List buildForMyIssues(@NonNull Context context) { return Stream.of(new FragmentPagerAdapterModel(context.getString(R.string.created), MyIssuesFragment.newInstance(IssueState.open, MyIssuesType.CREATED)), diff --git a/app/src/main/java/com/fastaccess/ui/modules/gists/GistsListActivity.java b/app/src/main/java/com/fastaccess/ui/modules/gists/GistsListActivity.java index 29bccb46..a934c101 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/gists/GistsListActivity.java +++ b/app/src/main/java/com/fastaccess/ui/modules/gists/GistsListActivity.java @@ -5,16 +5,20 @@ import android.content.Intent; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.design.widget.FloatingActionButton; +import android.support.design.widget.TabLayout; import com.fastaccess.R; +import com.fastaccess.data.dao.FragmentPagerAdapterModel; import com.fastaccess.data.dao.model.Login; import com.fastaccess.helper.ActivityHelper; import com.fastaccess.helper.BundleConstant; import com.fastaccess.helper.Bundler; +import com.fastaccess.ui.adapter.FragmentsPagerAdapter; import com.fastaccess.ui.base.BaseActivity; import com.fastaccess.ui.base.mvp.presenter.BasePresenter; import com.fastaccess.ui.modules.gists.create.CreateGistActivity; import com.fastaccess.ui.modules.profile.gists.ProfileGistsFragment; +import com.fastaccess.ui.widgets.ViewPagerView; import net.grandcentrix.thirtyinch.TiPresenter; @@ -28,6 +32,11 @@ import icepick.State; public class GistsListActivity extends BaseActivity { + @BindView(R.id.tabs) + TabLayout tabs; + @BindView(R.id.gistsContainer) + ViewPagerView pager; + public static void startActivity(@NonNull Context context, boolean myGists) { Intent intent = new Intent(context, GistsListActivity.class); intent.putExtras(Bundler.start().put(BundleConstant.EXTRA, myGists).end()); @@ -39,7 +48,7 @@ public class GistsListActivity extends BaseActivity { @BindView(R.id.fab) FloatingActionButton fab; @Override protected int layout() { - return R.layout.toolbar_activity_layout; + return R.layout.gists_activity_layout; } @Override protected boolean isTransparent() { @@ -60,19 +69,25 @@ public class GistsListActivity extends BaseActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - if (savedInstanceState == null) { - myGists = getIntent().getExtras().getBoolean(BundleConstant.EXTRA); - getSupportFragmentManager() - .beginTransaction() - .replace(R.id.fragmentContainer, myGists ? ProfileGistsFragment.newInstance(Login.getUser().getLogin()) - : GistsFragment.newInstance(), GistsFragment.TAG) - .commit(); - } - selectGists(!myGists); - setTitle(myGists ? R.string.my_gists : R.string.public_gists); + setTitle(R.string.gists); + setupTabs(); fab.show(); } + private void setupTabs() { + TabLayout.Tab tab1 = getTab(R.string.my_gists); + TabLayout.Tab tab2 = getTab(R.string.public_gists); + tabs.addTab(tab1); + tabs.addTab(tab2); + pager.setAdapter(new FragmentsPagerAdapter(getSupportFragmentManager(), + FragmentPagerAdapterModel.buildForGists(this))); + tabs.setupWithViewPager(pager); + } + + private TabLayout.Tab getTab(int titleId) { + return tabs.newTab().setText(titleId); + } + @OnClick(R.id.fab) public void onViewClicked() { ActivityHelper.startReveal(this, new Intent(this, CreateGistActivity.class), fab); } diff --git a/app/src/main/res/layouts/main_layouts/layout/gists_activity_layout.xml b/app/src/main/res/layouts/main_layouts/layout/gists_activity_layout.xml new file mode 100644 index 00000000..782007e0 --- /dev/null +++ b/app/src/main/res/layouts/main_layouts/layout/gists_activity_layout.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From 1c4270bdb49ad71f4b4233157e4dbed610843125 Mon Sep 17 00:00:00 2001 From: Jedi Burrell Date: Mon, 15 May 2017 05:00:50 -0400 Subject: [PATCH 08/11] Make Gists One Item in DrawerLayout. Previously there were public and "my" gists, now this makes them one tab in the DrawerLayout. --- .../java/com/fastaccess/ui/base/BaseActivity.java | 14 +++----------- app/src/main/res/menu/drawer_menu.xml | 6 +----- 2 files changed, 4 insertions(+), 16 deletions(-) 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 3824cdd9..bc7bd07c 100644 --- a/app/src/main/java/com/fastaccess/ui/base/BaseActivity.java +++ b/app/src/main/java/com/fastaccess/ui/base/BaseActivity.java @@ -35,6 +35,7 @@ import com.fastaccess.helper.PrefGetter; import com.fastaccess.helper.ViewHelper; import com.fastaccess.ui.base.mvp.BaseMvp; import com.fastaccess.ui.base.mvp.presenter.BasePresenter; +import com.fastaccess.ui.modules.about.FastHubAboutActivity; import com.fastaccess.ui.modules.changelog.ChangelogBottomSheetDialog; import com.fastaccess.ui.modules.gists.GistsListActivity; import com.fastaccess.ui.modules.login.LoginChooserActivity; @@ -216,8 +217,6 @@ public abstract class BaseActivity - + android:title="@string/gists"/> Date: Mon, 15 May 2017 10:27:02 -0400 Subject: [PATCH 09/11] FR Prepping. Preparation for future commit. --- app/build.gradle | 1 + .../ui/modules/editor/EditorActivity.java | 23 +++++++++-- .../gist/comments/GistCommentsFragment.java | 26 +++++++++++- .../comments/CommitCommentsFragments.java | 22 ++++++++++ .../timeline/IssueTimelineFragment.java | 27 +++++++++++- .../timeline/PullRequestTimelineFragment.java | 23 +++++++++++ .../ui/widgets/MentionsFontEditText.java | 41 +++++++++++++++++++ .../main_layouts/layout/editor_layout.xml | 8 +++- 8 files changed, 164 insertions(+), 7 deletions(-) create mode 100644 app/src/main/java/com/fastaccess/ui/widgets/MentionsFontEditText.java diff --git a/app/build.gradle b/app/build.gradle index ff92668b..93a65720 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -148,6 +148,7 @@ dependencies { compile 'com.github.nightwhistler:HtmlSpanner:0.4' compile 'net.sourceforge.htmlcleaner:htmlcleaner:2.2' compile 'com.github.matthiasrobbers:shortbread:1.0.1' + compile 'com.linkedin.android.spyglass:spyglass:1.4.0' provided "org.projectlombok:lombok:${lombokVersion}" annotationProcessor 'io.requery:requery-processor:1.2.0' annotationProcessor "org.projectlombok:lombok:${lombokVersion}" 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 a9e7a5bb..45ba5094 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 @@ -11,9 +11,10 @@ import android.view.MenuItem; import android.view.MotionEvent; import android.view.View; import android.widget.CheckBox; -import android.widget.CompoundButton; import android.widget.LinearLayout; +import android.widget.ListView; +import com.fastaccess.BuildConfig; import com.fastaccess.R; import com.fastaccess.data.dao.model.Comment; import com.fastaccess.helper.ActivityHelper; @@ -28,14 +29,16 @@ import com.fastaccess.helper.ViewHelper; import com.fastaccess.provider.markdown.MarkDownProvider; import com.fastaccess.ui.base.BaseActivity; import com.fastaccess.ui.modules.editor.popup.EditorLinkImageDialogFragment; -import com.fastaccess.ui.widgets.FontEditText; import com.fastaccess.ui.widgets.FontTextView; import com.fastaccess.ui.widgets.ForegroundImageView; import com.fastaccess.ui.widgets.dialog.MessageDialogView; +import com.linkedin.android.spyglass.tokenization.impl.WordTokenizerConfig; +import com.linkedin.android.spyglass.ui.MentionsEditText; import butterknife.BindView; import butterknife.OnClick; import butterknife.OnTextChanged; +import es.dmoral.toasty.Toasty; import icepick.State; import uk.co.samuelwall.materialtaptargetprompt.MaterialTapTargetPrompt; @@ -49,13 +52,20 @@ public class EditorActivity extends BaseActivity onLoadMore; + private ArrayList participants; + public static GistCommentsFragment newInstance(@NonNull String gistId) { GistCommentsFragment view = new GistCommentsFragment(); view.setArguments(Bundler.start().put("gistId", gistId).end()); @@ -83,6 +92,16 @@ public class GistCommentsFragment extends BaseFragment items, int page) { hideProgress(); + + participants = null; + participants = (ArrayList) Stream.of(items) + .map(comment -> comment.getUser().getLogin()) + .collect(Collectors.toList()); + HashSet hashSet = new HashSet(); + hashSet.addAll(participants); + participants.clear(); + participants.addAll(hashSet); + if (items == null || items.isEmpty()) { adapter.clear(); return; @@ -107,7 +126,7 @@ public class GistCommentsFragment extends BaseFragment participants; + public static CommitCommentsFragments newInstance(@NonNull String login, @NonNull String repoId, @NonNull String sha) { CommitCommentsFragments view = new CommitCommentsFragments(); view.setArguments(Bundler.start() @@ -87,6 +95,17 @@ public class CommitCommentsFragments extends BaseFragment items, int page) { hideProgress(); + + participants = null; + participants = (ArrayList) Stream.of(items) + .filter(value -> value.getType() == TimelineModel.COMMENT) + .map(value -> value.getComment()).map(comment-> comment.getUser().getLogin()) + .collect(Collectors.toList()); + HashSet hashSet = new HashSet(); + hashSet.addAll(participants); + participants.clear(); + participants.addAll(hashSet); + if (items == null || items.isEmpty()) { adapter.clear(); return; @@ -147,6 +166,7 @@ refresh.setRefreshing(true); .put(BundleConstant.EXTRA_FOUR, item.getId()) .put(BundleConstant.EXTRA, item.getBody()) .put(BundleConstant.EXTRA_TYPE, BundleConstant.ExtraTYpe.EDIT_COMMIT_COMMENT_EXTRA) + .putStringArrayList("participants", participants) .end()); View view = getActivity() != null && getActivity().findViewById(R.id.fab) != null ? getActivity().findViewById(R.id.fab) : recycler; ActivityHelper.startReveal(this, intent, view, BundleConstant.REQUEST_CODE); @@ -174,6 +194,7 @@ refresh.setRefreshing(true); .put(BundleConstant.EXTRA_THREE, getPresenter().sha()) .put(BundleConstant.EXTRA, user != null ? "@" + user.getLogin() : "") .put(BundleConstant.EXTRA_TYPE, BundleConstant.ExtraTYpe.NEW_COMMIT_COMMENT_EXTRA) + .putStringArrayList("participants", participants) .end()); View view = getActivity() != null && getActivity().findViewById(R.id.fab) != null ? getActivity().findViewById(R.id.fab) : recycler; ActivityHelper.startReveal(this, intent, view, BundleConstant.REQUEST_CODE); @@ -188,6 +209,7 @@ refresh.setRefreshing(true); .put(BundleConstant.EXTRA_THREE, getPresenter().sha()) .put(BundleConstant.EXTRA, "@" + user.getLogin()) .put(BundleConstant.EXTRA_TYPE, BundleConstant.ExtraTYpe.NEW_COMMIT_COMMENT_EXTRA) + .putStringArrayList("participants", participants) .put("message", message) .end()); View view = getActivity() != null && getActivity().findViewById(R.id.fab) != null ? getActivity().findViewById(R.id.fab) : recycler; 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 d8ab86c6..c89758a8 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 @@ -2,12 +2,15 @@ package com.fastaccess.ui.modules.repos.issues.issue.details.timeline; import android.app.Activity; import android.content.Intent; +import android.os.Build; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.annotation.StringRes; import android.view.View; +import com.annimon.stream.Collectors; +import com.annimon.stream.Stream; import com.fastaccess.R; import com.fastaccess.data.dao.SparseBooleanArrayParcelable; import com.fastaccess.data.dao.TimelineModel; @@ -30,6 +33,9 @@ import com.fastaccess.ui.widgets.dialog.MessageDialogView; import com.fastaccess.ui.widgets.recyclerview.DynamicRecyclerView; import com.fastaccess.ui.widgets.recyclerview.scroll.RecyclerFastScroller; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.LinkedList; import java.util.List; import butterknife.BindView; @@ -48,6 +54,8 @@ public class IssueTimelineFragment extends BaseFragment participants; + public static IssueTimelineFragment newInstance(@NonNull Issue issueModel) { IssueTimelineFragment view = new IssueTimelineFragment(); view.setArguments(Bundler.start().put(BundleConstant.ITEM, issueModel).end());//TODO fix this @@ -60,6 +68,19 @@ public class IssueTimelineFragment extends BaseFragment items) { hideProgress(); + + participants = null; + participants = (ArrayList) Stream.of(items) + .filter(value -> value.getType() == TimelineModel.COMMENT) + .map(value -> value.getComment()).map(comment-> comment.getUser().getLogin()) + .collect(Collectors.toList()); + HashSet hashSet = new HashSet(); + hashSet.addAll(participants); + participants.clear(); + participants.addAll(hashSet); + + System.out.println("READ THIS: " + participants); + if (items == null || items.isEmpty()) { adapter.clear(); return; @@ -96,7 +117,7 @@ public class IssueTimelineFragment extends BaseFragment participants; + public static PullRequestTimelineFragment newInstance(@NonNull PullRequest pullRequest) { PullRequestTimelineFragment view = new PullRequestTimelineFragment(); view.setArguments(Bundler.start().put(BundleConstant.ITEM, pullRequest).end());//TODO fix this @@ -61,6 +69,17 @@ public class PullRequestTimelineFragment extends BaseFragment items) { hideProgress(); + + participants = null; + participants = (ArrayList) Stream.of(items) + .filter(value -> value.getType() == TimelineModel.COMMENT) + .map(value -> value.getComment()).map(comment-> comment.getUser().getLogin()) + .collect(Collectors.toList()); + HashSet hashSet = new HashSet(); + hashSet.addAll(participants); + participants.clear(); + participants.addAll(hashSet); + if (items == null || items.isEmpty()) { adapter.clear(); return; @@ -141,6 +160,7 @@ refresh.setRefreshing(true); .put(BundleConstant.EXTRA_FOUR, item.getId()) .put(BundleConstant.EXTRA, item.getBody()) .put(BundleConstant.EXTRA_TYPE, BundleConstant.ExtraTYpe.EDIT_ISSUE_COMMENT_EXTRA) + .putStringArrayList("participants", participants) .end()); View view = getActivity() != null && getActivity().findViewById(R.id.fab) != null ? getActivity().findViewById(R.id.fab) : recycler; ActivityHelper.startReveal(this, intent, view, BundleConstant.REQUEST_CODE); @@ -165,6 +185,7 @@ refresh.setRefreshing(true); .put(BundleConstant.EXTRA, id) .put(BundleConstant.YES_NO_EXTRA, true) .put(BundleConstant.EXTRA_TWO, isReviewComment) + .putStringArrayList("participants", participants) .end()) .show(getChildFragmentManager(), MessageDialogView.TAG); } @@ -178,6 +199,7 @@ refresh.setRefreshing(true); .put(BundleConstant.EXTRA_THREE, getPresenter().number()) .put(BundleConstant.EXTRA, user != null ? "@" + user.getLogin() : "") .put(BundleConstant.EXTRA_TYPE, BundleConstant.ExtraTYpe.NEW_ISSUE_COMMENT_EXTRA) + .putStringArrayList("participants", participants) .end()); View view = getActivity() != null && getActivity().findViewById(R.id.fab) != null ? getActivity().findViewById(R.id.fab) : recycler; ActivityHelper.startReveal(this, intent, view, BundleConstant.REQUEST_CODE); @@ -192,6 +214,7 @@ refresh.setRefreshing(true); .put(BundleConstant.EXTRA_THREE, getPresenter().number()) .put(BundleConstant.EXTRA, "@" + user.getLogin()) .put(BundleConstant.EXTRA_TYPE, BundleConstant.ExtraTYpe.NEW_ISSUE_COMMENT_EXTRA) + .putStringArrayList("participants", participants) .put("message", message) .end()); View view = getActivity() != null && getActivity().findViewById(R.id.fab) != null ? getActivity().findViewById(R.id.fab) : recycler; diff --git a/app/src/main/java/com/fastaccess/ui/widgets/MentionsFontEditText.java b/app/src/main/java/com/fastaccess/ui/widgets/MentionsFontEditText.java new file mode 100644 index 00000000..14f9fdc4 --- /dev/null +++ b/app/src/main/java/com/fastaccess/ui/widgets/MentionsFontEditText.java @@ -0,0 +1,41 @@ +package com.fastaccess.ui.widgets; + +import android.content.Context; +import android.support.annotation.NonNull; +import android.util.AttributeSet; +import android.view.inputmethod.EditorInfo; + +import com.fastaccess.helper.TypeFaceHelper; +import com.linkedin.android.spyglass.tokenization.impl.WordTokenizer; +import com.linkedin.android.spyglass.ui.MentionsEditText; +import com.linkedin.android.spyglass.ui.RichEditorView; + +/** + * Created by JediB on 5/15/2017. + */ + +public class MentionsFontEditText extends MentionsEditText{ + + public MentionsFontEditText(@NonNull Context context) { + super(context); + init(); + } + + public MentionsFontEditText(@NonNull Context context, AttributeSet attrs) { + super(context, attrs); + init(); + + } + + public MentionsFontEditText(@NonNull Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + init(); + } + + private void init() { + if (isInEditMode()) return; + setInputType(getInputType() | EditorInfo.IME_FLAG_NO_EXTRACT_UI | EditorInfo.IME_FLAG_NO_FULLSCREEN); + setImeOptions(getImeOptions() | EditorInfo.IME_FLAG_NO_FULLSCREEN); + TypeFaceHelper.applyTypeface(this); + } +} diff --git a/app/src/main/res/layouts/main_layouts/layout/editor_layout.xml b/app/src/main/res/layouts/main_layouts/layout/editor_layout.xml index 53ee1c36..edbc4a7f 100644 --- a/app/src/main/res/layouts/main_layouts/layout/editor_layout.xml +++ b/app/src/main/res/layouts/main_layouts/layout/editor_layout.xml @@ -39,7 +39,7 @@ android:background="?dividerColor"/> - + + Date: Mon, 15 May 2017 11:12:49 -0400 Subject: [PATCH 10/11] Fix Issue #487. Issues and Pull Requests now display the repo they're in. --- .../modules/repos/issues/issue/details/IssuePagerActivity.java | 2 +- .../issues/issue/details/timeline/IssueTimelineFragment.java | 2 -- .../pull_request/details/PullRequestPagerActivity.java | 2 +- 3 files changed, 2 insertions(+), 4 deletions(-) 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 84b16833..cbec02c3 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 @@ -261,7 +261,7 @@ public class IssuePagerActivity extends BaseActivity Date: Mon, 15 May 2017 11:14:54 -0400 Subject: [PATCH 11/11] Appeal Issue #405. You can now disable notifications through a toggle instead of the timer. --- .../category/SettingsCategoryFragment.java | 17 ++++++++++++++++- app/src/main/res/drawable/ic_ring_sound.xml | 9 +++++++++ app/src/main/res/values/strings.xml | 1 + app/src/main/res/xml/notification_settings.xml | 8 +++++++- 4 files changed, 33 insertions(+), 2 deletions(-) create mode 100644 app/src/main/res/drawable/ic_ring_sound.xml 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 556ed6bc..30f6eb3d 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 @@ -31,6 +31,7 @@ public class SettingsCategoryFragment extends PreferenceFragmentCompat implement private String app_lauguage; private Preference signatureVia; + private Preference notificationTime; @Override public void onAttach(Context context) { super.onAttach(context); @@ -45,7 +46,11 @@ public class SettingsCategoryFragment extends PreferenceFragmentCompat implement switch (settings) { case 0: addPreferencesFromResource(R.xml.notification_settings); + notificationTime = findPreference("notificationTime"); findPreference("notificationTime").setOnPreferenceChangeListener(this); + findPreference("notificationEnabled").setOnPreferenceChangeListener(this); + if(!PrefHelper.getBoolean("notificationEnabled")) + getPreferenceScreen().removePreference(notificationTime); break; case 1: addPreferencesFromResource(R.xml.behaviour_settings); @@ -87,7 +92,17 @@ public class SettingsCategoryFragment extends PreferenceFragmentCompat implement } @Override public boolean onPreferenceChange(Preference preference, Object newValue) { - if (preference.getKey().equalsIgnoreCase("notificationTime")) { + if (preference.getKey().equalsIgnoreCase("notificationEnabled")) { + if ((boolean)newValue) { + getPreferenceScreen().addPreference(notificationTime); + NotificationSchedulerJobTask.scheduleJob(getActivity().getApplicationContext(), + PrefGetter.notificationDurationMillis(getActivity().getApplicationContext(), PrefHelper.getString("notificationTime")), true); + } else { + getPreferenceScreen().removePreference(notificationTime); + NotificationSchedulerJobTask.scheduleJob(getActivity().getApplicationContext(), -1, true); + } + return true; + } else if (preference.getKey().equalsIgnoreCase("notificationTime")) { NotificationSchedulerJobTask.scheduleJob(getActivity().getApplicationContext(), PrefGetter.notificationDurationMillis(getActivity().getApplicationContext(), (String) newValue), true); return true; diff --git a/app/src/main/res/drawable/ic_ring_sound.xml b/app/src/main/res/drawable/ic_ring_sound.xml new file mode 100644 index 00000000..9c5a291f --- /dev/null +++ b/app/src/main/res/drawable/ic_ring_sound.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 6607aefc..bf17276a 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -388,6 +388,7 @@ Open source libraries Enable notification sound once a notification is received. Enable notification sound + Enable notification Login with personal token Personal Token Login via basic auth diff --git a/app/src/main/res/xml/notification_settings.xml b/app/src/main/res/xml/notification_settings.xml index 22b7355e..0379f262 100644 --- a/app/src/main/res/xml/notification_settings.xml +++ b/app/src/main/res/xml/notification_settings.xml @@ -3,6 +3,12 @@ xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> + +