this commit fixes #1037 fixes #1034 fixes #1017 closes #996

This commit is contained in:
k0shk0sh 2017-10-01 09:47:35 +02:00
parent a8ea45b330
commit e095e990f7
8 changed files with 192 additions and 115 deletions

View File

@ -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));

View File

@ -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)
}
}

View File

@ -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");
}
}

View File

@ -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<TimelineModel> {
@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<TimelineModel> {
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<TimelineModel> {
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<TimelineModel> {
date.setText(ParseDateFormat.getTimeAgo(createdDate));
}
private void setupLabels(@Nullable List<LabelModel> 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("");

View File

@ -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<MainMvp.View, MainPresenter> implements MainMvp.View {
@State @MainMvp.NavigationType int navType = MainMvp.FEEDS;

View File

@ -1,134 +1,163 @@
<?xml version="1.0" encoding="utf-8"?>
<com.fastaccess.ui.widgets.ForegroundRelativeLayout
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
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">
<LinearLayout
<com.fastaccess.ui.widgets.ForegroundRelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
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">
<LinearLayout
android:id="@+id/toggleHolder"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/spacing_micro"
android:orientation="horizontal">
<com.fastaccess.ui.widgets.AvatarLayout
android:id="@+id/avatarView"
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_gravity="center"
android:layout_marginEnd="@dimen/avatar_margin_end"
android:layout_marginStart="@dimen/avatar_margin"/>
android:orientation="vertical">
<LinearLayout
android:layout_width="0dp"
android:id="@+id/toggleHolder"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginEnd="@dimen/spacing_normal"
android:layout_weight="1"
android:orientation="vertical">
android:layout_marginEnd="@dimen/spacing_micro"
android:orientation="horizontal">
<com.fastaccess.ui.widgets.AvatarLayout
android:id="@+id/avatarView"
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_gravity="center"
android:layout_marginEnd="@dimen/avatar_margin_end"
android:layout_marginStart="@dimen/avatar_margin"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:orientation="horizontal">
android:layout_gravity="center"
android:layout_marginEnd="@dimen/spacing_normal"
android:layout_weight="1"
android:orientation="vertical">
<com.fastaccess.ui.widgets.FontTextView
android:id="@+id/name"
style="@style/TextAppearance.AppCompat.Small"
android:layout_width="0dp"
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="1"
android:ellipsize="end"
android:maxLines="1"
android:textColor="?android:textColorPrimary"
tools:text="When one acquires"/>
android:orientation="horizontal">
<com.fastaccess.ui.widgets.FontTextView
android:id="@+id/name"
style="@style/TextAppearance.AppCompat.Small"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="1"
android:ellipsize="end"
android:maxLines="1"
android:textColor="?android:textColorPrimary"
tools:text="When one acquires"/>
<com.fastaccess.ui.widgets.FontTextView
android:id="@+id/date"
style="@style/TextAppearance.AppCompat.Caption"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:maxLines="1"
android:textColor="?android:attr/textColorSecondary"
tools:text="50 minutes"/>
</LinearLayout>
<com.fastaccess.ui.widgets.FontTextView
android:id="@+id/date"
style="@style/TextAppearance.AppCompat.Caption"
android:layout_width="wrap_content"
android:id="@+id/owner"
style="@style/TextAppearance.AppCompat.Small"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:maxLines="1"
android:textColor="?android:attr/textColorSecondary"
tools:text="50 minutes"/>
android:visibility="gone"
tools:text="@string/owner"
tools:visibility="visible"/>
</LinearLayout>
<com.fastaccess.ui.widgets.FontTextView
android:id="@+id/owner"
style="@style/TextAppearance.AppCompat.Small"
android:layout_width="match_parent"
<com.fastaccess.ui.widgets.ForegroundImageView
android:id="@+id/toggle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:maxLines="1"
android:textColor="?android:attr/textColorSecondary"
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"/>
<com.fastaccess.ui.widgets.ForegroundImageView
android:id="@+id/commentMenu"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="?selectableItemBackgroundBorderless"
android:contentDescription="@string/options"
android:padding="@dimen/spacing_micro"
android:src="@drawable/ic_overflow"/>
</LinearLayout>
<com.fastaccess.ui.widgets.ForegroundImageView
android:id="@+id/toggle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="?selectableItemBackgroundBorderless"
android:contentDescription="@string/options"
android:padding="@dimen/spacing_micro"
android:src="@drawable/ic_add_emoji"/>
<include layout="@layout/comments_dropdown_layout"/>
<com.fastaccess.ui.widgets.ForegroundImageView
android:id="@+id/commentMenu"
android:layout_width="wrap_content"
<com.fastaccess.ui.widgets.FontTextView
android:id="@+id/comment"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="?selectableItemBackgroundBorderless"
android:contentDescription="@string/options"
android:padding="@dimen/spacing_micro"
android:src="@drawable/ic_overflow"/>
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"/>
<com.fastaccess.ui.widgets.FontTextView
android:id="@+id/reactionsText"
style="@style/TextAppearance.AppCompat.Medium"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/spacing_xs_large"
android:layout_marginStart="@dimen/avatar_margin"
android:layout_marginTop="@dimen/spacing_micro"
android:gravity="start"
android:visibility="gone"
tools:ignore="RtlSymmetry"
tools:text="U+1F602"
tools:visibility="visible"/>
</LinearLayout>
<include layout="@layout/comments_dropdown_layout"/>
</com.fastaccess.ui.widgets.ForegroundRelativeLayout>
<LinearLayout
android:id="@+id/labelsHolder"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/spacing_normal"
android:layout_marginEnd="@dimen/grid_spacing"
android:layout_marginStart="@dimen/grid_spacing"
android:layout_marginTop="@dimen/spacing_normal"
android:background="?card_background"
android:paddingBottom="@dimen/spacing_normal"
android:paddingTop="@dimen/spacing_normal"
android:visibility="gone"
tools:visibility="visible">
<com.fastaccess.ui.widgets.FontTextView
android:id="@+id/comment"
android:id="@+id/labels"
style="@style/TextAppearance.AppCompat.Caption"
android:layout_width="match_parent"
android:layout_height="wrap_content"
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"/>
<com.fastaccess.ui.widgets.FontTextView
android:id="@+id/reactionsText"
style="@style/TextAppearance.AppCompat.Medium"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/spacing_xs_large"
android:layout_marginStart="@dimen/avatar_margin"
android:layout_marginTop="@dimen/spacing_micro"
android:gravity="start"
android:visibility="gone"
tools:ignore="RtlSymmetry"
tools:text="U+1F602"
tools:visibility="visible"/>
android:gravity="center"/>
</LinearLayout>
</com.fastaccess.ui.widgets.ForegroundRelativeLayout>
</LinearLayout>

View File

@ -589,26 +589,9 @@
<h5>• Why am I having problems editing Issues/PRs?</h5>
<p>If you are editing a public Org repo, then please contact your Org to grant access to FastHub or use Access Token to login!.</p>
<h5>• I\'m blocked from using FastHub, WHY?</h5>
<p>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?</p>
<h5>• I\'m having this issue or I want this &amp; that!!</h5>
<p>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.</p>
<i><font color="red">Message from the developer of FastHub,</font></i>\n
<h3>Hello Dear Developers,</h3>\n
<p style="text-align:justify;">
As you might know <b>FastHub</b> is an open source App &amp; has grow so fast and that\'s because of the help from the community and you
guys.\nReviewing <b>FastHub</b> 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 <b>FastHub</b>.\nSome don\'t get that at all
and instead of reporting issues/features in <b>FastHub</b>\'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 <i>(so typical)</i>.\nPlease report Issues &amp; Feature requests in the FastHub repo, open
up the drawer menu &amp; click on the Report Issue &amp; it\'ll be posted directly to FastHub repo where I can help/assist you.
</p>
]]></string>
<string name="faq">FAQ</string>
<string name="comments_added_successfully">Comments added successfully</string>

View File

@ -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'