diff --git a/app/build.gradle b/app/build.gradle index 7831a89eb..9ffefe066 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -100,66 +100,66 @@ repositories { } dependencies { - compile fileTree(include: ['*.jar'], dir: 'libs') - compile "com.android.support:appcompat-v7:${supportVersion}" - compile "com.android.support:design:${supportVersion}" - compile "com.android.support:cardview-v7:${supportVersion}" - compile "com.android.support:recyclerview-v7:${supportVersion}" - compile "com.android.support:preference-v14:${supportVersion}" - compile "com.android.support:customtabs:${supportVersion}" - compile "com.android.support:palette-v7:${supportVersion}" -// compile "com.android.support:support-emoji-appcompat:${supportVersion}" - compile "net.grandcentrix.thirtyinch:thirtyinch:${thirtyinchVersion}" - compile "net.grandcentrix.thirtyinch:thirtyinch-rx2:${thirtyinchVersion}" - compile "com.squareup.retrofit2:retrofit:${retrofit}" - compile "com.squareup.retrofit2:converter-gson:${retrofit}" - compile "com.squareup.retrofit2:adapter-rxjava2:${retrofit}" - compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5' - compile 'cn.gavinliu.android.lib:ShapedImageView:0.8.3' - compile "frankiesardo:icepick:${icepickVersion}" - compile "com.jakewharton:butterknife:${butterKnifeVersion}" - compile 'it.sephiroth.android.library.bottomnavigation:bottom-navigation:2.0.1-rc1' - compile 'io.reactivex.rxjava2:rxjava:2.0.6' - compile 'io.reactivex.rxjava2:rxandroid:2.0.1' - compile 'com.squareup.okhttp3:logging-interceptor:3.8.0' - compile 'com.annimon:stream:1.1.7' - compile 'com.github.GrenderG:Toasty:1.1.3' - compile 'com.github.JediBurrell:MaterialTapTargetPrompt:-SNAPSHOT' - compile 'com.github.k0shk0sh:RetainedDateTimePickers:1.0.2' - compile 'com.github.daniel-stoneuk:material-about-library:1.8.1' - compile "io.requery:requery:${requery}" - compile "io.requery:requery-android:${requery}" - compile('com.mikepenz:aboutlibraries:5.9.5@aar') { transitive = true } - compile 'com.github.nightwhistler:HtmlSpanner:0.4' - compile 'net.sourceforge.htmlcleaner:htmlcleaner:2.2' - compile 'com.github.matthiasrobbers:shortbread:1.0.1' - compile 'com.atlassian.commonmark:commonmark:0.9.0' - compile 'com.firebase:firebase-jobdispatcher:0.6.0' - compile "com.google.firebase:firebase-ads:${gms}" - compile "com.google.firebase:firebase-messaging:${gms}" - releaseCompile "com.google.firebase:firebase-crash:${gms}" - compile "com.google.android.gms:play-services-auth:${gms}" - compile "com.github.florent37:retrojsoup:${retroJsoup}" - compile "com.github.florent37:rxjsoup:${retroJsoup}" - compile "org.jsoup:jsoup:1.10.2" -// compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:${kotlin_version}" - provided "org.projectlombok:lombok:${lombokVersion}" + implementation fileTree(include: ['*.jar'], dir: 'libs') + implementation "com.android.support:appcompat-v7:${supportVersion}" + implementation "com.android.support:design:${supportVersion}" + implementation "com.android.support:cardview-v7:${supportVersion}" + implementation "com.android.support:recyclerview-v7:${supportVersion}" + implementation "com.android.support:preference-v14:${supportVersion}" + implementation "com.android.support:customtabs:${supportVersion}" + implementation "com.android.support:palette-v7:${supportVersion}" +// implementation "com.android.support:support-emoji-appcompat:${supportVersion}" + implementation "net.grandcentrix.thirtyinch:thirtyinch:${thirtyinchVersion}" + implementation "net.grandcentrix.thirtyinch:thirtyinch-rx2:${thirtyinchVersion}" + implementation "com.squareup.retrofit2:retrofit:${retrofit}" + implementation "com.squareup.retrofit2:converter-gson:${retrofit}" + implementation "com.squareup.retrofit2:adapter-rxjava2:${retrofit}" + implementation 'com.nostra13.universalimageloader:universal-image-loader:1.9.5' + implementation 'cn.gavinliu.android.lib:ShapedImageView:0.8.3' + implementation "frankiesardo:icepick:${icepickVersion}" + implementation "com.jakewharton:butterknife:${butterKnifeVersion}" + implementation 'it.sephiroth.android.library.bottomnavigation:bottom-navigation:2.0.1-rc1' + implementation 'io.reactivex.rxjava2:rxjava:2.0.7' + implementation 'io.reactivex.rxjava2:rxandroid:2.0.1' + implementation 'com.squareup.okhttp3:logging-interceptor:3.8.0' + implementation 'com.annimon:stream:1.1.7' + implementation 'com.github.GrenderG:Toasty:1.1.3' + implementation 'com.github.JediBurrell:MaterialTapTargetPrompt:-SNAPSHOT' + implementation 'com.github.k0shk0sh:RetainedDateTimePickers:1.0.2' + implementation 'com.github.daniel-stoneuk:material-about-library:1.8.1' + implementation "io.requery:requery:${requery}" + implementation "io.requery:requery-android:${requery}" + implementation('com.mikepenz:aboutlibraries:5.9.5@aar') { transitive = true } + implementation 'com.github.nightwhistler:HtmlSpanner:0.4' + implementation 'net.sourceforge.htmlcleaner:htmlcleaner:2.2' + implementation 'com.github.matthiasrobbers:shortbread:1.0.1' + implementation 'com.atlassian.commonmark:commonmark:0.9.0' + implementation 'com.firebase:firebase-jobdispatcher:0.6.0' + implementation "com.google.firebase:firebase-ads:${gms}" + implementation "com.google.firebase:firebase-messaging:${gms}" + releaseImplementation "com.google.firebase:firebase-crash:${gms}" + implementation "com.google.android.gms:play-services-auth:${gms}" + implementation "com.github.florent37:retrojsoup:${retroJsoup}" + implementation "com.github.florent37:rxjsoup:${retroJsoup}" + implementation "org.jsoup:jsoup:1.10.2" +// implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:${kotlin_version}" + compileOnly "org.projectlombok:lombok:${lombokVersion}" annotationProcessor "com.github.florent37:retrojsoup-compiler:${retroJsoup}" annotationProcessor "io.requery:requery-processor:${requery}" annotationProcessor "org.projectlombok:lombok:${lombokVersion}" annotationProcessor "frankiesardo:icepick-processor:${icepickVersion}" annotationProcessor "com.jakewharton:butterknife-compiler:${butterKnifeVersion}" annotationProcessor 'com.github.matthiasrobbers:shortbread-compiler:1.0.1' -// testCompile "net.grandcentrix.thirtyinch:thirtyinch-test:$thirtyinchVersion" - testCompile "junit:junit:${junitVersion}" - testCompile "org.mockito:mockito-core:${mockitoVersion}" - testCompile "org.assertj:assertj-core:${assertjVersion}" - androidTestCompile "com.android.support:support-annotations:${supportVersion}" - androidTestCompile "org.mockito:mockito-core:${mockitoVersion}" - androidTestCompile 'com.android.support.test:runner:0.5' - androidTestCompile 'com.android.support.test:rules:0.5' - androidTestCompile "com.android.support.test.espresso:espresso-intents:${espresseVersion}" - androidTestCompile "com.android.support.test.espresso:espresso-core:${espresseVersion}" +// testImplementation "net.grandcentrix.thirtyinch:thirtyinch-test:$thirtyinchVersion" + testImplementation "junit:junit:${junitVersion}" + testImplementation "org.mockito:mockito-core:${mockitoVersion}" + testImplementation "org.assertj:assertj-core:${assertjVersion}" + androidTestImplementation "com.android.support:support-annotations:${supportVersion}" + androidTestImplementation "org.mockito:mockito-core:${mockitoVersion}" + androidTestImplementation 'com.android.support.test:runner:0.5' + androidTestImplementation 'com.android.support.test:rules:0.5' + androidTestImplementation "com.android.support.test.espresso:espresso-intents:${espresseVersion}" + androidTestImplementation "com.android.support.test.espresso:espresso-core:${espresseVersion}" } apply plugin: 'com.google.gms.google-services' \ No newline at end of file diff --git a/app/src/main/java/com/fastaccess/data/dao/model/AbstractPinnedRepos.java b/app/src/main/java/com/fastaccess/data/dao/model/AbstractPinnedRepos.java index 405d863b2..9d768d344 100644 --- a/app/src/main/java/com/fastaccess/data/dao/model/AbstractPinnedRepos.java +++ b/app/src/main/java/com/fastaccess/data/dao/model/AbstractPinnedRepos.java @@ -40,7 +40,7 @@ public static boolean pinUpin(@NonNull Repo repo) { PinnedRepos pinned = new PinnedRepos(); pinned.setRepoFullName(repo.getFullName()); pinned.setPinnedRepo(repo); - save(pinned).toObservable().blockingFirst(null); + App.getInstance().getDataStore().insert(pinned).blockingGet(); return true; } else { delete(pinnedRepos.getId()); diff --git a/app/src/main/java/com/fastaccess/ui/modules/filter/issues/FilterIssuesActivity.java b/app/src/main/java/com/fastaccess/ui/modules/filter/issues/FilterIssuesActivity.java index ed9678bad..445ed420e 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/filter/issues/FilterIssuesActivity.java +++ b/app/src/main/java/com/fastaccess/ui/modules/filter/issues/FilterIssuesActivity.java @@ -26,6 +26,7 @@ import com.fastaccess.helper.Bundler; import com.fastaccess.helper.InputHelper; import com.fastaccess.helper.ViewHelper; +import com.fastaccess.provider.timeline.CommentsHelper; import com.fastaccess.ui.adapter.LabelsAdapter; import com.fastaccess.ui.adapter.MilestonesAdapter; import com.fastaccess.ui.adapter.SimpleListAdapter; @@ -39,7 +40,8 @@ import com.fastaccess.ui.widgets.recyclerview.BaseViewHolder; import com.fastaccess.ui.widgets.recyclerview.DynamicRecyclerView; -import java.util.Arrays; +import java.util.ArrayList; +import java.util.Collections; import butterknife.BindView; import butterknife.ButterKnife; @@ -214,15 +216,22 @@ public static void startActivity(@NonNull Activity context, @NonNull String logi popupWindow.setElevation(getResources().getDimension(R.dimen.spacing_micro)); popupWindow.setBackgroundDrawable(new ColorDrawable(ViewHelper.getWindowBackground(this))); popupWindow.setElevation(getResources().getDimension(R.dimen.spacing_normal)); - viewHolder.recycler.setAdapter(new SimpleListAdapter<>(Arrays.asList(getResources().getStringArray(R.array.sort_prs_issues)), - new BaseViewHolder.OnItemClickListener() { - @Override public void onItemClick(int position, View v, String item) { - appendSort(item); - } - - @Override public void onItemLongClick(int position, View v, String item) {} - })); - AnimHelper.revealPopupWindow(popupWindow, assignee); + ArrayList lists = new ArrayList<>(); + Collections.addAll(lists, getResources().getStringArray(R.array.sort_prs_issues)); + lists.add(CommentsHelper.getThumbsUp()); + lists.add(CommentsHelper.getThumbsDown()); + lists.add(CommentsHelper.getLaugh()); + lists.add(CommentsHelper.getHooray()); + lists.add(CommentsHelper.getSad()); + lists.add(CommentsHelper.getHeart()); + viewHolder.recycler.setAdapter(new SimpleListAdapter<>(lists, new BaseViewHolder.OnItemClickListener() { + @Override public void onItemClick(int position, View v, String item) { + appendSort(item); + } + + @Override public void onItemLongClick(int position, View v, String item) {} + })); + AnimHelper.revealPopupWindow(popupWindow, sort); } @Override public void onSetCount(int count, boolean isOpen) { @@ -459,6 +468,12 @@ private void appendSort(String item) { String leastCommentedQuery = "comments-asc"; String recentlyUpdatedQuery = "updated-desc"; String leastRecentUpdatedQuery = "updated-asc"; + String sortThumbUp = "reactions-+1-desc"; + String sortThumbDown = "reactions--1-desc"; + String sortThumbLaugh = "reactions-smile-desc"; + String sortThumbHooray = "reactions-tada-desc"; + String sortThumbConfused = "reactions-thinking_face-desc"; + String sortThumbHeart = "reactions-heart-desc"; String toQuery = ""; String text = InputHelper.toString(searchEditText); if (item.equalsIgnoreCase(resources.getString(R.string.newest))) { @@ -479,6 +494,24 @@ private void appendSort(String item) { toQuery = recentlyUpdatedQuery; } else if (item.equalsIgnoreCase(resources.getString(R.string.least_recent_updated))) { toQuery = leastRecentUpdatedQuery; + } else if (item.equalsIgnoreCase(CommentsHelper.getThumbsUp())) { + toQuery = sortThumbUp; + showMessage(R.string.error, R.string.not_really_working); + } else if (item.equalsIgnoreCase(CommentsHelper.getThumbsDown())) { + toQuery = sortThumbDown; + showMessage(R.string.error, R.string.not_really_working); + } else if (item.equalsIgnoreCase(CommentsHelper.getLaugh())) { + toQuery = sortThumbLaugh; + showMessage(R.string.error, R.string.not_really_working); + } else if (item.equalsIgnoreCase(CommentsHelper.getHooray())) { + toQuery = sortThumbHooray; + showMessage(R.string.error, R.string.not_really_working); + } else if (item.equalsIgnoreCase(CommentsHelper.getSad())) { + toQuery = sortThumbConfused; + showMessage(R.string.error, R.string.not_really_working); + } else if (item.equalsIgnoreCase(CommentsHelper.getHeart())) { + toQuery = sortThumbHeart; + showMessage(R.string.error, R.string.not_really_working); } if (!text.replaceAll(regex, "sort:\"" + toQuery + "\"").equalsIgnoreCase(text)) { String space = text.endsWith(" ") ? "" : " "; diff --git a/app/src/main/java/com/fastaccess/ui/modules/pinned/PinnedReposPresenter.java b/app/src/main/java/com/fastaccess/ui/modules/pinned/PinnedReposPresenter.java index a90017fc0..fa50dc335 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/pinned/PinnedReposPresenter.java +++ b/app/src/main/java/com/fastaccess/ui/modules/pinned/PinnedReposPresenter.java @@ -6,7 +6,6 @@ import com.fastaccess.data.dao.NameParser; import com.fastaccess.data.dao.model.AbstractPinnedRepos; import com.fastaccess.data.dao.model.PinnedRepos; -import com.fastaccess.data.dao.model.Repo; import com.fastaccess.ui.base.mvp.presenter.BasePresenter; import com.fastaccess.ui.modules.repos.RepoPagerActivity; @@ -23,10 +22,6 @@ public class PinnedReposPresenter extends BasePresenter imp super.onAttachView(view); if (pinnedRepos.isEmpty()) { onReload(); - if (!AbstractPinnedRepos.isPinned("k0shk0sh/FastHub")) - manageObservable(Repo.getRepo("FastHub", "k0shk0sh") - .map(repo -> repo != null && AbstractPinnedRepos.pinUpin(repo)) - .toObservable()); } } @@ -36,7 +31,8 @@ public class PinnedReposPresenter extends BasePresenter imp @Override public void onReload() { manageSubscription(AbstractPinnedRepos.getMyPinnedRepos() - .subscribe(repos -> sendToView(view -> view.onNotifyAdapter(repos)))); + .subscribe(repos -> sendToView(view -> view.onNotifyAdapter(repos)), throwable -> + sendToView(view -> view.onNotifyAdapter(null)))); } @Override public void onItemClick(int position, View v, PinnedRepos item) { diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/RepoPagerActivity.java b/app/src/main/java/com/fastaccess/ui/modules/repos/RepoPagerActivity.java index d07ebdc0a..a4d26e185 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/repos/RepoPagerActivity.java +++ b/app/src/main/java/com/fastaccess/ui/modules/repos/RepoPagerActivity.java @@ -227,7 +227,7 @@ public static Intent createIntent(@NonNull Context context, @NonNull String repo } } - @OnLongClick({R.id.forkRepoLayout, R.id.starRepoLayout, R.id.watchRepoLayout, R.id.pinLayout}) boolean onLongClick(View view) { + @OnLongClick({R.id.forkRepoLayout, R.id.starRepoLayout, R.id.watchRepoLayout}) boolean onLongClick(View view) { switch (view.getId()) { case R.id.forkRepoLayout: RepoMiscDialogFragment.show(getSupportFragmentManager(), getPresenter().login(), getPresenter().repoId(), RepoMiscMVp.FORKS); diff --git a/app/src/main/java/com/fastaccess/ui/modules/settings/category/SettingsCategoryFragment.java b/app/src/main/java/com/fastaccess/ui/modules/settings/category/SettingsCategoryFragment.java index 9fadbc133..8f5e4bfb9 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/settings/category/SettingsCategoryFragment.java +++ b/app/src/main/java/com/fastaccess/ui/modules/settings/category/SettingsCategoryFragment.java @@ -44,6 +44,7 @@ import butterknife.BindView; import es.dmoral.toasty.Toasty; +import io.reactivex.disposables.Disposable; import static android.app.Activity.RESULT_OK; @@ -63,6 +64,7 @@ public class SettingsCategoryFragment extends PreferenceFragmentCompat implement private Preference notificationTime; private Preference notificationRead; private Preference notificationSound; + private Disposable disposable; @Override public void onAttach(Context context) { super.onAttach(context); @@ -119,14 +121,14 @@ public class SettingsCategoryFragment extends PreferenceFragmentCompat implement .bold(BuildConfig.VERSION_NAME) .append(")")); findPreference("currentVersion").setOnPreferenceClickListener(preference -> { - Release.get("FastHub", "k0shk0sh").subscribe(releases -> { - if (releases.get(0).getTagName().equals(BuildConfig.VERSION_NAME)) - Toasty.success(getContext(), getString(R.string.up_to_date)).show(); - else - Toasty.warning(getContext(), getString(R.string.new_version)).show(); + disposable = Release.get("FastHub", "k0shk0sh").subscribe(releases -> { + if (releases != null) { + if (releases.get(0).getTagName().equals(BuildConfig.VERSION_NAME)) + Toasty.success(getContext(), getString(R.string.up_to_date)).show(); + else + Toasty.warning(getContext(), getString(R.string.new_version)).show(); + } }); - - return true; }); break; @@ -249,12 +251,10 @@ public class SettingsCategoryFragment extends PreferenceFragmentCompat implement Map settings = PrefHelper.getAll(); settings.remove("token"); String json = new Gson().toJson(settings); - String path = - Environment.getExternalStorageDirectory() + File.separator + "FastHub"; + String path = Environment.getExternalStorageDirectory() + File.separator + "FastHub"; File folder = new File(path); folder.mkdirs(); File backup = new File(folder, "backup.json"); - try { backup.createNewFile(); FileOutputStream outputStream = new FileOutputStream(backup); @@ -323,6 +323,13 @@ else if (entry.getValue().getAsJsonPrimitive().isString()) } } + @Override public void onDestroyView() { + super.onDestroyView(); + if (disposable != null && !disposable.isDisposed()) { + disposable.dispose(); + } + } + private void showFileChooser() { Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType("application/json"); diff --git a/app/src/main/res/drawable/ic_trending.xml b/app/src/main/res/drawable/ic_trending.xml new file mode 100644 index 000000000..f5f4baa0a --- /dev/null +++ b/app/src/main/res/drawable/ic_trending.xml @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/layouts/main_layouts/layout/filter_issues_popup.xml b/app/src/main/res/layouts/main_layouts/layout/filter_issues_popup.xml index c3757aaea..3fb56e7ac 100644 --- a/app/src/main/res/layouts/main_layouts/layout/filter_issues_popup.xml +++ b/app/src/main/res/layouts/main_layouts/layout/filter_issues_popup.xml @@ -35,8 +35,8 @@ android:layout_height="wrap_content" android:background="?selectableItemBackground" android:button="@null" + android:drawablePadding="@dimen/spacing_xs_large" android:drawableStart="?android:attr/listChoiceIndicatorMultiple" android:padding="@dimen/spacing_xs_large" - android:drawablePadding="@dimen/spacing_xs_large" android:text="@string/last_updated"/> \ No newline at end of file diff --git a/app/src/main/res/layouts/main_layouts/layout/issue_popup_layout.xml b/app/src/main/res/layouts/main_layouts/layout/issue_popup_layout.xml index 27e529ea0..0820cb681 100644 --- a/app/src/main/res/layouts/main_layouts/layout/issue_popup_layout.xml +++ b/app/src/main/res/layouts/main_layouts/layout/issue_popup_layout.xml @@ -6,6 +6,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:background="?android:windowBackground" + android:focusableInTouchMode="true" android:orientation="vertical"> diff --git a/app/src/main/res/menu/drawer_menu.xml b/app/src/main/res/menu/drawer_menu.xml index d39ffcf00..40aeb324a 100644 --- a/app/src/main/res/menu/drawer_menu.xml +++ b/app/src/main/res/menu/drawer_menu.xml @@ -38,6 +38,12 @@ android:id="@+id/pinnedMenu" android:icon="@drawable/ic_pin_filled" android:title="@string/pinned"/> + + - diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f2503c462..294782194 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -456,4 +456,6 @@ CHOOSE BANNER Error loading image, please try again. + Trending + Sort by emojies is not really working due to GitHub limitation \ No newline at end of file diff --git a/app/src/main/res/values/theme_dark.xml b/app/src/main/res/values/theme_dark.xml index 201514595..a4461f12c 100644 --- a/app/src/main/res/values/theme_dark.xml +++ b/app/src/main/res/values/theme_dark.xml @@ -78,7 +78,7 @@ diff --git a/app/src/main/res/values/theme_light.xml b/app/src/main/res/values/theme_light.xml index 8693f1e5e..78e594061 100644 --- a/app/src/main/res/values/theme_light.xml +++ b/app/src/main/res/values/theme_light.xml @@ -80,7 +80,7 @@ diff --git a/build.gradle b/build.gradle index e45d920a3..8176c3b10 100644 --- a/build.gradle +++ b/build.gradle @@ -23,7 +23,7 @@ buildscript { maven { url "https://maven.google.com" } } dependencies { - classpath 'com.android.tools.build:gradle:2.4.0-alpha7' + classpath 'com.android.tools.build:gradle:3.0.0-alpha2' classpath 'com.google.gms:google-services:3.0.0' classpath('com.google.firebase:firebase-plugins:1.0.5') { exclude group: 'com.google.guava', module: 'guava-jdk5'