Merge pull request #1 from k0shk0sh/master

syncing changes
This commit is contained in:
Felix Naumann 2017-04-30 10:15:58 +02:00 committed by GitHub
commit de7f8be16d
28 changed files with 577 additions and 75 deletions

View File

@ -14,7 +14,7 @@ import com.fastaccess.data.dao.model.PullRequest;
import com.fastaccess.data.dao.types.IssueState;
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.MyIssuesView;
import com.fastaccess.ui.modules.main.issues.MyIssuesFragment;
import com.fastaccess.ui.modules.main.pullrequests.MyPullRequestFragment;
import com.fastaccess.ui.modules.profile.followers.ProfileFollowersFragment;
import com.fastaccess.ui.modules.profile.following.ProfileFollowingFragment;
@ -149,8 +149,8 @@ import lombok.Setter;
}
public static List<FragmentPagerAdapterModel> buildForMyIssues(@NonNull Context context) {
return Stream.of(new FragmentPagerAdapterModel(context.getString(R.string.open), MyIssuesView.newInstance(IssueState.open))
, new FragmentPagerAdapterModel(context.getString(R.string.closed), MyIssuesView.newInstance(IssueState.closed)))
return Stream.of(new FragmentPagerAdapterModel(context.getString(R.string.open), MyIssuesFragment.newInstance(IssueState.open))
, new FragmentPagerAdapterModel(context.getString(R.string.closed), MyIssuesFragment.newInstance(IssueState.closed)))
.collect(Collectors.toList());
}

View File

