mirror of
https://github.com/k0shk0sh/FastHub.git
synced 2025-12-08 19:05:54 +00:00
this commit also adds opening releases from deeplinking, and uses nice checkboxes for checklist
This commit is contained in:
parent
3c70ebc698
commit
4e4cd32329
@ -1,6 +1,6 @@
|
||||
apply plugin: 'com.android.application'
|
||||
apply plugin: 'com.google.firebase.firebase-crash'
|
||||
apply plugin: 'kotlin-android'
|
||||
//apply plugin: 'kotlin-android'
|
||||
apply plugin: 'com.novoda.build-properties'
|
||||
apply plugin: 'jacoco-android'
|
||||
|
||||
@ -144,9 +144,9 @@ dependencies {
|
||||
implementation 'com.firebase:firebase-jobdispatcher:0.6.0'
|
||||
implementation "com.google.firebase:firebase-ads:${gms}"
|
||||
implementation "com.google.firebase:firebase-messaging:${gms}"
|
||||
implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
|
||||
releaseImplementation "com.google.firebase:firebase-crash:${gms}"
|
||||
implementation "com.google.android.gms:play-services-auth:${gms}"
|
||||
// implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:${kotlin_version}"
|
||||
compileOnly "org.projectlombok:lombok:${lombokVersion}"
|
||||
annotationProcessor "io.requery:requery-processor:${requery}"
|
||||
annotationProcessor "org.projectlombok:lombok:${lombokVersion}"
|
||||
|
||||
@ -165,6 +165,17 @@
|
||||
android:name="android.support.PARENT_ACTIVITY"
|
||||
android:value=".ui.modules.repos.RepoPagerActivity"/>
|
||||
</activity>
|
||||
|
||||
<activity android:name=".ui.modules.settings.SettingsActivity"/>
|
||||
<activity android:name=".ui.modules.settings.category.SettingsCategoryActivity"/>
|
||||
<activity
|
||||
android:name=".ui.modules.repos.code.releases.ReleasesListActivity"
|
||||
android:parentActivityName=".ui.modules.repos.RepoPagerActivity"
|
||||
android:label="@string/releases">
|
||||
<meta-data
|
||||
android:name="android.support.PARENT_ACTIVITY"
|
||||
android:value=".ui.modules.repos.RepoPagerActivity"/>
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".ui.modules.parser.LinksParserActivity"
|
||||
android:configChanges="keyboard|orientation|screenSize"
|
||||
@ -213,16 +224,13 @@
|
||||
<service android:name=".provider.tasks.git.GithubActionService"/>
|
||||
<service android:name=".provider.tasks.git.ReactionService"/>
|
||||
<service android:name=".provider.tasks.slack.SlackInvitationService"/>
|
||||
<service android:name=".provider.fcm.PushNotificationService">
|
||||
<service
|
||||
android:name=".provider.fcm.PushNotificationService"
|
||||
android:exported="false">
|
||||
<intent-filter>
|
||||
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
|
||||
</intent-filter>
|
||||
</service>
|
||||
|
||||
<activity android:name=".ui.modules.settings.SettingsActivity">
|
||||
</activity>
|
||||
<activity android:name=".ui.modules.settings.category.SettingsCategoryActivity">
|
||||
</activity>
|
||||
</application>
|
||||
|
||||
</manifest>
|
||||
@ -155,15 +155,16 @@ import lombok.Setter;
|
||||
}
|
||||
|
||||
public static List<FragmentPagerAdapterModel> buildForNotifications(@NonNull Context context) {
|
||||
|
||||
return Stream.of(new FragmentPagerAdapterModel(context.getString(R.string.unread), new UnreadNotificationsFragment()),
|
||||
new FragmentPagerAdapterModel(context.getString(R.string.all), new AllNotificationsFragment())).collect(Collectors.toList());
|
||||
new FragmentPagerAdapterModel(context.getString(R.string.all), AllNotificationsFragment.newInstance()))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
public static List<FragmentPagerAdapterModel> buildForGists(@NonNull Context context) {
|
||||
|
||||
return Stream.of(new FragmentPagerAdapterModel(context.getString(R.string.my_gists), ProfileGistsFragment.newInstance(Login.getUser().getLogin())),
|
||||
new FragmentPagerAdapterModel(context.getString(R.string.public_gists), GistsFragment.newInstance())).collect(Collectors.toList());
|
||||
new FragmentPagerAdapterModel(context.getString(R.string.public_gists), GistsFragment.newInstance()))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
public static List<FragmentPagerAdapterModel> buildForMyIssues(@NonNull Context context) {
|
||||
|
||||
@ -17,6 +17,7 @@ import com.fastaccess.ui.modules.gists.gist.GistActivity;
|
||||
import com.fastaccess.ui.modules.repos.RepoPagerActivity;
|
||||
import com.fastaccess.ui.modules.repos.RepoPagerMvp;
|
||||
import com.fastaccess.ui.modules.repos.code.commit.details.CommitPagerActivity;
|
||||
import com.fastaccess.ui.modules.repos.code.releases.ReleasesListActivity;
|
||||
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;
|
||||
@ -108,12 +109,13 @@ public class SchemeParser {
|
||||
Intent createIssueIntent = getCreateIssueIntent(context, data);
|
||||
Intent pullRequestIntent = getPullRequestIntent(context, data, showRepoBtn);
|
||||
Intent issueIntent = getIssueIntent(context, data, showRepoBtn);
|
||||
Intent releasesIntent = getReleases(context, data);
|
||||
Intent repoIntent = getRepo(context, data);
|
||||
Intent commit = getCommit(context, data, showRepoBtn);
|
||||
Intent commits = getCommits(context, data, showRepoBtn);
|
||||
Intent blob = getBlob(context, data);
|
||||
Optional<Intent> intentOptional = returnNonNull(userIntent, repoIssues, repoPulls, pullRequestIntent, commit, commits,
|
||||
createIssueIntent, issueIntent, repoIntent, blob);
|
||||
createIssueIntent, issueIntent, releasesIntent, repoIntent, blob);
|
||||
Optional<Intent> empty = Optional.empty();
|
||||
if (intentOptional != null && intentOptional.isPresent() && intentOptional != empty) {
|
||||
return intentOptional.get();
|
||||
@ -300,6 +302,20 @@ public class SchemeParser {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Nullable private static Intent getReleases(@NonNull Context context, @NonNull Uri uri) {
|
||||
List<String> segments = uri.getPathSegments();
|
||||
Logger.e(segments.size());
|
||||
if (segments != null && segments.size() > 2) {
|
||||
if (uri.getPathSegments().get(2).equals("releases")) {
|
||||
String owner = segments.get(0);
|
||||
String repo = segments.get(1);
|
||||
return ReleasesListActivity.getIntent(context, owner, repo);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* https://github.com/owner/repo/issues/new
|
||||
*/
|
||||
|
||||
@ -20,6 +20,7 @@ import com.fastaccess.ui.modules.repos.RepoPagerActivity;
|
||||
import com.fastaccess.ui.modules.repos.RepoPagerMvp;
|
||||
import com.fastaccess.ui.modules.repos.code.commit.details.CommitPagerActivity;
|
||||
import com.fastaccess.ui.modules.repos.code.files.activity.RepoFilesActivity;
|
||||
import com.fastaccess.ui.modules.repos.code.releases.ReleasesListActivity;
|
||||
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;
|
||||
@ -115,12 +116,13 @@ public class StackBuilderSchemeParser {
|
||||
TaskStackBuilder pullRequestIntent = getPullRequestIntent(context, data);
|
||||
TaskStackBuilder createIssueIntent = getCreateIssueIntent(context, data);
|
||||
TaskStackBuilder issueIntent = getIssueIntent(context, data);
|
||||
TaskStackBuilder releasesIntent = getReleases(context, data);
|
||||
TaskStackBuilder repoIntent = getRepo(context, data);
|
||||
TaskStackBuilder commit = getCommit(context, data);
|
||||
TaskStackBuilder commits = getCommits(context, data);
|
||||
TaskStackBuilder blob = getBlob(context, data);
|
||||
Optional<TaskStackBuilder> intentOptional = returnNonNull(userIntent, repoIssuesIntent, repoPullsIntent, pullRequestIntent, commit,
|
||||
commits, createIssueIntent, issueIntent, repoIntent, blob);
|
||||
commits, createIssueIntent, issueIntent, releasesIntent, repoIntent, blob);
|
||||
Optional<TaskStackBuilder> empty = Optional.empty();
|
||||
if (intentOptional != null && intentOptional.isPresent() && intentOptional != empty) {
|
||||
return intentOptional.get();
|
||||
@ -328,7 +330,6 @@ public class StackBuilderSchemeParser {
|
||||
|
||||
@Nullable private static TaskStackBuilder getCreateIssueIntent(@NonNull Context context, @NonNull Uri uri) {
|
||||
List<String> segments = uri.getPathSegments();
|
||||
Logger.e(segments);
|
||||
if (uri.getLastPathSegment() == null) return null;
|
||||
if (segments == null || segments.size() < 3 || !uri.getLastPathSegment().equalsIgnoreCase("new")) return null;
|
||||
if ("issues".equals(segments.get(2))) {
|
||||
@ -355,6 +356,23 @@ public class StackBuilderSchemeParser {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Nullable private static TaskStackBuilder getReleases(@NonNull Context context, @NonNull Uri uri) {
|
||||
List<String> segments = uri.getPathSegments();
|
||||
if (segments != null && segments.size() >= 2) {
|
||||
if (uri.getPathSegments().get(2).equals("releases")) {
|
||||
String owner = segments.get(0);
|
||||
String repo = segments.get(1);
|
||||
return TaskStackBuilder.create(context)
|
||||
.addParentStack(MainActivity.class)
|
||||
.addNextIntentWithParentStack(new Intent(context, MainActivity.class))
|
||||
.addNextIntentWithParentStack(RepoPagerActivity.createIntent(context, repo, owner, RepoPagerMvp.CODE))
|
||||
.addNextIntent(ReleasesListActivity.getIntent(context, owner, repo));
|
||||
}
|
||||
return null;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Nullable private static String getGistId(@NonNull Uri uri) {
|
||||
List<String> segments = uri.getPathSegments();
|
||||
return segments != null && !segments.isEmpty() ? uri.getLastPathSegment() : null;
|
||||
|
||||
@ -2,6 +2,7 @@ package com.fastaccess.provider.timeline;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Point;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.net.Uri;
|
||||
import android.support.annotation.ColorInt;
|
||||
import android.support.annotation.NonNull;
|
||||
@ -54,6 +55,8 @@ public class HtmlHelper {
|
||||
boolean isDark = AppHelper.isNightMode(textView.getResources());
|
||||
@ColorInt int windowBackground = isDark ? ViewHelper.getWindowBackground(textView.getContext()) :
|
||||
ContextCompat.getColor(textView.getContext(), R.color.light_patch_ref_color);
|
||||
Drawable checked = ContextCompat.getDrawable(textView.getContext(), R.drawable.ic_checkbox_small);
|
||||
Drawable unchecked = ContextCompat.getDrawable(textView.getContext(), R.drawable.ic_checkbox_empty_small);
|
||||
HtmlSpanner mySpanner = new HtmlSpanner();
|
||||
mySpanner.setStripExtraWhiteSpace(true);
|
||||
mySpanner.registerHandler("pre", new PreTagHandler(windowBackground, true, isDark));
|
||||
@ -67,7 +70,7 @@ public class HtmlHelper {
|
||||
mySpanner.registerHandler("em", new ItalicHandler());
|
||||
mySpanner.registerHandler("ul", new MarginHandler());
|
||||
mySpanner.registerHandler("ol", new MarginHandler());
|
||||
mySpanner.registerHandler("li", new ListsHandler());
|
||||
mySpanner.registerHandler("li", new ListsHandler(checked, unchecked));
|
||||
mySpanner.registerHandler("u", new UnderlineHandler());
|
||||
mySpanner.registerHandler("strike", new StrikethroughHandler());
|
||||
mySpanner.registerHandler("ins", new UnderlineHandler());
|
||||
|
||||
@ -1,14 +1,23 @@
|
||||
package com.fastaccess.provider.timeline.handler;
|
||||
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.text.SpannableStringBuilder;
|
||||
|
||||
import com.fastaccess.helper.Logger;
|
||||
import com.fastaccess.ui.widgets.SpannableBuilder;
|
||||
|
||||
import net.nightwhistler.htmlspanner.TagNodeHandler;
|
||||
|
||||
import org.htmlcleaner.TagNode;
|
||||
|
||||
public class ListsHandler extends TagNodeHandler {
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@NoArgsConstructor @AllArgsConstructor public class ListsHandler extends TagNodeHandler {
|
||||
|
||||
@Nullable private Drawable checked;
|
||||
@Nullable private Drawable unchecked;
|
||||
|
||||
private int getMyIndex(TagNode node) {
|
||||
if (node.getParent() == null) {
|
||||
@ -35,31 +44,35 @@ public class ListsHandler extends TagNodeHandler {
|
||||
}
|
||||
|
||||
@Override public void beforeChildren(TagNode node, SpannableStringBuilder builder) {
|
||||
TodoItems todoItems = null;
|
||||
TodoItems todoItem = 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;
|
||||
for (TagNode tagNode : node.getChildTags()) {
|
||||
Logger.e(tagNode.getName(), tagNode.getAttributes(), tagNode.getText());
|
||||
if (tagNode.getName() != null && tagNode.getName().equals("input")) {
|
||||
todoItem = new TodoItems();
|
||||
todoItem.isChecked = tagNode.getAttributeByName("checked") != null;
|
||||
break;
|
||||
}
|
||||
}
|
||||
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 ? "☑ " : "☐ ");
|
||||
if (todoItem != null) {
|
||||
if (checked == null || unchecked == null) {
|
||||
builder.append(todoItem.isChecked ? "☑" : "☐");
|
||||
} else {
|
||||
builder.append(SpannableBuilder.builder()
|
||||
.append(todoItem.isChecked ? checked : unchecked))
|
||||
.append(" ");
|
||||
}
|
||||
} 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");
|
||||
}
|
||||
}
|
||||
public void handleTagNode(TagNode node, SpannableStringBuilder builder, int start, int end) {}
|
||||
|
||||
static class TodoItems {
|
||||
boolean isChecked;
|
||||
|
||||
@ -3,7 +3,6 @@ package com.fastaccess.ui.adapter.viewholder;
|
||||
import android.net.Uri;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.text.Html;
|
||||
import android.view.Gravity;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
@ -77,7 +76,7 @@ public class FeedsViewHolder extends BaseViewHolder<Event> {
|
||||
spannableBuilder.bold(action != null ? action.toLowerCase() : "")
|
||||
.append(eventsModel.getPayload() != null && eventsModel.getPayload().getAction() != null ? " " : "");
|
||||
if (type != EventsType.WatchEvent) {
|
||||
if (type == EventsType.CreateEvent && !InputHelper.isEmpty(eventsModel.getPayload().getRefType())) {
|
||||
if (type == EventsType.CreateEvent && !InputHelper.isEmpty(eventsModel.getPayload().getRef())) {
|
||||
spannableBuilder
|
||||
.bold(itemView.getResources().getString(type.getType()).toLowerCase())
|
||||
.append(" ")
|
||||
|
||||
@ -8,7 +8,6 @@ import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.fastaccess.App;
|
||||
import com.fastaccess.R;
|
||||
import com.fastaccess.data.dao.TimelineModel;
|
||||
import com.fastaccess.data.dao.model.Comment;
|
||||
@ -113,7 +112,8 @@ public class TimelineCommentsViewHolder extends BaseViewHolder<TimelineModel> {
|
||||
}
|
||||
name.setText(commentsModel.getUser() != null ? commentsModel.getUser().getLogin() : "Anonymous");
|
||||
if (commentsModel.getCreatedAt().before(commentsModel.getUpdatedAt())) {
|
||||
date.setText(ParseDateFormat.getTimeAgo(commentsModel.getCreatedAt()) + " " + App.getInstance().getResources().getString(R.string.edited));
|
||||
date.setText(String.format("%s %s", ParseDateFormat.getTimeAgo(commentsModel.getCreatedAt()), itemView
|
||||
.getResources().getString(R.string.edited)));
|
||||
} else {
|
||||
date.setText(ParseDateFormat.getTimeAgo(commentsModel.getCreatedAt()));
|
||||
}
|
||||
@ -135,6 +135,7 @@ public class TimelineCommentsViewHolder extends BaseViewHolder<TimelineModel> {
|
||||
if (comment != null) {
|
||||
boolean isReacted = reactionsCallback == null || reactionsCallback.isPreviouslyReacted(comment.getId(), v.getId());
|
||||
boolean isCallingApi = reactionsCallback != null && reactionsCallback.isCallingApi(comment.getId(), v.getId());
|
||||
// if (isCallingApi) return;
|
||||
ReactionsModel reactionsModel = comment.getReactions() != null ? comment.getReactions() : new ReactionsModel();
|
||||
switch (v.getId()) {
|
||||
case R.id.heart:
|
||||
|
||||
@ -284,14 +284,17 @@ public abstract class BaseActivity<V extends BaseMvp.FAView, P extends BasePrese
|
||||
startActivityForResult(new Intent(this, SettingsActivity.class), REFRESH_CODE);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
if (requestCode == REFRESH_CODE)
|
||||
if (resultCode == RESULT_OK)
|
||||
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
if (requestCode == REFRESH_CODE) {
|
||||
if (resultCode == RESULT_OK) {
|
||||
recreate();
|
||||
}
|
||||
}
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
}
|
||||
|
||||
@Override public void onScrollTop(int index) {}
|
||||
|
||||
protected void selectHome(boolean hideRepo) {
|
||||
if (extraNav != null) {
|
||||
if (hideRepo) {
|
||||
|
||||
@ -153,4 +153,6 @@ public abstract class BaseDialogFragment<V extends BaseMvp.FAView, P extends Bas
|
||||
super.onDestroyView();
|
||||
if (unbinder != null) unbinder.unbind();
|
||||
}
|
||||
|
||||
@Override public void onScrollTop(int index) {}
|
||||
}
|
||||
|
||||
@ -134,6 +134,8 @@ public abstract class BaseFragment<V extends BaseMvp.FAView, P extends BasePrese
|
||||
callback.onOpenSettings();
|
||||
}
|
||||
|
||||
@Override public void onScrollTop(int index) {}
|
||||
|
||||
protected boolean isSafe() {
|
||||
return getView() != null && getActivity() != null && !getActivity().isFinishing();
|
||||
}
|
||||
|
||||
@ -20,7 +20,7 @@ import rx.functions.Action1;
|
||||
|
||||
public interface BaseMvp {
|
||||
|
||||
interface FAView extends TiView, MessageDialogView.MessageDialogViewActionCallback {
|
||||
interface FAView extends TiView, MessageDialogView.MessageDialogViewActionCallback, OnScrollTopListener {
|
||||
|
||||
@CallOnMainThread void showProgress(@StringRes int resId);
|
||||
|
||||
@ -71,4 +71,8 @@ public interface BaseMvp {
|
||||
|
||||
void onCallApi(int page, @Nullable P parameter);
|
||||
}
|
||||
|
||||
interface OnScrollTopListener {
|
||||
void onScrollTop(int index);
|
||||
}
|
||||
}
|
||||
|
||||
@ -77,7 +77,7 @@ public class GistsFragment extends BaseFragment<GistsMvp.View, GistsPresenter> i
|
||||
|
||||
@Override public void showProgress(@StringRes int resId) {
|
||||
|
||||
refresh.setRefreshing(true);
|
||||
refresh.setRefreshing(true);
|
||||
|
||||
stateLayout.showProgress();
|
||||
}
|
||||
@ -97,11 +97,6 @@ refresh.setRefreshing(true);
|
||||
super.showMessage(titleRes, msgRes);
|
||||
}
|
||||
|
||||
private void showReload() {
|
||||
hideProgress();
|
||||
stateLayout.showReload(adapter.getItemCount());
|
||||
}
|
||||
|
||||
@NonNull @Override public GistsPresenter providePresenter() {
|
||||
return new GistsPresenter();
|
||||
}
|
||||
@ -121,4 +116,14 @@ refresh.setRefreshing(true);
|
||||
@Override public void onClick(View view) {
|
||||
onRefresh();
|
||||
}
|
||||
|
||||
@Override public void onScrollTop(int index) {
|
||||
super.onScrollTop(index);
|
||||
if (recycler != null) recycler.scrollToPosition(0);
|
||||
}
|
||||
|
||||
private void showReload() {
|
||||
hideProgress();
|
||||
stateLayout.showReload(adapter.getItemCount());
|
||||
}
|
||||
}
|
||||
|
||||
@ -6,18 +6,18 @@ import android.os.Bundle;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.design.widget.FloatingActionButton;
|
||||
import android.support.design.widget.TabLayout;
|
||||
import android.support.v4.app.Fragment;
|
||||
|
||||
import com.fastaccess.R;
|
||||
import com.fastaccess.data.dao.FragmentPagerAdapterModel;
|
||||
import com.fastaccess.data.dao.model.Login;
|
||||
import com.fastaccess.helper.ActivityHelper;
|
||||
import com.fastaccess.helper.BundleConstant;
|
||||
import com.fastaccess.helper.Bundler;
|
||||
import com.fastaccess.ui.adapter.FragmentsPagerAdapter;
|
||||
import com.fastaccess.ui.base.BaseActivity;
|
||||
import com.fastaccess.ui.base.BaseFragment;
|
||||
import com.fastaccess.ui.base.mvp.presenter.BasePresenter;
|
||||
import com.fastaccess.ui.modules.gists.create.CreateGistActivity;
|
||||
import com.fastaccess.ui.modules.profile.gists.ProfileGistsFragment;
|
||||
import com.fastaccess.ui.widgets.ViewPagerView;
|
||||
|
||||
import net.grandcentrix.thirtyinch.TiPresenter;
|
||||
@ -72,6 +72,20 @@ public class GistsListActivity extends BaseActivity {
|
||||
setTitle(R.string.gists);
|
||||
setupTabs();
|
||||
fab.show();
|
||||
tabs.addOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(pager) {
|
||||
@Override public void onTabReselected(TabLayout.Tab tab) {
|
||||
super.onTabReselected(tab);
|
||||
onScrollTop(tab.getPosition());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override public void onScrollTop(int index) {
|
||||
if (pager == null || pager.getAdapter() == null) return;
|
||||
Fragment fragment = (BaseFragment) pager.getAdapter().instantiateItem(pager, index);
|
||||
if (fragment instanceof BaseFragment) {
|
||||
((BaseFragment) fragment).onScrollTop(index);
|
||||
}
|
||||
}
|
||||
|
||||
private void setupTabs() {
|
||||
|
||||
@ -7,6 +7,7 @@ import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.design.widget.FloatingActionButton;
|
||||
import android.support.design.widget.TabLayout;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.support.v4.view.ViewPager;
|
||||
import android.text.format.Formatter;
|
||||
import android.view.Menu;
|
||||
@ -25,6 +26,7 @@ import com.fastaccess.helper.ViewHelper;
|
||||
import com.fastaccess.provider.tasks.git.GithubActionService;
|
||||
import com.fastaccess.ui.adapter.FragmentsPagerAdapter;
|
||||
import com.fastaccess.ui.base.BaseActivity;
|
||||
import com.fastaccess.ui.base.BaseFragment;
|
||||
import com.fastaccess.ui.modules.gists.gist.comments.GistCommentsFragment;
|
||||
import com.fastaccess.ui.widgets.AvatarLayout;
|
||||
import com.fastaccess.ui.widgets.FontTextView;
|
||||
@ -207,7 +209,7 @@ public class GistActivity extends BaseActivity<GistMvp.View, GistPresenter>
|
||||
title.setText(gistsModel.getDisplayTitle(false, true));
|
||||
detailsIcon.setVisibility(InputHelper.isEmpty(gistsModel.getDescription()) || !ViewHelper.isEllipsed(title) ? View.GONE : View.VISIBLE);
|
||||
if (gistsModel.getCreatedAt().before(gistsModel.getUpdatedAt())) {
|
||||
date.setText(ParseDateFormat.getTimeAgo(gistsModel.getCreatedAt()) + " " + getString(R.string.edited));
|
||||
date.setText(String.format("%s %s", ParseDateFormat.getTimeAgo(gistsModel.getCreatedAt()), getString(R.string.edited)));
|
||||
} else {
|
||||
date.setText(ParseDateFormat.getTimeAgo(gistsModel.getCreatedAt()));
|
||||
}
|
||||
@ -224,6 +226,20 @@ public class GistActivity extends BaseActivity<GistMvp.View, GistPresenter>
|
||||
onGistForked(getPresenter().isForked());
|
||||
onGistStarred(getPresenter().isStarred());
|
||||
hideShowFab();
|
||||
tabs.addOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(pager) {
|
||||
@Override public void onTabReselected(TabLayout.Tab tab) {
|
||||
super.onTabReselected(tab);
|
||||
onScrollTop(tab.getPosition());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override public void onScrollTop(int index) {
|
||||
if (pager == null || pager.getAdapter() == null) return;
|
||||
Fragment fragment = (BaseFragment) pager.getAdapter().instantiateItem(pager, index);
|
||||
if (fragment instanceof BaseFragment) {
|
||||
((BaseFragment) fragment).onScrollTop(index);
|
||||
}
|
||||
}
|
||||
|
||||
private void hideShowFab() {
|
||||
|
||||
@ -245,6 +245,11 @@ public class GistCommentsFragment extends BaseFragment<GistCommentsMvp.View, Gis
|
||||
}
|
||||
}
|
||||
|
||||
@Override public void onScrollTop(int index) {
|
||||
super.onScrollTop(index);
|
||||
if (recycler != null) recycler.scrollToPosition(0);
|
||||
}
|
||||
|
||||
private void showReload() {
|
||||
hideProgress();
|
||||
stateLayout.showReload(adapter.getItemCount());
|
||||
|
||||
@ -95,4 +95,9 @@ public class GistFilesListFragment extends BaseFragment<GistFilesListMvp.View, G
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override public void onScrollTop(int index) {
|
||||
super.onScrollTop(index);
|
||||
if (recycler != null) recycler.scrollToPosition(0);
|
||||
}
|
||||
}
|
||||
|
||||
@ -105,6 +105,11 @@ public class MainActivity extends BaseActivity<MainMvp.View, MainPresenter> impl
|
||||
}
|
||||
|
||||
@Override public void onNavigationChanged(@MainMvp.NavigationType int navType) {
|
||||
if (navType == MainMvp.PROFILE) {
|
||||
getPresenter().onModuleChanged(getSupportFragmentManager(), navType);
|
||||
bottomNavigation.setSelectedIndex(this.navType, true);
|
||||
return;
|
||||
}
|
||||
this.navType = navType;
|
||||
//noinspection WrongConstant
|
||||
if (bottomNavigation.getSelectedIndex() != navType) bottomNavigation.setSelectedIndex(navType, true);
|
||||
|
||||
@ -92,7 +92,7 @@ public class MyIssuesFragment extends BaseFragment<MyIssuesMvp.View, MyIssuesPre
|
||||
|
||||
@Override public void showProgress(@StringRes int resId) {
|
||||
|
||||
refresh.setRefreshing(true);
|
||||
refresh.setRefreshing(true);
|
||||
stateLayout.showProgress();
|
||||
}
|
||||
|
||||
@ -169,6 +169,12 @@ refresh.setRefreshing(true);
|
||||
}
|
||||
}
|
||||
|
||||
@Override public void onScrollTop(int index) {
|
||||
super.onScrollTop(index);
|
||||
if (recycler != null) recycler.scrollToPosition(0);
|
||||
}
|
||||
|
||||
|
||||
private MyIssuesType getIssuesType() {
|
||||
if (issuesType == null) {
|
||||
issuesType = (MyIssuesType) getArguments().getSerializable(BundleConstant.EXTRA_TWO);
|
||||
|
||||
@ -92,7 +92,7 @@ public class MyPullRequestFragment extends BaseFragment<MyPullRequestsMvp.View,
|
||||
|
||||
@Override public void showProgress(@StringRes int resId) {
|
||||
|
||||
refresh.setRefreshing(true);
|
||||
refresh.setRefreshing(true);
|
||||
stateLayout.showProgress();
|
||||
}
|
||||
|
||||
@ -180,6 +180,11 @@ refresh.setRefreshing(true);
|
||||
}
|
||||
}
|
||||
|
||||
@Override public void onScrollTop(int index) {
|
||||
super.onScrollTop(index);
|
||||
if (recycler != null) recycler.scrollToPosition(0);
|
||||
}
|
||||
|
||||
private void showReload() {
|
||||
hideProgress();
|
||||
stateLayout.showReload(adapter.getItemCount());
|
||||
|
||||
@ -6,17 +6,15 @@ import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.design.widget.TabLayout;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.support.v4.app.FragmentPagerAdapter;
|
||||
|
||||
import com.fastaccess.R;
|
||||
import com.fastaccess.data.dao.FragmentPagerAdapterModel;
|
||||
import com.fastaccess.helper.AppHelper;
|
||||
import com.fastaccess.ui.adapter.FragmentsPagerAdapter;
|
||||
import com.fastaccess.ui.base.BaseActivity;
|
||||
import com.fastaccess.ui.base.BaseFragment;
|
||||
import com.fastaccess.ui.base.mvp.presenter.BasePresenter;
|
||||
import com.fastaccess.ui.modules.main.MainActivity;
|
||||
import com.fastaccess.ui.modules.notification.all.AllNotificationsFragment;
|
||||
import com.fastaccess.ui.modules.notification.unread.UnreadNotificationsFragment;
|
||||
import com.fastaccess.ui.widgets.ViewPagerView;
|
||||
|
||||
import net.grandcentrix.thirtyinch.TiPresenter;
|
||||
@ -57,7 +55,21 @@ public class NotificationActivity extends BaseActivity {
|
||||
super.onCreate(savedInstanceState);
|
||||
AppHelper.cancelNotification(this);
|
||||
onSelectNotifications();
|
||||
setupTabs(savedInstanceState);
|
||||
setupTabs();
|
||||
tabs.addOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(pager) {
|
||||
@Override public void onTabReselected(TabLayout.Tab tab) {
|
||||
super.onTabReselected(tab);
|
||||
onScrollTop(tab.getPosition());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override public void onScrollTop(int index) {
|
||||
if (pager == null || pager.getAdapter() == null) return;
|
||||
Fragment fragment = (BaseFragment) pager.getAdapter().instantiateItem(pager, index);
|
||||
if (fragment instanceof BaseFragment) {
|
||||
((BaseFragment) fragment).onScrollTop(index);
|
||||
}
|
||||
}
|
||||
|
||||
@Override public void onBackPressed() {
|
||||
@ -67,7 +79,7 @@ public class NotificationActivity extends BaseActivity {
|
||||
super.onBackPressed();
|
||||
}
|
||||
|
||||
private void setupTabs(Bundle savedInstanceState) {
|
||||
private void setupTabs() {
|
||||
TabLayout.Tab tab1 = getTab(R.string.unread);
|
||||
TabLayout.Tab tab2 = getTab(R.string.all);
|
||||
tabs.addTab(tab1);
|
||||
@ -75,38 +87,6 @@ public class NotificationActivity extends BaseActivity {
|
||||
pager.setAdapter(new FragmentsPagerAdapter(getSupportFragmentManager(),
|
||||
FragmentPagerAdapterModel.buildForNotifications(this)));
|
||||
tabs.setupWithViewPager(pager);
|
||||
/*if (savedInstanceState == null) {
|
||||
replaceWithAll(0);
|
||||
}
|
||||
tabs.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
|
||||
@Override public void onTabSelected(TabLayout.Tab tab) {
|
||||
int position = tab.getPosition();
|
||||
if (AppHelper.getFragmentByTag(getSupportFragmentManager(), String.valueOf(position)) == null) {
|
||||
replaceWithAll(position);
|
||||
}
|
||||
}
|
||||
|
||||
@Override public void onTabUnselected(TabLayout.Tab tab) {
|
||||
|
||||
}
|
||||
|
||||
@Override public void onTabReselected(TabLayout.Tab tab) {
|
||||
|
||||
}
|
||||
});*/
|
||||
}
|
||||
|
||||
private void replaceWithAll(int position) {
|
||||
Fragment fragment;
|
||||
if (position == 0) {
|
||||
fragment = new UnreadNotificationsFragment();
|
||||
} else {
|
||||
fragment = new AllNotificationsFragment();
|
||||
}
|
||||
getSupportFragmentManager()
|
||||
.beginTransaction()
|
||||
.replace(R.id.fragmentContainer, fragment, String.valueOf(position))
|
||||
.commit();
|
||||
}
|
||||
|
||||
private TabLayout.Tab getTab(int titleId) {
|
||||
|
||||
@ -147,6 +147,11 @@ public class AllNotificationsFragment extends BaseFragment<AllNotificationsMvp.V
|
||||
super.onPrepareOptionsMenu(menu);
|
||||
}
|
||||
|
||||
@Override public void onScrollTop(int index) {
|
||||
super.onScrollTop(index);
|
||||
if (recycler != null) recycler.scrollToPosition(0);
|
||||
}
|
||||
|
||||
private void showReload() {
|
||||
hideProgress();
|
||||
stateLayout.showReload(adapter.getItemCount());
|
||||
|
||||
@ -93,7 +93,7 @@ public class UnreadNotificationsFragment extends BaseFragment<UnreadNotification
|
||||
|
||||
@Override public void showProgress(@StringRes int resId) {
|
||||
|
||||
refresh.setRefreshing(true);
|
||||
refresh.setRefreshing(true);
|
||||
|
||||
stateLayout.showProgress();
|
||||
}
|
||||
@ -138,6 +138,11 @@ refresh.setRefreshing(true);
|
||||
getPresenter().onCallApi();
|
||||
}
|
||||
|
||||
@Override public void onScrollTop(int index) {
|
||||
super.onScrollTop(index);
|
||||
if (recycler != null) recycler.scrollToPosition(0);
|
||||
}
|
||||
|
||||
private void invalidateMenu() {
|
||||
if (isSafe()) getActivity().supportInvalidateOptionsMenu();
|
||||
}
|
||||
|
||||
@ -117,6 +117,11 @@ refresh.setRefreshing(true);
|
||||
onRefresh();
|
||||
}
|
||||
|
||||
@Override public void onScrollTop(int index) {
|
||||
super.onScrollTop(index);
|
||||
if (recycler != null) recycler.scrollToPosition(0);
|
||||
}
|
||||
|
||||
private void showReload() {
|
||||
hideProgress();
|
||||
stateLayout.showReload(adapter.getItemCount());
|
||||
|
||||
@ -116,6 +116,11 @@ refresh.setRefreshing(true);
|
||||
onRefresh();
|
||||
}
|
||||
|
||||
@Override public void onScrollTop(int index) {
|
||||
super.onScrollTop(index);
|
||||
if (recycler != null) recycler.scrollToPosition(0);
|
||||
}
|
||||
|
||||
private void showReload() {
|
||||
hideProgress();
|
||||
stateLayout.showReload(adapter.getItemCount());
|
||||
|
||||
@ -137,6 +137,11 @@ refresh.setRefreshing(true);
|
||||
onRefresh();
|
||||
}
|
||||
|
||||
@Override public void onScrollTop(int index) {
|
||||
super.onScrollTop(index);
|
||||
if (recycler != null) recycler.scrollToPosition(0);
|
||||
}
|
||||
|
||||
private void showReload() {
|
||||
hideProgress();
|
||||
stateLayout.showReload(adapter.getItemCount());
|
||||
|
||||
@ -22,7 +22,6 @@ import com.fastaccess.provider.rest.loadmore.OnLoadMore;
|
||||
import com.fastaccess.provider.scheme.SchemeParser;
|
||||
import com.fastaccess.ui.adapter.FeedsAdapter;
|
||||
import com.fastaccess.ui.base.BaseFragment;
|
||||
import com.fastaccess.ui.modules.repos.RepoPagerActivity;
|
||||
import com.fastaccess.ui.widgets.StateLayout;
|
||||
import com.fastaccess.ui.widgets.dialog.ListDialogView;
|
||||
import com.fastaccess.ui.widgets.recyclerview.DynamicRecyclerView;
|
||||
@ -91,7 +90,7 @@ public class OrgFeedsFragment extends BaseFragment<OrgFeedsMvp.View, OrgFeedsPre
|
||||
|
||||
@Override public void showProgress(@StringRes int resId) {
|
||||
|
||||
refresh.setRefreshing(true);
|
||||
refresh.setRefreshing(true);
|
||||
|
||||
stateLayout.showProgress();
|
||||
}
|
||||
@ -111,11 +110,6 @@ refresh.setRefreshing(true);
|
||||
super.showMessage(titleRes, msgRes);
|
||||
}
|
||||
|
||||
private void showReload() {
|
||||
hideProgress();
|
||||
stateLayout.showReload(adapter.getItemCount());
|
||||
}
|
||||
|
||||
@Override public void onOpenRepoChooser(@NonNull ArrayList<SimpleUrlsModel> models) {
|
||||
Logger.e(models);
|
||||
ListDialogView<SimpleUrlsModel> dialogView = new ListDialogView<>();
|
||||
@ -163,32 +157,44 @@ refresh.setRefreshing(true);
|
||||
}
|
||||
|
||||
@Override public void onHidePromptComplete() {
|
||||
if(!dismissed[0])
|
||||
new MaterialTapTargetPrompt.Builder(getActivity())
|
||||
.setTarget(itemView)
|
||||
.setPrimaryText(R.string.fork)
|
||||
.setSecondaryText(R.string.feeds_fork_hint)
|
||||
.setCaptureTouchEventOutsidePrompt(true)
|
||||
.setBackgroundColourAlpha(244)
|
||||
.setBackgroundColour(ViewHelper.getAccentColor(getContext()))
|
||||
.setOnHidePromptListener(new MaterialTapTargetPrompt.OnHidePromptListener() {
|
||||
@Override
|
||||
public void onHidePrompt(MotionEvent motionEvent, boolean b) {
|
||||
ActivityHelper.hideDismissHints(OrgFeedsFragment.this.getContext());
|
||||
}
|
||||
if (!dismissed[0])
|
||||
new MaterialTapTargetPrompt.Builder(getActivity())
|
||||
.setTarget(itemView)
|
||||
.setPrimaryText(R.string.fork)
|
||||
.setSecondaryText(R.string.feeds_fork_hint)
|
||||
.setCaptureTouchEventOutsidePrompt(true)
|
||||
.setBackgroundColourAlpha(244)
|
||||
.setBackgroundColour(ViewHelper.getAccentColor(getContext()))
|
||||
.setOnHidePromptListener(new MaterialTapTargetPrompt.OnHidePromptListener() {
|
||||
@Override
|
||||
public void onHidePrompt(MotionEvent motionEvent, boolean b) {
|
||||
ActivityHelper.hideDismissHints(OrgFeedsFragment.this.getContext());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onHidePromptComplete() {
|
||||
@Override
|
||||
public void onHidePromptComplete() {
|
||||
|
||||
}
|
||||
})
|
||||
.show();
|
||||
}
|
||||
})
|
||||
.show();
|
||||
ActivityHelper.bringDismissAllToFront(getContext());
|
||||
}
|
||||
})
|
||||
.setCaptureTouchEventOutsidePrompt(true)
|
||||
.show();
|
||||
ActivityHelper.showDismissHints(getContext(), () -> { dismissed[0] = true; });
|
||||
ActivityHelper.showDismissHints(getContext(), () -> {
|
||||
dismissed[0] = true;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@Override public void onScrollTop(int index) {
|
||||
super.onScrollTop(index);
|
||||
if (recycler != null) recycler.scrollToPosition(0);
|
||||
}
|
||||
|
||||
private void showReload() {
|
||||
hideProgress();
|
||||
stateLayout.showReload(adapter.getItemCount());
|
||||
}
|
||||
}
|
||||
|
||||
@ -115,6 +115,11 @@ refresh.setRefreshing(true);
|
||||
onRefresh();
|
||||
}
|
||||
|
||||
@Override public void onScrollTop(int index) {
|
||||
super.onScrollTop(index);
|
||||
if (recycler != null) recycler.scrollToPosition(0);
|
||||
}
|
||||
|
||||
private void showReload() {
|
||||
hideProgress();
|
||||
stateLayout.showReload(adapter.getItemCount());
|
||||
|
||||
@ -118,6 +118,11 @@ refresh.setRefreshing(true);
|
||||
onRefresh();
|
||||
}
|
||||
|
||||
@Override public void onScrollTop(int index) {
|
||||
super.onScrollTop(index);
|
||||
if (recycler != null) recycler.scrollToPosition(0);
|
||||
}
|
||||
|
||||
private void showReload() {
|
||||
hideProgress();
|
||||
stateLayout.showReload(adapter.getItemCount());
|
||||
|
||||
@ -81,7 +81,7 @@ public class OrgTeamFragment extends BaseFragment<OrgTeamMvp.View, OrgTeamPresen
|
||||
|
||||
@Override public void showProgress(@StringRes int resId) {
|
||||
|
||||
refresh.setRefreshing(true);
|
||||
refresh.setRefreshing(true);
|
||||
stateLayout.showProgress();
|
||||
}
|
||||
|
||||
@ -100,11 +100,6 @@ refresh.setRefreshing(true);
|
||||
super.showMessage(titleRes, msgRes);
|
||||
}
|
||||
|
||||
private void showReload() {
|
||||
hideProgress();
|
||||
stateLayout.showReload(adapter.getItemCount());
|
||||
}
|
||||
|
||||
@NonNull @Override public OnLoadMore<String> getLoadMore() {
|
||||
if (onLoadMore == null) {
|
||||
onLoadMore = new OnLoadMore<>(getPresenter(), getArguments().getString(BundleConstant.EXTRA));
|
||||
@ -119,4 +114,14 @@ refresh.setRefreshing(true);
|
||||
@Override public void onClick(View view) {
|
||||
onRefresh();
|
||||
}
|
||||
|
||||
@Override public void onScrollTop(int index) {
|
||||
super.onScrollTop(index);
|
||||
if (recycler != null) recycler.scrollToPosition(0);
|
||||
}
|
||||
|
||||
private void showReload() {
|
||||
hideProgress();
|
||||
stateLayout.showReload(adapter.getItemCount());
|
||||
}
|
||||
}
|
||||
|
||||
@ -6,6 +6,7 @@ import android.os.Bundle;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.design.widget.TabLayout;
|
||||
import android.support.v4.app.Fragment;
|
||||
|
||||
import com.fastaccess.R;
|
||||
import com.fastaccess.data.dao.FragmentPagerAdapterModel;
|
||||
@ -13,6 +14,7 @@ import com.fastaccess.helper.BundleConstant;
|
||||
import com.fastaccess.helper.Bundler;
|
||||
import com.fastaccess.ui.adapter.FragmentsPagerAdapter;
|
||||
import com.fastaccess.ui.base.BaseActivity;
|
||||
import com.fastaccess.ui.base.BaseFragment;
|
||||
import com.fastaccess.ui.base.mvp.presenter.BasePresenter;
|
||||
import com.fastaccess.ui.widgets.ViewPagerView;
|
||||
|
||||
@ -81,5 +83,19 @@ public class TeamPagerActivity extends BaseActivity {
|
||||
tabs.setTabMode(TabLayout.MODE_FIXED);
|
||||
tabs.setupWithViewPager(pager);
|
||||
tabs.setPaddingRelative(0, 0, 0, 0);
|
||||
tabs.addOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(pager) {
|
||||
@Override public void onTabReselected(TabLayout.Tab tab) {
|
||||
super.onTabReselected(tab);
|
||||
onScrollTop(tab.getPosition());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override public void onScrollTop(int index) {
|
||||
if (pager == null || pager.getAdapter() == null) return;
|
||||
Fragment fragment = (BaseFragment) pager.getAdapter().instantiateItem(pager, index);
|
||||
if (fragment instanceof BaseFragment) {
|
||||
((BaseFragment) fragment).onScrollTop(index);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -81,7 +81,7 @@ public class TeamMembersFragment extends BaseFragment<TeamMembersMvp.View, TeamM
|
||||
|
||||
@Override public void showProgress(@StringRes int resId) {
|
||||
|
||||
refresh.setRefreshing(true);
|
||||
refresh.setRefreshing(true);
|
||||
stateLayout.showProgress();
|
||||
}
|
||||
|
||||
@ -115,6 +115,11 @@ refresh.setRefreshing(true);
|
||||
onRefresh();
|
||||
}
|
||||
|
||||
@Override public void onScrollTop(int index) {
|
||||
super.onScrollTop(index);
|
||||
if (recycler != null) recycler.scrollToPosition(0);
|
||||
}
|
||||
|
||||
private void showReload() {
|
||||
hideProgress();
|
||||
stateLayout.showReload(adapter.getItemCount());
|
||||
|
||||
@ -81,7 +81,7 @@ public class TeamReposFragment extends BaseFragment<TeamReposMvp.View, TeamRepos
|
||||
|
||||
@Override public void showProgress(@StringRes int resId) {
|
||||
|
||||
refresh.setRefreshing(true);
|
||||
refresh.setRefreshing(true);
|
||||
|
||||
stateLayout.showProgress();
|
||||
}
|
||||
@ -101,11 +101,6 @@ refresh.setRefreshing(true);
|
||||
super.showMessage(titleRes, msgRes);
|
||||
}
|
||||
|
||||
private void showReload() {
|
||||
hideProgress();
|
||||
stateLayout.showReload(adapter.getItemCount());
|
||||
}
|
||||
|
||||
@NonNull @Override public OnLoadMore<Long> getLoadMore() {
|
||||
if (onLoadMore == null) {
|
||||
onLoadMore = new OnLoadMore<>(getPresenter(), getArguments().getLong(BundleConstant.EXTRA));
|
||||
@ -120,4 +115,14 @@ refresh.setRefreshing(true);
|
||||
@Override public void onClick(View view) {
|
||||
onRefresh();
|
||||
}
|
||||
|
||||
@Override public void onScrollTop(int index) {
|
||||
super.onScrollTop(index);
|
||||
if (recycler != null) recycler.scrollToPosition(0);
|
||||
}
|
||||
|
||||
private void showReload() {
|
||||
hideProgress();
|
||||
stateLayout.showReload(adapter.getItemCount());
|
||||
}
|
||||
}
|
||||
|
||||
@ -217,6 +217,10 @@ public class ProfileOverviewFragment extends BaseFragment<ProfileOverviewMvp.Vie
|
||||
}
|
||||
}
|
||||
|
||||
@Override public void onUserNotFound() {
|
||||
if (isSafe()) getActivity().finish();
|
||||
}
|
||||
|
||||
@Override public void showProgress(@StringRes int resId) {
|
||||
progress.setVisibility(View.VISIBLE);
|
||||
}
|
||||
@ -235,6 +239,10 @@ public class ProfileOverviewFragment extends BaseFragment<ProfileOverviewMvp.Vie
|
||||
super.showMessage(titleRes, msgRes);
|
||||
}
|
||||
|
||||
@Override public void onScrollTop(int index) {
|
||||
super.onScrollTop(index);
|
||||
}
|
||||
|
||||
private void onHideProgress() {
|
||||
hideProgress();
|
||||
}
|
||||
|
||||
@ -25,6 +25,8 @@ interface ProfileOverviewMvp {
|
||||
void onInitContributions(@Nullable List<ContributionsDay> items);
|
||||
|
||||
void onInitOrgs(@Nullable List<User> orgs);
|
||||
|
||||
void onUserNotFound();
|
||||
}
|
||||
|
||||
interface Presenter extends BaseMvp.FAPresenter {
|
||||
|
||||
@ -61,6 +61,11 @@ class ProfileOverviewPresenter extends BasePresenter<ProfileOverviewMvp.View> im
|
||||
}
|
||||
|
||||
@Override public void onError(@NonNull Throwable throwable) {
|
||||
int statusCode = RestProvider.getErrorCode(throwable);
|
||||
if (statusCode == 404) {
|
||||
sendToView(ProfileOverviewMvp.View::onUserNotFound);
|
||||
return;
|
||||
}
|
||||
if (!InputHelper.isEmpty(login)) {
|
||||
onWorkOffline(login);
|
||||
}
|
||||
|
||||
@ -82,7 +82,7 @@ public class ProfileReposFragment extends BaseFragment<ProfileReposMvp.View, Pro
|
||||
|
||||
@Override public void showProgress(@StringRes int resId) {
|
||||
|
||||
refresh.setRefreshing(true);
|
||||
refresh.setRefreshing(true);
|
||||
|
||||
stateLayout.showProgress();
|
||||
}
|
||||
@ -102,11 +102,6 @@ refresh.setRefreshing(true);
|
||||
super.showMessage(titleRes, msgRes);
|
||||
}
|
||||
|
||||
private void showReload() {
|
||||
hideProgress();
|
||||
stateLayout.showReload(adapter.getItemCount());
|
||||
}
|
||||
|
||||
@NonNull @Override public OnLoadMore<String> getLoadMore() {
|
||||
if (onLoadMore == null) {
|
||||
onLoadMore = new OnLoadMore<>(getPresenter(), getArguments().getString(BundleConstant.EXTRA));
|
||||
@ -121,4 +116,14 @@ refresh.setRefreshing(true);
|
||||
@Override public void onClick(View view) {
|
||||
onRefresh();
|
||||
}
|
||||
|
||||
@Override public void onScrollTop(int index) {
|
||||
super.onScrollTop(index);
|
||||
if (recycler != null) recycler.scrollToPosition(0);
|
||||
}
|
||||
|
||||
private void showReload() {
|
||||
hideProgress();
|
||||
stateLayout.showReload(adapter.getItemCount());
|
||||
}
|
||||
}
|
||||
|
||||
@ -82,7 +82,7 @@ public class ProfileStarredFragment extends BaseFragment<ProfileStarredMvp.View,
|
||||
|
||||
@Override public void showProgress(@StringRes int resId) {
|
||||
|
||||
refresh.setRefreshing(true);
|
||||
refresh.setRefreshing(true);
|
||||
|
||||
stateLayout.showProgress();
|
||||
}
|
||||
@ -102,11 +102,6 @@ refresh.setRefreshing(true);
|
||||
super.showMessage(titleRes, msgRes);
|
||||
}
|
||||
|
||||
private void showReload() {
|
||||
hideProgress();
|
||||
stateLayout.showReload(adapter.getItemCount());
|
||||
}
|
||||
|
||||
@NonNull @Override public OnLoadMore<String> getLoadMore() {
|
||||
if (onLoadMore == null) {
|
||||
onLoadMore = new OnLoadMore<>(getPresenter(), getArguments().getString(BundleConstant.EXTRA));
|
||||
@ -121,4 +116,14 @@ refresh.setRefreshing(true);
|
||||
@Override public void onClick(View view) {
|
||||
onRefresh();
|
||||
}
|
||||
|
||||
@Override public void onScrollTop(int index) {
|
||||
super.onScrollTop(index);
|
||||
if (recycler != null) recycler.scrollToPosition(0);
|
||||
}
|
||||
|
||||
private void showReload() {
|
||||
hideProgress();
|
||||
stateLayout.showReload(adapter.getItemCount());
|
||||
}
|
||||
}
|
||||
|
||||
@ -300,11 +300,15 @@ public class RepoPagerActivity extends BaseActivity<RepoPagerMvp.View, RepoPager
|
||||
}
|
||||
|
||||
@Override public void onNavigationChanged(@RepoPagerMvp.RepoNavigationType int navType) {
|
||||
if (navType == RepoPagerMvp.PROFILE) {
|
||||
getPresenter().onModuleChanged(getSupportFragmentManager(), navType);
|
||||
bottomNavigation.setSelectedIndex(this.navType, true);
|
||||
return;
|
||||
}
|
||||
this.navType = navType;
|
||||
showHideFab();
|
||||
//noinspection WrongConstant
|
||||
if (bottomNavigation.getSelectedIndex() != navType) bottomNavigation.setSelectedIndex(navType, true);
|
||||
|
||||
showHideFab();
|
||||
getPresenter().onModuleChanged(getSupportFragmentManager(), navType);
|
||||
}
|
||||
|
||||
|
||||
@ -4,6 +4,7 @@ import android.os.Bundle;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.design.widget.TabLayout;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.view.View;
|
||||
import android.widget.TextView;
|
||||
|
||||
@ -72,6 +73,20 @@ public class RepoCodePagerFragment extends BaseFragment<RepoCodePagerMvp.View, R
|
||||
if (savedInstanceState != null && !counts.isEmpty()) {
|
||||
Stream.of(counts).forEach(this::updateCount);
|
||||
}
|
||||
tabs.addOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(pager) {
|
||||
@Override public void onTabReselected(TabLayout.Tab tab) {
|
||||
super.onTabReselected(tab);
|
||||
onScrollTop(tab.getPosition());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override public void onScrollTop(int index) {
|
||||
if (pager == null || pager.getAdapter() == null) return;
|
||||
Fragment fragment = (BaseFragment) pager.getAdapter().instantiateItem(pager, index);
|
||||
if (fragment instanceof BaseFragment) {
|
||||
((BaseFragment) fragment).onScrollTop(index);
|
||||
}
|
||||
}
|
||||
|
||||
@NonNull @Override public RepoCodePagerPresenter providePresenter() {
|
||||
|
||||
@ -197,6 +197,11 @@ refresh.setRefreshing(true);
|
||||
onRefresh();
|
||||
}
|
||||
|
||||
@Override public void onScrollTop(int index) {
|
||||
super.onScrollTop(index);
|
||||
if (recycler != null) recycler.scrollToPosition(0);
|
||||
}
|
||||
|
||||
private void showReload() {
|
||||
hideBranchesProgress();
|
||||
hideProgress();
|
||||
|
||||
@ -8,6 +8,7 @@ import android.support.annotation.NonNull;
|
||||
import android.support.design.widget.CoordinatorLayout;
|
||||
import android.support.design.widget.FloatingActionButton;
|
||||
import android.support.design.widget.TabLayout;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.support.v4.view.ViewPager;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
@ -26,6 +27,7 @@ import com.fastaccess.provider.scheme.SchemeParser;
|
||||
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.repos.RepoPagerActivity;
|
||||
import com.fastaccess.ui.modules.repos.code.commit.details.comments.CommitCommentsFragments;
|
||||
import com.fastaccess.ui.widgets.AvatarLayout;
|
||||
@ -182,6 +184,20 @@ public class CommitPagerActivity extends BaseActivity<CommitPagerMvp.View, Commi
|
||||
if (tabTwo != null && commit.getGitCommit() != null && commit.getGitCommit().getCommentCount() > 0) {
|
||||
tabTwo.setText(getString(R.string.comments) + " (" + commit.getGitCommit().getCommentCount() + ")");
|
||||
}
|
||||
tabs.addOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(pager) {
|
||||
@Override public void onTabReselected(TabLayout.Tab tab) {
|
||||
super.onTabReselected(tab);
|
||||
onScrollTop(tab.getPosition());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override public void onScrollTop(int index) {
|
||||
if (pager == null || pager.getAdapter() == null) return;
|
||||
Fragment fragment = (BaseFragment) pager.getAdapter().instantiateItem(pager, index);
|
||||
if (fragment instanceof BaseFragment) {
|
||||
((BaseFragment) fragment).onScrollTop(index);
|
||||
}
|
||||
}
|
||||
|
||||
@Override public void onFinishActivity() {
|
||||
|
||||
@ -273,6 +273,11 @@ public class CommitCommentsFragments extends BaseFragment<CommitCommentsMvp.View
|
||||
return getPresenter().isCallingApi(id, vId);
|
||||
}
|
||||
|
||||
@Override public void onScrollTop(int index) {
|
||||
super.onScrollTop(index);
|
||||
if (recycler != null) recycler.scrollToPosition(0);
|
||||
}
|
||||
|
||||
private void showReload() {
|
||||
hideProgress();
|
||||
stateLayout.showReload(adapter.getItemCount());
|
||||
|
||||
@ -84,4 +84,9 @@ public class CommitFilesFragment extends BaseFragment<CommitFilesMvp.View, Commi
|
||||
Boolean toggle = toggleMap.get(position);
|
||||
return toggle != null && toggle;
|
||||
}
|
||||
|
||||
@Override public void onScrollTop(int index) {
|
||||
super.onScrollTop(index);
|
||||
if (recycler != null) recycler.scrollToPosition(0);
|
||||
}
|
||||
}
|
||||
|
||||
@ -121,6 +121,11 @@ refresh.setRefreshing(true);
|
||||
onRefresh();
|
||||
}
|
||||
|
||||
@Override public void onScrollTop(int index) {
|
||||
super.onScrollTop(index);
|
||||
if (recycler != null) recycler.scrollToPosition(0);
|
||||
}
|
||||
|
||||
private void showReload() {
|
||||
hideProgress();
|
||||
stateLayout.showReload(adapter.getItemCount());
|
||||
|
||||
@ -265,6 +265,11 @@ public class RepoFilePathFragment extends BaseFragment<RepoFilePathMvp.View, Rep
|
||||
return repoFilesView;
|
||||
}
|
||||
|
||||
@Override public void onScrollTop(int index) {
|
||||
super.onScrollTop(index);
|
||||
if (repoFilesView != null) repoFilesView.onScrollTop(index);
|
||||
}
|
||||
|
||||
private void showReload() {
|
||||
branchesProgress.setVisibility(View.GONE);
|
||||
hideProgress();
|
||||
|
||||
@ -176,4 +176,9 @@ public class ViewerFragment extends BaseFragment<ViewerMvp.View, ViewerPresenter
|
||||
}
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
|
||||
@Override public void onScrollTop(int index) {
|
||||
super.onScrollTop(index);
|
||||
if (webView != null) webView.scrollTo(0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
@ -0,0 +1,67 @@
|
||||
package com.fastaccess.ui.modules.repos.code.releases;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
|
||||
import com.fastaccess.R;
|
||||
import com.fastaccess.helper.BundleConstant;
|
||||
import com.fastaccess.helper.Bundler;
|
||||
import com.fastaccess.ui.base.BaseActivity;
|
||||
|
||||
import net.grandcentrix.thirtyinch.TiPresenter;
|
||||
|
||||
/**
|
||||
* Created by Kosh on 25 May 2017, 7:13 PM
|
||||
*/
|
||||
|
||||
public class ReleasesListActivity extends BaseActivity {
|
||||
|
||||
|
||||
public static Intent getIntent(@NonNull Context context, @NonNull String username, @NonNull String repoId) {
|
||||
Intent intent = new Intent(context, ReleasesListActivity.class);
|
||||
intent.putExtras(Bundler.start().put(BundleConstant.ID, repoId)
|
||||
.put(BundleConstant.EXTRA, username)
|
||||
.end());
|
||||
return intent;
|
||||
}
|
||||
|
||||
@Override protected int layout() {
|
||||
return R.layout.activity_fragment_layout;
|
||||
}
|
||||
|
||||
@Override protected boolean isTransparent() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override protected boolean canBack() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override protected boolean isSecured() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@NonNull @Override public TiPresenter providePresenter() {
|
||||
return new RepoReleasesPresenter();
|
||||
}
|
||||
|
||||
@Override protected void onCreate(@Nullable Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
if (savedInstanceState == null) {
|
||||
if (getIntent() == null || getIntent().getExtras() == null) {
|
||||
finish();
|
||||
} else {
|
||||
Bundle bundle = getIntent().getExtras();
|
||||
//noinspection ConstantConditions
|
||||
getSupportFragmentManager()
|
||||
.beginTransaction()
|
||||
.replace(R.id.container, RepoReleasesFragment.newInstance(bundle.getString(BundleConstant.ID),
|
||||
bundle.getString(BundleConstant.EXTRA)))
|
||||
.commit();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -204,6 +204,11 @@ public class RepoReleasesFragment extends BaseFragment<RepoReleasesMvp.View, Rep
|
||||
}
|
||||
}
|
||||
|
||||
@Override public void onScrollTop(int index) {
|
||||
super.onScrollTop(index);
|
||||
if (recycler != null) recycler.scrollToPosition(0);
|
||||
}
|
||||
|
||||
private void showReload() {
|
||||
hideProgress();
|
||||
stateLayout.showReload(adapter.getItemCount());
|
||||
|
||||
@ -15,6 +15,7 @@ import com.fastaccess.data.dao.MilestoneModel;
|
||||
import com.fastaccess.helper.BundleConstant;
|
||||
import com.fastaccess.helper.Bundler;
|
||||
import com.fastaccess.ui.adapter.MilestonesAdapter;
|
||||
import com.fastaccess.ui.base.BaseDialogFragment;
|
||||
import com.fastaccess.ui.base.BaseFragment;
|
||||
import com.fastaccess.ui.modules.repos.extras.milestone.create.CreateMilestoneDialogFragment;
|
||||
import com.fastaccess.ui.widgets.AppbarRefreshLayout;
|
||||
@ -76,6 +77,9 @@ public class MilestoneDialogFragment extends BaseFragment<MilestoneMvp.View, Mil
|
||||
|
||||
@Override public void onMilestoneSelected(@NonNull MilestoneModel milestoneModel) {
|
||||
onMilestoneSelected.onMilestoneSelected(milestoneModel);
|
||||
if (getParentFragment() instanceof BaseDialogFragment) {
|
||||
((BaseDialogFragment) getParentFragment()).dismiss();
|
||||
}
|
||||
}
|
||||
|
||||
@Override protected int fragmentLayout() {
|
||||
@ -112,7 +116,7 @@ public class MilestoneDialogFragment extends BaseFragment<MilestoneMvp.View, Mil
|
||||
|
||||
@Override public void showProgress(@StringRes int resId) {
|
||||
|
||||
refresh.setRefreshing(true);
|
||||
refresh.setRefreshing(true);
|
||||
stateLayout.showProgress();
|
||||
}
|
||||
|
||||
|
||||
@ -4,6 +4,7 @@ import android.os.Bundle;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.design.widget.TabLayout;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.view.View;
|
||||
import android.widget.TextView;
|
||||
|
||||
@ -60,6 +61,12 @@ public class RepoIssuesPagerFragment extends BaseFragment<RepoIssuesPagerMvp.Vie
|
||||
if (savedInstanceState != null && !counts.isEmpty()) {
|
||||
Stream.of(counts).forEach(this::updateCount);
|
||||
}
|
||||
tabs.addOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(pager) {
|
||||
@Override public void onTabReselected(TabLayout.Tab tab) {
|
||||
super.onTabReselected(tab);
|
||||
onScrollTop(tab.getPosition());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@NonNull @Override public RepoIssuesPagerPresenter providePresenter() {
|
||||
@ -106,6 +113,14 @@ public class RepoIssuesPagerFragment extends BaseFragment<RepoIssuesPagerMvp.Vie
|
||||
if (openedIssues != null) openedIssues.onRefresh(isLastUpdated);
|
||||
}
|
||||
|
||||
@Override public void onScrollTop(int index) {
|
||||
if (pager == null || pager.getAdapter() == null) return;
|
||||
Fragment fragment = (BaseFragment) pager.getAdapter().instantiateItem(pager, index);
|
||||
if (fragment instanceof BaseFragment) {
|
||||
((BaseFragment) fragment).onScrollTop(index);
|
||||
}
|
||||
}
|
||||
|
||||
private void updateCount(@NonNull TabsCountStateModel model) {
|
||||
TextView tv = ViewHelper.getTabTextView(tabs, model.getTabIndex());
|
||||
tv.setText(SpannableBuilder.builder()
|
||||
|
||||
@ -136,7 +136,7 @@ public class RepoClosedIssuesFragment extends BaseFragment<RepoIssuesMvp.View, R
|
||||
|
||||
@Override public void showProgress(@StringRes int resId) {
|
||||
|
||||
refresh.setRefreshing(true);
|
||||
refresh.setRefreshing(true);
|
||||
stateLayout.showProgress();
|
||||
}
|
||||
|
||||
@ -184,6 +184,11 @@ refresh.setRefreshing(true);
|
||||
onRefresh();
|
||||
}
|
||||
|
||||
@Override public void onScrollTop(int index) {
|
||||
super.onScrollTop(index);
|
||||
if (recycler != null) recycler.scrollToPosition(0);
|
||||
}
|
||||
|
||||
private void showReload() {
|
||||
hideProgress();
|
||||
stateLayout.showReload(adapter.getItemCount());
|
||||
|
||||
@ -196,6 +196,11 @@ refresh.setRefreshing(true);
|
||||
onRefresh();
|
||||
}
|
||||
|
||||
@Override public void onScrollTop(int index) {
|
||||
super.onScrollTop(index);
|
||||
if (recycler != null) recycler.scrollToPosition(0);
|
||||
}
|
||||
|
||||
private void showReload() {
|
||||
hideProgress();
|
||||
stateLayout.showReload(adapter.getItemCount());
|
||||
|
||||
@ -208,7 +208,7 @@ public class IssueTimelinePresenter extends BasePresenter<IssueTimelineMvp.View>
|
||||
return getReactionsProvider().isCallingApi(id, vId);
|
||||
}
|
||||
|
||||
private ReactionsProvider getReactionsProvider() {
|
||||
@NonNull private ReactionsProvider getReactionsProvider() {
|
||||
if (reactionsProvider == null) {
|
||||
reactionsProvider = new ReactionsProvider();
|
||||
}
|
||||
|
||||
@ -4,6 +4,7 @@ import android.os.Bundle;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.design.widget.TabLayout;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.view.View;
|
||||
import android.widget.TextView;
|
||||
|
||||
@ -38,7 +39,6 @@ public class RepoPullRequestPagerFragment extends BaseFragment<RepoPullRequestPa
|
||||
@State HashSet<TabsCountStateModel> counts = new HashSet<>();
|
||||
|
||||
|
||||
|
||||
public static RepoPullRequestPagerFragment newInstance(@NonNull String repoId, @NonNull String login) {
|
||||
RepoPullRequestPagerFragment view = new RepoPullRequestPagerFragment();
|
||||
view.setArguments(Bundler.start()
|
||||
@ -62,6 +62,20 @@ public class RepoPullRequestPagerFragment extends BaseFragment<RepoPullRequestPa
|
||||
if (savedInstanceState != null && !counts.isEmpty()) {
|
||||
Stream.of(counts).forEach(this::updateCount);
|
||||
}
|
||||
tabs.addOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(pager) {
|
||||
@Override public void onTabReselected(TabLayout.Tab tab) {
|
||||
super.onTabReselected(tab);
|
||||
onScrollTop(tab.getPosition());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override public void onScrollTop(int index) {
|
||||
if (pager == null || pager.getAdapter() == null) return;
|
||||
Fragment fragment = (BaseFragment) pager.getAdapter().instantiateItem(pager, index);
|
||||
if (fragment instanceof BaseFragment) {
|
||||
((BaseFragment) fragment).onScrollTop(index);
|
||||
}
|
||||
}
|
||||
|
||||
@NonNull @Override public RepoPullRequestPagerPresenter providePresenter() {
|
||||
|
||||
@ -127,7 +127,7 @@ public class RepoPullRequestFragment extends BaseFragment<RepoPullRequestMvp.Vie
|
||||
|
||||
@Override public void showProgress(@StringRes int resId) {
|
||||
|
||||
refresh.setRefreshing(true);
|
||||
refresh.setRefreshing(true);
|
||||
|
||||
stateLayout.showProgress();
|
||||
}
|
||||
@ -167,6 +167,11 @@ refresh.setRefreshing(true);
|
||||
onRefresh();
|
||||
}
|
||||
|
||||
@Override public void onScrollTop(int index) {
|
||||
super.onScrollTop(index);
|
||||
if (recycler != null) recycler.scrollToPosition(0);
|
||||
}
|
||||
|
||||
private IssueState getIssueState() {
|
||||
return ((IssueState) getArguments().getSerializable(BundleConstant.EXTRA_TWO));
|
||||
}
|
||||
|
||||
@ -7,6 +7,7 @@ import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.design.widget.FloatingActionButton;
|
||||
import android.support.design.widget.TabLayout;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.support.v4.view.ViewPager;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
@ -27,6 +28,7 @@ import com.fastaccess.helper.Logger;
|
||||
import com.fastaccess.helper.ViewHelper;
|
||||
import com.fastaccess.ui.adapter.FragmentsPagerAdapter;
|
||||
import com.fastaccess.ui.base.BaseActivity;
|
||||
import com.fastaccess.ui.base.BaseFragment;
|
||||
import com.fastaccess.ui.modules.repos.RepoPagerActivity;
|
||||
import com.fastaccess.ui.modules.repos.RepoPagerMvp;
|
||||
import com.fastaccess.ui.modules.repos.extras.assignees.AssigneesDialogFragment;
|
||||
@ -264,10 +266,16 @@ public class PullRequestPagerActivity extends BaseActivity<PullRequestPagerMvp.V
|
||||
pager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
|
||||
@Override public void onPageSelected(int position) {
|
||||
super.onPageSelected(position);
|
||||
hideShowFab();
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
tabs.addOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(pager) {
|
||||
@Override public void onTabReselected(TabLayout.Tab tab) {
|
||||
super.onTabReselected(tab);
|
||||
onScrollTop(tab.getPosition());
|
||||
}
|
||||
});
|
||||
if (tabs.getTabAt(2) != null) {
|
||||
tabs.getTabAt(2)
|
||||
.setText(SpannableBuilder.builder()
|
||||
@ -298,6 +306,14 @@ public class PullRequestPagerActivity extends BaseActivity<PullRequestPagerMvp.V
|
||||
hideShowFab();
|
||||
}
|
||||
|
||||
@Override public void onScrollTop(int index) {
|
||||
if (pager == null || pager.getAdapter() == null) return;
|
||||
Fragment fragment = (BaseFragment) pager.getAdapter().instantiateItem(pager, index);
|
||||
if (fragment instanceof BaseFragment) {
|
||||
((BaseFragment) fragment).onScrollTop(index);
|
||||
}
|
||||
}
|
||||
|
||||
@Override public void onMessageDialogActionClicked(boolean isOk, @Nullable Bundle bundle) {
|
||||
super.onMessageDialogActionClicked(isOk, bundle);
|
||||
if (isOk) {
|
||||
|
||||
@ -123,6 +123,11 @@ refresh.setRefreshing(true);
|
||||
onRefresh();
|
||||
}
|
||||
|
||||
@Override public void onScrollTop(int index) {
|
||||
super.onScrollTop(index);
|
||||
if (recycler != null) recycler.scrollToPosition(0);
|
||||
}
|
||||
|
||||
private void showReload() {
|
||||
hideProgress();
|
||||
stateLayout.showReload(adapter.getItemCount());
|
||||
|
||||
@ -138,6 +138,11 @@ public class PullRequestFilesFragment extends BaseFragment<PullRequestFilesMvp.V
|
||||
return toggle != null && toggle;
|
||||
}
|
||||
|
||||
@Override public void onScrollTop(int index) {
|
||||
super.onScrollTop(index);
|
||||
if (recycler != null) recycler.scrollToPosition(0);
|
||||
}
|
||||
|
||||
private void showReload() {
|
||||
hideProgress();
|
||||
stateLayout.showReload(adapter.getItemCount());
|
||||
|
||||
@ -338,6 +338,11 @@ public class PullRequestTimelineFragment extends BaseFragment<PullRequestTimelin
|
||||
return getPresenter().isCallingApi(id, vId);
|
||||
}
|
||||
|
||||
@Override public void onScrollTop(int index) {
|
||||
super.onScrollTop(index);
|
||||
if (recycler != null) recycler.scrollToPosition(0);
|
||||
}
|
||||
|
||||
private View getFromView() {
|
||||
return getActivity() != null && getActivity().findViewById(R.id.fab) != null ? getActivity().findViewById(R.id.fab) : recycler;
|
||||
}
|
||||
|
||||
@ -5,6 +5,7 @@ import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.design.widget.AppBarLayout;
|
||||
import android.support.design.widget.TabLayout;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.text.Editable;
|
||||
import android.view.KeyEvent;
|
||||
import android.view.View;
|
||||
@ -20,6 +21,7 @@ import com.fastaccess.helper.AnimHelper;
|
||||
import com.fastaccess.helper.ViewHelper;
|
||||
import com.fastaccess.ui.adapter.FragmentsPagerAdapter;
|
||||
import com.fastaccess.ui.base.BaseActivity;
|
||||
import com.fastaccess.ui.base.BaseFragment;
|
||||
import com.fastaccess.ui.widgets.FontAutoCompleteEditText;
|
||||
import com.fastaccess.ui.widgets.ForegroundImageView;
|
||||
import com.fastaccess.ui.widgets.ViewPagerView;
|
||||
@ -106,28 +108,17 @@ public class SearchActivity extends BaseActivity<SearchMvp.View, SearchPresenter
|
||||
setupTab();
|
||||
}
|
||||
|
||||
if(getIntent().hasExtra("search")){
|
||||
if (getIntent().hasExtra("search")) {
|
||||
searchEditText.setText(getIntent().getStringExtra("search"));
|
||||
onTextChange(searchEditText.getEditableText());
|
||||
getPresenter().onSearchClicked(pager, searchEditText);
|
||||
}
|
||||
}
|
||||
|
||||
private void setupTab() {
|
||||
for (TabsCountStateModel model : tabsCountSet) {
|
||||
int index = model.getTabIndex();
|
||||
int count = model.getCount();
|
||||
TextView textView = ViewHelper.getTabTextView(tabs, index);
|
||||
if (index == 0) {
|
||||
textView.setText(String.format("%s(%s)", getString(R.string.repos), numberFormat.format(count)));
|
||||
} else if (index == 1) {
|
||||
textView.setText(String.format("%s(%s)", getString(R.string.users), numberFormat.format(count)));
|
||||
} else if (index == 2) {
|
||||
textView.setText(String.format("%s(%s)", getString(R.string.issues), numberFormat.format(count)));
|
||||
} else if (index == 3) {
|
||||
textView.setText(String.format("%s(%s)", getString(R.string.code), numberFormat.format(count)));
|
||||
tabs.addOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(pager) {
|
||||
@Override public void onTabReselected(TabLayout.Tab tab) {
|
||||
super.onTabReselected(tab);
|
||||
onScrollTop(tab.getPosition());
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override public void onNotifyAdapter(@Nullable SearchHistory query) {
|
||||
@ -152,8 +143,33 @@ public class SearchActivity extends BaseActivity<SearchMvp.View, SearchPresenter
|
||||
}
|
||||
}
|
||||
|
||||
@Override public void onScrollTop(int index) {
|
||||
if (pager == null || pager.getAdapter() == null) return;
|
||||
Fragment fragment = (BaseFragment) pager.getAdapter().instantiateItem(pager, index);
|
||||
if (fragment instanceof BaseFragment) {
|
||||
((BaseFragment) fragment).onScrollTop(index);
|
||||
}
|
||||
}
|
||||
|
||||
private ArrayAdapter<SearchHistory> getAdapter() {
|
||||
if (adapter == null) adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, getPresenter().getHints());
|
||||
return adapter;
|
||||
}
|
||||
|
||||
private void setupTab() {
|
||||
for (TabsCountStateModel model : tabsCountSet) {
|
||||
int index = model.getTabIndex();
|
||||
int count = model.getCount();
|
||||
TextView textView = ViewHelper.getTabTextView(tabs, index);
|
||||
if (index == 0) {
|
||||
textView.setText(String.format("%s(%s)", getString(R.string.repos), numberFormat.format(count)));
|
||||
} else if (index == 1) {
|
||||
textView.setText(String.format("%s(%s)", getString(R.string.users), numberFormat.format(count)));
|
||||
} else if (index == 2) {
|
||||
textView.setText(String.format("%s(%s)", getString(R.string.issues), numberFormat.format(count)));
|
||||
} else if (index == 3) {
|
||||
textView.setText(String.format("%s(%s)", getString(R.string.code), numberFormat.format(count)));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -134,17 +134,15 @@ public class SearchCodeFragment extends BaseFragment<SearchCodeMvp.View, SearchC
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onQueueSearch(@NonNull String query) {
|
||||
@Override public void onQueueSearch(@NonNull String query) {
|
||||
this.searchQuery = query;
|
||||
if(getView()!=null)
|
||||
if (getView() != null)
|
||||
onSetSearchQuery(query, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onQueueSearch(@NonNull String query, boolean showRepoName) {
|
||||
@Override public void onQueueSearch(@NonNull String query, boolean showRepoName) {
|
||||
this.searchQuery = query;
|
||||
if(getView()!=null)
|
||||
if (getView() != null)
|
||||
onSetSearchQuery(query, showRepoName);
|
||||
}
|
||||
|
||||
@ -165,7 +163,7 @@ public class SearchCodeFragment extends BaseFragment<SearchCodeMvp.View, SearchC
|
||||
}
|
||||
|
||||
@Override public void onRefresh() {
|
||||
if(searchQuery.length()==0){
|
||||
if (searchQuery.length() == 0) {
|
||||
refresh.setRefreshing(false);
|
||||
return;
|
||||
}
|
||||
@ -176,6 +174,11 @@ public class SearchCodeFragment extends BaseFragment<SearchCodeMvp.View, SearchC
|
||||
onRefresh();
|
||||
}
|
||||
|
||||
@Override public void onScrollTop(int index) {
|
||||
super.onScrollTop(index);
|
||||
if (recycler != null) recycler.scrollToPosition(0);
|
||||
}
|
||||
|
||||
private void showReload() {
|
||||
hideProgress();
|
||||
stateLayout.showReload(adapter.getItemCount());
|
||||
|
||||
@ -130,8 +130,7 @@ public class SearchIssuesFragment extends BaseFragment<SearchIssuesMvp.View, Sea
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onQueueSearch(@NonNull String query) {
|
||||
@Override public void onQueueSearch(@NonNull String query) {
|
||||
this.searchQuery = query;
|
||||
if(getView()!=null)
|
||||
onSetSearchQuery(query);
|
||||
@ -157,6 +156,11 @@ public class SearchIssuesFragment extends BaseFragment<SearchIssuesMvp.View, Sea
|
||||
onRefresh();
|
||||
}
|
||||
|
||||
@Override public void onScrollTop(int index) {
|
||||
super.onScrollTop(index);
|
||||
if (recycler != null) recycler.scrollToPosition(0);
|
||||
}
|
||||
|
||||
private void showReload() {
|
||||
hideProgress();
|
||||
stateLayout.showReload(adapter.getItemCount());
|
||||
|
||||
@ -131,10 +131,9 @@ public class SearchReposFragment extends BaseFragment<SearchReposMvp.View, Searc
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onQueueSearch(@NonNull String query) {
|
||||
@Override public void onQueueSearch(@NonNull String query) {
|
||||
this.searchQuery = query;
|
||||
if(getView()!=null)
|
||||
if (getView() != null)
|
||||
onSetSearchQuery(query);
|
||||
}
|
||||
|
||||
@ -147,7 +146,7 @@ public class SearchReposFragment extends BaseFragment<SearchReposMvp.View, Searc
|
||||
}
|
||||
|
||||
@Override public void onRefresh() {
|
||||
if(searchQuery.length()==0){
|
||||
if (searchQuery.length() == 0) {
|
||||
refresh.setRefreshing(false);
|
||||
return;
|
||||
}
|
||||
@ -158,6 +157,11 @@ public class SearchReposFragment extends BaseFragment<SearchReposMvp.View, Searc
|
||||
onRefresh();
|
||||
}
|
||||
|
||||
@Override public void onScrollTop(int index) {
|
||||
super.onScrollTop(index);
|
||||
if (recycler != null) recycler.scrollToPosition(0);
|
||||
}
|
||||
|
||||
private void showReload() {
|
||||
hideProgress();
|
||||
stateLayout.showReload(adapter.getItemCount());
|
||||
|
||||
@ -129,10 +129,9 @@ public class SearchUsersFragment extends BaseFragment<SearchUsersMvp.View, Searc
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onQueueSearch(@NonNull String query) {
|
||||
@Override public void onQueueSearch(@NonNull String query) {
|
||||
this.searchQuery = query;
|
||||
if(getView()!=null)
|
||||
if (getView() != null)
|
||||
onSetSearchQuery(query);
|
||||
}
|
||||
|
||||
@ -145,7 +144,7 @@ public class SearchUsersFragment extends BaseFragment<SearchUsersMvp.View, Searc
|
||||
}
|
||||
|
||||
@Override public void onRefresh() {
|
||||
if(searchQuery.length()==0){
|
||||
if (searchQuery.length() == 0) {
|
||||
refresh.setRefreshing(false);
|
||||
return;
|
||||
}
|
||||
@ -156,6 +155,11 @@ public class SearchUsersFragment extends BaseFragment<SearchUsersMvp.View, Searc
|
||||
onRefresh();
|
||||
}
|
||||
|
||||
@Override public void onScrollTop(int index) {
|
||||
super.onScrollTop(index);
|
||||
if (recycler != null) recycler.scrollToPosition(0);
|
||||
}
|
||||
|
||||
private void showReload() {
|
||||
hideProgress();
|
||||
stateLayout.showReload(adapter.getItemCount());
|
||||
|
||||
@ -5,6 +5,7 @@ import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.design.widget.TabLayout;
|
||||
import android.support.v4.app.Fragment;
|
||||
|
||||
import com.fastaccess.R;
|
||||
import com.fastaccess.data.dao.FragmentPagerAdapterModel;
|
||||
@ -14,6 +15,7 @@ import com.fastaccess.helper.Bundler;
|
||||
import com.fastaccess.helper.InputHelper;
|
||||
import com.fastaccess.ui.adapter.FragmentsPagerAdapter;
|
||||
import com.fastaccess.ui.base.BaseActivity;
|
||||
import com.fastaccess.ui.base.BaseFragment;
|
||||
import com.fastaccess.ui.modules.main.MainActivity;
|
||||
import com.fastaccess.ui.widgets.ViewPagerView;
|
||||
|
||||
@ -110,6 +112,20 @@ public class UserPagerActivity extends BaseActivity<UserPagerMvp.View, UserPager
|
||||
onInitOrg(getPresenter().isMember == 1);
|
||||
}
|
||||
}
|
||||
tabs.addOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(pager) {
|
||||
@Override public void onTabReselected(TabLayout.Tab tab) {
|
||||
super.onTabReselected(tab);
|
||||
onScrollTop(tab.getPosition());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override public void onScrollTop(int index) {
|
||||
if (pager == null || pager.getAdapter() == null) return;
|
||||
Fragment fragment = (BaseFragment) pager.getAdapter().instantiateItem(pager, index);
|
||||
if (fragment instanceof BaseFragment) {
|
||||
((BaseFragment) fragment).onScrollTop(index);
|
||||
}
|
||||
}
|
||||
|
||||
@Override public void hideProgress() {
|
||||
|
||||
@ -95,7 +95,7 @@ public abstract class BaseRecyclerAdapter<M, VH extends BaseViewHolder,
|
||||
|
||||
public void addItem(M item, int position) {
|
||||
data.add(position, item);
|
||||
notifyItemInserted(data.size() - 1);
|
||||
notifyItemInserted(position);
|
||||
}
|
||||
|
||||
public void addItem(M item) {
|
||||
|
||||
9
app/src/main/res/drawable/ic_checkbox_empty_small.xml
Normal file
9
app/src/main/res/drawable/ic_checkbox_empty_small.xml
Normal file
@ -0,0 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="16dp"
|
||||
android:height="16dp"
|
||||
android:viewportHeight="24.0"
|
||||
android:viewportWidth="24.0">
|
||||
<path
|
||||
android:fillColor="@color/light_gray"
|
||||
android:pathData="M19,5v14H5V5h14m0,-2H5c-1.1,0 -2,0.9 -2,2v14c0,1.1 0.9,2 2,2h14c1.1,0 2,-0.9 2,-2V5c0,-1.1 -0.9,-2 -2,-2z"/>
|
||||
</vector>
|
||||
9
app/src/main/res/drawable/ic_checkbox_small.xml
Normal file
9
app/src/main/res/drawable/ic_checkbox_small.xml
Normal file
@ -0,0 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="16dp"
|
||||
android:height="16dp"
|
||||
android:viewportWidth="24.0"
|
||||
android:viewportHeight="24.0">
|
||||
<path
|
||||
android:fillColor="@color/material_blue_700"
|
||||
android:pathData="M19,3L5,3c-1.11,0 -2,0.9 -2,2v14c0,1.1 0.89,2 2,2h14c1.11,0 2,-0.9 2,-2L21,5c0,-1.1 -0.89,-2 -2,-2zM10,17l-5,-5 1.41,-1.41L10,14.17l7.59,-7.59L19,8l-9,9z"/>
|
||||
</vector>
|
||||
@ -1,11 +1,7 @@
|
||||
// Top-level build file where you can add configuration options common to all sub-projects/modules.
|
||||
|
||||
buildscript {
|
||||
ext.kotlin_version = '1.1.2-4'
|
||||
ext {
|
||||
// See http://stackoverflow.com/questions/27372828/access-project-extra-properties-in-buildscript-closure
|
||||
taskRequests = getGradle().getStartParameter().getTaskRequests().toString()
|
||||
|
||||
butterKnifeVersion = '8.5.1'
|
||||
icepickVersion = '3.2.0'
|
||||
lombokVersion = '1.12.6'
|
||||
@ -18,6 +14,7 @@ buildscript {
|
||||
assertjVersion = '2.5.0'
|
||||
espresseVersion = '2.2.2'
|
||||
requery = '1.3.2'
|
||||
// kotlin_version = '1.1.2-4'
|
||||
}
|
||||
|
||||
repositories {
|
||||
@ -32,7 +29,7 @@ buildscript {
|
||||
}
|
||||
classpath 'com.novoda:gradle-build-properties-plugin:0.3'
|
||||
classpath 'com.dicedmelon.gradle:jacoco-android:0.1.1'
|
||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
||||
// classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user