diff --git a/app/build.gradle b/app/build.gradle index 63dd3e22..a1be537c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -164,6 +164,7 @@ dependencies { implementation "petrov.kristiyan:colorpicker-library:1.1.4" implementation 'com.apollographql.apollo:apollo-rx2-support:0.4.0' implementation 'com.jaredrummler:android-device-names:1.1.4' + implementation 'net.yslibrary.keyboardvisibilityevent:keyboardvisibilityevent:2.1.0' compileOnly "org.projectlombok:lombok:${lombokVersion}" kapt "org.projectlombok:lombok:${lombokVersion}" kapt "com.evernote:android-state-processor:${state_version}" diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7e61c3e8..d222417b 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,7 +83,8 @@ + android:parentActivityName=".ui.modules.repos.RepoPagerActivity" + android:windowSoftInputMode="stateAlwaysHidden"> @@ -103,7 +104,8 @@ + android:parentActivityName=".ui.modules.repos.RepoPagerActivity" + android:windowSoftInputMode="stateAlwaysHidden"> @@ -124,7 +126,8 @@ + android:parentActivityName=".ui.modules.main.MainActivity" + android:windowSoftInputMode="stateAlwaysHidden"> diff --git a/app/src/main/java/com/fastaccess/helper/BundleConstant.java b/app/src/main/java/com/fastaccess/helper/BundleConstant.java index 5141828d..14281c7d 100644 --- a/app/src/main/java/com/fastaccess/helper/BundleConstant.java +++ b/app/src/main/java/com/fastaccess/helper/BundleConstant.java @@ -5,9 +5,15 @@ import android.support.annotation.StringDef; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; -import static com.fastaccess.helper.BundleConstant.ExtraTYpe.EDIT_GIST_COMMENT_EXTRA; -import static com.fastaccess.helper.BundleConstant.ExtraTYpe.FOR_RESULT_EXTRA; -import static com.fastaccess.helper.BundleConstant.ExtraTYpe.NEW_GIST_COMMENT_EXTRA; +import static com.fastaccess.helper.BundleConstant.ExtraType.EDIT_COMMIT_COMMENT_EXTRA; +import static com.fastaccess.helper.BundleConstant.ExtraType.EDIT_GIST_COMMENT_EXTRA; +import static com.fastaccess.helper.BundleConstant.ExtraType.EDIT_ISSUE_COMMENT_EXTRA; +import static com.fastaccess.helper.BundleConstant.ExtraType.EDIT_REVIEW_COMMENT_EXTRA; +import static com.fastaccess.helper.BundleConstant.ExtraType.FOR_RESULT_EXTRA; +import static com.fastaccess.helper.BundleConstant.ExtraType.NEW_COMMIT_COMMENT_EXTRA; +import static com.fastaccess.helper.BundleConstant.ExtraType.NEW_GIST_COMMENT_EXTRA; +import static com.fastaccess.helper.BundleConstant.ExtraType.NEW_ISSUE_COMMENT_EXTRA; +import static com.fastaccess.helper.BundleConstant.ExtraType.NEW_REVIEW_COMMENT_EXTRA; /** * Created by Kosh on 12 Nov 2016, 3:55 PM @@ -35,12 +41,18 @@ public class BundleConstant { @StringDef({ - NEW_GIST_COMMENT_EXTRA, + FOR_RESULT_EXTRA, EDIT_GIST_COMMENT_EXTRA, - FOR_RESULT_EXTRA + NEW_GIST_COMMENT_EXTRA, + EDIT_ISSUE_COMMENT_EXTRA, + NEW_ISSUE_COMMENT_EXTRA, + EDIT_COMMIT_COMMENT_EXTRA, + NEW_COMMIT_COMMENT_EXTRA, + NEW_REVIEW_COMMENT_EXTRA, + EDIT_REVIEW_COMMENT_EXTRA }) - @Retention(RetentionPolicy.SOURCE) public @interface ExtraTYpe { + @Retention(RetentionPolicy.SOURCE) public @interface ExtraType { String FOR_RESULT_EXTRA = "for_result_extra"; String EDIT_GIST_COMMENT_EXTRA = "edit_comment_extra"; String NEW_GIST_COMMENT_EXTRA = "new_gist_comment_extra"; diff --git a/app/src/main/java/com/fastaccess/provider/markdown/extension/emoji/internal/EmojiDelimiterProcessor.java b/app/src/main/java/com/fastaccess/provider/markdown/extension/emoji/internal/EmojiDelimiterProcessor.java index bd1ca5d8..2a80257d 100644 --- a/app/src/main/java/com/fastaccess/provider/markdown/extension/emoji/internal/EmojiDelimiterProcessor.java +++ b/app/src/main/java/com/fastaccess/provider/markdown/extension/emoji/internal/EmojiDelimiterProcessor.java @@ -30,13 +30,13 @@ public class EmojiDelimiterProcessor implements DelimiterProcessor { } @Override public void process(Text opener, Text closer, int delimiterCount) { - Node ins = new Emoji(); + Node emoji = new Emoji(); Node tmp = opener.getNext(); while (tmp != null && tmp != closer) { Node next = tmp.getNext(); - ins.appendChild(tmp); + emoji.appendChild(tmp); tmp = next; } - opener.insertAfter(ins); + opener.insertAfter(emoji); } } 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 571afcf8..5e60502f 100644 --- a/app/src/main/java/com/fastaccess/provider/scheme/SchemeParser.java +++ b/app/src/main/java/com/fastaccess/provider/scheme/SchemeParser.java @@ -31,6 +31,7 @@ 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.repos.wiki.WikiActivity; +import com.fastaccess.ui.modules.search.SearchActivity; import com.fastaccess.ui.modules.trending.TrendingActivity; import com.fastaccess.ui.modules.user.UserPagerActivity; @@ -338,6 +339,9 @@ public class SchemeParser { } else if (segments != null && !segments.isEmpty() && segments.size() > 1 && segments.get(0).equalsIgnoreCase("orgs")) { if ("invitation".equalsIgnoreCase(uri.getLastPathSegment())) { return null; + } else if ("search".equalsIgnoreCase(uri.getLastPathSegment())) { + String query = uri.getQueryParameter("q"); + return SearchActivity.getIntent(context, query); } else { return UserPagerActivity.createIntent(context, segments.get(1), true); } diff --git a/app/src/main/java/com/fastaccess/ui/modules/editor/EditorActivity.kt b/app/src/main/java/com/fastaccess/ui/modules/editor/EditorActivity.kt index c1e18c61..dd300dc2 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/editor/EditorActivity.kt +++ b/app/src/main/java/com/fastaccess/ui/modules/editor/EditorActivity.kt @@ -52,7 +52,7 @@ class EditorActivity : BaseActivity(), EditorMv @BindView(R.id.autocomplete) lateinit var mention: ListView @State - @BundleConstant.ExtraTYpe + @BundleConstant.ExtraType var extraType: String? = null @State var itemId: String? = null @@ -153,7 +153,7 @@ class EditorActivity : BaseActivity(), EditorMv if (menu.findItem(R.id.submit) != null) { menu.findItem(R.id.submit).isEnabled = true } - if (BundleConstant.ExtraTYpe.FOR_RESULT_EXTRA.equals(extraType, ignoreCase = true)) { + if (BundleConstant.ExtraType.FOR_RESULT_EXTRA.equals(extraType, ignoreCase = true)) { menu.findItem(R.id.submit).setIcon(R.drawable.ic_done) } return super.onPrepareOptionsMenu(menu) @@ -172,7 +172,6 @@ class EditorActivity : BaseActivity(), EditorMv override fun onBackPressed() { if (!InputHelper.isEmpty(editText)) { ViewHelper.hideKeyboard(editText) - CachedComments.instance.put(itemId, login, issueNumber, editText.savedText) } super.onBackPressed() } @@ -195,7 +194,7 @@ class EditorActivity : BaseActivity(), EditorMv override fun getEditText(): EditText = editText - override fun getSavedText(): CharSequence = editText.savedText + override fun getSavedText(): CharSequence? = editText.savedText override fun fragmentManager(): FragmentManager = supportFragmentManager @@ -209,11 +208,11 @@ class EditorActivity : BaseActivity(), EditorMv if (intent != null && intent.extras != null) { val bundle = intent.extras extraType = bundle.getString(BundleConstant.EXTRA_TYPE) - reviewComment = bundle.getParcelable(BundleConstant.REVIEW_EXTRA) + reviewComment = bundle.getParcelable(BundleConstant.REVIEW_EXTRA) itemId = bundle.getString(BundleConstant.ID) login = bundle.getString(BundleConstant.EXTRA_TWO) - if (extraType.equals(BundleConstant.ExtraTYpe.EDIT_COMMIT_COMMENT_EXTRA, ignoreCase = true) - || extraType.equals(BundleConstant.ExtraTYpe.NEW_COMMIT_COMMENT_EXTRA, ignoreCase = true)) { + if (extraType.equals(BundleConstant.ExtraType.EDIT_COMMIT_COMMENT_EXTRA, ignoreCase = true) + || extraType.equals(BundleConstant.ExtraType.NEW_COMMIT_COMMENT_EXTRA, ignoreCase = true)) { sha = bundle.getString(BundleConstant.EXTRA_THREE) } else { issueNumber = bundle.getInt(BundleConstant.EXTRA_THREE) @@ -231,8 +230,5 @@ class EditorActivity : BaseActivity(), EditorMv } participants = bundle.getStringArrayList("participants") } - if (InputHelper.isEmpty(editText)) { - editText.setText(CachedComments.instance.get(itemId, login, issueNumber)) - } } } \ No newline at end of file diff --git a/app/src/main/java/com/fastaccess/ui/modules/editor/EditorMvp.kt b/app/src/main/java/com/fastaccess/ui/modules/editor/EditorMvp.kt index 191e168e..11417617 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/editor/EditorMvp.kt +++ b/app/src/main/java/com/fastaccess/ui/modules/editor/EditorMvp.kt @@ -37,7 +37,7 @@ interface EditorMvp { fun onEditCommitComment(savedText: CharSequence, itemId: String, login: String, id: Long) - fun onHandleSubmission(savedText: CharSequence?, @BundleConstant.ExtraTYpe extraType: String?, + fun onHandleSubmission(savedText: CharSequence?, @BundleConstant.ExtraType extraType: String?, itemId: String?, id: Long, login: String?, issueNumber: Int, sha: String?, reviewComment: EditReviewCommentModel?) } diff --git a/app/src/main/java/com/fastaccess/ui/modules/editor/EditorPresenter.kt b/app/src/main/java/com/fastaccess/ui/modules/editor/EditorPresenter.kt index 25b69783..149dd7e2 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/editor/EditorPresenter.kt +++ b/app/src/main/java/com/fastaccess/ui/modules/editor/EditorPresenter.kt @@ -4,7 +4,7 @@ import com.fastaccess.data.dao.CommentRequestModel import com.fastaccess.data.dao.EditReviewCommentModel import com.fastaccess.data.dao.model.Comment import com.fastaccess.helper.BundleConstant -import com.fastaccess.helper.BundleConstant.ExtraTYpe.* +import com.fastaccess.helper.BundleConstant.ExtraType.* import com.fastaccess.helper.InputHelper import com.fastaccess.provider.rest.RestProvider import com.fastaccess.ui.base.mvp.presenter.BasePresenter @@ -33,7 +33,7 @@ class EditorPresenter : BasePresenter(), EditorMvp.Presenter { } } - override fun onHandleSubmission(savedText: CharSequence?, @BundleConstant.ExtraTYpe extraType: String?, + override fun onHandleSubmission(savedText: CharSequence?, @BundleConstant.ExtraType extraType: String?, itemId: String?, id: Long, login: String?, issueNumber: Int, sha: String?, reviewComment: EditReviewCommentModel?) { if (extraType == null) { diff --git a/app/src/main/java/com/fastaccess/ui/modules/editor/comment/CommentEditorFragment.kt b/app/src/main/java/com/fastaccess/ui/modules/editor/comment/CommentEditorFragment.kt new file mode 100644 index 00000000..bd988530 --- /dev/null +++ b/app/src/main/java/com/fastaccess/ui/modules/editor/comment/CommentEditorFragment.kt @@ -0,0 +1,121 @@ +package com.fastaccess.ui.modules.editor.comment + +import android.app.Activity +import android.content.Context +import android.content.Intent +import android.os.Bundle +import android.support.v4.app.FragmentManager +import android.view.View +import android.widget.EditText +import butterknife.BindView +import butterknife.OnClick +import com.fastaccess.R +import com.fastaccess.helper.BundleConstant +import com.fastaccess.helper.Bundler +import com.fastaccess.helper.InputHelper +import com.fastaccess.helper.ViewHelper +import com.fastaccess.provider.emoji.Emoji +import com.fastaccess.ui.base.BaseFragment +import com.fastaccess.ui.base.mvp.BaseMvp +import com.fastaccess.ui.base.mvp.presenter.BasePresenter +import com.fastaccess.ui.modules.editor.EditorActivity +import com.fastaccess.ui.modules.editor.emoji.EmojiMvp +import com.fastaccess.ui.widgets.markdown.MarkDownLayout +import com.fastaccess.ui.widgets.markdown.MarkdownEditText + +/** + * Created by kosh on 21/08/2017. + */ +class CommentEditorFragment : BaseFragment>(), MarkDownLayout.MarkdownListener, + EmojiMvp.EmojiCallback { + + @BindView(R.id.commentBox) lateinit var commentBox: View + @BindView(R.id.markdDownLayout) lateinit var markdDownLayout: MarkDownLayout + @BindView(R.id.commentText) lateinit var commentText: MarkdownEditText + private var commentListener: CommentListener? = null + + @OnClick(R.id.sendComment) internal fun onComment() { + if (!InputHelper.isEmpty(getEditText())) { + commentListener?.onSendActionClicked(InputHelper.toString(getEditText()), arguments?.getBundle(BundleConstant.ITEM)) + getEditText().setText("") + ViewHelper.hideKeyboard(getEditText()) + } + } + + @OnClick(R.id.fullScreenComment) internal fun onExpandScreen() { + val intent = Intent(context, EditorActivity::class.java) + intent.putExtras(Bundler.start() + .put(BundleConstant.EXTRA_TYPE, BundleConstant.ExtraType.FOR_RESULT_EXTRA) + .put(BundleConstant.EXTRA, getEditText().text.toString()) + .end()) + startActivityForResult(intent, BundleConstant.REQUEST_CODE) + } + + override fun onAttach(context: Context?) { + super.onAttach(context) + if (parentFragment is CommentListener) { + commentListener = parentFragment as CommentListener + } else if (context is CommentListener) { + commentListener = context + } + } + + override fun onDetach() { + commentListener = null + super.onDetach() + } + + override fun providePresenter(): BasePresenter = BasePresenter() + + override fun fragmentLayout(): Int = R.layout.comment_box_layout + + override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) { + markdDownLayout.markdownListener = this + if (savedInstanceState == null) { + commentText.setText(arguments?.getBundle(BundleConstant.ITEM)?.getString(BundleConstant.EXTRA)) + } + } + + override fun getEditText(): EditText = commentText + + override fun fragmentManager(): FragmentManager = childFragmentManager + + override fun getSavedText(): CharSequence? = commentText.savedText + + override fun onEmojiAdded(emoji: Emoji?) = markdDownLayout.onEmojiAdded(emoji) + + fun onAddUserName(username: String) { + getEditText().setText(if (getEditText().text.isNullOrBlank()) { + "@$username" + } else { + "${getEditText().text} @$username" + }) + getEditText().setSelection(getEditText().text.length) + } + + interface CommentListener { + fun onSendActionClicked(text: String, bundle: Bundle?) + fun onTagUser(username: String) + } + + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + super.onActivityResult(requestCode, resultCode, data) + if (resultCode == Activity.RESULT_OK) { + if (requestCode == BundleConstant.REQUEST_CODE) { + val text = data?.extras?.getCharSequence(BundleConstant.EXTRA) + getEditText().setText(text) + getEditText().setSelection(getEditText().text.length) + } + } + } + + companion object { + fun newInstance(bundle: Bundle?): CommentEditorFragment { + val fragment = CommentEditorFragment() + bundle?.let { + fragment.arguments = Bundler.start().put(BundleConstant.ITEM, bundle).end() + } + return fragment + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/fastaccess/ui/modules/gists/create/dialog/AddGistBottomSheetDialog.kt b/app/src/main/java/com/fastaccess/ui/modules/gists/create/dialog/AddGistBottomSheetDialog.kt index 98743428..717bd0fe 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/gists/create/dialog/AddGistBottomSheetDialog.kt +++ b/app/src/main/java/com/fastaccess/ui/modules/gists/create/dialog/AddGistBottomSheetDialog.kt @@ -77,7 +77,7 @@ class AddGistBottomSheetDialog : BaseDialogFragment @BindView(R.id.edit) View edit; private int accentColor; private int iconColor; + private CommentEditorFragment commentEditorFragment; public static Intent createIntent(@NonNull Context context, @NonNull String gistId, boolean isEnterprise) { Intent intent = new Intent(context, GistActivity.class); @@ -72,17 +74,6 @@ public class GistActivity extends BaseActivity return intent; } - @OnClick(R.id.fab) void onAddComment() { - if (pager != null && pager.getAdapter() != null) { - GistCommentsFragment view = (GistCommentsFragment) pager.getAdapter().instantiateItem(pager, 1); - if (view != null) { - view.onStartNewComment(); - } else { - //TODO - } - } - } - @OnClick(R.id.detailsIcon) void onTitleClick() { if (getPresenter().getGist() != null && !InputHelper.isEmpty(getPresenter().getGist().getDescription())) MessageDialogView.newInstance(getString(R.string.details), getPresenter().getGist().getDescription(), false, true) @@ -141,6 +132,8 @@ public class GistActivity extends BaseActivity @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + fab.hide(); + commentEditorFragment = (CommentEditorFragment) getSupportFragmentManager().findFragmentById(R.id.commentFragment); accentColor = ViewHelper.getAccentColor(this); iconColor = ViewHelper.getIconColor(this); if (savedInstanceState == null) { @@ -273,11 +266,24 @@ public class GistActivity extends BaseActivity } } + @Override public void onSendActionClicked(@NonNull String text, Bundle bundle) { + if (pager == null || pager.getAdapter() == null) return; + GistCommentsFragment view = (GistCommentsFragment) pager.getAdapter().instantiateItem(pager, 1); + if (view != null) { + view.onHandleComment(text, bundle); + } + } + + @Override public void onTagUser(@NonNull String username) { + commentEditorFragment.onAddUserName(username); + } + + private void hideShowFab() { if (pager.getCurrentItem() == 1) { - fab.show(); + getSupportFragmentManager().beginTransaction().show(commentEditorFragment).commit(); } else { - fab.hide(); + getSupportFragmentManager().beginTransaction().hide(commentEditorFragment).commit(); } } } diff --git a/app/src/main/java/com/fastaccess/ui/modules/gists/gist/GistMvp.java b/app/src/main/java/com/fastaccess/ui/modules/gists/gist/GistMvp.java index 1fe1ad7c..e6e0afca 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/gists/gist/GistMvp.java +++ b/app/src/main/java/com/fastaccess/ui/modules/gists/gist/GistMvp.java @@ -6,6 +6,7 @@ import android.support.annotation.Nullable; import com.fastaccess.data.dao.model.Gist; import com.fastaccess.ui.base.mvp.BaseMvp; +import com.fastaccess.ui.modules.editor.comment.CommentEditorFragment; /** * Created by Kosh on 12 Nov 2016, 12:17 PM @@ -13,7 +14,7 @@ import com.fastaccess.ui.base.mvp.BaseMvp; interface GistMvp { - interface View extends BaseMvp.FAView { + interface View extends BaseMvp.FAView, CommentEditorFragment.CommentListener { void onSuccessDeleted(); void onErrorDeleting(); diff --git a/app/src/main/java/com/fastaccess/ui/modules/gists/gist/comments/GistCommentsFragment.java b/app/src/main/java/com/fastaccess/ui/modules/gists/gist/comments/GistCommentsFragment.java index 95e6f410..64870fa7 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/gists/gist/comments/GistCommentsFragment.java +++ b/app/src/main/java/com/fastaccess/ui/modules/gists/gist/comments/GistCommentsFragment.java @@ -1,6 +1,7 @@ package com.fastaccess.ui.modules.gists.gist.comments; import android.app.Activity; +import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.support.annotation.NonNull; @@ -22,6 +23,7 @@ import com.fastaccess.provider.timeline.CommentsHelper; import com.fastaccess.ui.adapter.CommentsAdapter; import com.fastaccess.ui.base.BaseFragment; import com.fastaccess.ui.modules.editor.EditorActivity; +import com.fastaccess.ui.modules.editor.comment.CommentEditorFragment; import com.fastaccess.ui.widgets.StateLayout; import com.fastaccess.ui.widgets.dialog.MessageDialogView; import com.fastaccess.ui.widgets.recyclerview.DynamicRecyclerView; @@ -31,8 +33,7 @@ import java.util.List; import butterknife.BindView; -import static com.fastaccess.helper.BundleConstant.ExtraTYpe.EDIT_GIST_COMMENT_EXTRA; -import static com.fastaccess.helper.BundleConstant.ExtraTYpe.NEW_GIST_COMMENT_EXTRA; +import static com.fastaccess.helper.BundleConstant.ExtraType.EDIT_GIST_COMMENT_EXTRA; /** * Created by Kosh on 11 Nov 2016, 12:36 PM @@ -45,6 +46,7 @@ public class GistCommentsFragment extends BaseFragment onLoadMore; @@ -55,6 +57,23 @@ public class GistCommentsFragment extends BaseFragment implemen } } + @Override public void onHandleComment(@NonNull String text, @Nullable Bundle bundle, String gistId) { + CommentRequestModel model = new CommentRequestModel(); + model.setBody(text); + makeRestCall(RestProvider.getGistService(isEnterprise()).createGistComment(gistId, model), + comment -> sendToView(view -> view.onAddNewComment(comment))); + } + @Override public void onItemClick(int position, View v, Comment item) { if (getView() == null) return; if (v.getId() == R.id.toggle || v.getId() == R.id.toggleHolder) { diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/code/commit/details/CommitPagerActivity.java b/app/src/main/java/com/fastaccess/ui/modules/repos/code/commit/details/CommitPagerActivity.java index ff342683..3642354e 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/repos/code/commit/details/CommitPagerActivity.java +++ b/app/src/main/java/com/fastaccess/ui/modules/repos/code/commit/details/CommitPagerActivity.java @@ -31,6 +31,7 @@ import com.fastaccess.provider.timeline.HtmlHelper; import com.fastaccess.ui.adapter.FragmentsPagerAdapter; import com.fastaccess.ui.base.BaseActivity; import com.fastaccess.ui.base.BaseFragment; +import com.fastaccess.ui.modules.editor.comment.CommentEditorFragment; import com.fastaccess.ui.modules.repos.RepoPagerActivity; import com.fastaccess.ui.modules.repos.code.commit.details.comments.CommitCommentsFragment; import com.fastaccess.ui.widgets.AvatarLayout; @@ -63,6 +64,7 @@ public class CommitPagerActivity extends BaseActivity toggleMap = new LinkedHashMap<>(); - + private CommentEditorFragment.CommentListener commentsCallback; private IssuesTimelineAdapter adapter; private OnLoadMore onLoadMore; @@ -61,6 +63,23 @@ public class CommitCommentsFragment extends BaseFragment impl return getReactionsProvider().isCallingApi(id, vId); } + @Override public void onHandleComment(@NonNull String text, @Nullable Bundle bundle) { + CommentRequestModel model = new CommentRequestModel(); + model.setBody(text); + makeRestCall(RestProvider.getRepoService(isEnterprise()).postCommitComment(login, repoId, sha, model), + comment -> sendToView(view -> view.addComment(comment))); + } + @Override public void onItemClick(int position, View v, TimelineModel timelineModel) { if (getView() != null) { Comment item = timelineModel.getComment(); diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/issues/create/CreateIssueActivity.java b/app/src/main/java/com/fastaccess/ui/modules/repos/issues/create/CreateIssueActivity.java index b98cd354..75f5de0d 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/repos/issues/create/CreateIssueActivity.java +++ b/app/src/main/java/com/fastaccess/ui/modules/repos/issues/create/CreateIssueActivity.java @@ -285,7 +285,7 @@ public class CreateIssueActivity extends BaseActivity { + AssigneesMvp.SelectedAssigneesListener, IssuePrCallback, + CommentEditorFragment.CommentListener { void onSetupIssue(boolean isUpdate); void showSuccessIssueActionMsg(boolean isClose); @@ -81,5 +83,4 @@ public interface IssuePagerMvp { interface IssuePrCallback { @Nullable T getData(); } - } 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 de7731eb..3502822b 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 @@ -27,6 +27,7 @@ import com.fastaccess.ui.adapter.IssuesTimelineAdapter; 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.editor.comment.CommentEditorFragment; import com.fastaccess.ui.modules.repos.issues.issue.details.IssuePagerMvp; import com.fastaccess.ui.modules.repos.reactions.ReactionsDialogFragment; import com.fastaccess.ui.widgets.AppbarRefreshLayout; @@ -55,6 +56,7 @@ public class IssueTimelineFragment extends BaseFragment onLoadMore; private IssuePagerMvp.IssuePrCallback issueCallback; + private CommentEditorFragment.CommentListener commentsCallback; @NonNull public static IssueTimelineFragment newInstance() { return new IssueTimelineFragment(); @@ -67,13 +69,22 @@ public class IssueTimelineFragment extends BaseFragment, @@ -69,5 +73,7 @@ public interface IssueTimelineMvp { void onHandleReaction(@IdRes int viewId, long id, @ReactionsProvider.ReactionType int reactionType); boolean isCallingApi(long id, int vId); + + void onHandleComment(@NonNull String text, @Nullable Bundle bundle); } } 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 c9c5b486..f907237b 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 @@ -9,6 +9,7 @@ import android.view.View; import android.widget.PopupMenu; import com.fastaccess.R; +import com.fastaccess.data.dao.CommentRequestModel; import com.fastaccess.data.dao.TimelineModel; import com.fastaccess.data.dao.model.Comment; import com.fastaccess.data.dao.model.Issue; @@ -205,6 +206,20 @@ import lombok.Getter; return getReactionsProvider().isCallingApi(id, vId); } + @Override public void onHandleComment(@NonNull String text, @Nullable Bundle bundle) { + if (getView() == null) return; + Issue issue = getView().getIssue(); + if (issue != null) { + if (bundle == null) { + CommentRequestModel commentRequestModel = new CommentRequestModel(); + commentRequestModel.setBody(text); + makeRestCall(RestProvider.getIssueService(isEnterprise()).createIssueComment(issue.getLogin(), issue.getRepoId(), + issue.getNumber(), commentRequestModel), + comment -> sendToView(view -> view.addNewComment(TimelineModel.constructComment(comment)))); + } + } + } + @NonNull private ReactionsProvider getReactionsProvider() { if (reactionsProvider == null) { reactionsProvider = new ReactionsProvider(); 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 61ad2689..6b9bd1fd 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 @@ -36,6 +36,7 @@ import com.fastaccess.provider.scheme.LinkParserHelper; import com.fastaccess.ui.adapter.FragmentsPagerAdapter; import com.fastaccess.ui.base.BaseActivity; import com.fastaccess.ui.base.BaseFragment; +import com.fastaccess.ui.modules.editor.comment.CommentEditorFragment; import com.fastaccess.ui.modules.main.premium.PremiumActivity; import com.fastaccess.ui.modules.repos.RepoPagerActivity; import com.fastaccess.ui.modules.repos.RepoPagerMvp; @@ -79,6 +80,7 @@ public class PullRequestPagerActivity extends BaseActivity, PullRequestFilesMvp.PatchCallback { + IssuePagerMvp.IssuePrCallback, PullRequestFilesMvp.PatchCallback, + CommentEditorFragment.CommentListener { void onSetupIssue(boolean update); @@ -70,6 +72,7 @@ public interface PullRequestPagerMvp { @NonNull SpannableBuilder getMergeBy(@NonNull PullRequest pullRequest, @NonNull Context context); void onMerge(String s, String msg); + void onPutLabels(@NonNull ArrayList labels); void onPutMilestones(@NonNull MilestoneModel milestone); 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 a3300b8f..ae774409 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 @@ -26,6 +26,7 @@ import com.fastaccess.ui.adapter.PullRequestTimelineAdapter; 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.editor.comment.CommentEditorFragment; import com.fastaccess.ui.modules.repos.issues.issue.details.IssuePagerMvp; import com.fastaccess.ui.modules.repos.reactions.ReactionsDialogFragment; import com.fastaccess.ui.widgets.AppbarRefreshLayout; @@ -54,6 +55,7 @@ public class PullRequestTimelineFragment extends BaseFragment toggleMap = new LinkedHashMap<>(); private PullRequestTimelineAdapter adapter; private OnLoadMore onLoadMore; + private CommentEditorFragment.CommentListener commentsCallback; private IssuePagerMvp.IssuePrCallback issueCallback; @@ -71,10 +73,19 @@ public class PullRequestTimelineFragment extends BaseFragment, @@ -91,5 +91,7 @@ public interface PullRequestTimelineMvp { boolean isMerged(PullRequest pullRequest); boolean isCallingApi(long id, int vId); + + void onHandleComment(@NonNull String text, @Nullable Bundle bundle); } } 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 3b7dff60..06b049e3 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 @@ -13,6 +13,7 @@ import com.apollographql.apollo.api.Response; import com.apollographql.apollo.rx2.Rx2Apollo; import com.fastaccess.App; import com.fastaccess.R; +import com.fastaccess.data.dao.CommentRequestModel; import com.fastaccess.data.dao.EditReviewCommentModel; import com.fastaccess.data.dao.ReviewCommentModel; import com.fastaccess.data.dao.model.Comment; @@ -210,6 +211,22 @@ public class PullRequestTimelinePresenter extends BasePresenter { + }); + } else { + + } + } + } + @Override public boolean isPreviouslyReacted(long commentId, int vId) { return getReactionsProvider().isPreviouslyReacted(commentId, vId); } 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 e6b12434..5339f4ba 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 @@ -1,5 +1,7 @@ package com.fastaccess.ui.modules.search; +import android.content.Context; +import android.content.Intent; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; @@ -45,11 +47,18 @@ public class SearchActivity extends BaseActivity tabsCountSet = new LinkedHashSet<>(); + private NumberFormat numberFormat = NumberFormat.getNumberInstance(); private ArrayAdapter adapter; + + public static Intent getIntent(@NonNull Context context, @Nullable String query) { + Intent intent = new Intent(context, SearchActivity.class); + intent.putExtra("search", query); + return intent; + } + @OnTextChanged(value = R.id.searchEditText, callback = OnTextChanged.Callback.AFTER_TEXT_CHANGED) void onTextChange(Editable s) { String text = s.toString(); @@ -105,11 +114,11 @@ public class SearchActivity extends BaseActivity? = null constructor(context: Context) : super(context) constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) - fun initListView(mention: ListView?, listDivider: View?, participants: ArrayList?) { this.mention = mention this.listDivider = listDivider @@ -48,9 +47,9 @@ class MarkdownEditText : FontEditText { override fun onTextChanged(text: CharSequence?, start: Int, lengthBefore: Int, lengthAfter: Int) { super.onTextChanged(text, start, lengthBefore, lengthAfter) - text?.let { - if (isEnabled) { - savedText = it + if (isEnabled) { + savedText = text + text?.let { mention(it) } } @@ -86,7 +85,8 @@ class MarkdownEditText : FontEditText { it.visibility = if (inMentionMode > 0) View.VISIBLE else GONE listDivider!!.visibility = it.visibility } - } catch (ignored: Exception) { } + } catch (ignored: Exception) { + } } private fun updateMentionList(mentioning: String) { @@ -97,4 +97,5 @@ class MarkdownEditText : FontEditText { mention?.setAdapter(adapter) } } -} \ No newline at end of file + +} diff --git a/app/src/main/res/drawable/ic_fullscreen.xml b/app/src/main/res/drawable/ic_fullscreen.xml new file mode 100644 index 00000000..449383b2 --- /dev/null +++ b/app/src/main/res/drawable/ic_fullscreen.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layouts/main_layouts/layout/comment_box_layout.xml b/app/src/main/res/layouts/main_layouts/layout/comment_box_layout.xml new file mode 100644 index 00000000..a8fa2539 --- /dev/null +++ b/app/src/main/res/layouts/main_layouts/layout/comment_box_layout.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layouts/main_layouts/layout/commit_pager_activity.xml b/app/src/main/res/layouts/main_layouts/layout/commit_pager_activity.xml index 7d4d9cb0..6432aba9 100644 --- a/app/src/main/res/layouts/main_layouts/layout/commit_pager_activity.xml +++ b/app/src/main/res/layouts/main_layouts/layout/commit_pager_activity.xml @@ -8,163 +8,178 @@ android:layout_height="match_parent" android:fitsSystemWindows="true"> - + android:layout_height="match_parent" + android:focusableInTouchMode="true" + android:orientation="vertical"> - + android:layout_height="0dp" + android:layout_weight="1"> - - - + + + + + + + + + + + + + + + + + + + + + + android:orientation="horizontal"> + android:minHeight="24dp" + android:minWidth="24dp" + android:padding="@dimen/spacing_micro" + tools:text="1"/> + android:layout_gravity="center" + android:layout_marginStart="@dimen/spacing_normal" + android:layout_weight="1" + android:text="@string/pull_request_reviews"/> + android:padding="@dimen/spacing_normal" + android:text="@string/submit" + android:textAppearance="@style/TextAppearance.AppCompat.Small"/> + - - + + - + android:layout_gravity="end|bottom" + android:layout_margin="@dimen/fab_margin" + android:src="@drawable/ic_comment" + android:tint="@color/white" + app:fabSize="auto"/> - + - - - - - - - - - - - - - - - - - + tools:layout="@layout/comment_box_layout"/> + \ No newline at end of file diff --git a/app/src/main/res/layouts/main_layouts/layout/gists_pager_layout.xml b/app/src/main/res/layouts/main_layouts/layout/gists_pager_layout.xml index 5efa15ab..c72c8257 100644 --- a/app/src/main/res/layouts/main_layouts/layout/gists_pager_layout.xml +++ b/app/src/main/res/layouts/main_layouts/layout/gists_pager_layout.xml @@ -3,6 +3,7 @@ android:id="@+id/drawer" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true"> @@ -10,6 +11,7 @@ - + diff --git a/app/src/main/res/layouts/main_layouts/layout/issue_pager_activity.xml b/app/src/main/res/layouts/main_layouts/layout/issue_pager_activity.xml index b742ce20..24b0fd93 100644 --- a/app/src/main/res/layouts/main_layouts/layout/issue_pager_activity.xml +++ b/app/src/main/res/layouts/main_layouts/layout/issue_pager_activity.xml @@ -2,16 +2,16 @@ - + + + \ No newline at end of file diff --git a/app/src/main/res/layouts/main_layouts/layout/markdown_buttons_layout.xml b/app/src/main/res/layouts/main_layouts/layout/markdown_buttons_layout.xml index 3a81929f..871ef449 100644 --- a/app/src/main/res/layouts/main_layouts/layout/markdown_buttons_layout.xml +++ b/app/src/main/res/layouts/main_layouts/layout/markdown_buttons_layout.xml @@ -1,8 +1,5 @@ - - + Google Play Service unavailable Edit Gist Content + expand