@ -69,39 +69,43 @@ public class RestProvider {
return cache;
}
private static OkHttpClient provideOkHttpClient() {
private static OkHttpClient provideOkHttpClient(boolean isRawString) {
OkHttpClient.Builder client = new OkHttpClient.Builder();
if (BuildConfig.DEBUG) {
client.addInterceptor(new HttpLoggingInterceptor()
.setLevel(HttpLoggingInterceptor.Level.BODY));
}
client.addInterceptor(new AuthenticationInterceptor(PrefGetter.getToken(), PrefGetter.getOtpCode()));
client.addInterceptor(new PaginationInterceptor())
.addInterceptor(chain -> {
Request original = chain.request();
if (original.url() != HttpUrl.get(URI.create(NotificationService.SUBSCRIPTION_URL))) {
Request.Builder requestBuilder = original.newBuilder();
requestBuilder.addHeader("Accept", "application/vnd.github.v3+json")
.addHeader("Content-type", "application/vnd.github.v3+json");
requestBuilder.method(original.method(), original.body());
Request request = requestBuilder.build();
return chain.proceed(request);
}
Logger.e(original.url());
return chain.proceed(original);
});
if (!isRawString) client.addInterceptor(new PaginationInterceptor());
client.addInterceptor(chain -> {
Request original = chain.request();
if (original.url() != HttpUrl.get(URI.create(NotificationService.SUBSCRIPTION_URL))) {
Request.Builder requestBuilder = original.newBuilder();
requestBuilder.addHeader("Accept", "application/vnd.github.v3+json")
.addHeader("Content-type", "application/vnd.github.v3+json");
requestBuilder.method(original.method(), original.body());
Request request = requestBuilder.build();
return chain.proceed(request);
}
Logger.e(original.url());
return chain.proceed(original);
});
return client.build();
}
private static Retrofit provideRetrofit() {
private static Retrofit provideRetrofit(boolean isRawString) {
return new Retrofit.Builder()
.baseUrl(BuildConfig.REST_URL)
.client(provideOkHttpClient())
.client(provideOkHttpClient(isRawString))
.addConverterFactory(new GithubResponseConverter(gson))
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
}
private static Retrofit provideRetrofit() {
return provideRetrofit(false);
}
public static void downloadFile(@NonNull Context context, @NonNull String url) {
if (InputHelper.isEmpty(url)) return;
Uri uri = Uri.parse(url);
@ -145,14 +149,18 @@ public class RestProvider {
}
@NonNull public static RepoService getRepoService() {
return provideRetrofit().create(RepoService.class);
return getRepoService(false);
}
@NonNull public static RepoService getRepoService(boolean isRawString) {
return provideRetrofit(isRawString).create(RepoService.class);
}
@NonNull public static IssueService getIssueService() {
return provideRetrofit().create(IssueService.class);
}
@NonNull public static PullRequestService getPullRequestSerice() {
@NonNull public static PullRequestService getPullRequestService() {
return provideRetrofit().create(PullRequestService.class);
}

View File

@ -3,6 +3,7 @@ package com.fastaccess.provider.timeline;
import android.content.Context;
import android.graphics.Point;
import android.net.Uri;
import android.support.annotation.ColorInt;
import android.support.annotation.NonNull;
import android.view.WindowManager;
import android.widget.TextView;
@ -11,12 +12,18 @@ import com.fastaccess.helper.ViewHelper;
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.ListsHandler;
import com.fastaccess.provider.timeline.handler.MarginHandler;
import com.fastaccess.provider.timeline.handler.PreTagHandler;
import com.fastaccess.provider.timeline.handler.QouteHandler;
import com.fastaccess.provider.timeline.handler.StrikethroughHandler;
import com.fastaccess.provider.timeline.handler.SubScriptHandler;
import com.fastaccess.provider.timeline.handler.SuperScriptHandler;
import com.fastaccess.provider.timeline.handler.TableHandler;
import com.fastaccess.provider.timeline.handler.UnderlineHandler;
import net.nightwhistler.htmlspanner.HtmlSpanner;
import net.nightwhistler.htmlspanner.handlers.BoldHandler;
import net.nightwhistler.htmlspanner.handlers.TableHandler;
/**
@ -33,6 +40,11 @@ public class HtmlHelper {
return true;
});
int windowBackground = ViewHelper.getWindowBackground(textView.getContext());
registerHandlers(textView, mySpanner, windowBackground);
textView.setText(mySpanner.fromHtml(html));
}
private static void registerHandlers(@NonNull TextView textView, @NonNull HtmlSpanner mySpanner, @ColorInt int windowBackground) {
mySpanner.registerHandler("pre", new PreTagHandler(windowBackground, true));
mySpanner.registerHandler("code", new PreTagHandler(windowBackground, false));
mySpanner.registerHandler("img", new DrawableHandler(textView));
@ -40,6 +52,15 @@ public class HtmlHelper {
mySpanner.registerHandler("blockquote", new QouteHandler(windowBackground));
mySpanner.registerHandler("b", new BoldHandler());
mySpanner.registerHandler("strong", new BoldHandler());
mySpanner.registerHandler("ul", new MarginHandler());
mySpanner.registerHandler("ol", new MarginHandler());
mySpanner.registerHandler("li", new ListsHandler());
mySpanner.registerHandler("u", new UnderlineHandler());
mySpanner.registerHandler("strike", new StrikethroughHandler());
mySpanner.registerHandler("ins", new UnderlineHandler());
mySpanner.registerHandler("del", new StrikethroughHandler());
mySpanner.registerHandler("sub", new SubScriptHandler());
mySpanner.registerHandler("sup", new SuperScriptHandler());
TableHandler tableHandler = new TableHandler();
tableHandler.setTextColor(ViewHelper.generateTextColor(windowBackground));
WindowManager windowManager = (WindowManager) textView.getContext().getSystemService(Context.WINDOW_SERVICE);
@ -48,6 +69,5 @@ public class HtmlHelper {
tableHandler.setTableWidth((int) (point.x / 1.2));
tableHandler.setTextSize(18.0F);
mySpanner.registerHandler("table", tableHandler);
textView.setText(mySpanner.fromHtml(html));
}
}

View File

@ -12,7 +12,6 @@ import android.text.style.MetricAffectingSpan;
public class CodeBackgroundRoundedSpan extends MetricAffectingSpan implements LeadingMarginSpan, LineBackgroundSpan {
private final int color;
private final int padding = 30;
private final RectF rect = new RectF();
@ -45,7 +44,7 @@ public class CodeBackgroundRoundedSpan extends MetricAffectingSpan implements Le
}
@Override public int getLeadingMargin(boolean first) {
return padding;
return 30;
}
@Override public void drawLeadingMargin(Canvas c, Paint p, int x, int dir, int top, int baseline, int bottom,

View File

@ -0,0 +1,67 @@
package com.fastaccess.provider.timeline.handler;
import android.text.SpannableStringBuilder;
import com.fastaccess.helper.Logger;
import net.nightwhistler.htmlspanner.TagNodeHandler;
import org.htmlcleaner.TagNode;
public class ListsHandler extends TagNodeHandler {
private int getMyIndex(TagNode node) {
if (node.getParent() == null) {
return -1;
} else {
int i = 1;
for (Object child : node.getParent().getChildren()) {
if (child == node) {
return i;
}
if (child instanceof TagNode) {
TagNode childNode = (TagNode) child;
if ("li".equals(childNode.getName())) {
++i;
}
}
}
return -1;
}
}
private String getParentName(TagNode node) {
return node.getParent() == null ? null : node.getParent().getName();
}
@Override public void beforeChildren(TagNode node, SpannableStringBuilder builder) {
TodoItems todoItems = null;
if (node.getChildTags() != null && node.getChildTags().length > 0) {
TagNode tagNode = node.getChildTags()[0];
if (tagNode.getName() != null && "input".equalsIgnoreCase(tagNode.getName())) {
todoItems = new TodoItems();
todoItems.isChecked = tagNode.getAttributeByName("checked") != null;
}
Logger.e(tagNode.getName(), tagNode.getAttributeByName("checked"));
}
if ("ol".equals(getParentName(node))) {
builder.append("").append(String.valueOf(getMyIndex(node))).append(". ");
} else if ("ul".equals(getParentName(node))) {
if (todoItems != null) {
builder.append(todoItems.isChecked ? "" : "");
} else {
builder.append("\u2022 ");
}
}
}
public void handleTagNode(TagNode node, SpannableStringBuilder builder, int start, int end) {
if (builder.length() > 0 && builder.charAt(builder.length() - 1) != '\n') {
builder.append("\n");
}
}
static class TodoItems {
boolean isChecked;
}
}

View File

@ -0,0 +1,29 @@
package com.fastaccess.provider.timeline.handler;
import android.text.Spannable;
import android.text.SpannableStringBuilder;
import android.text.style.LeadingMarginSpan;
import net.nightwhistler.htmlspanner.TagNodeHandler;
import org.htmlcleaner.TagNode;
/**
* Created by Kosh on 29 Apr 2017, 11:59 PM
*/
public class MarginHandler extends TagNodeHandler {
public void beforeChildren(TagNode node, SpannableStringBuilder builder) {
if (builder.length() > 0 && builder.charAt(builder.length() - 1) != 10) { //'10 = \n'
this.appendNewLine(builder);
}
}
public void handleTagNode(TagNode node, SpannableStringBuilder builder, int start, int end) {
builder.setSpan(new LeadingMarginSpan.Standard(30), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
this.appendNewLine(builder);
this.appendNewLine(builder);
}
}

View File

@ -36,13 +36,20 @@ import static android.text.Spanned.SPAN_EXCLUSIVE_EXCLUSIVE;
}
private String replace(String text) {
return text.replaceAll("&nbsp;", " ")
return text.replaceAll("&nbsp;", "\u00A0")
.replaceAll("&amp;", "&")
.replaceAll("&quot;", "\"")
.replaceAll("&cent;", "¢")
.replaceAll("&lt;", "<")
.replaceAll("&gt;", ">")
.replaceAll("&gt;", "§");
.replaceAll("&sect;", "§")
.replaceAll("&ldquo;", "")
.replaceAll("&rdquo;", "")
.replaceAll("&lsquo;", "")
.replaceAll("&rsquo;", "")
.replaceAll("&ndash;", "\u2013")
.replaceAll("&mdash;", "\u2014")
.replaceAll("&horbar;", "\u2015");
}
@Override public void handleTagNode(TagNode node, SpannableStringBuilder builder, int start, int end) {
@ -65,4 +72,5 @@ import static android.text.Spanned.SPAN_EXCLUSIVE_EXCLUSIVE;
builder.setSpan(new BackgroundColorSpan(color), start + 1, builder.length() - 1, SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
}

View File

@ -0,0 +1,16 @@
package com.fastaccess.provider.timeline.handler;
import android.text.SpannableStringBuilder;
import android.text.style.StrikethroughSpan;
import net.nightwhistler.htmlspanner.TagNodeHandler;
import org.htmlcleaner.TagNode;
public class StrikethroughHandler extends TagNodeHandler {
@Override public void handleTagNode(TagNode node, SpannableStringBuilder builder, int start, int end) {
builder.setSpan(new StrikethroughSpan(), start, end, 33);
}
}

View File

@ -0,0 +1,17 @@
package com.fastaccess.provider.timeline.handler;
import android.text.SpannableStringBuilder;
import android.text.style.RelativeSizeSpan;
import android.text.style.SubscriptSpan;
import net.nightwhistler.htmlspanner.TagNodeHandler;
import org.htmlcleaner.TagNode;
public class SubScriptHandler extends TagNodeHandler {
@Override public void handleTagNode(TagNode node, SpannableStringBuilder builder, int start, int end) {
builder.setSpan(new SubscriptSpan(), start, end, 33);
builder.setSpan(new RelativeSizeSpan(0.8f), start, end, 33);
}
}

View File

@ -0,0 +1,18 @@
package com.fastaccess.provider.timeline.handler;
import android.text.SpannableStringBuilder;
import android.text.style.RelativeSizeSpan;
import android.text.style.SuperscriptSpan;
import net.nightwhistler.htmlspanner.TagNodeHandler;
import org.htmlcleaner.TagNode;
public class SuperScriptHandler extends TagNodeHandler {
@Override public void handleTagNode(TagNode node, SpannableStringBuilder builder, int start, int end) {
builder.setSpan(new SuperscriptSpan(), start, end, 33);
builder.setSpan(new RelativeSizeSpan(0.8f), start, end, 33);
}
}

View File

@ -0,0 +1,298 @@
package com.fastaccess.provider.timeline.handler;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.ColorFilter;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.PixelFormat;
import android.graphics.Typeface;
import android.graphics.drawable.Drawable;
import android.support.annotation.NonNull;
import android.text.Layout.Alignment;
import android.text.Spannable;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
import android.text.StaticLayout;
import android.text.TextPaint;
import android.text.style.AlignmentSpan;
import android.text.style.ImageSpan;
import net.nightwhistler.htmlspanner.TagNodeHandler;
import org.htmlcleaner.TagNode;
import java.util.ArrayList;
import java.util.List;
/**
* Handles simple HTML tables.
* <p>
* Since it renders these tables itself, it needs to know things like font size
* and text colour to use.
*
* @author Alex Kuiper
*/
public class TableHandler extends TagNodeHandler {
private int tableWidth = 400;
private Typeface typeFace = Typeface.DEFAULT;
private float textSize = 16f;
private int textColor = Color.BLACK;
private static final int PADDING = 5;
/**
* Sets how wide the table should be.
*
* @param tableWidth
*/
public void setTableWidth(int tableWidth) {
this.tableWidth = tableWidth;
}
/**
* Sets the text colour to use.
* <p>
* Default is black.
*
* @param textColor
*/
public void setTextColor(int textColor) {
this.textColor = textColor;
}
/**
* Sets the font size to use.
* <p>
* Default is 16f.
*
* @param textSize
*/
public void setTextSize(float textSize) {
this.textSize = textSize;
}
/**
* Sets the TypeFace to use.
* <p>
* Default is Typeface.DEFAULT
*
* @param typeFace
*/
public void setTypeFace(Typeface typeFace) {
this.typeFace = typeFace;
}
@Override
public boolean rendersContent() {
return true;
}
private void readNode(Object node, Table table) {
if (node instanceof TagNode) {
TagNode tagNode = (TagNode) node;
if (tagNode.getName().equals("td") || tagNode.getName().equals("th")) {
Spanned result = this.getSpanner().fromTagNode(tagNode);
table.addCell(result);
return;
}
if (tagNode.getName().equals("tr")) {
table.addRow();
}
for (Object child : tagNode.getChildTags()) {
readNode(child, table);
}
}
}
private Table getTable(TagNode node) {
String border = node.getAttributeByName("border");
boolean drawBorder = !"0".equals(border);
Table result = new Table(drawBorder);
readNode(node, result);
return result;
}
private TextPaint getTextPaint() {
TextPaint textPaint = new TextPaint();
textPaint.setColor(this.textColor);
textPaint.linkColor = this.textColor;
textPaint.setAntiAlias(true);
textPaint.setTextSize(this.textSize);
textPaint.setTypeface(this.typeFace);
return textPaint;
}
private int calculateRowHeight(List<Spanned> row) {
if (row.size() == 0) {
return 0;
}
TextPaint textPaint = getTextPaint();
int columnWidth = tableWidth / row.size();
int rowHeight = 0;
for (Spanned cell : row) {
StaticLayout layout = new StaticLayout(cell, textPaint, columnWidth
- 2 * PADDING, Alignment.ALIGN_NORMAL, 1f, 0f, true);
if (layout.getHeight() > rowHeight) {
rowHeight = layout.getHeight();
}
}
return rowHeight;
}
@Override public void handleTagNode(TagNode node, SpannableStringBuilder builder, int start, int end) {
Table table = getTable(node);
for (int i = 0; i < table.getRows().size(); i++) {
List<Spanned> row = table.getRows().get(i);
builder.append("\uFFFC");
TableRowDrawable drawable = new TableRowDrawable(row, table.isDrawBorder());
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(),
drawable.getIntrinsicHeight());
builder.setSpan(new ImageSpan(drawable), start + i, builder.length(), 33);
}
/*
We add an empty last row to work around a rendering issue where
the last row would appear detached.
*/
builder.append("\uFFFC");
Drawable drawable = new TableRowDrawable(new ArrayList<Spanned>(), table.isDrawBorder());
drawable.setBounds(0, 0, tableWidth, 1);
builder.setSpan(new ImageSpan(drawable), builder.length() - 1, builder.length(),
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
builder.setSpan((AlignmentSpan) () -> Alignment.ALIGN_CENTER, start, builder.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
builder.append("\n");
}
/**
* Drawable of the table, which does the actual rendering.
*
* @author Alex Kuiper.
*/
private class TableRowDrawable extends Drawable {
private List<Spanned> tableRow;
private int rowHeight;
private boolean paintBorder;
TableRowDrawable(List<Spanned> tableRow, boolean paintBorder) {
this.tableRow = tableRow;
this.rowHeight = calculateRowHeight(tableRow);
this.paintBorder = paintBorder;
}
@Override public void draw(@NonNull Canvas canvas) {
Paint paint = new Paint();
paint.setColor(textColor);
paint.setStyle(Style.STROKE);
int numberOfColumns = tableRow.size();
if (numberOfColumns == 0) {
return;
}
int columnWidth = tableWidth / numberOfColumns;
int offset;
for (int i = 0; i < numberOfColumns; i++) {
offset = i * columnWidth;
if (paintBorder) {
// The rect is open at the bottom, so there's a single line
// between rows.
canvas.drawRect(offset, 0, offset + columnWidth, rowHeight, paint);
}
StaticLayout layout = new StaticLayout(tableRow.get(i),
getTextPaint(), (columnWidth - 2 * PADDING),
Alignment.ALIGN_NORMAL, 1f, 0f, true);
canvas.translate(offset + PADDING, 0);
layout.draw(canvas);
canvas.translate(-1 * (offset + PADDING), 0);
}
}
@Override
public int getIntrinsicHeight() {
return rowHeight;
}
@Override
public int getIntrinsicWidth() {
return tableWidth;
}
@Override
public int getOpacity() {
return PixelFormat.OPAQUE;
}
@Override
public void setAlpha(int alpha) {
}
@Override
public void setColorFilter(ColorFilter cf) {
}
}
private class Table {
private boolean drawBorder;
private List<List<Spanned>> content = new ArrayList<>();
private Table(boolean drawBorder) {
this.drawBorder = drawBorder;
}
boolean isDrawBorder() {
return drawBorder;
}
void addRow() {
content.add(new ArrayList<>());
}
List<Spanned> getBottomRow() {
return content.get(content.size() - 1);
}
List<List<Spanned>> getRows() {
return content;
}
void addCell(Spanned text) {
if (content.isEmpty()) {
throw new IllegalStateException("No rows added yet");
}
getBottomRow().add(text);
}
}
}

View File

@ -0,0 +1,15 @@
package com.fastaccess.provider.timeline.handler;
import android.text.SpannableStringBuilder;
import android.text.style.UnderlineSpan;
import net.nightwhistler.htmlspanner.TagNodeHandler;
import org.htmlcleaner.TagNode;
public class UnderlineHandler extends TagNodeHandler {
@Override public void handleTagNode(TagNode tagNode, SpannableStringBuilder spannableStringBuilder, int start, int end) {
spannableStringBuilder.setSpan(new UnderlineSpan(), start, end, 33);
}
}

View File

@ -10,7 +10,7 @@ import android.support.v4.widget.DrawerLayout;
import com.fastaccess.R;
import com.fastaccess.ui.base.mvp.presenter.BasePresenter;
import com.fastaccess.ui.modules.feeds.FeedsFragment;
import com.fastaccess.ui.modules.main.issues.pager.MyIssuesPagerView;
import com.fastaccess.ui.modules.main.issues.pager.MyIssuesPagerFragment;
import com.fastaccess.ui.modules.main.pullrequests.pager.MyPullsPagerFragment;
import static com.fastaccess.helper.ActivityHelper.getVisibleFragment;
@ -31,7 +31,7 @@ class MainPresenter extends BasePresenter<MainMvp.View> implements MainMvp.Prese
Fragment currentVisible = getVisibleFragment(fragmentManager);
FeedsFragment homeView = (FeedsFragment) getFragmentByTag(fragmentManager, FeedsFragment.TAG);
MyPullsPagerFragment pullRequestView = (MyPullsPagerFragment) getFragmentByTag(fragmentManager, MyPullsPagerFragment.TAG);
MyIssuesPagerView issuesView = (MyIssuesPagerView) getFragmentByTag(fragmentManager, MyIssuesPagerView.TAG);
MyIssuesPagerFragment issuesView = (MyIssuesPagerFragment) getFragmentByTag(fragmentManager, MyIssuesPagerFragment.TAG);
switch (type) {
case MainMvp.FEEDS:
if (homeView == null) {
@ -49,7 +49,7 @@ class MainPresenter extends BasePresenter<MainMvp.View> implements MainMvp.Prese
break;
case MainMvp.ISSUES:
if (issuesView == null) {
onAddAndHide(fragmentManager, MyIssuesPagerView.newInstance(), currentVisible);
onAddAndHide(fragmentManager, MyIssuesPagerFragment.newInstance(), currentVisible);
} else {
onShowHideFragment(fragmentManager, issuesView, currentVisible);
}

View File

@ -28,7 +28,7 @@ import butterknife.BindView;
* Created by Kosh on 25 Mar 2017, 11:48 PM
*/
public class MyIssuesView extends BaseFragment<MyIssuesMvp.View, MyIssuesPresenter> implements MyIssuesMvp.View {
public class MyIssuesFragment extends BaseFragment<MyIssuesMvp.View, MyIssuesPresenter> implements MyIssuesMvp.View {
@BindView(R.id.recycler) DynamicRecyclerView recycler;
@BindView(R.id.refresh) SwipeRefreshLayout refresh;
@ -38,8 +38,8 @@ public class MyIssuesView extends BaseFragment<MyIssuesMvp.View, MyIssuesPresent
private IssueState issueState;
private RepoPagerMvp.TabsBadgeListener tabsBadgeListener;
public static MyIssuesView newInstance(@NonNull IssueState issueState) {
MyIssuesView view = new MyIssuesView();
public static MyIssuesFragment newInstance(@NonNull IssueState issueState) {
MyIssuesFragment view = new MyIssuesFragment();
view.setArguments(Bundler.start().put(BundleConstant.EXTRA, issueState).end());
return view;
}
@ -98,11 +98,6 @@ public class MyIssuesView extends BaseFragment<MyIssuesMvp.View, MyIssuesPresent
super.showMessage(titleRes, msgRes);
}
private void showReload() {
hideProgress();
stateLayout.showReload(adapter.getItemCount());
}
@NonNull @Override public OnLoadMore<IssueState> getLoadMore() {
if (onLoadMore == null) {
onLoadMore = new OnLoadMore<>(getPresenter());
@ -145,4 +140,9 @@ public class MyIssuesView extends BaseFragment<MyIssuesMvp.View, MyIssuesPresent
}
return issueState;
}
private void showReload() {
hideProgress();
stateLayout.showReload(adapter.getItemCount());
}
}

View File

@ -71,14 +71,14 @@ public class MyIssuesPresenter extends BasePresenter<MyIssuesMvp.View> implement
return;
}
setCurrentPage(page);
makeRestCall(RestProvider.getIssueService().getIssuesWithCount(RepoQueryProvider.getMyIssuesPullRequestQuery(Login.getUser().getLogin(),
parameter, false), page),
issues -> {
lastPage = issues.getLast();
if (getCurrentPage() == 1) {
sendToView(view -> view.onSetCount(issues.getTotalCount()));
}
sendToView(view -> view.onNotifyAdapter(issues.getItems(), page));
});
String searchQuery = RepoQueryProvider.getMyIssuesPullRequestQuery(Login.getUser().getLogin(),
parameter, false);
makeRestCall(RestProvider.getIssueService().getIssuesWithCount(searchQuery, page), issues -> {
lastPage = issues.getLast();
if (getCurrentPage() == 1) {
sendToView(view -> view.onSetCount(issues.getTotalCount()));
}
sendToView(view -> view.onNotifyAdapter(issues.getItems(), page));
});
}
}

View File

@ -26,16 +26,16 @@ import icepick.State;
* Created by Kosh on 26 Mar 2017, 12:14 AM
*/
public class MyIssuesPagerView extends BaseFragment<MyIssuesPagerMvp.View, MyIssuesPagerPresenter> implements MyIssuesPagerMvp.View {
public class MyIssuesPagerFragment extends BaseFragment<MyIssuesPagerMvp.View, MyIssuesPagerPresenter> implements MyIssuesPagerMvp.View {
public static final String TAG = MyIssuesPagerView.class.getSimpleName();
public static final String TAG = MyIssuesPagerFragment.class.getSimpleName();
@BindView(R.id.tabs) TabLayout tabs;
@BindView(R.id.pager) ViewPagerView pager;
@State HashSet<TabsCountStateModel> counts = new HashSet<>();
public static MyIssuesPagerView newInstance() {
return new MyIssuesPagerView();
public static MyIssuesPagerFragment newInstance() {
return new MyIssuesPagerFragment();
}
@Override protected int fragmentLayout() {

View File

@ -72,7 +72,7 @@ public class MyPullRequestsPresenter extends BasePresenter<MyPullRequestsMvp.Vie
return;
}
setCurrentPage(page);
makeRestCall(RestProvider.getPullRequestSerice().getPullsWithCount(RepoQueryProvider.getMyIssuesPullRequestQuery(Login.getUser().getLogin(),
makeRestCall(RestProvider.getPullRequestService().getPullsWithCount(RepoQueryProvider.getMyIssuesPullRequestQuery(Login.getUser().getLogin(),
parameter, true), page),
response -> {
lastPage = response.getLast();

View File

@ -52,13 +52,11 @@ class CommitPagerPresenter extends BasePresenter<CommitPagerMvp.View> implements
.getCommit(login, repoId, sha)
.flatMap(commit -> {
if (commit.getGitCommit() != null && commit.getGitCommit().getMessage() != null) {
if (commit.getGitCommit().getMessage().contains("#")) {
MarkdownModel markdownModel = new MarkdownModel();
markdownModel.setContext(login + "/" + repoId);
markdownModel.setText(commit.getGitCommit().getMessage());
return RestProvider.getRepoService().convertReadmeToHtml(markdownModel)
.onErrorReturn(throwable -> null);
}
MarkdownModel markdownModel = new MarkdownModel();
markdownModel.setContext(login + "/" + repoId);
markdownModel.setText(commit.getGitCommit().getMessage());
return RestProvider.getRepoService().convertReadmeToHtml(markdownModel)
.onErrorReturn(throwable -> null);
}
return Observable.just(commit);
}, (commit, u) -> {

View File

@ -97,8 +97,8 @@ class ViewerPresenter extends BasePresenter<ViewerMvp.View> implements ViewerMvp
sendToView(view -> view.onSetImageUrl(url));
return;
}
makeRestCall(isRepo ? RestProvider.getRepoService().getReadmeHtml(url)
: RestProvider.getRepoService().getFileAsStream(url), content -> {
makeRestCall(isRepo ? RestProvider.getRepoService(true).getReadmeHtml(url)
: RestProvider.getRepoService(true).getFileAsStream(url), content -> {
downloadedStream = content;
ViewerFile fileModel = new ViewerFile();
fileModel.setContent(downloadedStream);

View File

@ -72,7 +72,7 @@ public class CreateIssuePresenter extends BasePresenter<CreateIssueMvp.View> imp
pullRequestModel.setBody(InputHelper.toString(description));
pullRequestModel.setTitle(title);
IssueRequestModel requestModel = IssueRequestModel.clone(pullRequestModel, false);
makeRestCall(RestProvider.getPullRequestSerice().editPullRequest(login, repo, number, requestModel),
makeRestCall(RestProvider.getPullRequestService().editPullRequest(login, repo, number, requestModel),
pr -> {
if (pr != null) {
sendToView(view -> view.onSuccessSubmission(pr));

View File

@ -69,7 +69,7 @@ class RepoPullRequestPresenter extends BasePresenter<RepoPullRequestMvp.View> im
return;
}
if (repoId == null || login == null) return;
makeRestCall(RestProvider.getPullRequestSerice().getPullRequests(login, repoId, parameter.name(), page), response -> {
makeRestCall(RestProvider.getPullRequestService().getPullRequests(login, repoId, parameter.name(), page), response -> {
lastPage = response.getLast();
if (getCurrentPage() == 1) {
manageSubscription(PullRequest.save(response.getItems(), login, repoId).subscribe());
@ -89,7 +89,7 @@ class RepoPullRequestPresenter extends BasePresenter<RepoPullRequestMvp.View> im
}
private void onCallCountApi(@NonNull IssueState issueState) {
manageSubscription(RxHelper.getObserver(RestProvider.getPullRequestSerice()
manageSubscription(RxHelper.getObserver(RestProvider.getPullRequestService()
.getPullsWithCount(RepoQueryProvider.getIssuesPullRequestQuery(login, repoId, issueState, true), 0))
.subscribe(pullRequestPageable -> sendToView(view -> view.onUpdateCount(pullRequestPageable.getTotalCount())),
Throwable::printStackTrace));

View File

@ -70,7 +70,7 @@ class PullRequestPagerPresenter extends BasePresenter<PullRequestPagerMvp.View>
sendToView(PullRequestPagerMvp.View::onSetupIssue);
return;
} else if (issueNumber > 0 && !InputHelper.isEmpty(login) && !InputHelper.isEmpty(repoId)) {
makeRestCall(RestProvider.getPullRequestSerice().getPullRequest(login, repoId, issueNumber)
makeRestCall(RestProvider.getPullRequestService().getPullRequest(login, repoId, issueNumber)
, pullRequestModelResponse -> {
pullRequest = pullRequestModelResponse;
pullRequest.setRepoId(repoId);
@ -160,7 +160,7 @@ class PullRequestPagerPresenter extends BasePresenter<PullRequestPagerMvp.View>
@Override public void onOpenCloseIssue() {
if (getPullRequest() != null) {
IssueRequestModel requestModel = IssueRequestModel.clone(getPullRequest(), true);
manageSubscription(RxHelper.getObserver(RestProvider.getPullRequestSerice().editPullRequest(login, repoId,
manageSubscription(RxHelper.getObserver(RestProvider.getPullRequestService().editPullRequest(login, repoId,
issueNumber, requestModel))
.doOnSubscribe(() -> sendToView(view -> view.showProgress(0)))
.doOnNext(issue -> {
@ -230,7 +230,7 @@ class PullRequestPagerPresenter extends BasePresenter<PullRequestPagerMvp.View>
@Override public void onPutMilestones(@NonNull MilestoneModel milestone) {
pullRequest.setMilestone(milestone);
IssueRequestModel issueRequestModel = IssueRequestModel.clone(pullRequest, false);
makeRestCall(RestProvider.getPullRequestSerice().editIssue(login, repoId, issueNumber, issueRequestModel),
makeRestCall(RestProvider.getPullRequestService().editIssue(login, repoId, issueNumber, issueRequestModel),
pr -> {
this.pullRequest = pr;
pullRequest.setLogin(login);
@ -246,7 +246,7 @@ class PullRequestPagerPresenter extends BasePresenter<PullRequestPagerMvp.View>
ArrayList<String> assignees = new ArrayList<>();
Stream.of(users).forEach(userModel -> assignees.add(userModel.getLogin()));
assigneesRequestModel.setAssignees(assignees);
makeRestCall(RestProvider.getPullRequestSerice().putAssignees(login, repoId, issueNumber, assigneesRequestModel),
makeRestCall(RestProvider.getPullRequestService().putAssignees(login, repoId, issueNumber, assigneesRequestModel),
issue -> {
this.pullRequest = issue;
pullRequest.setLogin(login);
@ -267,7 +267,7 @@ class PullRequestPagerPresenter extends BasePresenter<PullRequestPagerMvp.View>
mergeRequestModel.setSha(getPullRequest().getHead().getSha());
mergeRequestModel.setCommitMessage(msg);
manageSubscription(
RxHelper.getObserver(RestProvider.getPullRequestSerice().mergePullRequest(login, repoId, issueNumber, mergeRequestModel))
RxHelper.getObserver(RestProvider.getPullRequestService().mergePullRequest(login, repoId, issueNumber, mergeRequestModel))
.doOnSubscribe(() -> sendToView(view -> view.showProgress(0)))
.doOnNext(mergeResponseModel -> {
if (mergeResponseModel.isMerged()) {

View File

@ -62,7 +62,7 @@ class PullRequestCommitsPresenter extends BasePresenter<PullRequestCommitsMvp.Vi
return;
}
if (repoId == null || login == null) return;
makeRestCall(RestProvider.getPullRequestSerice().getPullRequestCommits(login, repoId, number, page),
makeRestCall(RestProvider.getPullRequestService().getPullRequestCommits(login, repoId, number, page),
response -> {
lastPage = response.getLast();
if (getCurrentPage() == 1) {

View File

@ -69,7 +69,7 @@ class PullRequestFilesPresenter extends BasePresenter<PullRequestFilesMvp.View>
return;
}
if (repoId == null || login == null) return;
makeRestCall(RestProvider.getPullRequestSerice().getPullRequestFiles(login, repoId, number, page),
makeRestCall(RestProvider.getPullRequestService().getPullRequestFiles(login, repoId, number, page),
response -> {
lastPage = response.getLast();
sendToView(view -> view.onNotifyAdapter(response.getItems(), page));

View File

@ -89,8 +89,8 @@ public class PullRequestTimelinePresenter extends BasePresenter<PullRequestTimel
int number = getHeader().getNumber();
Observable<List<TimelineModel>> observable = Observable.zip(RestProvider.getIssueService().getTimeline(login, repoId, number),
RestProvider.getIssueService().getIssueComments(login, repoId, number),
RestProvider.getPullRequestSerice().getPullStatus(login, repoId, getHeader().getHead().getSha()),
RestProvider.getPullRequestSerice().getReviews(login, repoId, number),
RestProvider.getPullRequestService().getPullStatus(login, repoId, getHeader().getHead().getSha()),
RestProvider.getPullRequestService().getReviews(login, repoId, number),
(issueEventPageable, commentPageable, statuses, reviews) -> {
if (statuses != null) {
statuses.setMergable(getHeader().isMergeable());

View File

@ -11,6 +11,7 @@ import com.fastaccess.R;
import com.fastaccess.helper.PrefGetter;
import com.fastaccess.provider.tasks.notification.NotificationSchedulerJobTask;
import com.fastaccess.ui.base.mvp.BaseMvp;
import com.fastaccess.ui.modules.changelog.ChangelogBottomSheetDialog;
import com.fastaccess.ui.widgets.SpannableBuilder;
import es.dmoral.toasty.Toasty;
@ -43,6 +44,10 @@ public class SettingsFragment extends PreferenceFragmentCompat implements Prefer
findPreference("rect_avatar").setOnPreferenceChangeListener(this);
findPreference("appTheme").setOnPreferenceChangeListener(this);
findPreference("app_language").setOnPreferenceChangeListener(this);
findPreference("showChangelog").setOnPreferenceClickListener(preference -> {
new ChangelogBottomSheetDialog().show(getChildFragmentManager(), "ChangelogBottomSheetDialog");
return true;
});
findPreference("currentVersion").setSummary(SpannableBuilder.builder()
.append(getString(R.string.current_version))
.append("(")

View File

@ -84,6 +84,10 @@
<PreferenceCategory android:title="@string/about">
<Preference
android:key="showChangelog"
android:title="@string/changelog"/>
<Preference
android:key="about"
android:title="@string/about">

View File

@ -5,7 +5,7 @@ buildscript {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.4.0-alpha6'
classpath 'com.android.tools.build:gradle:2.4.0-alpha7'
def taskRequests = getGradle().getStartParameter().getTaskRequests().toString()
def isGms = taskRequests.contains("Gms") || taskRequests.contains("gms")
if (isGms) {