From e095e990f71fb783f9f4abcabcc85fa2a0a237df Mon Sep 17 00:00:00 2001 From: k0shk0sh Date: Sun, 1 Oct 2017 09:47:35 +0200 Subject: [PATCH] this commit fixes #1037 fixes #1034 fixes #1017 closes #996 --- .../provider/timeline/HtmlHelper.java | 7 + .../timeline/handler/HeaderHandler.kt | 33 +++ .../timeline/handler/QouteHandler.java | 4 +- .../viewholder/IssueDetailsViewHolder.java | 26 ++- .../ui/modules/main/MainActivity.java | 1 - .../layout/issue_detail_header_row_item.xml | 213 ++++++++++-------- app/src/main/res/values/strings.xml | 17 -- build.gradle | 6 +- 8 files changed, 192 insertions(+), 115 deletions(-) create mode 100644 app/src/main/java/com/fastaccess/provider/timeline/handler/HeaderHandler.kt diff --git a/app/src/main/java/com/fastaccess/provider/timeline/HtmlHelper.java b/app/src/main/java/com/fastaccess/provider/timeline/HtmlHelper.java index 2a8df9e3..99e9ad1b 100644 --- a/app/src/main/java/com/fastaccess/provider/timeline/HtmlHelper.java +++ b/app/src/main/java/com/fastaccess/provider/timeline/HtmlHelper.java @@ -19,6 +19,7 @@ import com.fastaccess.provider.scheme.SchemeParser; import com.fastaccess.provider.timeline.handler.BetterLinkMovementExtended; import com.fastaccess.provider.timeline.handler.DrawableHandler; import com.fastaccess.provider.timeline.handler.EmojiHandler; +import com.fastaccess.provider.timeline.handler.HeaderHandler; import com.fastaccess.provider.timeline.handler.HrHandler; import com.fastaccess.provider.timeline.handler.ItalicHandler; import com.fastaccess.provider.timeline.handler.LinkHandler; @@ -106,6 +107,12 @@ public class HtmlHelper { mySpanner.registerHandler("hr", new HrHandler(windowBackground, width, false)); mySpanner.registerHandler("emoji", new EmojiHandler()); mySpanner.registerHandler("mention", new LinkHandler()); + mySpanner.registerHandler("h1", new HeaderHandler(1.5F)); + mySpanner.registerHandler("h2", new HeaderHandler(1.4F)); + mySpanner.registerHandler("h3", new HeaderHandler(1.3F)); + mySpanner.registerHandler("h4", new HeaderHandler(1.2F)); + mySpanner.registerHandler("h5", new HeaderHandler(1.1F)); + mySpanner.registerHandler("h6", new HeaderHandler(1.0F)); if (width > 0) { TableHandler tableHandler = new TableHandler(); tableHandler.setTextColor(ViewHelper.generateTextColor(windowBackground)); diff --git a/app/src/main/java/com/fastaccess/provider/timeline/handler/HeaderHandler.kt b/app/src/main/java/com/fastaccess/provider/timeline/handler/HeaderHandler.kt new file mode 100644 index 00000000..32c61f8e --- /dev/null +++ b/app/src/main/java/com/fastaccess/provider/timeline/handler/HeaderHandler.kt @@ -0,0 +1,33 @@ +package com.fastaccess.provider.timeline.handler + +import android.text.SpannableStringBuilder +import android.text.style.RelativeSizeSpan +import net.nightwhistler.htmlspanner.TagNodeHandler +import net.nightwhistler.htmlspanner.spans.FontFamilySpan +import org.htmlcleaner.TagNode + +/** + * Created by Kosh on 29.09.17. + */ +class HeaderHandler(val size: Float) : TagNodeHandler() { + + override fun beforeChildren(node: TagNode?, builder: SpannableStringBuilder?) { + appendNewLine(builder) + } + + override fun handleTagNode(node: TagNode, builder: SpannableStringBuilder, start: Int, end: Int) { + builder.setSpan(RelativeSizeSpan(this.size), start, end, 33) + val originalSpan = this.getFontFamilySpan(builder, start, end) + val boldSpan: FontFamilySpan + if (originalSpan == null) { + boldSpan = FontFamilySpan(this.spanner.defaultFont) + } else { + boldSpan = FontFamilySpan(originalSpan.fontFamily) + boldSpan.isItalic = originalSpan.isItalic + } + + boldSpan.isBold = true + builder.setSpan(boldSpan, start, end, 33) + appendNewLine(builder) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/fastaccess/provider/timeline/handler/QouteHandler.java b/app/src/main/java/com/fastaccess/provider/timeline/handler/QouteHandler.java index 60fdcdd4..2b098cec 100644 --- a/app/src/main/java/com/fastaccess/provider/timeline/handler/QouteHandler.java +++ b/app/src/main/java/com/fastaccess/provider/timeline/handler/QouteHandler.java @@ -21,8 +21,10 @@ import lombok.AllArgsConstructor; public void handleTagNode(TagNode node, SpannableStringBuilder builder, int start, int end) { builder.append("\n"); - builder.setSpan(new MarkDownQuoteSpan(color), start, builder.length(), 33); + builder.setSpan(new MarkDownQuoteSpan(color), start + 1, builder.length() - 1, 33); builder.append("\n"); } + + } diff --git a/app/src/main/java/com/fastaccess/ui/adapter/viewholder/IssueDetailsViewHolder.java b/app/src/main/java/com/fastaccess/ui/adapter/viewholder/IssueDetailsViewHolder.java index 8e51f713..440776b4 100644 --- a/app/src/main/java/com/fastaccess/ui/adapter/viewholder/IssueDetailsViewHolder.java +++ b/app/src/main/java/com/fastaccess/ui/adapter/viewholder/IssueDetailsViewHolder.java @@ -1,5 +1,6 @@ package com.fastaccess.ui.adapter.viewholder; +import android.graphics.Color; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.transition.ChangeBounds; @@ -10,6 +11,7 @@ import android.view.ViewGroup; import android.widget.TextView; import com.fastaccess.R; +import com.fastaccess.data.dao.LabelModel; import com.fastaccess.data.dao.ReactionsModel; import com.fastaccess.data.dao.TimelineModel; import com.fastaccess.data.dao.model.Issue; @@ -17,6 +19,7 @@ import com.fastaccess.data.dao.model.PullRequest; import com.fastaccess.data.dao.model.User; import com.fastaccess.helper.InputHelper; import com.fastaccess.helper.ParseDateFormat; +import com.fastaccess.helper.ViewHelper; import com.fastaccess.provider.scheme.LinkParserHelper; import com.fastaccess.provider.timeline.CommentsHelper; import com.fastaccess.provider.timeline.HtmlHelper; @@ -25,11 +28,13 @@ import com.fastaccess.ui.adapter.callback.OnToggleView; import com.fastaccess.ui.adapter.callback.ReactionsCallback; import com.fastaccess.ui.widgets.AvatarLayout; import com.fastaccess.ui.widgets.FontTextView; +import com.fastaccess.ui.widgets.LabelSpan; import com.fastaccess.ui.widgets.SpannableBuilder; import com.fastaccess.ui.widgets.recyclerview.BaseRecyclerAdapter; import com.fastaccess.ui.widgets.recyclerview.BaseViewHolder; import java.util.Date; +import java.util.List; import butterknife.BindView; @@ -56,6 +61,8 @@ public class IssueDetailsViewHolder extends BaseViewHolder { @BindView(R.id.emojiesList) View emojiesList; @BindView(R.id.reactionsText) TextView reactionsText; @BindView(R.id.owner) TextView owner; + @BindView(R.id.labels) TextView labels; + @BindView(R.id.labelsHolder) View labelsHolder; private OnToggleView onToggleView; private ReactionsCallback reactionsCallback; private ViewGroup viewGroup; @@ -172,11 +179,13 @@ public class IssueDetailsViewHolder extends BaseViewHolder { private void bind(@NonNull Issue issueModel) { setup(issueModel.getUser(), issueModel.getBodyHtml(), issueModel.getReactions()); setupDate(issueModel.getCreatedAt(), issueModel.getUpdatedAt()); + setupLabels(issueModel.getLabels()); } private void bind(@NonNull PullRequest pullRequest) { setup(pullRequest.getUser(), pullRequest.getBodyHtml(), pullRequest.getReactions()); setupDate(pullRequest.getCreatedAt(), pullRequest.getUpdatedAt()); + setupLabels(pullRequest.getLabels()); } private void setup(User user, String description, ReactionsModel reactionsModel) { @@ -194,7 +203,7 @@ public class IssueDetailsViewHolder extends BaseViewHolder { appendEmojies(reactionsModel); } if (!InputHelper.isEmpty(description)) { - HtmlHelper.htmlIntoTextView(comment, description, viewGroup.getWidth()); + HtmlHelper.htmlIntoTextView(comment, description, viewGroup.getWidth() - ViewHelper.dpToPx(itemView.getContext(), 24)); } else { comment.setText(R.string.no_description_provided); } @@ -204,6 +213,21 @@ public class IssueDetailsViewHolder extends BaseViewHolder { date.setText(ParseDateFormat.getTimeAgo(createdDate)); } + private void setupLabels(@Nullable List labelList) { + if (labelList != null && !labelList.isEmpty()) { + SpannableBuilder builder = SpannableBuilder.builder(); + for (LabelModel labelModel : labelList) { + int color = Color.parseColor("#" + labelModel.getColor()); + builder.append(" ").append(" " + labelModel.getName() + " ", new LabelSpan(color)); + } + labels.setText(builder); + labelsHolder.setVisibility(View.VISIBLE); + } else { + labels.setText(""); + labelsHolder.setVisibility(View.GONE); + } + } + private void appendEmojies(@NonNull ReactionsModel reaction) { SpannableBuilder spannableBuilder = SpannableBuilder.builder(); reactionsText.setText(""); diff --git a/app/src/main/java/com/fastaccess/ui/modules/main/MainActivity.java b/app/src/main/java/com/fastaccess/ui/modules/main/MainActivity.java index e3b7f20e..e50ec8a9 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/main/MainActivity.java +++ b/app/src/main/java/com/fastaccess/ui/modules/main/MainActivity.java @@ -34,7 +34,6 @@ import butterknife.OnClick; import it.sephiroth.android.library.bottomnavigation.BottomNavigation; import shortbread.Shortcut; -@Shortcut(id = "feeds", icon = R.drawable.ic_app_shortcut_github, shortLabelRes = R.string.feeds, rank = 1) public class MainActivity extends BaseActivity implements MainMvp.View { @State @MainMvp.NavigationType int navType = MainMvp.FEEDS; diff --git a/app/src/main/res/layouts/row_layouts/layout/issue_detail_header_row_item.xml b/app/src/main/res/layouts/row_layouts/layout/issue_detail_header_row_item.xml index 66969400..4509ae6b 100644 --- a/app/src/main/res/layouts/row_layouts/layout/issue_detail_header_row_item.xml +++ b/app/src/main/res/layouts/row_layouts/layout/issue_detail_header_row_item.xml @@ -1,134 +1,163 @@ - + android:orientation="vertical"> - + android:layout_marginBottom="@dimen/spacing_normal" + android:layout_marginEnd="@dimen/grid_spacing" + android:layout_marginStart="@dimen/grid_spacing" + android:layout_marginTop="@dimen/grid_spacing" + android:background="?card_background" + android:paddingBottom="@dimen/spacing_normal" + android:paddingTop="@dimen/spacing_normal" + tools:ignore="RtlSymmetry"> - - + android:orientation="vertical"> + android:layout_marginEnd="@dimen/spacing_micro" + android:orientation="horizontal"> + + + android:layout_gravity="center" + android:layout_marginEnd="@dimen/spacing_normal" + android:layout_weight="1" + android:orientation="vertical"> - + android:orientation="horizontal"> + + + + + + - + android:visibility="gone" + tools:text="@string/owner" + tools:visibility="visible"/> - + android:background="?selectableItemBackgroundBorderless" + android:contentDescription="@string/options" + android:padding="@dimen/spacing_micro" + android:src="@drawable/ic_add_emoji"/> + + - + - + android:layout_marginBottom="@dimen/spacing_micro" + android:layout_marginEnd="@dimen/spacing_xs_large" + android:layout_marginStart="@dimen/spacing_xs_large" + android:layout_marginTop="@dimen/spacing_micro" + android:textIsSelectable="true"/> + + - + + + - - + android:gravity="center"/> - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 8ee75d10..012dd54c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -589,26 +589,9 @@
• Why am I having problems editing Issues/PRs?

If you are editing a public Org repo, then please contact your Org to grant access to FastHub or use Access Token to login!.

-
• I\'m blocked from using FastHub, WHY?
-

Simply, because you have rated FastHub low and requested things via the play store and after I responded you did not update your review. If the app is no good, - why would you want to keep using it anyway?

-
• I\'m having this issue or I want this & that!!

Head to https://github.com/k0shk0sh/FastHub/issues/new and create new issue for bugs or feature requests, I really do encourage you to search before opening a ticket. Any duplicate request will result in it being closed immediately.

- - Message from the developer of FastHub,\n - -

Hello Dear Developers,

\n -

- As you might know FastHub is an open source App & has grow so fast and that\'s because of the help from the community and you - guys.\nReviewing FastHub low in the PlayStore because you want to report an issue or request any feature will result to it being - ignored.\nAs developers I think we understand how much effort does it take to make an App like FastHub.\nSome don\'t get that at all - and instead of reporting issues/features in FastHub\'s repo they rate FastHub low in the PlayStore thinking that this will force - the developer (ME) to implement and fix their stuff so they update their review, but this doesn\'t happen, instead they either never - update their review or they\'ll request something else (so typical).\nPlease report Issues & Feature requests in the FastHub repo, open - up the drawer menu & click on the Report Issue & it\'ll be posted directly to FastHub repo where I can help/assist you. -

]]> FAQ Comments added successfully diff --git a/build.gradle b/build.gradle index 0b0e929f..831bd8c3 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ buildscript { state_version = '1.1.0' lombokVersion = '1.12.6' supportVersion = "26.0.1" - gms = "11.2.0" + gms = "11.4.0" thirtyinchVersion = '0.8.0' retrofit = '2.3.0' junitVersion = '4.12' @@ -13,7 +13,7 @@ buildscript { assertjVersion = '2.5.0' espresseVersion = '2.2.2' requery = '1.3.2' - kotlin_version = '1.1.4-2' + kotlin_version = '1.1.4-3' commonmark = '0.9.0' } repositories { @@ -22,7 +22,7 @@ buildscript { google() } dependencies { - classpath 'com.android.tools.build:gradle:3.0.0-beta5' + classpath 'com.android.tools.build:gradle:3.0.0-beta6' classpath 'com.google.gms:google-services:3.0.0' classpath 'com.novoda:gradle-build-properties-plugin:0.3' classpath 'com.dicedmelon.gradle:jacoco-android:0.1.2'