diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 2b827acf..3bbc7439 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -1,62 +1,89 @@ -# How to submit Issue/Feature Request to *FastHub* +# Contributing to FastHub -- Make sure the included template is filled ( using FastHub will fill them up automatically ). -- If you planning to report multiple FRs/Issues that falls under the same feature __PLEASE REPORT THEM IN ONE TICKET__. -- Make sure you are always on latest (FastHub/About & Click on version name). -- Make sure the issue doesn't exists, lets keep things clean & tidy here :). +**Updated: 19 Jan 2018** +## Table of contents -# How to contribute & build *FastHub* +1. [Submitting Issues](#submitting-issues) +1. [How to contribute. Importing and assembling](#how-to-contribute-importing-and-assembling) + 1. [Custom keys *(optional)*](#custom-keys-optional) + 1. [Before importing into Android Studio](#before-importing-into-android-studio) + 1. [Before import](#before-importation) + 1. [Importing Android Studio project](#importing-android-studio-project) + 1. [Submitting Pull Request](#submitting-pull-request) +1. [Working with translations](#working-with-translations) +1. [Translations Contributors](#translations-contributors) -If you have a question in mind, feel free to come our public [Slack](http://rebrand.ly/fasthub) channel. +## Submitting Issues -### Optional +- Let's keep everything clean and tidy here :) + - Make sure that similar Issues are not exist. Reopen an Issue if exists but closed. + - If things you want to submit are related to each other, submit them in one Issue. +- None of the forked Repositories' Issues will be accepted! + - Forks are developed separately from the origin Repository. +- Make sure you are running latest version (to check it out withing the FastHub head to About and tap on the section with application's version). +- Make sure the included template is filled in (submitting an Issue within FastHub will do it automatically). -- Please update debug_gradle.properties file and change below if you like to use your own keys otherwise keep them as they're debug keys: - - github_client_id= your github clientId - - github_secret= your github secret - - redirect_url= (redirect_url must match the url defined in `AndroidManifest` under `LoginView`) +## How to contribute. Importing and assembling -### Before you import the project to Android Studio: +If you have any questions, feel free to join our public [Slack](http://rebrand.ly/fasthub) channel. -- Make sure you have Android Studio 3.0 C4 & above. -- Import Android Studio Settings (to ensure same code formatting) from this link [Click here](https://raw.githubusercontent.com/k0shk0sh/FastHub/master/fasthub_as_settings.jar) -- Install Lombok Plugin from Android Studio Plugins & enable Annotations Processors from (Android Studio Preference). +### Custom keys *(optional)* -### After above steps: +- Please update `debug_gradle.properties` file if you want to use your own keys: + - `github_client_id=` -- your GitHub clientId; + - `github_secret=` -- your GitHub secret; + - `redirect_url=` -- the url defined in `AndroidManifest` under `LoginView`. -- Fork the project. -- Clone it to your desktop. -- Open the project from Android Studio. -- Let it build & Start coding. +### Before importation -### Submitting PR +- Make sure you are running *Android Studio 3.0 C4* or above; +- Import *Android Studio Settings* (to follow project's code style) from [this file](https://raw.githubusercontent.com/k0shk0sh/FastHub/master/fasthub_as_settings.jar); +- Install *Lombok Plugin* from Android Studio Plugins and enable Annotations Processors in Android Studio Preferences. -> Please make sure your commit messages are meaningful. - -- Create new Branch with the feature or fix you made. -- Submit your PR with an explanation of what you did & why (~~if applicable~~). +### Importing Android Studio project + +- Fork the Repository. +- Clone it to your workstation. +- Open the project in Android Studio. +- Compile the project for the first time. Then you can start coding. + +### Submitting Pull Request + +> Please use meaningful commit messages. + +- Create a new Branch with the changes you made. +- Submit your Pull Request with an explanation of what have you done and why. > I really appreciate your efforts on contributing to this project. -# Contribute Translations +## Working with translations -1. First fork the repository by clicking **Fork** button. -1. Clone your own forked repository to your computer. -1. Create and switch branch by typing `git checkout -b ` where `` is the language you want to translate to. -1. Create a folder named `values-`, where `` is your 2 letter code for your language. For example `values-es` for Spanish, `values-fr` for French. -1. Copy `values/strings.xml` to inside `values-??` folder with `cp values/strings.xml values-??/`. -1. Open `values-??/strings.xml` on your editor of choice. -1. Translate and keep in mind those important points. - 1. Obey XML format. So, `ONLY TRANSLATE HERE`. - 1. Don't translate Git terms. Such as *pull request, push, commit, branch*... - 1. There are special characters and variables. Such as `\n` for newline, `\t` for tab. Keep them in the same position in your sentences. Do not delete them! - 1. Don't translate lines that contain `translatable="false"` statement. - 1. Don't add extra spaces or periods anywhere. Don't delete current ones. Keep them as is. -1. Once finished the translations, add files to the git index with `git add values-??/strings.xml` and commit it with `git commit -m 'Language: Strings translated'`. -1. Then push your local changes to your forked repository branch by typing `git push origin `. -1. Finally, create a pull request from your branch to our *master* with **Pull Request** button. +1. Firstly, you have to fork the repository by clicking the **Fork** button. +1. Clone your own forked repository to your workstation. +1. Create and switch Branch by typing `git checkout -b ` where `` is the name of the Branch you want to work with. We recommend you to name it into the language you want to translate in. +1. Create a new directory named like `values-`, where `` is a 2 letter ISO code of the language. For example `values-es` for Spanish, `values-fr` for French. +1. Copy `values/strings.xml` into the directory you have created (`values-??`). +1. Open `values-??/strings.xml` in your editor of choice. +1. Translate and keep in mind these important things. + 1. Obey the XML format. So, `ONLY TRANSLATE HERE`. + 1. Don't translate lines which contain `translatable="false"`. + 1. Don't translate Git and GitHub terms, such as *Pull Request*, *Push*, *Commit*, *Branch*, etc. + 1. There are some escape sequences used in translations (e.g. `\n` as a line feed (new line), `\t` as a tabulator. Don't delete them! + *For the full list you can see this [Wiki article](https://en.wikipedia.org/wiki/Control_character#In_ASCII).* + 1. There are some characters which **must be escaped** in translations. -# Translators + | `"` | `"` | + |-----|----------| + | `'` | `'` | + | `&` | `&` | + | `>` | `>` | + | `<` | `<` | + 1. Don't add extra spaces or periods. Don't delete existent ones. +1. Once you finished translating, add new files to the Git index using `git add values-??/strings.xml` command and commit the changes using `git commit -m ''`, where `` is a short description of changes you made. +1. Push your local changes into your forked repository by typing `git push origin `. +1. Finally, create a Pull Request from your Branch to our main Branch *development*. -- **English**: Default +## Translations Contributors + +- *See [README.md](https://github.com/k0shk0sh/FastHub#language-contributors)* diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 00000000..1156de71 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] +patreon: FastHub +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +custom: https://paypal.me/imkosh diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index 15ff17a8..6bb31a1c 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -13,7 +13,7 @@ - Make sure the issue doesn't exists, lets keep things clean & tidy here :). --> -**FastHub Version:** <> +**FastHub Version:** **Android Version:** **Device Information:** - MANUFACTURER: diff --git a/.github/workflows/greetings.yml b/.github/workflows/greetings.yml new file mode 100644 index 00000000..f9daf71d --- /dev/null +++ b/.github/workflows/greetings.yml @@ -0,0 +1,13 @@ +name: Greetings + +on: [pull_request, issues] + +jobs: + greeting: + runs-on: ubuntu-latest + steps: + - uses: actions/first-interaction@v1 + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} + issue-message: 'Horray🎉🎉,you've made you first issue, Thanks for contributing❤️'' first issue' + pr-message: 'Horray🎉🎉,you've made you first issue, Thanks for contributing❤️'' first pr' diff --git a/.github_changelog_generator b/.github_changelog_generator index cc20c0b2..6873c8f7 100644 --- a/.github_changelog_generator +++ b/.github_changelog_generator @@ -1 +1,7 @@ -since-tag=4.5.5 \ No newline at end of file +since-tag=4.5.6 +issues-wo-labels=false +issue-line-labels=true +exclude-labels=Type: Invalid,Type: Duplicate,Type: Unknown,Type: Question,Type: No API,Type: Work as Intended,Type: Can't Reproduce,Status: Won't Fix +include-labels=Status: Completed +bug-labels=Type: Bug +enhancement-labels=Type: Enhancement,Type: Feature Request \ No newline at end of file diff --git a/.gitignore b/.gitignore index 0c77a124..26049c9b 100644 --- a/.gitignore +++ b/.gitignore @@ -3,9 +3,10 @@ /local.properties .DS_Store /build -/gradle.properties +/release_gradle.properties /.idea/ /app/google-services.json /app/build/ /app/src/main/res/values/secrets.xml -/app/fastaccess-key \ No newline at end of file +/app/fastaccess-key +/changelog_generator diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 3c81d837..00000000 --- a/.travis.yml +++ /dev/null @@ -1,44 +0,0 @@ -language: android - -android: - components: - - tools - - platform-tools - - tools # Upgrade again after upgrading platform-tools. - -jdk: oraclejdk8 - -sudo: required - -before_install: - # Skip build if the commit message contains [skip travis] or [travis skip] - - > - echo "$TRAVIS_COMMIT_MESSAGE" - | grep -E '\[(skip travis|travis skip)\]' - && echo "[skip travis] has been found, exiting." - && exit 0 || true - -before_script: - - mkdir -p $ANDROID_HOME/licenses - - echo -e "\n8933bad161af4178b1185d1a37fbf41ea5269c55" > $ANDROID_HOME/licenses/android-sdk-license - - echo -e "d56f5187479451eabf01fb78af6dfcb131a6481e" >> $ANDROID_HOME/licenses/android-sdk-license - - echo -e "\n504667f4c0de7af1a06de9f4b1727b84351f2910" > $ANDROID_HOME/licenses/android-sdk-preview-license - -script: - - ./gradlew clean assembleDebug --no-daemon --stacktrace - -before_cache: - - rm -f $HOME/.gradle/caches/modules-2/modules-2.lock - - rm -fr $HOME/.gradle/caches/*/plugin-resolution/ - -cache: - directories: - - $HOME/.gradle/caches/ - - $HOME/.gradle/wrapper/ - - $HOME/.android/build-cache - -after_success: - - bash <(curl -s https://codecov.io/bash) - -notifications: - email: false diff --git a/README.md b/README.md index 9f59542e..91b2caa5 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,10 @@ -[![Build Status](https://travis-ci.org/k0shk0sh/FastHub.svg?branch=master)](https://travis-ci.org/k0shk0sh/FastHub) +#### FastHub is currently under a huge refactoring, please make sure to submit an issue only if necessary. +##### You could follow the development on V5 in this [PR](https://github.com/k0shk0sh/FastHub/pull/2599) + +[![Build Status](https://app.bitrise.io/app/abd1afbd2a03e0e4/status.svg?token=txykViMUFzx1WkvjixD01A&branch=development)](https://app.bitrise.io/app/abd1afbd2a03e0e4) [![Releases](https://img.shields.io/github/release/k0shk0sh/FastHub.svg)](https://github.com/k0shk0sh/FastHub/releases/latest) [![Slack](https://img.shields.io/badge/slack-join-e01563.svg)](http://rebrand.ly/fasthub) +[![License: GPL v3](https://img.shields.io/badge/License-GPL%20v3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0) + ![Logo](/.github/assets/feature_graphic.png?raw=true "Logo") @@ -95,7 +100,7 @@ _Ads currently not available._ - [**Stream API**](https://github.com/aNNiMON/Lightweight-Stream-API) for dealing with `Collections` - [**ButterKnife**](https://github.com/JakeWharton/butterknife) for view binding - [**Android State**](https://github.com/evernote/android-state) for saving instance states -- [**Lombok**](https://projectlombok.github.io) for getters and setters +- [**Lombok**](https://projectlombok.org/) for getters and setters - [**Material-BottomNavigation**](https://github.com/sephiroth74/Material-BottomNavigation) for `BottomBar` tabs - [**Glide**](https://github.com/bumptech/glide) for loading images - [**commonmark**](https://github.com/atlassian/commonmark-java) for _Markdown_ conversion to html @@ -103,6 +108,7 @@ _Ads currently not available._ - [**ShapedImageView**](https://github.com/gavinliu/ShapedImageView) for round avatars - [**Material-About-Library**](https://github.com/daniel-stoneuk/material-about-library) for the about screen - [**Fabric**](https://fabric.io/kits/android/crashlytics) analytics & crash reporting. +- [**Lottie**](https://github.com/airbnb/lottie-android) for animations - **Android Support Libraries**, the almighty ;-) ## Contribution @@ -165,12 +171,6 @@ Read the [**contribution guide**](.github/CONTRIBUTING.md) for more detailed inf

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

-
- How do I get PROMO CODE? -

Please refer to the in-app FAQ for details.

-
- - ## License > Copyright (C) 2017 Kosh. @@ -190,10 +190,10 @@ Read the [**contribution guide**](.github/CONTRIBUTING.md) for more detailed inf ## FastHub Logo **FastHub** logo is designed by **Cookicons**. -[Google+](https://plus.google.com/+CookiconsDesign) | [Twitter](https://twitter.com/mcookie) +[Twitter](https://twitter.com/mcookie) Designer website [Cookicons](https://cookicons.co/). **OLD FastHub** logo was designed by **Kevin Aguilar**. -[Google+](https://plus.google.com/+KevinAguilarC) | [Twitter](https://twitter.com/kevttob) +[Twitter](https://twitter.com/kevttob) Designer at [Kevin Aguilar](http://kevaguilar.com/). Laus Deo Semper diff --git a/app/build.gradle b/app/build.gradle index 549de78c..656dcd1a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,8 +1,9 @@ apply plugin: 'com.android.application' -apply plugin: 'com.apollographql.android' apply plugin: 'kotlin-android' +apply plugin: 'kotlin-android-extensions' +apply plugin: 'kotlin-kapt' +apply plugin: 'com.apollographql.android' apply plugin: 'com.novoda.build-properties' -apply plugin: 'jacoco-android' apply plugin: 'io.fabric' buildProperties { @@ -10,7 +11,7 @@ buildProperties { file rootProject.file('debug_gradle.properties') } secrets { - file rootProject.file('gradle.properties') + file rootProject.file('release_gradle.properties') } } @@ -23,14 +24,13 @@ android { storePassword((buildProperties.secrets['android_store_password'] | buildProperties.notThere['android_store_password']).string) } } - compileSdkVersion 27 - buildToolsVersion '27.0.1' + compileSdkVersion 29 defaultConfig { applicationId "com.fastaccess.github" minSdkVersion 21 - targetSdkVersion 27 - versionCode 457 - versionName "4.5.7" + targetSdkVersion 29 + versionCode 469 + versionName "4.6.9" buildConfigString "GITHUB_CLIENT_ID", (buildProperties.secrets['github_client_id'] | buildProperties.notThere['github_client_id']).string buildConfigString "GITHUB_SECRET", (buildProperties.secrets['github_secret'] | buildProperties.notThere['github_secret']).string buildConfigString "IMGUR_CLIENT_ID", (buildProperties.secrets['imgur_client_id'] | buildProperties.notThere['imgur_client_id']).string @@ -38,7 +38,7 @@ android { buildConfigField "String", "REST_URL", '"https://api.github.com/"' buildConfigField "String", "IMGUR_URL", '"https://api.imgur.com/3/"' multiDexEnabled true - testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" javaCompileOptions { annotationProcessorOptions { includeCompileClasspath true @@ -89,7 +89,8 @@ android { } configurations { - all*.exclude module: 'annotations' + all*.exclude module: 'javax.annotation' + all*.exclude group: 'org.jetbrains', module: 'annotations-java5' } packagingOptions { exclude 'META-INF/rxjava.properties' } @@ -117,25 +118,28 @@ repositories { dependencies { 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 'androidx.appcompat:appcompat:1.1.0' + implementation 'com.google.android.material:material:1.0.0' + implementation 'androidx.cardview:cardview:1.0.0' + implementation 'androidx.recyclerview:recyclerview:1.1.0' + implementation 'androidx.legacy:legacy-preference-v14:1.0.0' + implementation 'androidx.browser:browser:1.2.0' + implementation 'androidx.palette:palette:1.0.0' + implementation 'androidx.annotation:annotation:1.1.0' + implementation 'androidx.core:core:1.1.0' 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.squareup.retrofit2:converter-scalars:${retrofit}" implementation "com.github.bumptech.glide:glide:${glideVersion}" - implementation 'cn.gavinliu.android.lib:ShapedImageView:0.8.3' + implementation 'cn.gavinliu:ShapedImageView:0.8.7' implementation "com.jakewharton:butterknife:${butterKnifeVersion}" implementation 'it.sephiroth.android.library.bottomnavigation:bottom-navigation:2.0.2' - implementation 'io.reactivex.rxjava2:rxjava:2.1.5' - implementation 'io.reactivex.rxjava2:rxandroid:2.0.1' - implementation 'com.squareup.okhttp3:logging-interceptor:3.9.0' + implementation 'io.reactivex.rxjava2:rxjava:2.2.15' + implementation 'io.reactivex.rxjava2:rxandroid:2.1.1' + implementation 'com.squareup.okhttp3:logging-interceptor:4.2.1' implementation 'com.annimon:stream:1.1.9' implementation 'com.github.GrenderG:Toasty:1.1.3' implementation 'com.github.k0shk0sh:RetainedDateTimePickers:1.0.2' @@ -152,41 +156,36 @@ dependencies { implementation "com.atlassian.commonmark:commonmark-ext-gfm-tables:${commonmark}" implementation "com.atlassian.commonmark:commonmark-ext-ins:${commonmark}" implementation "com.atlassian.commonmark:commonmark-ext-yaml-front-matter:${commonmark}" - implementation "com.google.firebase:firebase-core:${gms}" - implementation "com.google.firebase:firebase-messaging:${gms}" - implementation "com.google.firebase:firebase-database:${gms}" - implementation "com.google.android.gms:play-services-base:${gms}" + implementation "com.google.firebase:firebase-core:17.2.1" + implementation "com.google.firebase:firebase-messaging:20.1.0" + implementation "com.google.firebase:firebase-database:19.2.0" + implementation "com.google.android.gms:play-services-base:17.1.0" implementation('com.github.b3er.rxfirebase:firebase-database-kotlin:11.2.0') { transitive = false } implementation('com.github.b3er.rxfirebase:firebase-database:11.2.0') { transitive = false } - implementation('com.crashlytics.sdk.android:crashlytics:2.7.1@aar') { transitive = true } + implementation('com.crashlytics.sdk.android:crashlytics:2.9.0@aar') { transitive = true } implementation "com.github.miguelbcr:RxBillingService:0.0.3" - implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:${kotlin_version}" - implementation 'org.jsoup:jsoup:1.10.3' + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:${kotlin_version}" + implementation 'org.jsoup:jsoup:1.12.1' implementation "com.evernote:android-state:${state_version}" implementation "petrov.kristiyan:colorpicker-library:1.1.4" - implementation 'com.apollographql.apollo:apollo-rx2-support:0.4.1' + implementation 'com.apollographql.apollo:apollo-rx2-support:1.2.2' + implementation("com.apollographql.apollo:apollo-runtime:1.2.2") implementation 'com.jaredrummler:android-device-names:1.1.5' implementation 'net.yslibrary.keyboardvisibilityevent:keyboardvisibilityevent:2.1.0' - implementation 'com.airbnb.android:lottie:2.2.5' + implementation 'com.airbnb.android:lottie:3.0.7' implementation 'com.firebase:firebase-jobdispatcher:0.8.2' + debugImplementation 'com.github.whataa:pandora:2.0.6' + releaseImplementation 'com.github.whataa:pandora-no-op:2.0.3' + compileOnly "org.projectlombok:lombok:${lombokVersion}" + kapt "org.projectlombok:lombok:${lombokVersion}" kapt "com.evernote:android-state-processor:${state_version}" kapt "com.jakewharton:butterknife-compiler:${butterKnifeVersion}" kapt 'com.github.matthiasrobbers:shortbread-compiler:1.0.1' - kapt "org.projectlombok:lombok:${lombokVersion}" kapt "io.requery:requery-processor:${requery}" -// 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:1.0.1' - androidTestImplementation 'com.android.support.test:rules:1.0.1' - androidTestImplementation "com.android.support.test.espresso:espresso-intents:${espresseVersion}" - androidTestImplementation "com.android.support.test.espresso:espresso-core:${espresseVersion}" + kapt "com.github.bumptech.glide:compiler:$glideVersion" + } -apply plugin: 'ManifestClasspath' apply plugin: 'com.google.gms.google-services' \ No newline at end of file diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index af293c90..2ce4dd23 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -78,6 +78,8 @@ public *; } +-keep class com.google.android.gms.** { *; } + -dontwarn com.github.b3er.** -dontwarn com.memoizrlabs.** -dontwarn java.lang.FunctionalInterface @@ -131,4 +133,8 @@ -dontwarn com.octo.android.robospice.retrofit.RetrofitJackson** -dontwarn retrofit.appengine.UrlFetchClient -dontwarn icepick.** --dontwarn com.fastaccess.ui.modules.repos.** \ No newline at end of file +-dontwarn com.fastaccess.ui.modules.repos.** +-dontwarn org.apache.xerces.parsers.** +-dontwarn oracle.xml.** +-dontwarn org.jdom.** +-dontwarn okhttp3.internal.** \ No newline at end of file diff --git a/app/src/androidTest/java/com/fastaccess/helper/TestHelper.java b/app/src/androidTest/java/com/fastaccess/helper/TestHelper.java deleted file mode 100644 index 1bf730f6..00000000 --- a/app/src/androidTest/java/com/fastaccess/helper/TestHelper.java +++ /dev/null @@ -1,77 +0,0 @@ -package com.fastaccess.helper; - -import android.support.annotation.IntRange; -import android.support.design.widget.TextInputLayout; -import android.support.test.espresso.UiController; -import android.support.test.espresso.ViewAction; -import android.view.View; - -import org.hamcrest.Description; -import org.hamcrest.Matcher; -import org.hamcrest.TypeSafeMatcher; - -import it.sephiroth.android.library.bottomnavigation.BottomNavigation; - -import static android.support.test.espresso.matcher.ViewMatchers.isAssignableFrom; - -/** - * Created by Kosh on 05 May 2017, 9:23 PM - */ - -public class TestHelper { - - public static Matcher textInputLayoutHasHint(final String expectedErrorText) { - return new TypeSafeMatcher() { - @Override public boolean matchesSafely(View view) { - if (!(view instanceof TextInputLayout)) { - return false; - } - CharSequence error = ((TextInputLayout) view).getHint(); - return error != null && expectedErrorText.equals(error.toString()); - } - - @Override public void describeTo(Description description) {} - }; - } - - public static Matcher textInputLayoutHasError(final String expectedErrorText) { - return new TypeSafeMatcher() { - @Override public boolean matchesSafely(View view) { - if (!(view instanceof TextInputLayout)) { - return false; - } - CharSequence error = ((TextInputLayout) view).getError(); - return error != null && expectedErrorText.equals(error.toString()); - } - - @Override public void describeTo(Description description) {} - }; - } - - public static Matcher bottomNavSelection(@IntRange(from = 0, to = 3) final int position) { - return new TypeSafeMatcher() { - @Override public boolean matchesSafely(View view) { - return view instanceof BottomNavigation && position == ((BottomNavigation) view).getSelectedIndex(); - } - - @Override public void describeTo(Description description) {} - }; - } - - public static ViewAction bottomNavAction(@IntRange(from = 0, to = 3) final int index) { - return new ViewAction() { - - @Override public Matcher getConstraints() { - return isAssignableFrom(BottomNavigation.class); - } - - @Override public String getDescription() { - return "BottomNavigation"; - } - - @Override public void perform(UiController uiController, View view) { - ((BottomNavigation) view).setSelectedIndex(index, false); - } - }; - } -} diff --git a/app/src/androidTest/java/com/fastaccess/ui/modules/login/LoginActivityTest.java b/app/src/androidTest/java/com/fastaccess/ui/modules/login/LoginActivityTest.java deleted file mode 100644 index e10fd093..00000000 --- a/app/src/androidTest/java/com/fastaccess/ui/modules/login/LoginActivityTest.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.fastaccess.ui.modules.login; - - -import android.support.test.filters.LargeTest; -import android.support.test.rule.ActivityTestRule; -import android.support.test.runner.AndroidJUnit4; - -import com.fastaccess.R; - -import org.junit.Rule; -import org.junit.Test; -import org.junit.runner.RunWith; - -import static android.support.test.espresso.Espresso.onView; -import static android.support.test.espresso.action.ViewActions.click; -import static android.support.test.espresso.action.ViewActions.closeSoftKeyboard; -import static android.support.test.espresso.action.ViewActions.typeText; -import static android.support.test.espresso.assertion.ViewAssertions.matches; -import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed; -import static android.support.test.espresso.matcher.ViewMatchers.withId; -import static com.fastaccess.helper.TestHelper.textInputLayoutHasError; -import static org.hamcrest.core.IsNot.not; - -@RunWith(AndroidJUnit4.class) @LargeTest -public class LoginActivityTest { - - @Rule public ActivityTestRule testRule = new ActivityTestRule<>(LoginActivity.class); - - @Test public void successLoginClickSuccessTest() { - String username = "username"; - String password = "password"; - onView(withId(R.id.usernameEditText)).perform(typeText(username), closeSoftKeyboard()); - onView(withId(R.id.passwordEditText)).perform(typeText(password), closeSoftKeyboard()); - onView(withId(R.id.login)).perform(click()); - onView(withId(R.id.progress)).check(matches(isDisplayed())); - } - - @Test public void usernameErrorTest() { - String password = "password"; - onView(withId(R.id.passwordEditText)).perform(typeText(password), closeSoftKeyboard()); - onView(withId(R.id.login)).perform(click()); - onView(withId(R.id.progress)).check(matches(not(isDisplayed()))); - onView(withId(R.id.username)).check(matches(textInputLayoutHasError(testRule.getActivity().getString(R.string.required_field)))); - } - - @Test public void passwordErrorTest() { - String username = "username"; - onView(withId(R.id.usernameEditText)).perform(typeText(username), closeSoftKeyboard()); - onView(withId(R.id.login)).perform(click()); - onView(withId(R.id.progress)).check(matches(not(isDisplayed()))); - onView(withId(R.id.password)).check(matches(textInputLayoutHasError(testRule.getActivity().getString(R.string.required_field)))); - } - -} \ No newline at end of file diff --git a/app/src/androidTest/java/com/fastaccess/ui/modules/login/LoginChooserActivityTest.java b/app/src/androidTest/java/com/fastaccess/ui/modules/login/LoginChooserActivityTest.java deleted file mode 100644 index 940fb3d8..00000000 --- a/app/src/androidTest/java/com/fastaccess/ui/modules/login/LoginChooserActivityTest.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.fastaccess.ui.modules.login; - - -import android.support.test.espresso.intent.rule.IntentsTestRule; -import android.support.test.filters.LargeTest; -import android.support.test.runner.AndroidJUnit4; - -import com.fastaccess.R; -import com.fastaccess.ui.modules.login.chooser.LoginChooserActivity; - -import org.junit.Rule; -import org.junit.Test; -import org.junit.runner.RunWith; - -import static android.support.test.espresso.Espresso.onView; -import static android.support.test.espresso.action.ViewActions.click; -import static android.support.test.espresso.assertion.ViewAssertions.matches; -import static android.support.test.espresso.intent.Intents.intended; -import static android.support.test.espresso.intent.matcher.IntentMatchers.hasComponent; -import static android.support.test.espresso.matcher.ViewMatchers.withId; -import static com.fastaccess.helper.TestHelper.textInputLayoutHasHint; - -@RunWith(AndroidJUnit4.class) @LargeTest -public class LoginChooserActivityTest { - - @Rule public IntentsTestRule intentTestRule = new IntentsTestRule<>(LoginChooserActivity.class); - - @Test public void basicAuthButtonTest() { - onView(withId(R.id.basicAuth)).perform(click()); - intended(hasComponent(LoginActivity.class.getName())); - onView(withId(R.id.password)).check(matches(textInputLayoutHasHint(intentTestRule.getActivity().getString(R.string.password)))); - } - - @Test public void accessTokenButtonTest() { - onView(withId(R.id.accessToken)).perform(click()); - intended(hasComponent(LoginActivity.class.getName())); - onView(withId(R.id.password)).check(matches(textInputLayoutHasHint(intentTestRule.getActivity().getString(R.string.access_token)))); - } -} \ No newline at end of file diff --git a/app/src/androidTest/java/com/fastaccess/ui/modules/main/MainActivityTest.java b/app/src/androidTest/java/com/fastaccess/ui/modules/main/MainActivityTest.java deleted file mode 100644 index c51e7b5a..00000000 --- a/app/src/androidTest/java/com/fastaccess/ui/modules/main/MainActivityTest.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.fastaccess.ui.modules.main; - -import android.support.test.espresso.intent.rule.IntentsTestRule; - -import com.fastaccess.R; -import com.fastaccess.helper.AppHelper; -import com.fastaccess.ui.modules.feeds.FeedsFragment; -import com.fastaccess.ui.modules.login.chooser.LoginChooserActivity; -import com.fastaccess.ui.modules.main.issues.pager.MyIssuesPagerFragment; -import com.fastaccess.ui.modules.main.pullrequests.pager.MyPullsPagerFragment; -import com.fastaccess.ui.modules.notification.NotificationActivity; -import com.fastaccess.ui.modules.search.SearchActivity; - -import org.junit.Rule; -import org.junit.Test; - -import static android.support.test.espresso.Espresso.onView; -import static android.support.test.espresso.action.ViewActions.click; -import static android.support.test.espresso.assertion.ViewAssertions.matches; -import static android.support.test.espresso.intent.Intents.intended; -import static android.support.test.espresso.intent.matcher.IntentMatchers.hasComponent; -import static android.support.test.espresso.matcher.ViewMatchers.withId; -import static com.fastaccess.helper.TestHelper.bottomNavAction; -import static com.fastaccess.helper.TestHelper.bottomNavSelection; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -/** - * Created by Kosh on 06 May 2017, 2:11 AM - */ - -public class MainActivityTest { - @Rule public IntentsTestRule testRule = new IntentsTestRule<>(MainActivity.class); - - @Test public void noUserTest() { - assertEquals(testRule.getActivity().isLoggedIn(), false); - intended(hasComponent(LoginChooserActivity.class.getName())); - } - - @Test public void onInitTest() { - assertEquals(testRule.getActivity().isLoggedIn(), true); - onView(withId(R.id.bottomNavigation)).check(matches(bottomNavSelection(0))); - assertNotNull(AppHelper.getFragmentByTag(testRule.getActivity().getSupportFragmentManager(), FeedsFragment.TAG)); - } - - @Test public void onSelectIssuesTabTest() { - assertEquals(testRule.getActivity().isLoggedIn(), true); - onView(withId(R.id.bottomNavigation)).perform(bottomNavAction(1)) - .check(matches(bottomNavSelection(1))); - assertNotNull(AppHelper.getFragmentByTag(testRule.getActivity().getSupportFragmentManager(), MyIssuesPagerFragment.TAG)); - } - - @Test public void onSelectPullRequestsTabTest() { - assertEquals(testRule.getActivity().isLoggedIn(), true); - onView(withId(R.id.bottomNavigation)).perform(bottomNavAction(2)) - .check(matches(bottomNavSelection(2))); - assertNotNull(AppHelper.getFragmentByTag(testRule.getActivity().getSupportFragmentManager(), MyPullsPagerFragment.TAG)); - } - - @Test public void startNotificationsIntentTest() { - onView(withId(R.id.notifications)).perform(click()); - intended(hasComponent(NotificationActivity.class.getName())); - } - - @Test public void startSearchIntentTest() { - onView(withId(R.id.search)).perform(click()); - intended(hasComponent(SearchActivity.class.getName())); - } -} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index dd54f09d..b0f438f5 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,18 +1,18 @@ - + - - - - - - - + + + + + + + + android:theme="@style/ThemeTranslucent" /> - + - + - + - - + + + android:scheme="fasthub" /> + android:theme="@style/LoginTheme" /> + android:value=".ui.modules.main.MainActivity" /> + android:value=".ui.modules.main.MainActivity" /> + android:value=".ui.modules.repos.RepoPagerActivity" /> + android:label="@string/create_issue" /> + android:value=".ui.modules.repos.RepoPagerActivity" /> + android:value=".ui.modules.repos.RepoPagerActivity" /> + android:label="@string/viewer" /> + android:windowSoftInputMode="adjustResize" /> + android:label="@string/create_gist" /> + android:value=".ui.modules.main.MainActivity" /> + android:value=".ui.modules.main.MainActivity" /> + android:value=".ui.modules.main.MainActivity" /> + android:theme="@style/AppTheme.AboutActivity.Light" /> + android:label="@string/pinned" /> - + android:label="@string/public_gists" /> + + android:value=".ui.modules.repos.RepoPagerActivity" /> - - - + + + + android:value=".ui.modules.repos.RepoPagerActivity" /> + android:configChanges="keyboard|orientation|screenSize" /> + android:configChanges="keyboard|orientation|screenSize" /> + android:value=".ui.modules.repos.RepoPagerActivity" /> + android:value=".ui.modules.main.MainActivity" /> - + + android:label="@string/theme_title" /> + android:theme="@style/ThemeTranslucent" /> + android:value=".ui.modules.repos.RepoPagerActivity" /> + android:windowSoftInputMode="stateAlwaysHidden" /> + android:windowSoftInputMode="adjustResize" /> + android:value=".ui.modules.repos.RepoPagerActivity" /> + android:value=".ui.modules.repos.RepoPagerActivity" /> + android:value=".ui.modules.user.UserPagerActivity" /> - + + android:configChanges="keyboard|orientation|screenSize" /> - + - + + android:scheme="http" /> + android:scheme="https" /> + android:scheme="http" /> + android:scheme="https" /> + android:scheme="https" /> - + android:scheme="https" /> + - - + + - + - + - + @@ -301,25 +301,29 @@ android:name=".provider.tasks.notification.NotificationSchedulerJobTask" android:exported="false"> - + - - - - - + + + + + - + + android:value="6ed82b6e0756853d7d782a3f547f84f9ecba217e" /> + + \ No newline at end of file diff --git a/app/src/main/graphql/github/PinnedRepos.graphql b/app/src/main/graphql/github/PinnedRepos.graphql index cd91505c..cfa1a23c 100644 --- a/app/src/main/graphql/github/PinnedRepos.graphql +++ b/app/src/main/graphql/github/PinnedRepos.graphql @@ -5,10 +5,10 @@ query getPinnedRepos($login: String!) { node { name url - issues(states: OPEN) { + issues(states: [OPEN]) { totalCount } - pullRequests(states: OPEN) { + pullRequests(states: [OPEN]) { totalCount } stargazers { diff --git a/app/src/main/graphql/github/RepoProject.graphql b/app/src/main/graphql/github/RepoProject.graphql index f7c41117..9dcdc8bc 100644 --- a/app/src/main/graphql/github/RepoProject.graphql +++ b/app/src/main/graphql/github/RepoProject.graphql @@ -1,6 +1,6 @@ query repoProjectsOpen($owner: String!, $name: String!, $page: String) { repository(owner: $owner, name: $name) { - projects(first: 30, states: OPEN, after: $page, orderBy: {field: CREATED_AT, direction: DESC}) { + projects(first: 30, states: [OPEN], after: $page, orderBy: {field: CREATED_AT, direction: DESC}) { totalCount edges { cursor @@ -27,7 +27,7 @@ repository(owner: $owner, name: $name) { } query repoProjectsClosed($owner: String!, $name: String!, $page: String) { repository(owner: $owner, name: $name) { - projects(first: 30, states: CLOSED, after: $page, orderBy: {field: CREATED_AT, direction: DESC}) { + projects(first: 30, states: [CLOSED], after: $page, orderBy: {field: CREATED_AT, direction: DESC}) { totalCount edges { cursor @@ -55,7 +55,7 @@ repository(owner: $owner, name: $name) { query orgProjectsOpen($owner: String!, $page: String) { organization(login: $owner) { - projects(first: 30, states: OPEN, after: $page, orderBy: {field: CREATED_AT, direction: DESC}) { + projects(first: 30, states: [OPEN], after: $page, orderBy: {field: CREATED_AT, direction: DESC}) { totalCount edges { cursor @@ -82,7 +82,7 @@ organization(login: $owner) { } query orgProjectsClosed($owner: String!, $page: String) { organization(login: $owner) { - projects(first: 30, states: CLOSED, after: $page, orderBy: {field: CREATED_AT, direction: DESC}) { + projects(first: 30, states: [CLOSED], after: $page, orderBy: {field: CREATED_AT, direction: DESC}) { totalCount edges { cursor diff --git a/app/src/main/java/com/fastaccess/App.java b/app/src/main/java/com/fastaccess/App.java index 1b1949fb..d770b1e9 100644 --- a/app/src/main/java/com/fastaccess/App.java +++ b/app/src/main/java/com/fastaccess/App.java @@ -1,8 +1,8 @@ package com.fastaccess; import android.app.Application; -import android.support.annotation.NonNull; -import android.support.v7.preference.PreferenceManager; +import androidx.annotation.NonNull; +import androidx.preference.PreferenceManager; import com.fastaccess.data.dao.model.Models; import com.fastaccess.helper.DeviceNameGetter; @@ -72,7 +72,7 @@ public class App extends Application { public ReactiveEntityStore getDataStore() { if (dataStore == null) { EntityModel model = Models.DEFAULT; - DatabaseSource source = new DatabaseSource(this, model, "FastHub-DB", 17); + DatabaseSource source = new DatabaseSource(this, model, "FastHub-DB", 18); Configuration configuration = source.getConfiguration(); if (BuildConfig.DEBUG) { source.setTableCreationMode(TableCreationMode.CREATE_NOT_EXISTS); diff --git a/app/src/main/java/com/fastaccess/GlideModule.kt b/app/src/main/java/com/fastaccess/GlideModule.kt new file mode 100644 index 00000000..bcb42df2 --- /dev/null +++ b/app/src/main/java/com/fastaccess/GlideModule.kt @@ -0,0 +1,8 @@ +package com.fastaccess + +import com.bumptech.glide.annotation.GlideModule +import com.bumptech.glide.module.AppGlideModule + + +@GlideModule +class GlideModule : AppGlideModule() \ No newline at end of file diff --git a/app/src/main/java/com/fastaccess/data/dao/CommitFileChanges.java b/app/src/main/java/com/fastaccess/data/dao/CommitFileChanges.java index 4f81a69c..074f72f8 100644 --- a/app/src/main/java/com/fastaccess/data/dao/CommitFileChanges.java +++ b/app/src/main/java/com/fastaccess/data/dao/CommitFileChanges.java @@ -2,8 +2,8 @@ package com.fastaccess.data.dao; import android.os.Parcel; import android.os.Parcelable; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import com.annimon.stream.Stream; @@ -73,4 +73,11 @@ import lombok.Setter; int size = parcel.dataSize(); return size < 600000; } + + @Override public String toString() { + return "CommitFileChanges{" + + "linesModel=" + linesModel + + ", commitFileModel=" + commitFileModel + + '}'; + } } diff --git a/app/src/main/java/com/fastaccess/data/dao/CommitLinesModel.java b/app/src/main/java/com/fastaccess/data/dao/CommitLinesModel.java index 89e9df3a..9e8c9b68 100644 --- a/app/src/main/java/com/fastaccess/data/dao/CommitLinesModel.java +++ b/app/src/main/java/com/fastaccess/data/dao/CommitLinesModel.java @@ -2,8 +2,8 @@ package com.fastaccess.data.dao; import android.os.Parcel; import android.os.Parcelable; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import com.fastaccess.helper.InputHelper; diff --git a/app/src/main/java/com/fastaccess/data/dao/CommitRequestModel.java b/app/src/main/java/com/fastaccess/data/dao/CommitRequestModel.java index adc115f7..3baa2db8 100644 --- a/app/src/main/java/com/fastaccess/data/dao/CommitRequestModel.java +++ b/app/src/main/java/com/fastaccess/data/dao/CommitRequestModel.java @@ -9,11 +9,13 @@ public class CommitRequestModel { private String message; private String content; private String sha; + private String branch; - public CommitRequestModel(String message, String content, String sha) { + public CommitRequestModel(String message, String content, String sha, String branch) { this.message = message; this.content = content; this.sha = sha; + this.branch = branch; } public String getSha() { @@ -39,4 +41,12 @@ public class CommitRequestModel { public void setContent(String content) { this.content = content; } + + public String getBranch() { + return branch; + } + + public void setBranch(String branch) { + this.branch = branch; + } } diff --git a/app/src/main/java/com/fastaccess/data/dao/CreateMilestoneModel.java b/app/src/main/java/com/fastaccess/data/dao/CreateMilestoneModel.java index 40cc1284..a10f8c02 100644 --- a/app/src/main/java/com/fastaccess/data/dao/CreateMilestoneModel.java +++ b/app/src/main/java/com/fastaccess/data/dao/CreateMilestoneModel.java @@ -14,5 +14,5 @@ import lombok.Setter; public class CreateMilestoneModel { private String title; private String description; - @SerializedName("due_one") private String dueOn; + @SerializedName("due_on") private String dueOn; } diff --git a/app/src/main/java/com/fastaccess/data/dao/EditRepoFileModel.kt b/app/src/main/java/com/fastaccess/data/dao/EditRepoFileModel.kt index 5e837e85..09cdedd0 100644 --- a/app/src/main/java/com/fastaccess/data/dao/EditRepoFileModel.kt +++ b/app/src/main/java/com/fastaccess/data/dao/EditRepoFileModel.kt @@ -1,51 +1,44 @@ package com.fastaccess.data.dao import android.os.Parcel -import android.os.Parcelable +import com.fastaccess.helper.* /** * Created by Hashemsergani on 01/09/2017. */ -data class EditRepoFileModel(val login: String, - val repoId: String, - val path: String?, - val ref: String, - val sha: String?, - val contentUrl: String?, - val fileName: String?, - val isEdit: Boolean) : Parcelable { +data class EditRepoFileModel( + val login: String, + val repoId: String, + val path: String?, + val ref: String, + val sha: String?, + val contentUrl: String?, + val fileName: String?, + val isEdit: Boolean +) : KotlinParcelable { constructor(parcel: Parcel) : this( - parcel.readString(), - parcel.readString(), - parcel.readString(), - parcel.readString(), - parcel.readString(), - parcel.readString(), - parcel.readString(), - parcel.readByte() != 0.toByte()) + parcel.readString() ?: "", + parcel.readString() ?: "", + parcel.readString() ?: "", + parcel.readString() ?: "", + parcel.readString() ?: "", + parcel.readString() ?: "", + parcel.readString() ?: "", + parcel.readBooleanCompat() + ) - override fun writeToParcel(parcel: Parcel, flags: Int) { - parcel.writeString(login) - parcel.writeString(repoId) - parcel.writeString(path) - parcel.writeString(ref) - parcel.writeString(sha) - parcel.writeString(contentUrl) - parcel.writeString(fileName) - parcel.writeByte(if (isEdit) 1 else 0) + override fun writeToParcel(dest: Parcel, flags: Int) = with(dest) { + writeString(login) + writeString(repoId) + writeString(path) + writeString(ref) + writeString(sha) + writeString(contentUrl) + writeString(fileName) + writeBooleanCompat(isEdit) } - override fun describeContents(): Int { - return 0 + companion object { + @JvmField val CREATOR = parcelableCreator(::EditRepoFileModel) } - - companion object CREATOR : Parcelable.Creator { - override fun createFromParcel(parcel: Parcel): EditRepoFileModel { - return EditRepoFileModel(parcel) - } - - override fun newArray(size: Int): Array { - return arrayOfNulls(size) - } - } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/fastaccess/data/dao/FirebaseTrendingConfigModel.kt b/app/src/main/java/com/fastaccess/data/dao/FirebaseTrendingConfigModel.kt new file mode 100644 index 00000000..9859cd68 --- /dev/null +++ b/app/src/main/java/com/fastaccess/data/dao/FirebaseTrendingConfigModel.kt @@ -0,0 +1,36 @@ +package com.fastaccess.data.dao + +data class FirebaseTrendingConfigModel( + var pathUrl: String = "https://github.com/trending/", + var description: String = ".Box-row > p", + var forks: String = ".f6 > a[href*=/network]", + var language: String = ".f6 span[itemprop=programmingLanguage]", + var languageFallback: String = ".f6 span[itemprop=programmingLanguage]", + var listName: String = ".Box", + var listNameSublistTag: String = "article", + var stars: String = ".f6 > a[href*=/stargazers]", + var title: String = ".Box-row > h1 > a", + var todayStars: String = ".f6 > span.float-sm-right", + var todayStarsFallback: String = ".f6 > span.float-sm-right" +) { + + companion object { + fun map(map: HashMap?): FirebaseTrendingConfigModel { + val trendingModel = FirebaseTrendingConfigModel() + map?.let { + trendingModel.description = it.getOrElse("description") { trendingModel.description } + trendingModel.forks = it.getOrElse("forks") { trendingModel.forks } + trendingModel.language = it.getOrElse("language") { trendingModel.language } + trendingModel.languageFallback = it.getOrElse("language_fallback") { trendingModel.languageFallback } + trendingModel.listName = it.getOrElse("list_name") { trendingModel.listName } + trendingModel.listNameSublistTag = it.getOrElse("list_name_sublist_tag") { trendingModel.listNameSublistTag } + trendingModel.stars = it.getOrElse("stars") { trendingModel.stars } + trendingModel.title = it.getOrElse("title") { trendingModel.title } + trendingModel.todayStars = it.getOrElse("today_stars") { trendingModel.title } + trendingModel.todayStarsFallback = it.getOrElse("today_stars_fallback") { trendingModel.title } + trendingModel.pathUrl = it.getOrElse("path_url") { trendingModel.pathUrl } + } + return trendingModel + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/fastaccess/data/dao/FragmentPagerAdapterModel.java b/app/src/main/java/com/fastaccess/data/dao/FragmentPagerAdapterModel.java index 52e3cb97..c945600f 100644 --- a/app/src/main/java/com/fastaccess/data/dao/FragmentPagerAdapterModel.java +++ b/app/src/main/java/com/fastaccess/data/dao/FragmentPagerAdapterModel.java @@ -1,9 +1,9 @@ package com.fastaccess.data.dao; import android.content.Context; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v4.app.Fragment; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; import com.annimon.stream.Collectors; import com.annimon.stream.Stream; @@ -18,6 +18,9 @@ import com.fastaccess.ui.modules.feeds.FeedsFragment; import com.fastaccess.ui.modules.gists.GistsFragment; import com.fastaccess.ui.modules.gists.gist.comments.GistCommentsFragment; import com.fastaccess.ui.modules.gists.gist.files.GistFilesListFragment; +import com.fastaccess.ui.modules.gists.starred.StarredGistsFragment; +import com.fastaccess.ui.modules.main.drawer.AccountDrawerFragment; +import com.fastaccess.ui.modules.main.drawer.MainDrawerFragment; import com.fastaccess.ui.modules.main.issues.MyIssuesFragment; import com.fastaccess.ui.modules.main.pullrequests.MyPullRequestFragment; import com.fastaccess.ui.modules.notification.all.AllNotificationsFragment; @@ -180,9 +183,9 @@ import lombok.Setter; } @NonNull public static List buildForGists(@NonNull Context context) { - - return Stream.of(new FragmentPagerAdapterModel(context.getString(R.string.my_gists), ProfileGistsFragment.newInstance(Login.getUser() - .getLogin())), + return Stream.of(new FragmentPagerAdapterModel(context.getString(R.string.my_gists), ProfileGistsFragment + .newInstance(Login.getUser().getLogin())), + new FragmentPagerAdapterModel(context.getString(R.string.starred), StarredGistsFragment.newInstance()), new FragmentPagerAdapterModel(context.getString(R.string.public_gists), GistsFragment.newInstance())) .collect(Collectors.toList()); } @@ -262,7 +265,6 @@ import lombok.Setter; .toList(); } - @NonNull public static List buildForPinned(@NonNull Context context) { return Stream.of(new FragmentPagerAdapterModel(context.getString(R.string.repos), PinnedReposFragment.newInstance()), new FragmentPagerAdapterModel(context.getString(R.string.issues), PinnedIssueFragment.newInstance()), @@ -271,6 +273,12 @@ import lombok.Setter; .collect(Collectors.toList()); } + @NonNull public static List buildForDrawer(@NonNull Context context) { + return Stream.of(new FragmentPagerAdapterModel(context.getString(R.string.menu_label), new MainDrawerFragment()), + new FragmentPagerAdapterModel(context.getString(R.string.profile), new AccountDrawerFragment())) + .toList(); + } + @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; diff --git a/app/src/main/java/com/fastaccess/data/dao/GitHubStatusModel.java b/app/src/main/java/com/fastaccess/data/dao/GitHubStatusModel.java deleted file mode 100644 index e8eaed80..00000000 --- a/app/src/main/java/com/fastaccess/data/dao/GitHubStatusModel.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.fastaccess.data.dao; - -import android.os.Parcel; -import android.os.Parcelable; - -import java.util.Date; - -/** - * Created by Hashemsergani on 18.10.17. - */ - -public class GitHubStatusModel implements Parcelable { - - private String status; - private String body; - private Date createdOn; - - public String getStatus() { return status;} - - public void setStatus(String status) { this.status = status;} - - public String getBody() { return body;} - - public void setBody(String body) { this.body = body;} - - public Date getCreatedOn() { return createdOn;} - - public void setCreatedOn(Date createdOn) { this.createdOn = createdOn;} - - @Override public int describeContents() { return 0; } - - @Override public void writeToParcel(Parcel dest, int flags) { - dest.writeString(this.status); - dest.writeString(this.body); - dest.writeLong(this.createdOn != null ? this.createdOn.getTime() : -1); - } - - public GitHubStatusModel() {} - - protected GitHubStatusModel(Parcel in) { - this.status = in.readString(); - this.body = in.readString(); - long tmpCreatedOn = in.readLong(); - this.createdOn = tmpCreatedOn == -1 ? null : new Date(tmpCreatedOn); - } - - public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { - @Override public GitHubStatusModel createFromParcel(Parcel source) {return new GitHubStatusModel(source);} - - @Override public GitHubStatusModel[] newArray(int size) {return new GitHubStatusModel[size];} - }; -} diff --git a/app/src/main/java/com/fastaccess/data/dao/GitHubStatusModel.kt b/app/src/main/java/com/fastaccess/data/dao/GitHubStatusModel.kt new file mode 100644 index 00000000..febb076a --- /dev/null +++ b/app/src/main/java/com/fastaccess/data/dao/GitHubStatusModel.kt @@ -0,0 +1,15 @@ +package com.fastaccess.data.dao + +import com.google.gson.annotations.SerializedName + +/** + * Created by Hashemsergani on 18.10.17. + */ +data class GitHubStatusModel( + @SerializedName("status") var status: GithubStatus? = null +) + +data class GithubStatus( + @SerializedName("description") var description: String? = null, + @SerializedName("indicator") var indicator: String? = null +) \ No newline at end of file diff --git a/app/src/main/java/com/fastaccess/data/dao/GroupedNotificationModel.java b/app/src/main/java/com/fastaccess/data/dao/GroupedNotificationModel.java index d52b86c0..7517823a 100644 --- a/app/src/main/java/com/fastaccess/data/dao/GroupedNotificationModel.java +++ b/app/src/main/java/com/fastaccess/data/dao/GroupedNotificationModel.java @@ -1,6 +1,6 @@ package com.fastaccess.data.dao; -import android.support.annotation.Nullable; +import androidx.annotation.Nullable; import com.annimon.stream.Collectors; import com.annimon.stream.Stream; diff --git a/app/src/main/java/com/fastaccess/data/dao/IssueEventAdapterModel.java b/app/src/main/java/com/fastaccess/data/dao/IssueEventAdapterModel.java index 915df44b..37e81286 100644 --- a/app/src/main/java/com/fastaccess/data/dao/IssueEventAdapterModel.java +++ b/app/src/main/java/com/fastaccess/data/dao/IssueEventAdapterModel.java @@ -2,7 +2,7 @@ package com.fastaccess.data.dao; import android.os.Parcel; import android.os.Parcelable; -import android.support.annotation.Nullable; +import androidx.annotation.Nullable; import com.annimon.stream.Stream; import com.fastaccess.data.dao.model.Issue; diff --git a/app/src/main/java/com/fastaccess/data/dao/IssueRequestModel.java b/app/src/main/java/com/fastaccess/data/dao/IssueRequestModel.java index 73a7a805..7ed7449f 100644 --- a/app/src/main/java/com/fastaccess/data/dao/IssueRequestModel.java +++ b/app/src/main/java/com/fastaccess/data/dao/IssueRequestModel.java @@ -2,7 +2,7 @@ package com.fastaccess.data.dao; import android.os.Parcel; import android.os.Parcelable; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import com.annimon.stream.Collectors; import com.annimon.stream.Stream; diff --git a/app/src/main/java/com/fastaccess/data/dao/LockIssuePrModel.java b/app/src/main/java/com/fastaccess/data/dao/LockIssuePrModel.java new file mode 100644 index 00000000..481788b3 --- /dev/null +++ b/app/src/main/java/com/fastaccess/data/dao/LockIssuePrModel.java @@ -0,0 +1,14 @@ +package com.fastaccess.data.dao; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +/** + * Created by Kosh on 10.02.18. + */ +@NoArgsConstructor @AllArgsConstructor @Getter @Setter public class LockIssuePrModel { + private boolean locked; + private String activeLockReason; +} diff --git a/app/src/main/java/com/fastaccess/data/dao/NameParser.java b/app/src/main/java/com/fastaccess/data/dao/NameParser.java index 11f0ffd5..4c25b006 100644 --- a/app/src/main/java/com/fastaccess/data/dao/NameParser.java +++ b/app/src/main/java/com/fastaccess/data/dao/NameParser.java @@ -1,7 +1,7 @@ package com.fastaccess.data.dao; import android.net.Uri; -import android.support.annotation.Nullable; +import androidx.annotation.Nullable; import com.fastaccess.helper.InputHelper; import com.fastaccess.provider.scheme.LinkParserHelper; diff --git a/app/src/main/java/com/fastaccess/data/dao/PullRequestAdapterModel.java b/app/src/main/java/com/fastaccess/data/dao/PullRequestAdapterModel.java index 92d2451f..bd1d5586 100644 --- a/app/src/main/java/com/fastaccess/data/dao/PullRequestAdapterModel.java +++ b/app/src/main/java/com/fastaccess/data/dao/PullRequestAdapterModel.java @@ -2,7 +2,7 @@ package com.fastaccess.data.dao; import android.os.Parcel; import android.os.Parcelable; -import android.support.annotation.Nullable; +import androidx.annotation.Nullable; import com.annimon.stream.Stream; import com.fastaccess.data.dao.model.IssueEvent; diff --git a/app/src/main/java/com/fastaccess/data/dao/PullRequestStatusModel.java b/app/src/main/java/com/fastaccess/data/dao/PullRequestStatusModel.java index b8e0b566..f292280a 100644 --- a/app/src/main/java/com/fastaccess/data/dao/PullRequestStatusModel.java +++ b/app/src/main/java/com/fastaccess/data/dao/PullRequestStatusModel.java @@ -25,6 +25,7 @@ import lombok.Setter; private String url; private boolean mergable; private Date createdAt; + private String mergeableState; public PullRequestStatusModel() {} @@ -39,9 +40,10 @@ import lombok.Setter; dest.writeString(this.url); dest.writeByte(this.mergable ? (byte) 1 : (byte) 0); dest.writeLong(this.createdAt != null ? this.createdAt.getTime() : -1); + dest.writeString(this.mergeableState); } - private PullRequestStatusModel(Parcel in) { + protected PullRequestStatusModel(Parcel in) { int tmpState = in.readInt(); this.state = tmpState == -1 ? null : StatusStateType.values()[tmpState]; this.sha = in.readString(); @@ -52,6 +54,7 @@ import lombok.Setter; this.mergable = in.readByte() != 0; long tmpCreatedAt = in.readLong(); this.createdAt = tmpCreatedAt == -1 ? null : new Date(tmpCreatedAt); + this.mergeableState = in.readString(); } public static final Creator CREATOR = new Creator() { diff --git a/app/src/main/java/com/fastaccess/data/dao/PullsIssuesParser.java b/app/src/main/java/com/fastaccess/data/dao/PullsIssuesParser.java index 59333a99..6904db6e 100644 --- a/app/src/main/java/com/fastaccess/data/dao/PullsIssuesParser.java +++ b/app/src/main/java/com/fastaccess/data/dao/PullsIssuesParser.java @@ -3,7 +3,7 @@ package com.fastaccess.data.dao; import android.net.Uri; import android.os.Parcel; import android.os.Parcelable; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import com.fastaccess.helper.InputHelper; diff --git a/app/src/main/java/com/fastaccess/data/dao/ReactionsModel.java b/app/src/main/java/com/fastaccess/data/dao/ReactionsModel.java index ee84a907..16edfeca 100644 --- a/app/src/main/java/com/fastaccess/data/dao/ReactionsModel.java +++ b/app/src/main/java/com/fastaccess/data/dao/ReactionsModel.java @@ -2,7 +2,7 @@ package com.fastaccess.data.dao; import android.os.Parcel; import android.os.Parcelable; -import android.support.annotation.Nullable; +import androidx.annotation.Nullable; import com.fastaccess.data.dao.model.User; import com.google.gson.annotations.SerializedName; diff --git a/app/src/main/java/com/fastaccess/data/dao/RepoPathsManager.java b/app/src/main/java/com/fastaccess/data/dao/RepoPathsManager.java index 2e1bbd0a..5f112186 100644 --- a/app/src/main/java/com/fastaccess/data/dao/RepoPathsManager.java +++ b/app/src/main/java/com/fastaccess/data/dao/RepoPathsManager.java @@ -1,7 +1,7 @@ package com.fastaccess.data.dao; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import com.fastaccess.data.dao.model.RepoFile; diff --git a/app/src/main/java/com/fastaccess/data/dao/SettingsModel.java b/app/src/main/java/com/fastaccess/data/dao/SettingsModel.java index f95ea515..a844c85f 100644 --- a/app/src/main/java/com/fastaccess/data/dao/SettingsModel.java +++ b/app/src/main/java/com/fastaccess/data/dao/SettingsModel.java @@ -1,6 +1,6 @@ package com.fastaccess.data.dao; -import android.support.annotation.IntDef; +import androidx.annotation.IntDef; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; diff --git a/app/src/main/java/com/fastaccess/data/dao/TabsCountStateModel.java b/app/src/main/java/com/fastaccess/data/dao/TabsCountStateModel.java index dcb45ede..ca65a36e 100644 --- a/app/src/main/java/com/fastaccess/data/dao/TabsCountStateModel.java +++ b/app/src/main/java/com/fastaccess/data/dao/TabsCountStateModel.java @@ -2,7 +2,7 @@ package com.fastaccess.data.dao; import android.os.Parcel; import android.os.Parcelable; -import android.support.annotation.DrawableRes; +import androidx.annotation.DrawableRes; import java.io.Serializable; diff --git a/app/src/main/java/com/fastaccess/data/dao/TimelineModel.java b/app/src/main/java/com/fastaccess/data/dao/TimelineModel.java index 9fe29ba7..1e4e15a9 100644 --- a/app/src/main/java/com/fastaccess/data/dao/TimelineModel.java +++ b/app/src/main/java/com/fastaccess/data/dao/TimelineModel.java @@ -2,7 +2,7 @@ package com.fastaccess.data.dao; import android.os.Parcel; import android.os.Parcelable; -import android.support.annotation.Nullable; +import androidx.annotation.Nullable; import com.fastaccess.data.dao.model.Comment; import com.fastaccess.data.dao.model.Issue; diff --git a/app/src/main/java/com/fastaccess/data/dao/TrendingModel.kt b/app/src/main/java/com/fastaccess/data/dao/TrendingModel.kt index db430dbc..f97bbfe1 100644 --- a/app/src/main/java/com/fastaccess/data/dao/TrendingModel.kt +++ b/app/src/main/java/com/fastaccess/data/dao/TrendingModel.kt @@ -1,39 +1,36 @@ package com.fastaccess.data.dao import android.os.Parcel -import android.os.Parcelable +import com.fastaccess.helper.KotlinParcelable +import com.fastaccess.helper.parcelableCreator data class TrendingModel( - val title: String? = null, - val description: String? = null, - val language: String? = null, - val stars: String? = null, - val forks: String? = null, - val todayStars: String? = null) : Parcelable { + val title: String? = null, + val description: String? = null, + val language: String? = null, + val stars: String? = null, + val forks: String? = null, + val todayStars: String? = null +) : KotlinParcelable { companion object { - @JvmField val CREATOR: Parcelable.Creator = object : Parcelable.Creator { - override fun createFromParcel(source: Parcel): TrendingModel = TrendingModel(source) - override fun newArray(size: Int): Array = arrayOfNulls(size) - } + @JvmField val CREATOR = parcelableCreator(::TrendingModel) } constructor(source: Parcel) : this( - source.readString(), - source.readString(), - source.readString(), - source.readString(), - source.readString(), - source.readString() + source.readString(), + source.readString(), + source.readString(), + source.readString(), + source.readString(), + source.readString() ) - override fun describeContents() = 0 - - override fun writeToParcel(dest: Parcel, flags: Int) { - dest.writeString(title) - dest.writeString(description) - dest.writeString(language) - dest.writeString(stars) - dest.writeString(forks) - dest.writeString(todayStars) + override fun writeToParcel(dest: Parcel, flags: Int) = with(dest) { + writeString(title) + writeString(description) + writeString(language) + writeString(stars) + writeString(forks) + writeString(todayStars) } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/fastaccess/data/dao/model/AbstractComment.java b/app/src/main/java/com/fastaccess/data/dao/model/AbstractComment.java index ffcb0991..806f83d1 100644 --- a/app/src/main/java/com/fastaccess/data/dao/model/AbstractComment.java +++ b/app/src/main/java/com/fastaccess/data/dao/model/AbstractComment.java @@ -2,7 +2,7 @@ package com.fastaccess.data.dao.model; import android.os.Parcel; import android.os.Parcelable; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import com.fastaccess.App; import com.fastaccess.data.dao.ReactionsModel; diff --git a/app/src/main/java/com/fastaccess/data/dao/model/AbstractCommit.java b/app/src/main/java/com/fastaccess/data/dao/model/AbstractCommit.java index 0bdea8dd..32fe38a9 100644 --- a/app/src/main/java/com/fastaccess/data/dao/model/AbstractCommit.java +++ b/app/src/main/java/com/fastaccess/data/dao/model/AbstractCommit.java @@ -2,7 +2,7 @@ package com.fastaccess.data.dao.model; import android.os.Parcel; import android.os.Parcelable; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import com.fastaccess.App; import com.fastaccess.data.dao.CommitFileListModel; diff --git a/app/src/main/java/com/fastaccess/data/dao/model/AbstractEvent.java b/app/src/main/java/com/fastaccess/data/dao/model/AbstractEvent.java index 32f97459..ee9a0a62 100644 --- a/app/src/main/java/com/fastaccess/data/dao/model/AbstractEvent.java +++ b/app/src/main/java/com/fastaccess/data/dao/model/AbstractEvent.java @@ -2,7 +2,7 @@ package com.fastaccess.data.dao.model; import android.os.Parcel; import android.os.Parcelable; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import android.text.TextUtils; import com.fastaccess.App; @@ -42,7 +42,7 @@ import lombok.NoArgsConstructor; @Nullable String login; @NonNull - public static Disposable save(@android.support.annotation.Nullable List events, @android.support.annotation.Nullable String user) { + public static Disposable save(@androidx.annotation.Nullable List events, @androidx.annotation.Nullable String user) { return RxHelper.getSingle(Single.fromPublisher(s -> { try { Login login = Login.getUser(); diff --git a/app/src/main/java/com/fastaccess/data/dao/model/AbstractFastHubNotification.java b/app/src/main/java/com/fastaccess/data/dao/model/AbstractFastHubNotification.java index 08de87aa..b8721fd5 100644 --- a/app/src/main/java/com/fastaccess/data/dao/model/AbstractFastHubNotification.java +++ b/app/src/main/java/com/fastaccess/data/dao/model/AbstractFastHubNotification.java @@ -2,14 +2,13 @@ package com.fastaccess.data.dao.model; import android.os.Parcel; import android.os.Parcelable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import com.fastaccess.App; import java.util.Date; -import javax.annotation.Nonnull; -import javax.annotation.Nullable; - import io.reactivex.Observable; import io.requery.Column; import io.requery.Entity; @@ -33,11 +32,11 @@ import lombok.NoArgsConstructor; @io.requery.Nullable String title; @io.requery.Nullable NotificationType type; - public static void update(@Nonnull FastHubNotification notification) { + public static void update(@NonNull FastHubNotification notification) { App.getInstance().getDataStore().toBlocking().update(notification); } - public static void save(@Nonnull FastHubNotification notification) { + public static void save(@NonNull FastHubNotification notification) { App.getInstance().getDataStore().toBlocking().insert(notification); } @@ -51,7 +50,7 @@ import lombok.NoArgsConstructor; .firstOrNull(); } - @Nonnull public static Observable getNotifications() { + @NonNull public static Observable getNotifications() { return App.getInstance().getDataStore() .select(FastHubNotification.class) .orderBy(FastHubNotification.DATE.desc()) diff --git a/app/src/main/java/com/fastaccess/data/dao/model/AbstractGist.java b/app/src/main/java/com/fastaccess/data/dao/model/AbstractGist.java index 6177812a..c9e8542e 100644 --- a/app/src/main/java/com/fastaccess/data/dao/model/AbstractGist.java +++ b/app/src/main/java/com/fastaccess/data/dao/model/AbstractGist.java @@ -2,7 +2,7 @@ package com.fastaccess.data.dao.model; import android.os.Parcel; import android.os.Parcelable; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import com.annimon.stream.Collectors; import com.annimon.stream.LongStream; diff --git a/app/src/main/java/com/fastaccess/data/dao/model/AbstractIssue.java b/app/src/main/java/com/fastaccess/data/dao/model/AbstractIssue.java index 86c886f3..744fce42 100644 --- a/app/src/main/java/com/fastaccess/data/dao/model/AbstractIssue.java +++ b/app/src/main/java/com/fastaccess/data/dao/model/AbstractIssue.java @@ -2,7 +2,7 @@ package com.fastaccess.data.dao.model; import android.os.Parcel; import android.os.Parcelable; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import com.fastaccess.App; import com.fastaccess.data.dao.LabelListModel; diff --git a/app/src/main/java/com/fastaccess/data/dao/model/AbstractIssueEvent.java b/app/src/main/java/com/fastaccess/data/dao/model/AbstractIssueEvent.java index 74f1176c..1621e0d3 100644 --- a/app/src/main/java/com/fastaccess/data/dao/model/AbstractIssueEvent.java +++ b/app/src/main/java/com/fastaccess/data/dao/model/AbstractIssueEvent.java @@ -2,7 +2,7 @@ package com.fastaccess.data.dao.model; import android.os.Parcel; import android.os.Parcelable; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import com.fastaccess.App; import com.fastaccess.data.dao.LabelModel; diff --git a/app/src/main/java/com/fastaccess/data/dao/model/AbstractLogin.java b/app/src/main/java/com/fastaccess/data/dao/model/AbstractLogin.java index 86a6c09c..27b2f1c6 100644 --- a/app/src/main/java/com/fastaccess/data/dao/model/AbstractLogin.java +++ b/app/src/main/java/com/fastaccess/data/dao/model/AbstractLogin.java @@ -2,7 +2,7 @@ package com.fastaccess.data.dao.model; import android.os.Parcel; import android.os.Parcelable; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import com.fastaccess.App; import com.fastaccess.helper.PrefGetter; diff --git a/app/src/main/java/com/fastaccess/data/dao/model/AbstractNotification.java b/app/src/main/java/com/fastaccess/data/dao/model/AbstractNotification.java index 573f44dd..41bb6965 100644 --- a/app/src/main/java/com/fastaccess/data/dao/model/AbstractNotification.java +++ b/app/src/main/java/com/fastaccess/data/dao/model/AbstractNotification.java @@ -72,7 +72,7 @@ import lombok.NoArgsConstructor; })).subscribe(o -> {/*do nothing*/}, Throwable::printStackTrace); } - public static Disposable save(@android.support.annotation.Nullable List models) { + public static Disposable save(@androidx.annotation.Nullable List models) { if (models == null || models.isEmpty()) { return Observable.empty().subscribe(); } @@ -92,7 +92,7 @@ import lombok.NoArgsConstructor; })).subscribe(o -> {/*do nothing*/}, Throwable::printStackTrace); } - public static Single saveAsSingle(@android.support.annotation.Nullable List models) { + public static Single saveAsSingle(@androidx.annotation.Nullable List models) { if (models == null || models.isEmpty()) { return Single.just(true); } diff --git a/app/src/main/java/com/fastaccess/data/dao/model/AbstractNotificationQueue.java b/app/src/main/java/com/fastaccess/data/dao/model/AbstractNotificationQueue.java index 4a24acda..350bc73b 100644 --- a/app/src/main/java/com/fastaccess/data/dao/model/AbstractNotificationQueue.java +++ b/app/src/main/java/com/fastaccess/data/dao/model/AbstractNotificationQueue.java @@ -2,6 +2,7 @@ package com.fastaccess.data.dao.model; import android.os.Parcel; import android.os.Parcelable; +import androidx.annotation.Nullable; import com.fastaccess.App; import com.fastaccess.helper.RxHelper; @@ -9,8 +10,6 @@ import com.fastaccess.helper.RxHelper; import java.util.Date; import java.util.List; -import javax.annotation.Nullable; - import io.reactivex.Observable; import io.requery.BlockingEntityStore; import io.requery.Entity; diff --git a/app/src/main/java/com/fastaccess/data/dao/model/AbstractPinnedGists.java b/app/src/main/java/com/fastaccess/data/dao/model/AbstractPinnedGists.java index 7d721282..8cd2282e 100644 --- a/app/src/main/java/com/fastaccess/data/dao/model/AbstractPinnedGists.java +++ b/app/src/main/java/com/fastaccess/data/dao/model/AbstractPinnedGists.java @@ -1,18 +1,14 @@ package com.fastaccess.data.dao.model; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import com.fastaccess.App; import com.fastaccess.data.dao.converters.GistConverter; -import com.fastaccess.data.dao.converters.IssueConverter; -import com.fastaccess.helper.RxHelper; import java.util.List; -import io.reactivex.Observable; import io.reactivex.Single; -import io.reactivex.disposables.Disposable; import io.requery.Convert; import io.requery.Entity; import io.requery.Generated; @@ -36,17 +32,17 @@ import static com.fastaccess.data.dao.model.PinnedGists.LOGIN; @io.requery.Nullable long gistId; public static void pinUpin(@NonNull Gist gist) { - PinnedGists pinnedIssues = get(gist.getId()); + PinnedGists pinnedIssues = get(gist.getGistId().hashCode()); if (pinnedIssues == null) { PinnedGists pinned = new PinnedGists(); pinned.setLogin(Login.getUser().getLogin()); pinned.setGist(gist); - pinned.setGistId(gist.getId()); + pinned.setGistId(gist.getGistId().hashCode()); try { App.getInstance().getDataStore().toBlocking().insert(pinned); } catch (Exception ignored) {} } else { - delete(gist.getId()); + delete(gist.getGistId().hashCode()); } } @@ -64,18 +60,6 @@ import static com.fastaccess.data.dao.model.PinnedGists.LOGIN; .value(); } - @NonNull public static Disposable updateEntry(long gistId) { - return RxHelper.getObservable(Observable.fromPublisher(e -> { - PinnedGists pinned = get(gistId); - if (pinned != null) { - pinned.setEntryCount(pinned.getEntryCount() + 1); - App.getInstance().getDataStore().toBlocking().update(pinned); - e.onNext(""); - } - e.onComplete(); - })).subscribe(o -> {/*do nothing*/}, Throwable::printStackTrace); - } - @NonNull public static Single> getMyPinnedGists() { return App.getInstance().getDataStore().select(PinnedGists.class) .where(LOGIN.eq(Login.getUser().getLogin()).or(LOGIN.isNull())) @@ -89,5 +73,4 @@ import static com.fastaccess.data.dao.model.PinnedGists.LOGIN; public static boolean isPinned(long gistId) { return get(gistId) != null; } - } diff --git a/app/src/main/java/com/fastaccess/data/dao/model/AbstractPinnedIssues.java b/app/src/main/java/com/fastaccess/data/dao/model/AbstractPinnedIssues.java index 22cdc9ad..7617675e 100644 --- a/app/src/main/java/com/fastaccess/data/dao/model/AbstractPinnedIssues.java +++ b/app/src/main/java/com/fastaccess/data/dao/model/AbstractPinnedIssues.java @@ -1,7 +1,7 @@ package com.fastaccess.data.dao.model; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import com.fastaccess.App; import com.fastaccess.data.dao.converters.IssueConverter; diff --git a/app/src/main/java/com/fastaccess/data/dao/model/AbstractPinnedPullRequests.java b/app/src/main/java/com/fastaccess/data/dao/model/AbstractPinnedPullRequests.java index 869d78f6..3df8d59d 100644 --- a/app/src/main/java/com/fastaccess/data/dao/model/AbstractPinnedPullRequests.java +++ b/app/src/main/java/com/fastaccess/data/dao/model/AbstractPinnedPullRequests.java @@ -1,7 +1,7 @@ package com.fastaccess.data.dao.model; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import com.fastaccess.App; import com.fastaccess.data.dao.converters.PullRequestConverter; 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 e9bfde70..877202e5 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 @@ -1,8 +1,8 @@ package com.fastaccess.data.dao.model; import android.os.Parcelable; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import com.fastaccess.App; import com.fastaccess.data.dao.converters.RepoConverter; diff --git a/app/src/main/java/com/fastaccess/data/dao/model/AbstractPullRequest.java b/app/src/main/java/com/fastaccess/data/dao/model/AbstractPullRequest.java index 03bcb4a5..8d4b8c07 100644 --- a/app/src/main/java/com/fastaccess/data/dao/model/AbstractPullRequest.java +++ b/app/src/main/java/com/fastaccess/data/dao/model/AbstractPullRequest.java @@ -3,7 +3,7 @@ package com.fastaccess.data.dao.model; import android.content.Context; import android.os.Parcel; import android.os.Parcelable; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import com.fastaccess.App; import com.fastaccess.R; @@ -79,6 +79,7 @@ import static com.fastaccess.data.dao.model.PullRequest.UPDATED_AT; int reviewComments; String repoId; String login; + String mergeableState; @Convert(UsersConverter.class) UsersListModel assignees; @Convert(UserConverter.class) User mergedBy; @Convert(UserConverter.class) User closedBy; @@ -262,6 +263,7 @@ import static com.fastaccess.data.dao.model.PullRequest.UPDATED_AT; dest.writeInt(this.reviewComments); dest.writeString(this.repoId); dest.writeString(this.login); + dest.writeString(this.mergeableState); dest.writeList(this.assignees); dest.writeParcelable(this.mergedBy, flags); dest.writeParcelable(this.closedBy, flags); @@ -309,6 +311,7 @@ import static com.fastaccess.data.dao.model.PullRequest.UPDATED_AT; this.reviewComments = in.readInt(); this.repoId = in.readString(); this.login = in.readString(); + this.mergeableState = in.readString(); this.assignees = new UsersListModel(); in.readList(this.assignees, this.assignees.getClass().getClassLoader()); this.mergedBy = in.readParcelable(User.class.getClassLoader()); diff --git a/app/src/main/java/com/fastaccess/data/dao/model/AbstractRelease.java b/app/src/main/java/com/fastaccess/data/dao/model/AbstractRelease.java index b7c7ac7e..321796fc 100644 --- a/app/src/main/java/com/fastaccess/data/dao/model/AbstractRelease.java +++ b/app/src/main/java/com/fastaccess/data/dao/model/AbstractRelease.java @@ -2,7 +2,7 @@ package com.fastaccess.data.dao.model; import android.os.Parcel; import android.os.Parcelable; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import com.fastaccess.App; import com.fastaccess.data.dao.ReleasesAssetsListModel; diff --git a/app/src/main/java/com/fastaccess/data/dao/model/AbstractRepo.java b/app/src/main/java/com/fastaccess/data/dao/model/AbstractRepo.java index 8a8c6306..24bb911b 100644 --- a/app/src/main/java/com/fastaccess/data/dao/model/AbstractRepo.java +++ b/app/src/main/java/com/fastaccess/data/dao/model/AbstractRepo.java @@ -2,7 +2,7 @@ package com.fastaccess.data.dao.model; import android.os.Parcel; import android.os.Parcelable; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import com.fastaccess.App; import com.fastaccess.data.dao.LicenseModel; diff --git a/app/src/main/java/com/fastaccess/data/dao/model/AbstractRepoFile.java b/app/src/main/java/com/fastaccess/data/dao/model/AbstractRepoFile.java index 474af92c..47088317 100644 --- a/app/src/main/java/com/fastaccess/data/dao/model/AbstractRepoFile.java +++ b/app/src/main/java/com/fastaccess/data/dao/model/AbstractRepoFile.java @@ -2,7 +2,7 @@ package com.fastaccess.data.dao.model; import android.os.Parcel; import android.os.Parcelable; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import com.fastaccess.App; import com.fastaccess.data.dao.types.FilesType; diff --git a/app/src/main/java/com/fastaccess/data/dao/model/AbstractUser.java b/app/src/main/java/com/fastaccess/data/dao/model/AbstractUser.java index 06c44fd7..200c36fd 100644 --- a/app/src/main/java/com/fastaccess/data/dao/model/AbstractUser.java +++ b/app/src/main/java/com/fastaccess/data/dao/model/AbstractUser.java @@ -2,8 +2,8 @@ package com.fastaccess.data.dao.model; import android.os.Parcel; import android.os.Parcelable; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import com.fastaccess.App; import com.fastaccess.helper.RxHelper; diff --git a/app/src/main/java/com/fastaccess/data/dao/model/AbstractViewerFile.java b/app/src/main/java/com/fastaccess/data/dao/model/AbstractViewerFile.java index cc0bd4ac..9e0f3ac6 100644 --- a/app/src/main/java/com/fastaccess/data/dao/model/AbstractViewerFile.java +++ b/app/src/main/java/com/fastaccess/data/dao/model/AbstractViewerFile.java @@ -2,7 +2,7 @@ package com.fastaccess.data.dao.model; import android.os.Parcel; import android.os.Parcelable; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import com.fastaccess.App; import com.fastaccess.helper.RxHelper; diff --git a/app/src/main/java/com/fastaccess/data/dao/timeline/PullRequestReviewModel.java b/app/src/main/java/com/fastaccess/data/dao/timeline/PullRequestReviewModel.java deleted file mode 100644 index f260ea42..00000000 --- a/app/src/main/java/com/fastaccess/data/dao/timeline/PullRequestReviewModel.java +++ /dev/null @@ -1,169 +0,0 @@ -package com.fastaccess.data.dao.timeline; - -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; - -import com.fastaccess.data.dao.ReactionsModel; -import com.fastaccess.helper.Logger; -import com.fastaccess.helper.ParseDateFormat; - -import java.util.ArrayList; -import java.util.List; - -import github.PullRequestTimelineQuery; -import github.type.PullRequestReviewState; - -/** - * Created by kosh on 20/08/2017. - */ - -public class PullRequestReviewModel { - private PullRequestTimelineQuery.AsReviewDismissedEvent reviewDismissedEvent; - private PullRequestTimelineQuery.AsReviewRequestedEvent reviewRequestedEvent; - private PullRequestTimelineQuery.AsReviewRequestRemovedEvent reviewRequestRemovedEvent; - private PullRequestTimelineQuery.Node2 node; - private List reaction; - private List comments; - private String id; - private String url; - private PullRequestTimelineQuery.Author2 author; - private String bodyHTML; - private String createdAt; - private PullRequestReviewState state; - - @Nullable public static PullRequestReviewModel build(@NonNull PullRequestTimelineQuery.Node node) { - PullRequestReviewModel model = new PullRequestReviewModel(); - if (node.asReviewRequestRemovedEvent() != null) { - model.reviewRequestRemovedEvent = node.asReviewRequestRemovedEvent(); - } else if (node.asReviewDismissedEvent() != null) { - model.reviewDismissedEvent = node.asReviewDismissedEvent(); - } else if (node.asReviewRequestedEvent() != null) { - model.reviewRequestedEvent = node.asReviewRequestedEvent(); - } else { - PullRequestTimelineQuery.AsPullRequestReview pullRequestReview = node.asPullRequestReview(); - if (pullRequestReview != null) { - model.state = pullRequestReview.state(); - model.url = pullRequestReview.url().toString(); - model.author = pullRequestReview.author(); - model.bodyHTML = pullRequestReview.bodyHTML().toString(); - model.createdAt = ParseDateFormat.getTimeAgo(pullRequestReview.createdAt().toString()).toString(); - model.id = pullRequestReview.id(); - model.url = pullRequestReview.url().toString(); - List edges = pullRequestReview.comments().edges(); - if (edges != null && !edges.isEmpty()) { - List comments = new ArrayList<>(); - for (PullRequestTimelineQuery.Edge2 edge : edges) { - PullRequestTimelineQuery.Node2 node2 = edge.node(); - if (node2 != null) { - PullRequestReviewModel comment = new PullRequestReviewModel(); - comment.node = node2; - comment.reaction = ReactionsModel.getReaction(node2.reactionGroups()); - comments.add(comment); - } - } - Logger.e(comments.size()); - model.comments = comments; - } - } else { - return null; - } - } - return model; - } - - public PullRequestTimelineQuery.AsReviewDismissedEvent getReviewDismissedEvent() { - return reviewDismissedEvent; - } - - public void setReviewDismissedEvent(PullRequestTimelineQuery.AsReviewDismissedEvent reviewDismissedEvent) { - this.reviewDismissedEvent = reviewDismissedEvent; - } - - public PullRequestTimelineQuery.AsReviewRequestedEvent getReviewRequestedEvent() { - return reviewRequestedEvent; - } - - public void setReviewRequestedEvent(PullRequestTimelineQuery.AsReviewRequestedEvent reviewRequestedEvent) { - this.reviewRequestedEvent = reviewRequestedEvent; - } - - public PullRequestTimelineQuery.AsReviewRequestRemovedEvent getReviewRequestRemovedEvent() { - return reviewRequestRemovedEvent; - } - - public void setReviewRequestRemovedEvent(PullRequestTimelineQuery.AsReviewRequestRemovedEvent reviewRequestRemovedEvent) { - this.reviewRequestRemovedEvent = reviewRequestRemovedEvent; - } - - public PullRequestTimelineQuery.Node2 getNode() { - return node; - } - - public void setNode(PullRequestTimelineQuery.Node2 node) { - this.node = node; - } - - public List getReaction() { - return reaction; - } - - public void setReaction(List reaction) { - this.reaction = reaction; - } - - public List getComments() { - return comments; - } - - public void setComments(List comments) { - this.comments = comments; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getUrl() { - return url; - } - - public void setUrl(String url) { - this.url = url; - } - - public PullRequestTimelineQuery.Author2 getAuthor() { - return author; - } - - public void setAuthor(PullRequestTimelineQuery.Author2 author) { - this.author = author; - } - - public String getBodyHTML() { - return bodyHTML; - } - - public void setBodyHTML(String bodyHTML) { - this.bodyHTML = bodyHTML; - } - - public String getCreatedAt() { - return createdAt; - } - - public void setCreatedAt(String createdAt) { - this.createdAt = createdAt; - } - - public PullRequestReviewState getState() { - return state; - } - - public void setState(PullRequestReviewState state) { - this.state = state; - } -} diff --git a/app/src/main/java/com/fastaccess/data/dao/timeline/PullRequestTimelineModel.java b/app/src/main/java/com/fastaccess/data/dao/timeline/PullRequestTimelineModel.java deleted file mode 100644 index 0cd8bd06..00000000 --- a/app/src/main/java/com/fastaccess/data/dao/timeline/PullRequestTimelineModel.java +++ /dev/null @@ -1,85 +0,0 @@ -package com.fastaccess.data.dao.timeline; - -import com.fastaccess.data.dao.ReactionsModel; -import com.fastaccess.data.dao.model.PullRequest; - -import java.util.List; - -import lombok.Getter; -import lombok.Setter; -import github.PullRequestTimelineQuery; - -/** - * Created by kosh on 02/08/2017. - */ - -@Getter @Setter public class PullRequestTimelineModel { - - public static final int HEADER = 1; - public static final int EVENT = 2; - public static final int COMMENT = 3; - public static final int STATUS = 4; - public static final int REVIEW = 5; - public static final int COMMIT_COMMENTS = 6; - public PullRequestTimelineQuery.Node node; - public PullRequest pullRequest; - public PullRequestTimelineQuery.Status status; - public List reactions; - public boolean isMergeable; - public PullRequestCommitModel commitThread; - public PullRequestReviewModel reviewModel; - - public PullRequestTimelineModel(PullRequest pullRequest) { - this.pullRequest = pullRequest; - } - - public PullRequestTimelineModel(PullRequestTimelineQuery.Node node) { - this.node = node; - if (this.node.asCommitCommentThread() != null) { - - } else { - if (node.asPullRequestReview() != null || node.asReviewDismissedEvent() != null - || node.asReviewRequestedEvent() != null || node.asReviewRequestRemovedEvent() != null) { - reviewModel = PullRequestReviewModel.build(node); - } - } - } - - public PullRequestTimelineModel(PullRequestTimelineQuery.Status status, boolean isMergeable) { - this.status = status; - this.isMergeable = isMergeable; - } - - public int getType() { - if (pullRequest != null) return HEADER; - if (node != null) { - if (node.asAssignedEvent() != null || node.asClosedEvent() != null - || node.asDemilestonedEvent() != null || node.asHeadRefDeletedEvent() != null - || node.asLabeledEvent() != null || node.asLockedEvent() != null - || node.asMergedEvent() != null || node.asMilestonedEvent() != null - || node.asReferencedEvent() != null || node.asRenamedTitleEvent() != null - || node.asReopenedEvent() != null || node.asUnassignedEvent() != null - || node.asUnlabeledEvent() != null || node.asUnlockedEvent() != null - || node.asCommit() != null || node.asHeadRefRestoredEvent() != null) { - return EVENT; - } else if (node.asIssueComment() != null) { - if (reactions == null) { - //noinspection ConstantConditions - setReactions(ReactionsModel.getReaction2(node.asIssueComment().reactionGroups())); - } - return COMMENT; - } else if (reviewModel != null) { - return REVIEW; - } else if (commitThread != null) { - return COMMIT_COMMENTS; - } - } else if (status != null) { - return STATUS; - } - return 0; - } - - @Override public String toString() { - return String.valueOf(getType()); - } -} diff --git a/app/src/main/java/com/fastaccess/data/dao/types/EventsType.java b/app/src/main/java/com/fastaccess/data/dao/types/EventsType.java index fdcf64df..85b96d18 100644 --- a/app/src/main/java/com/fastaccess/data/dao/types/EventsType.java +++ b/app/src/main/java/com/fastaccess/data/dao/types/EventsType.java @@ -1,8 +1,8 @@ package com.fastaccess.data.dao.types; -import android.support.annotation.DrawableRes; -import android.support.annotation.StringRes; +import androidx.annotation.DrawableRes; +import androidx.annotation.StringRes; import com.fastaccess.R; diff --git a/app/src/main/java/com/fastaccess/data/dao/types/FilesType.java b/app/src/main/java/com/fastaccess/data/dao/types/FilesType.java index 00431f1b..4c44606a 100644 --- a/app/src/main/java/com/fastaccess/data/dao/types/FilesType.java +++ b/app/src/main/java/com/fastaccess/data/dao/types/FilesType.java @@ -1,6 +1,6 @@ package com.fastaccess.data.dao.types; -import android.support.annotation.DrawableRes; +import androidx.annotation.DrawableRes; import com.fastaccess.R; diff --git a/app/src/main/java/com/fastaccess/data/dao/types/IssueEventType.java b/app/src/main/java/com/fastaccess/data/dao/types/IssueEventType.java index 525029e0..c8ef9f5c 100644 --- a/app/src/main/java/com/fastaccess/data/dao/types/IssueEventType.java +++ b/app/src/main/java/com/fastaccess/data/dao/types/IssueEventType.java @@ -1,7 +1,7 @@ package com.fastaccess.data.dao.types; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import com.annimon.stream.Stream; import com.fastaccess.R; @@ -37,7 +37,8 @@ public enum IssueEventType { reviewed(R.drawable.ic_eye), changes_requested(R.drawable.ic_eye), added_to_project(R.drawable.ic_add), - GROUPED(R.drawable.ic_eye); + GROUPED(R.drawable.ic_eye), + deployed(R.drawable.ic_rocket); int iconResId; diff --git a/app/src/main/java/com/fastaccess/data/dao/types/IssueState.java b/app/src/main/java/com/fastaccess/data/dao/types/IssueState.java index 6155871e..039f45c3 100644 --- a/app/src/main/java/com/fastaccess/data/dao/types/IssueState.java +++ b/app/src/main/java/com/fastaccess/data/dao/types/IssueState.java @@ -1,6 +1,6 @@ package com.fastaccess.data.dao.types; -import android.support.annotation.StringRes; +import androidx.annotation.StringRes; import com.fastaccess.R; diff --git a/app/src/main/java/com/fastaccess/data/dao/types/ReactionTypes.java b/app/src/main/java/com/fastaccess/data/dao/types/ReactionTypes.java index a8a13270..7b075c26 100644 --- a/app/src/main/java/com/fastaccess/data/dao/types/ReactionTypes.java +++ b/app/src/main/java/com/fastaccess/data/dao/types/ReactionTypes.java @@ -1,7 +1,7 @@ package com.fastaccess.data.dao.types; -import android.support.annotation.IdRes; -import android.support.annotation.Nullable; +import androidx.annotation.IdRes; +import androidx.annotation.Nullable; import com.annimon.stream.Stream; import com.fastaccess.R; diff --git a/app/src/main/java/com/fastaccess/data/dao/types/ReviewStateType.java b/app/src/main/java/com/fastaccess/data/dao/types/ReviewStateType.java index da91a590..58b1a451 100644 --- a/app/src/main/java/com/fastaccess/data/dao/types/ReviewStateType.java +++ b/app/src/main/java/com/fastaccess/data/dao/types/ReviewStateType.java @@ -1,9 +1,9 @@ package com.fastaccess.data.dao.types; -import android.support.annotation.DrawableRes; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.annotation.StringRes; +import androidx.annotation.DrawableRes; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.annotation.StringRes; import com.annimon.stream.Stream; import com.fastaccess.R; diff --git a/app/src/main/java/com/fastaccess/data/dao/types/StatusStateType.java b/app/src/main/java/com/fastaccess/data/dao/types/StatusStateType.java index ae02006b..0d104c1d 100644 --- a/app/src/main/java/com/fastaccess/data/dao/types/StatusStateType.java +++ b/app/src/main/java/com/fastaccess/data/dao/types/StatusStateType.java @@ -1,8 +1,8 @@ package com.fastaccess.data.dao.types; -import android.support.annotation.DrawableRes; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.DrawableRes; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import com.annimon.stream.Stream; import com.fastaccess.R; diff --git a/app/src/main/java/com/fastaccess/data/dao/wiki/FirebaseWikiConfigModel.kt b/app/src/main/java/com/fastaccess/data/dao/wiki/FirebaseWikiConfigModel.kt new file mode 100644 index 00000000..25f2120c --- /dev/null +++ b/app/src/main/java/com/fastaccess/data/dao/wiki/FirebaseWikiConfigModel.kt @@ -0,0 +1,31 @@ +package com.fastaccess.data.dao.wiki + +data class FirebaseWikiConfigModel( + var sideBarListTitle: String = "a", + var sideBarUl: String = ".js-wiki-sidebar-toggle-display > ul", + var sideBarList: String = "li", + var wikiWrapper: String = "#wiki-wrapper", + var wikiHeader: String = ".gh-header > h1.gh-header-title", + var sideBarListLink: String = "href", + var wikiBody: String = "#wiki-body", + var wikiSubHeader: String = ".gh-header-meta", + var wikiContent: String = "#wiki-content" +) { + companion object { + fun map(map: HashMap?): FirebaseWikiConfigModel { + val model = FirebaseWikiConfigModel() + map?.let { + model.sideBarListTitle = it.getOrElse("sideBarListTitle") { model.sideBarListTitle } + model.sideBarUl = it.getOrElse("sideBarUl") { model.sideBarUl } + model.sideBarList = it.getOrElse("sideBarList") { model.sideBarList } + model.wikiWrapper = it.getOrElse("wikiWrapper") { model.wikiWrapper } + model.wikiHeader = it.getOrElse("wikiHeader") { model.wikiHeader } + model.sideBarListLink = it.getOrElse("sideBarListLink") { model.sideBarListLink } + model.wikiBody = it.getOrElse("wikiBody") { model.wikiBody } + model.wikiSubHeader = it.getOrElse("wikiSubHeader") { model.wikiSubHeader } + model.wikiContent = it.getOrElse("wikiContent") { model.wikiContent } + } + return model + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/fastaccess/data/dao/wiki/WikiContentModel.kt b/app/src/main/java/com/fastaccess/data/dao/wiki/WikiContentModel.kt index a8cc9162..0de0a421 100644 --- a/app/src/main/java/com/fastaccess/data/dao/wiki/WikiContentModel.kt +++ b/app/src/main/java/com/fastaccess/data/dao/wiki/WikiContentModel.kt @@ -1,31 +1,30 @@ package com.fastaccess.data.dao.wiki import android.os.Parcel -import android.os.Parcelable +import com.fastaccess.helper.KotlinParcelable +import com.fastaccess.helper.parcelableCreator /** * Created by Kosh on 13 Jun 2017, 8:06 PM */ -data class WikiContentModel(val content: String? = null, private val footer: String? = null, - val sidebar: ArrayList) : Parcelable { +data class WikiContentModel( + val content: String? = null, + private val footer: String? = null, + val sidebar: List +) : KotlinParcelable { companion object { - @JvmField val CREATOR: Parcelable.Creator = object : Parcelable.Creator { - override fun createFromParcel(source: Parcel): WikiContentModel = WikiContentModel(source) - override fun newArray(size: Int): Array = arrayOfNulls(size) - } + @JvmField val CREATOR = parcelableCreator(::WikiContentModel) } constructor(source: Parcel) : this( - source.readString(), - source.readString(), - source.createTypedArrayList(WikiSideBarModel.CREATOR) + source.readString(), + source.readString(), + source.createTypedArrayList(WikiSideBarModel.CREATOR) ?: arrayListOf() ) - override fun describeContents() = 0 - - override fun writeToParcel(dest: Parcel, flags: Int) { - dest.writeString(content) - dest.writeString(footer) - dest.writeTypedList(sidebar) + override fun writeToParcel(dest: Parcel, flags: Int) = with(dest) { + writeString(content) + writeString(footer) + writeTypedList(sidebar) } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/fastaccess/data/dao/wiki/WikiSideBarModel.kt b/app/src/main/java/com/fastaccess/data/dao/wiki/WikiSideBarModel.kt index 539ba61e..6b0780dd 100644 --- a/app/src/main/java/com/fastaccess/data/dao/wiki/WikiSideBarModel.kt +++ b/app/src/main/java/com/fastaccess/data/dao/wiki/WikiSideBarModel.kt @@ -1,28 +1,27 @@ package com.fastaccess.data.dao.wiki import android.os.Parcel -import android.os.Parcelable +import com.fastaccess.helper.KotlinParcelable +import com.fastaccess.helper.parcelableCreator /** * Created by Kosh on 13 Jun 2017, 8:03 PM */ -data class WikiSideBarModel(val title: String? = null, val link: String? = null) : Parcelable { +data class WikiSideBarModel( + val title: String? = null, + val link: String? = null +) : KotlinParcelable { companion object { - @JvmField val CREATOR: Parcelable.Creator = object : Parcelable.Creator { - override fun createFromParcel(source: Parcel): WikiSideBarModel = WikiSideBarModel(source) - override fun newArray(size: Int): Array = arrayOfNulls(size) - } + @JvmField val CREATOR = parcelableCreator(::WikiSideBarModel) } constructor(source: Parcel) : this( - source.readString(), - source.readString() + source.readString(), + source.readString() ) - override fun describeContents() = 0 - - override fun writeToParcel(dest: Parcel, flags: Int) { - dest.writeString(title) - dest.writeString(link) + override fun writeToParcel(dest: Parcel, flags: Int) = with(dest) { + writeString(title) + writeString(link) } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/fastaccess/data/service/ContentService.kt b/app/src/main/java/com/fastaccess/data/service/ContentService.kt index 5f686406..2348e9e5 100644 --- a/app/src/main/java/com/fastaccess/data/service/ContentService.kt +++ b/app/src/main/java/com/fastaccess/data/service/ContentService.kt @@ -25,6 +25,6 @@ interface ContentService { @Query("branch") branch: String, @Body body: CommitRequestModel): Observable - @GET("api/last-message.json") + @GET("api/v2/status.json") fun checkStatus(): Observable } \ No newline at end of file diff --git a/app/src/main/java/com/fastaccess/data/service/GistService.java b/app/src/main/java/com/fastaccess/data/service/GistService.java index 77745d6b..10a19ff8 100644 --- a/app/src/main/java/com/fastaccess/data/service/GistService.java +++ b/app/src/main/java/com/fastaccess/data/service/GistService.java @@ -1,6 +1,6 @@ package com.fastaccess.data.service; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import com.fastaccess.data.dao.CommentRequestModel; import com.fastaccess.data.dao.CreateGistModel; @@ -73,4 +73,6 @@ public interface GistService { @POST("gists/{gist_id}/forks") Observable> forkGist(@Path("gist_id") @NonNull String gistId); + @GET("/gists/starred") Observable> getStarredGists(@Query("page") int page); + } diff --git a/app/src/main/java/com/fastaccess/data/service/ImgurService.java b/app/src/main/java/com/fastaccess/data/service/ImgurService.java index 74687698..834f7109 100644 --- a/app/src/main/java/com/fastaccess/data/service/ImgurService.java +++ b/app/src/main/java/com/fastaccess/data/service/ImgurService.java @@ -1,6 +1,6 @@ package com.fastaccess.data.service; -import android.support.annotation.Nullable; +import androidx.annotation.Nullable; import com.fastaccess.data.dao.ImgurReponseModel; diff --git a/app/src/main/java/com/fastaccess/data/service/IssueService.java b/app/src/main/java/com/fastaccess/data/service/IssueService.java index 3b861c6e..63496cbb 100644 --- a/app/src/main/java/com/fastaccess/data/service/IssueService.java +++ b/app/src/main/java/com/fastaccess/data/service/IssueService.java @@ -1,7 +1,7 @@ package com.fastaccess.data.service; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import com.fastaccess.data.dao.AssigneesRequestModel; import com.fastaccess.data.dao.CommentRequestModel; @@ -9,6 +9,7 @@ import com.fastaccess.data.dao.CreateIssueModel; import com.fastaccess.data.dao.IssueRequestModel; import com.fastaccess.data.dao.IssuesPageable; import com.fastaccess.data.dao.LabelModel; +import com.fastaccess.data.dao.LockIssuePrModel; import com.fastaccess.data.dao.Pageable; import com.fastaccess.data.dao.model.Comment; import com.fastaccess.data.dao.model.Issue; @@ -68,9 +69,10 @@ public interface IssueService { @Path("number") int number, @Body IssueRequestModel issue); - @Headers("Content-Length: 0") + @Headers("Accept: application/vnd.github.sailor-v-preview+json") @PUT("repos/{owner}/{repo}/issues/{number}/lock") - Observable> lockIssue(@Path("owner") String owner, @Path("repo") String repo, @Path("number") int number); + Observable> lockIssue(@Body LockIssuePrModel body, @Path("owner") String owner, + @Path("repo") String repo, @Path("number") int number); @DELETE("repos/{owner}/{repo}/issues/{number}/lock") Observable> unlockIssue(@Path("owner") String owner, @Path("repo") String repo, @Path("number") int number); diff --git a/app/src/main/java/com/fastaccess/data/service/LoginRestService.java b/app/src/main/java/com/fastaccess/data/service/LoginRestService.java index e9049bdd..ffbaee3b 100644 --- a/app/src/main/java/com/fastaccess/data/service/LoginRestService.java +++ b/app/src/main/java/com/fastaccess/data/service/LoginRestService.java @@ -1,6 +1,6 @@ package com.fastaccess.data.service; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import com.fastaccess.data.dao.AccessTokenModel; import com.fastaccess.data.dao.AuthModel; diff --git a/app/src/main/java/com/fastaccess/data/service/NotificationService.java b/app/src/main/java/com/fastaccess/data/service/NotificationService.java index f32ed1a0..04ad2502 100644 --- a/app/src/main/java/com/fastaccess/data/service/NotificationService.java +++ b/app/src/main/java/com/fastaccess/data/service/NotificationService.java @@ -1,8 +1,8 @@ package com.fastaccess.data.service; -import android.support.annotation.NonNull; -import android.support.annotation.StringDef; +import androidx.annotation.NonNull; +import androidx.annotation.StringDef; import com.fastaccess.data.dao.NotificationSubscriptionBodyModel; import com.fastaccess.data.dao.Pageable; diff --git a/app/src/main/java/com/fastaccess/data/service/OrganizationService.java b/app/src/main/java/com/fastaccess/data/service/OrganizationService.java index f4b64f10..b5e2d2b9 100644 --- a/app/src/main/java/com/fastaccess/data/service/OrganizationService.java +++ b/app/src/main/java/com/fastaccess/data/service/OrganizationService.java @@ -1,6 +1,6 @@ package com.fastaccess.data.service; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import com.fastaccess.data.dao.Pageable; import com.fastaccess.data.dao.TeamsModel; diff --git a/app/src/main/java/com/fastaccess/data/service/PullRequestService.java b/app/src/main/java/com/fastaccess/data/service/PullRequestService.java index 999c82b8..91963af6 100644 --- a/app/src/main/java/com/fastaccess/data/service/PullRequestService.java +++ b/app/src/main/java/com/fastaccess/data/service/PullRequestService.java @@ -1,6 +1,6 @@ package com.fastaccess.data.service; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import com.fastaccess.data.dao.AssigneesRequestModel; import com.fastaccess.data.dao.CommitFileModel; diff --git a/app/src/main/java/com/fastaccess/data/service/ReactionsService.java b/app/src/main/java/com/fastaccess/data/service/ReactionsService.java index 06a4a6ea..0ee4e8ce 100644 --- a/app/src/main/java/com/fastaccess/data/service/ReactionsService.java +++ b/app/src/main/java/com/fastaccess/data/service/ReactionsService.java @@ -1,6 +1,6 @@ package com.fastaccess.data.service; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import com.fastaccess.data.dao.Pageable; import com.fastaccess.data.dao.PostReactionModel; diff --git a/app/src/main/java/com/fastaccess/data/service/RepoService.java b/app/src/main/java/com/fastaccess/data/service/RepoService.java index 92c0054b..76daeefd 100644 --- a/app/src/main/java/com/fastaccess/data/service/RepoService.java +++ b/app/src/main/java/com/fastaccess/data/service/RepoService.java @@ -1,6 +1,6 @@ package com.fastaccess.data.service; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import com.fastaccess.data.dao.BranchesModel; import com.fastaccess.data.dao.CommentRequestModel; diff --git a/app/src/main/java/com/fastaccess/data/service/ReviewService.java b/app/src/main/java/com/fastaccess/data/service/ReviewService.java index 8d947c36..875dc42a 100644 --- a/app/src/main/java/com/fastaccess/data/service/ReviewService.java +++ b/app/src/main/java/com/fastaccess/data/service/ReviewService.java @@ -1,6 +1,6 @@ package com.fastaccess.data.service; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import com.fastaccess.data.dao.CommentRequestModel; import com.fastaccess.data.dao.Pageable; diff --git a/app/src/main/java/com/fastaccess/data/service/ScrapService.kt b/app/src/main/java/com/fastaccess/data/service/ScrapService.kt index de9d15f2..c75711ce 100644 --- a/app/src/main/java/com/fastaccess/data/service/ScrapService.kt +++ b/app/src/main/java/com/fastaccess/data/service/ScrapService.kt @@ -2,6 +2,7 @@ package com.fastaccess.data.service import io.reactivex.Observable +import retrofit2.Response import retrofit2.http.GET import retrofit2.http.Path import retrofit2.http.Query @@ -12,7 +13,7 @@ import retrofit2.http.Query interface ScrapService { - @GET("{lan}") fun getTrending(@Path("lan") lan: String?, @Query("since") since: String?): Observable + @GET("{lan}") fun getTrending(@Path("lan") lan: String?, @Query("since") since: String?): Observable> @GET("{path}") fun getWiki(@Path(value = "path", encoded = true) path: String?): Observable } diff --git a/app/src/main/java/com/fastaccess/data/service/UserRestService.java b/app/src/main/java/com/fastaccess/data/service/UserRestService.java index 520d5806..b0c70988 100644 --- a/app/src/main/java/com/fastaccess/data/service/UserRestService.java +++ b/app/src/main/java/com/fastaccess/data/service/UserRestService.java @@ -1,6 +1,6 @@ package com.fastaccess.data.service; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import com.fastaccess.data.dao.Pageable; import com.fastaccess.data.dao.model.Event; @@ -14,6 +14,7 @@ import io.reactivex.Observable; import retrofit2.Response; import retrofit2.http.DELETE; import retrofit2.http.GET; +import retrofit2.http.Headers; import retrofit2.http.PUT; import retrofit2.http.Path; import retrofit2.http.Query; @@ -66,4 +67,16 @@ public interface UserRestService { Observable> unfollowUser(@Path("username") @NonNull String username); @GET Observable getContributions(@Url String url); + + @GET("user/blocks/{username}") + @Headers("Accept: application/vnd.github.giant-sentry-fist-preview+json") + Observable> isUserBlocked(@Path("username") @NonNull String username); + + @PUT("user/blocks/{username}") + @Headers("Accept: application/vnd.github.giant-sentry-fist-preview+json") + Observable> blockUser(@Path("username") @NonNull String username); + + @DELETE("user/blocks/{username}") + @Headers("Accept: application/vnd.github.giant-sentry-fist-preview+json") + Observable> unBlockUser(@Path("username") @NonNull String username); } diff --git a/app/src/main/java/com/fastaccess/helper/ActivityHelper.java b/app/src/main/java/com/fastaccess/helper/ActivityHelper.java index 352051a3..dbea0d11 100644 --- a/app/src/main/java/com/fastaccess/helper/ActivityHelper.java +++ b/app/src/main/java/com/fastaccess/helper/ActivityHelper.java @@ -12,20 +12,22 @@ import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.net.Uri; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.customtabs.CustomTabsIntent; -import android.support.v4.app.ActivityCompat; -import android.support.v4.app.ActivityOptionsCompat; -import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentManager; -import android.support.v4.app.ShareCompat; -import android.support.v4.util.Pair; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.browser.customtabs.CustomTabsIntent; +import androidx.core.app.ActivityCompat; +import androidx.core.app.ActivityOptionsCompat; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.core.app.ShareCompat; +import androidx.core.util.Pair; import android.view.View; import android.widget.Toast; import com.fastaccess.App; import com.fastaccess.R; +import com.fastaccess.ui.modules.main.drawer.AccountDrawerFragment; +import com.fastaccess.ui.modules.main.drawer.MainDrawerFragment; import com.fastaccess.ui.modules.parser.LinksParserActivity; import java.util.ArrayList; @@ -175,7 +177,8 @@ public class ActivityHelper { List fragments = manager.getFragments(); if (fragments != null && !fragments.isEmpty()) { for (Fragment fragment : fragments) { - if (fragment != null && fragment.isVisible()) { + if (fragment != null && fragment.isVisible() && + !(fragment instanceof MainDrawerFragment || fragment instanceof AccountDrawerFragment)) { return fragment; } } diff --git a/app/src/main/java/com/fastaccess/helper/AnimHelper.java b/app/src/main/java/com/fastaccess/helper/AnimHelper.java index 2faa8d41..631b381b 100644 --- a/app/src/main/java/com/fastaccess/helper/AnimHelper.java +++ b/app/src/main/java/com/fastaccess/helper/AnimHelper.java @@ -5,14 +5,14 @@ import android.animation.AnimatorListenerAdapter; import android.animation.ObjectAnimator; import android.app.Dialog; import android.graphics.Rect; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.annotation.UiThread; -import android.support.design.widget.FloatingActionButton; -import android.support.v4.app.DialogFragment; -import android.support.v4.view.ViewCompat; -import android.support.v4.view.animation.FastOutLinearInInterpolator; -import android.support.v4.view.animation.LinearOutSlowInInterpolator; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.annotation.UiThread; +import com.google.android.material.floatingactionbutton.FloatingActionButton; +import androidx.fragment.app.DialogFragment; +import androidx.core.view.ViewCompat; +import androidx.interpolator.view.animation.FastOutLinearInInterpolator; +import androidx.interpolator.view.animation.LinearOutSlowInInterpolator; import android.view.View; import android.view.ViewAnimationUtils; import android.view.ViewPropertyAnimator; diff --git a/app/src/main/java/com/fastaccess/helper/AppHelper.java b/app/src/main/java/com/fastaccess/helper/AppHelper.java index 3cffe09c..5c593a7e 100644 --- a/app/src/main/java/com/fastaccess/helper/AppHelper.java +++ b/app/src/main/java/com/fastaccess/helper/AppHelper.java @@ -11,10 +11,10 @@ import android.content.res.Resources; import android.net.ConnectivityManager; import android.os.Build; import android.provider.Settings; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentManager; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; import android.view.View; import android.view.inputmethod.InputMethodManager; diff --git a/app/src/main/java/com/fastaccess/helper/BundleConstant.java b/app/src/main/java/com/fastaccess/helper/BundleConstant.java index 2360472e..bd2ddc3d 100644 --- a/app/src/main/java/com/fastaccess/helper/BundleConstant.java +++ b/app/src/main/java/com/fastaccess/helper/BundleConstant.java @@ -1,6 +1,6 @@ package com.fastaccess.helper; -import android.support.annotation.StringDef; +import androidx.annotation.StringDef; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; diff --git a/app/src/main/java/com/fastaccess/helper/Bundler.java b/app/src/main/java/com/fastaccess/helper/Bundler.java index 0ceb5bb4..216352fc 100644 --- a/app/src/main/java/com/fastaccess/helper/Bundler.java +++ b/app/src/main/java/com/fastaccess/helper/Bundler.java @@ -4,7 +4,7 @@ import android.os.Bundle; import android.os.IBinder; import android.os.Parcel; import android.os.Parcelable; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import android.util.SparseArray; import java.io.Serializable; diff --git a/app/src/main/java/com/fastaccess/helper/FileHelper.java b/app/src/main/java/com/fastaccess/helper/FileHelper.java index 2b281396..d59b9a6c 100644 --- a/app/src/main/java/com/fastaccess/helper/FileHelper.java +++ b/app/src/main/java/com/fastaccess/helper/FileHelper.java @@ -8,8 +8,8 @@ import android.net.Uri; import android.os.Environment; import android.provider.DocumentsContract; import android.provider.MediaStore; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import com.fastaccess.R; import com.fastaccess.data.dao.NotificationSoundModel; diff --git a/app/src/main/java/com/fastaccess/helper/InputHelper.java b/app/src/main/java/com/fastaccess/helper/InputHelper.java index 694aa350..51f9171a 100644 --- a/app/src/main/java/com/fastaccess/helper/InputHelper.java +++ b/app/src/main/java/com/fastaccess/helper/InputHelper.java @@ -1,8 +1,8 @@ package com.fastaccess.helper; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.design.widget.TextInputLayout; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import com.google.android.material.textfield.TextInputLayout; import android.text.TextUtils; import android.widget.EditText; import android.widget.TextView; @@ -67,13 +67,12 @@ public class InputHelper { public static long toLong(@NonNull String text) { if (!isEmpty(text)) { try { - return Long.valueOf(text.replace(".", "").replaceAll(",", "")); + return Long.valueOf(text.replaceAll("[^0-9]", "")); } catch (NumberFormatException ignored) {} } return 0; } - public static int getSafeIntId(long id) { return id > Integer.MAX_VALUE ? (int) (id - Integer.MAX_VALUE) : (int) id; } diff --git a/app/src/main/java/com/fastaccess/helper/Logger.java b/app/src/main/java/com/fastaccess/helper/Logger.java index f00ea119..64953a7c 100644 --- a/app/src/main/java/com/fastaccess/helper/Logger.java +++ b/app/src/main/java/com/fastaccess/helper/Logger.java @@ -1,7 +1,7 @@ package com.fastaccess.helper; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.util.Log; import com.fastaccess.BuildConfig; diff --git a/app/src/main/java/com/fastaccess/helper/ObjectsCompat.java b/app/src/main/java/com/fastaccess/helper/ObjectsCompat.java index 34f709f2..f5c56b6c 100644 --- a/app/src/main/java/com/fastaccess/helper/ObjectsCompat.java +++ b/app/src/main/java/com/fastaccess/helper/ObjectsCompat.java @@ -1,6 +1,6 @@ package com.fastaccess.helper; -import android.support.annotation.Nullable; +import androidx.annotation.Nullable; /** * Created by Kosh on 18 Apr 2017, 10:57 PM diff --git a/app/src/main/java/com/fastaccess/helper/ParcelableHelper.kt b/app/src/main/java/com/fastaccess/helper/ParcelableHelper.kt new file mode 100644 index 00000000..1cc7c582 --- /dev/null +++ b/app/src/main/java/com/fastaccess/helper/ParcelableHelper.kt @@ -0,0 +1,18 @@ +package com.fastaccess.helper + +import android.os.Parcel +import android.os.Parcelable + +interface KotlinParcelable : Parcelable { + override fun describeContents() = 0 + override fun writeToParcel(dest: Parcel, flags: Int) +} + +inline fun parcelableCreator(crossinline create: (Parcel) -> T) = object : Parcelable.Creator { + override fun createFromParcel(source: Parcel) = create(source) + override fun newArray(size: Int) = arrayOfNulls(size) +} + +fun Parcel.readBooleanCompat() = readInt() != 0 + +fun Parcel.writeBooleanCompat(value: Boolean) = writeInt(if (value) 1 else 0) diff --git a/app/src/main/java/com/fastaccess/helper/ParseDateFormat.java b/app/src/main/java/com/fastaccess/helper/ParseDateFormat.java index eba702cc..c3587cf2 100644 --- a/app/src/main/java/com/fastaccess/helper/ParseDateFormat.java +++ b/app/src/main/java/com/fastaccess/helper/ParseDateFormat.java @@ -1,7 +1,7 @@ package com.fastaccess.helper; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.text.format.DateUtils; import java.text.DateFormat; diff --git a/app/src/main/java/com/fastaccess/helper/PrefGetter.java b/app/src/main/java/com/fastaccess/helper/PrefGetter.java index f36c048c..af09693d 100644 --- a/app/src/main/java/com/fastaccess/helper/PrefGetter.java +++ b/app/src/main/java/com/fastaccess/helper/PrefGetter.java @@ -4,9 +4,9 @@ import android.content.Context; import android.content.res.Resources; import android.media.RingtoneManager; import android.net.Uri; -import android.support.annotation.IntDef; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.IntDef; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import com.fastaccess.App; import com.fastaccess.BuildConfig; @@ -86,6 +86,7 @@ public class PrefGetter { private static final String MARKDOWNDOWN_GUIDE = "markdowndown_guide"; private static final String HOME_BUTTON_GUIDE = "home_button_guide"; private static final String NAV_DRAWER_GUIDE = "nav_drawer_guide"; + private static final String ACC_NAV_DRAWER_GUIDE = "acc_nav_drawer_guide"; private static final String FAB_LONG_PRESS_REPO_GUIDE = "fab_long_press_repo_guide"; private static final String WRAP_CODE = "wrap_code"; private static final String OTP_CODE = "otp_code"; @@ -197,6 +198,12 @@ public class PrefGetter { return isShowed; } + public static boolean isAccountNavDrawerHintShowed() { + boolean isShowed = PrefHelper.getBoolean(ACC_NAV_DRAWER_GUIDE); + PrefHelper.set(ACC_NAV_DRAWER_GUIDE, true); + return isShowed; + } + public static boolean isRepoFabHintShowed() { boolean isShowed = PrefHelper.getBoolean(FAB_LONG_PRESS_REPO_GUIDE); PrefHelper.set(FAB_LONG_PRESS_REPO_GUIDE, true); diff --git a/app/src/main/java/com/fastaccess/helper/PrefHelper.java b/app/src/main/java/com/fastaccess/helper/PrefHelper.java index 74eadf20..10fee73d 100644 --- a/app/src/main/java/com/fastaccess/helper/PrefHelper.java +++ b/app/src/main/java/com/fastaccess/helper/PrefHelper.java @@ -3,8 +3,8 @@ package com.fastaccess.helper; import android.annotation.SuppressLint; import android.content.SharedPreferences; import android.preference.PreferenceManager; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import com.fastaccess.App; diff --git a/app/src/main/java/com/fastaccess/helper/RxHelper.java b/app/src/main/java/com/fastaccess/helper/RxHelper.java index 1cd29bea..698c1883 100644 --- a/app/src/main/java/com/fastaccess/helper/RxHelper.java +++ b/app/src/main/java/com/fastaccess/helper/RxHelper.java @@ -1,6 +1,6 @@ package com.fastaccess.helper; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import io.reactivex.Observable; import io.reactivex.Single; diff --git a/app/src/main/java/com/fastaccess/helper/ViewHelper.java b/app/src/main/java/com/fastaccess/helper/ViewHelper.java index eabedf76..2861d625 100644 --- a/app/src/main/java/com/fastaccess/helper/ViewHelper.java +++ b/app/src/main/java/com/fastaccess/helper/ViewHelper.java @@ -14,10 +14,10 @@ import android.graphics.drawable.RippleDrawable; import android.graphics.drawable.ShapeDrawable; import android.graphics.drawable.StateListDrawable; import android.graphics.drawable.shapes.RoundRectShape; -import android.support.annotation.ColorInt; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.design.widget.TabLayout; +import androidx.annotation.ColorInt; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import com.google.android.material.tabs.TabLayout; import android.text.Layout; import android.util.TypedValue; import android.view.View; diff --git a/app/src/main/java/com/fastaccess/provider/colors/ColorsProvider.java b/app/src/main/java/com/fastaccess/provider/colors/ColorsProvider.java index f21b1672..b11e0c19 100644 --- a/app/src/main/java/com/fastaccess/provider/colors/ColorsProvider.java +++ b/app/src/main/java/com/fastaccess/provider/colors/ColorsProvider.java @@ -1,10 +1,11 @@ package com.fastaccess.provider.colors; +import android.annotation.SuppressLint; import android.content.Context; import android.graphics.Color; -import android.support.annotation.ColorInt; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.ColorInt; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import com.annimon.stream.Collectors; import com.annimon.stream.Stream; @@ -39,7 +40,7 @@ public class ColorsProvider { private static Map colors = new LinkedHashMap<>(); - public static void load() { + @SuppressLint("CheckResult") public static void load() { if (colors.isEmpty()) { RxHelper.safeObservable(Observable .create(observableEmitter -> { @@ -68,7 +69,7 @@ public class ColorsProvider { .filter(value -> value != null && !InputHelper.isEmpty(value.getKey())) .map(Map.Entry::getKey) .collect(Collectors.toCollection(ArrayList::new))); - lang.add(0, "All Languages"); + lang.add(0, "All"); lang.addAll(1, POPULAR_LANG); return lang; } diff --git a/app/src/main/java/com/fastaccess/provider/fabric/FabricProvider.kt b/app/src/main/java/com/fastaccess/provider/fabric/FabricProvider.kt index fc57ba4b..5e5faa94 100644 --- a/app/src/main/java/com/fastaccess/provider/fabric/FabricProvider.kt +++ b/app/src/main/java/com/fastaccess/provider/fabric/FabricProvider.kt @@ -18,18 +18,20 @@ object FabricProvider { fun initFabric(context: Context) { val fabric = Fabric.Builder(context) - .kits(Crashlytics.Builder() - .core(CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build()) - .build()) - .debuggable(BuildConfig.DEBUG) - .build() + .kits( + Crashlytics.Builder() + .core(CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build()) + .build() + ) + .debuggable(BuildConfig.DEBUG) + .build() Fabric.with(fabric) } - fun logPurchase(productKey: String, price: Long? = null, priceText: String? = null) { + fun logPurchase(productKey: String?, price: Long? = null, priceText: String? = null) { val purchaseEvent = PurchaseEvent() - .putItemName(productKey) - .putSuccess(true) + .putItemName(productKey) + .putSuccess(true) priceText?.let { purchaseEvent.putItemType(priceText) diff --git a/app/src/main/java/com/fastaccess/provider/fcm/PushNotificationService.java b/app/src/main/java/com/fastaccess/provider/fcm/PushNotificationService.java index 64a3d8d8..b6dcfd93 100644 --- a/app/src/main/java/com/fastaccess/provider/fcm/PushNotificationService.java +++ b/app/src/main/java/com/fastaccess/provider/fcm/PushNotificationService.java @@ -4,7 +4,7 @@ import android.app.NotificationManager; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; -import android.support.v4.app.NotificationCompat; +import androidx.core.app.NotificationCompat; import com.fastaccess.R; import com.fastaccess.data.dao.model.FastHubNotification; diff --git a/app/src/main/java/com/fastaccess/provider/gson/ToGsonProvider.java b/app/src/main/java/com/fastaccess/provider/gson/ToGsonProvider.java index 5f88e3e5..e3cafe28 100644 --- a/app/src/main/java/com/fastaccess/provider/gson/ToGsonProvider.java +++ b/app/src/main/java/com/fastaccess/provider/gson/ToGsonProvider.java @@ -1,7 +1,7 @@ package com.fastaccess.provider.gson; import android.content.Context; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import com.fastaccess.R; diff --git a/app/src/main/java/com/fastaccess/provider/markdown/MarkDownProvider.java b/app/src/main/java/com/fastaccess/provider/markdown/MarkDownProvider.java index 67d7eec2..b98e6e44 100644 --- a/app/src/main/java/com/fastaccess/provider/markdown/MarkDownProvider.java +++ b/app/src/main/java/com/fastaccess/provider/markdown/MarkDownProvider.java @@ -1,7 +1,7 @@ package com.fastaccess.provider.markdown; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.text.Html; import android.view.ViewTreeObserver; import android.webkit.MimeTypeMap; @@ -41,7 +41,8 @@ public class MarkDownProvider { }; private static final String[] ARCHIVE_EXTENSIONS = { - ".zip", ".7z", ".rar", ".tar.gz", ".tgz", ".tar.Z", ".tar.bz2", ".tbz2", ".tar.lzma", ".tlz", ".apk", ".jar", ".dmg", ".pdf", ".ico" + ".zip", ".7z", ".rar", ".tar.gz", ".tgz", ".tar.Z", ".tar.bz2", ".tbz2", ".tar.lzma", ".tlz", ".apk", ".jar", + ".dmg", ".pdf", ".ico", ".docx", ".doc", ".xlsx", ".hwp", ".pptx", ".show", ".mp3", ".ogg", ".ipynb" }; private MarkDownProvider() {} diff --git a/app/src/main/java/com/fastaccess/provider/rest/ImgurProvider.java b/app/src/main/java/com/fastaccess/provider/rest/ImgurProvider.java index cfabe111..ce68f47b 100644 --- a/app/src/main/java/com/fastaccess/provider/rest/ImgurProvider.java +++ b/app/src/main/java/com/fastaccess/provider/rest/ImgurProvider.java @@ -1,6 +1,6 @@ package com.fastaccess.provider.rest; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import com.fastaccess.BuildConfig; import com.fastaccess.data.service.ImgurService; diff --git a/app/src/main/java/com/fastaccess/provider/rest/LoginProvider.java b/app/src/main/java/com/fastaccess/provider/rest/LoginProvider.java index 383825f1..af315679 100644 --- a/app/src/main/java/com/fastaccess/provider/rest/LoginProvider.java +++ b/app/src/main/java/com/fastaccess/provider/rest/LoginProvider.java @@ -1,7 +1,7 @@ package com.fastaccess.provider.rest; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import com.fastaccess.BuildConfig; import com.fastaccess.data.service.LoginRestService; diff --git a/app/src/main/java/com/fastaccess/provider/rest/RepoQueryProvider.java b/app/src/main/java/com/fastaccess/provider/rest/RepoQueryProvider.java index 65adb2ae..95566852 100644 --- a/app/src/main/java/com/fastaccess/provider/rest/RepoQueryProvider.java +++ b/app/src/main/java/com/fastaccess/provider/rest/RepoQueryProvider.java @@ -1,6 +1,6 @@ package com.fastaccess.provider.rest; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import com.fastaccess.data.dao.types.IssueState; diff --git a/app/src/main/java/com/fastaccess/provider/rest/RestProvider.java b/app/src/main/java/com/fastaccess/provider/rest/RestProvider.java index e66a5df0..a3e6bd66 100644 --- a/app/src/main/java/com/fastaccess/provider/rest/RestProvider.java +++ b/app/src/main/java/com/fastaccess/provider/rest/RestProvider.java @@ -4,11 +4,9 @@ import android.app.DownloadManager; import android.content.Context; import android.net.Uri; import android.os.Environment; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.widget.Toast; +import android.text.TextUtils; -import com.fastaccess.App; +import com.crashlytics.android.Crashlytics; import com.fastaccess.BuildConfig; import com.fastaccess.R; import com.fastaccess.data.dao.GitHubErrorResponse; @@ -40,6 +38,8 @@ import com.google.gson.GsonBuilder; import java.io.File; import java.lang.reflect.Modifier; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import io.reactivex.Observable; import okhttp3.OkHttpClient; import okhttp3.ResponseBody; @@ -47,6 +47,7 @@ import okhttp3.logging.HttpLoggingInterceptor; import retrofit2.HttpException; import retrofit2.Retrofit; import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory; +import tech.linjiang.pandora.Pandora; /** * Created by Kosh on 08 Feb 2017, 8:37 PM @@ -75,6 +76,7 @@ public class RestProvider { client.addInterceptor(new AuthenticationInterceptor()); client.addInterceptor(new PaginationInterceptor()); client.addInterceptor(new ContentTypeInterceptor()); + client.addInterceptor(Pandora.get().getInterceptor()); okHttpClient = client.build(); } return okHttpClient; @@ -90,31 +92,28 @@ public class RestProvider { } public static void downloadFile(@NonNull Context context, @NonNull String url) { - if (InputHelper.isEmpty(url)) return; - boolean isEnterprise = LinkParserHelper.isEnterprise(url); - Uri uri = Uri.parse(url); - DownloadManager downloadManager = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE); - DownloadManager.Request request = new DownloadManager.Request(uri); - if (isEnterprise) { - String authToken = PrefGetter.getEnterpriseToken(); - request.addRequestHeader("Authorization", authToken.startsWith("Basic") ? authToken : "token " + authToken); - } - File direct = new File(Environment.getExternalStorageDirectory() + File.separator + context.getString(R.string.app_name)); - if (!direct.isDirectory() || !direct.exists()) { - boolean isCreated = direct.mkdirs(); - if (!isCreated) { - Toast.makeText(App.getInstance(), "Unable to create directory to download file", Toast.LENGTH_SHORT).show(); - return; + try { + if (InputHelper.isEmpty(url)) return; + boolean isEnterprise = LinkParserHelper.isEnterprise(url); + Uri uri = Uri.parse(url); + DownloadManager downloadManager = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE); + DownloadManager.Request request = new DownloadManager.Request(uri); + String authToken = isEnterprise ? PrefGetter.getEnterpriseToken() : PrefGetter.getToken(); + if (!TextUtils.isEmpty(authToken)) { + request.addRequestHeader("Authorization", authToken.startsWith("Basic") ? authToken : "token " + authToken); } - } - String fileName = new File(url).getName(); - request.setDestinationInExternalPublicDir(context.getString(R.string.app_name), fileName); - request.setTitle(fileName); - request.setDescription(context.getString(R.string.downloading_file)); - request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE | DownloadManager.Request.NETWORK_WIFI); - request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); - if (downloadManager != null) { - downloadManager.enqueue(request); + String fileName = new File(url).getName(); + request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, fileName); + request.setTitle(fileName); + request.setDescription(context.getString(R.string.downloading_file)); + request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE | DownloadManager.Request.NETWORK_WIFI); + request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); + if (downloadManager != null) { + downloadManager.enqueue(request); + } + } catch (Exception e) { + e.printStackTrace(); + Crashlytics.logException(e); } } @@ -207,7 +206,7 @@ public class RestProvider { @NonNull public static Observable gitHubStatus() { return new Retrofit.Builder() - .baseUrl("https://status.github.com/") + .baseUrl("https://kctbh9vrtdwd.statuspage.io/") .client(provideOkHttpClient()) .addConverterFactory(new GithubResponseConverter(gson)) .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) diff --git a/app/src/main/java/com/fastaccess/provider/rest/converters/GithubResponseConverter.java b/app/src/main/java/com/fastaccess/provider/rest/converters/GithubResponseConverter.java index 630f6e77..ab79636c 100644 --- a/app/src/main/java/com/fastaccess/provider/rest/converters/GithubResponseConverter.java +++ b/app/src/main/java/com/fastaccess/provider/rest/converters/GithubResponseConverter.java @@ -1,6 +1,6 @@ package com.fastaccess.provider.rest.converters; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import com.google.gson.Gson; @@ -39,7 +39,7 @@ public class GithubResponseConverter extends Converter.Factory { return GsonConverterFactory.create(gson).requestBodyConverter(type, parameterAnnotations, methodAnnotations, retrofit); } - private static class StringResponseConverter implements Converter { + public static class StringResponseConverter implements Converter { @Override public String convert(@NonNull ResponseBody value) throws IOException { return value.string(); } diff --git a/app/src/main/java/com/fastaccess/provider/rest/interceptors/AuthenticationInterceptor.kt b/app/src/main/java/com/fastaccess/provider/rest/interceptors/AuthenticationInterceptor.kt index 5e381a54..9f15342e 100644 --- a/app/src/main/java/com/fastaccess/provider/rest/interceptors/AuthenticationInterceptor.kt +++ b/app/src/main/java/com/fastaccess/provider/rest/interceptors/AuthenticationInterceptor.kt @@ -24,14 +24,14 @@ class AuthenticationInterceptor : Interceptor { @Throws(IOException::class) override fun intercept(chain: Interceptor.Chain): Response { val original = chain.request() val builder = original.newBuilder() - val isEnterprise = LinkParserHelper.isEnterprise(original.url().host()) + val isEnterprise = LinkParserHelper.isEnterprise(original.url.host) val authToken = if (token.isNullOrBlank()) if (isEnterprise) PrefGetter.getEnterpriseToken() else PrefGetter.getToken() else token val otpCode = if (otp.isNullOrBlank()) if (isEnterprise) PrefGetter.getEnterpriseOtpCode() else PrefGetter.getOtpCode() else otp if (!authToken.isNullOrBlank()) { - builder.header("Authorization", if (authToken!!.startsWith("Basic")) authToken else "token " + authToken) + builder.header("Authorization", if (authToken.startsWith("Basic")) authToken else "token $authToken") } if (!otpCode.isNullOrBlank()) { - builder.addHeader("X-GitHub-OTP", otpCode!!.trim()) + builder.addHeader("X-GitHub-OTP", otpCode.trim()) } if (!isScrapping) builder.addHeader("User-Agent", "FastHub") val request = builder.build() diff --git a/app/src/main/java/com/fastaccess/provider/rest/interceptors/ContentTypeInterceptor.kt b/app/src/main/java/com/fastaccess/provider/rest/interceptors/ContentTypeInterceptor.kt index 263c378b..83b3d755 100644 --- a/app/src/main/java/com/fastaccess/provider/rest/interceptors/ContentTypeInterceptor.kt +++ b/app/src/main/java/com/fastaccess/provider/rest/interceptors/ContentTypeInterceptor.kt @@ -13,7 +13,7 @@ class ContentTypeInterceptor : Interceptor { return chain.proceed(request.newBuilder() .addHeader("Accept", "application/vnd.github.v3+json") .addHeader("Content-type", "application/vnd.github.v3+json") - .method(request.method(), request.body()) + .method(request.method, request.body) .build()) } } \ No newline at end of file diff --git a/app/src/main/java/com/fastaccess/provider/rest/interceptors/PaginationInterceptor.java b/app/src/main/java/com/fastaccess/provider/rest/interceptors/PaginationInterceptor.java index 4875f0c8..5f5cf54f 100644 --- a/app/src/main/java/com/fastaccess/provider/rest/interceptors/PaginationInterceptor.java +++ b/app/src/main/java/com/fastaccess/provider/rest/interceptors/PaginationInterceptor.java @@ -1,7 +1,7 @@ package com.fastaccess.provider.rest.interceptors; import android.net.Uri; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import com.fastaccess.helper.InputHelper; diff --git a/app/src/main/java/com/fastaccess/provider/rest/jsoup/JsoupProvider.java b/app/src/main/java/com/fastaccess/provider/rest/jsoup/JsoupProvider.java index c95d4be4..09f31844 100644 --- a/app/src/main/java/com/fastaccess/provider/rest/jsoup/JsoupProvider.java +++ b/app/src/main/java/com/fastaccess/provider/rest/jsoup/JsoupProvider.java @@ -1,15 +1,17 @@ package com.fastaccess.provider.rest.jsoup; +import androidx.annotation.NonNull; + import com.fastaccess.BuildConfig; import com.fastaccess.data.service.ScrapService; -import com.fastaccess.provider.rest.converters.GithubResponseConverter; import com.fastaccess.provider.rest.interceptors.AuthenticationInterceptor; -import com.google.gson.Gson; import okhttp3.OkHttpClient; import okhttp3.logging.HttpLoggingInterceptor; import retrofit2.Retrofit; import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory; +import retrofit2.converter.scalars.ScalarsConverterFactory; +import tech.linjiang.pandora.Pandora; /** * Created by Kosh on 02 Jun 2017, 12:47 PM @@ -26,17 +28,18 @@ public class JsoupProvider { client.addInterceptor(new HttpLoggingInterceptor() .setLevel(HttpLoggingInterceptor.Level.BODY)); } + client.addInterceptor(Pandora.get().getInterceptor()); client.addInterceptor(new AuthenticationInterceptor(true)); okHttpClient = client.build(); } return okHttpClient; } - public static ScrapService getTrendingService() { + public static ScrapService getTrendingService(@NonNull String url) { return new Retrofit.Builder() - .baseUrl("https://github.com/trending/") + .baseUrl(url) .client(provideOkHttpClient()) - .addConverterFactory(new GithubResponseConverter(new Gson())) + .addConverterFactory(ScalarsConverterFactory.create()) .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .build() .create(ScrapService.class); @@ -46,7 +49,7 @@ public class JsoupProvider { return new Retrofit.Builder() .baseUrl("https://github.com/") .client(provideOkHttpClient()) - .addConverterFactory(new GithubResponseConverter(new Gson())) + .addConverterFactory(ScalarsConverterFactory.create()) .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .build() .create(ScrapService.class); diff --git a/app/src/main/java/com/fastaccess/provider/rest/loadmore/OnLoadMore.java b/app/src/main/java/com/fastaccess/provider/rest/loadmore/OnLoadMore.java index f0d77da7..654880ec 100644 --- a/app/src/main/java/com/fastaccess/provider/rest/loadmore/OnLoadMore.java +++ b/app/src/main/java/com/fastaccess/provider/rest/loadmore/OnLoadMore.java @@ -1,6 +1,6 @@ package com.fastaccess.provider.rest.loadmore; -import android.support.annotation.Nullable; +import androidx.annotation.Nullable; import com.fastaccess.ui.base.mvp.BaseMvp; import com.fastaccess.ui.widgets.recyclerview.scroll.InfiniteScroll; diff --git a/app/src/main/java/com/fastaccess/provider/scheme/LinkParserHelper.java b/app/src/main/java/com/fastaccess/provider/scheme/LinkParserHelper.java index dedc2b6b..b02bd103 100644 --- a/app/src/main/java/com/fastaccess/provider/scheme/LinkParserHelper.java +++ b/app/src/main/java/com/fastaccess/provider/scheme/LinkParserHelper.java @@ -1,8 +1,8 @@ package com.fastaccess.provider.scheme; import android.net.Uri; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.text.TextUtils; import android.webkit.MimeTypeMap; @@ -21,11 +21,11 @@ import java.util.List; public class LinkParserHelper { public static final String HOST_DEFAULT = "github.com"; + public static final String PROTOCOL_HTTPS = "https"; static final String HOST_GISTS = "gist.github.com"; static final String HOST_GISTS_RAW = "gist.githubusercontent.com"; static final String RAW_AUTHORITY = "raw.githubusercontent.com"; static final String API_AUTHORITY = "api.github.com"; - static final String PROTOCOL_HTTPS = "https"; static final List IGNORED_LIST = Arrays.asList("notifications", "settings", "blog", "explore", "dashboard", "repositories", "logout", "sessions", "site", "security", "contact", "about", "logos", "login", "pricing", ""); diff --git a/app/src/main/java/com/fastaccess/provider/scheme/SchemeParser.java b/app/src/main/java/com/fastaccess/provider/scheme/SchemeParser.java index 31bd6c36..5f1a60a3 100644 --- a/app/src/main/java/com/fastaccess/provider/scheme/SchemeParser.java +++ b/app/src/main/java/com/fastaccess/provider/scheme/SchemeParser.java @@ -7,8 +7,8 @@ import android.content.Context; import android.content.Intent; import android.net.Uri; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.text.TextUtils; import android.webkit.MimeTypeMap; @@ -21,6 +21,7 @@ import com.fastaccess.helper.Logger; import com.fastaccess.helper.PrefGetter; import com.fastaccess.provider.markdown.MarkDownProvider; import com.fastaccess.ui.modules.code.CodeViewerActivity; +import com.fastaccess.ui.modules.filter.issues.FilterIssuesActivity; import com.fastaccess.ui.modules.gists.gist.GistActivity; import com.fastaccess.ui.modules.repos.RepoPagerActivity; import com.fastaccess.ui.modules.repos.RepoPagerMvp; @@ -147,8 +148,10 @@ public class SchemeParser { Intent commit = getCommit(context, data, showRepoBtn); Intent commits = getCommits(context, data, showRepoBtn); Intent blob = getBlob(context, data); - Optional intentOptional = returnNonNull(trending, projects, userIntent, repoIssues, repoPulls, - pullRequestIntent, commit, commits, createIssueIntent, issueIntent, releasesIntent, repoIntent, + Intent label = getLabel(context, data); + Intent search = getSearchIntent(context, data); + Optional intentOptional = returnNonNull(trending, projects, search, userIntent, repoIssues, repoPulls, + pullRequestIntent, label, commit, commits, createIssueIntent, issueIntent, releasesIntent, repoIntent, repoWikiIntent, blob); Optional empty = Optional.empty(); if (intentOptional != null && intentOptional.isPresent() && intentOptional != empty) { @@ -265,11 +268,22 @@ public class SchemeParser { return null; } if (issueNumber < 1) return null; - Logger.e(commentId); return IssuePagerActivity.createIntent(context, repo, owner, issueNumber, showRepoBtn, LinkParserHelper.isEnterprise(uri.toString()), commentId == null ? 0 : commentId); } + @Nullable private static Intent getLabel(@NonNull Context context, @NonNull Uri uri) { + List segments = uri.getPathSegments(); + if (segments == null || segments.size() < 3) return null; + String owner = segments.get(0); + String repoName = segments.get(1); + String lastPath = segments.get(2); + if ("labels".equalsIgnoreCase(lastPath)) { + return FilterIssuesActivity.getIntent(context, owner, repoName, "label:\"" + segments.get(3) + "\""); + } + return null; + } + @Nullable private static Intent getRepo(@NonNull Context context, @NonNull Uri uri) { List segments = uri.getPathSegments(); if (segments == null || segments.size() < 2 || segments.size() > 3) return null; @@ -426,7 +440,8 @@ public class SchemeParser { List segments = uri.getPathSegments(); if (segments == null || segments.size() < 4) return null; String segmentTwo = segments.get(2); - if (InputHelper.isEmpty(MimeTypeMap.getFileExtensionFromUrl(uri.toString()))) { + String extension = MimeTypeMap.getFileExtensionFromUrl(uri.toString()); + if (InputHelper.isEmpty(extension) || TextUtils.isDigitsOnly(extension)) { Uri urlBuilder = LinkParserHelper.getBlobBuilder(uri); return RepoFilesActivity.getIntent(context, urlBuilder.toString()); } @@ -448,6 +463,11 @@ public class SchemeParser { if (segments != null && segments.size() == 3 && uri.getLastPathSegment().equalsIgnoreCase("issues")) { String owner = segments.get(0); String repo = segments.get(1); + Uri encoded = Uri.parse(uri.toString().replace("utf8=%E2%9C%93&", "")); + if (encoded.getQueryParameter("q") != null) { + String query = encoded.getQueryParameter("q"); + return FilterIssuesActivity.getIntent(context, owner, repo, query); + } return RepoPagerActivity.createIntent(context, repo, owner, RepoPagerMvp.ISSUES); } return null; @@ -458,6 +478,11 @@ public class SchemeParser { if (segments != null && segments.size() == 3 && uri.getLastPathSegment().equalsIgnoreCase("pulls")) { String owner = segments.get(0); String repo = segments.get(1); + Uri encoded = Uri.parse(uri.toString().replace("utf8=%E2%9C%93&", "")); + if (encoded.getQueryParameter("q") != null) { + String query = encoded.getQueryParameter("q"); + return FilterIssuesActivity.getIntent(context, owner, repo, query); + } return RepoPagerActivity.createIntent(context, repo, owner, RepoPagerMvp.PULL_REQUEST); } return null; @@ -537,4 +562,17 @@ public class SchemeParser { } return null; } + + @Nullable private static Intent getSearchIntent(@NonNull Context context, @NonNull Uri uri) { + List segments = uri.getPathSegments(); + if (segments == null || segments.size() > 1) return null; + String search = segments.get(0); + if ("search".equalsIgnoreCase(search)) { + Uri encoded = Uri.parse(uri.toString().replace("utf8=%E2%9C%93&", "")); + String query = encoded.getQueryParameter("q"); + Logger.e(encoded, query); + return SearchActivity.getIntent(context, query); + } + return null; + } } diff --git a/app/src/main/java/com/fastaccess/provider/tasks/git/GithubActionService.java b/app/src/main/java/com/fastaccess/provider/tasks/git/GithubActionService.java index 57fe9ed6..ba4240a5 100644 --- a/app/src/main/java/com/fastaccess/provider/tasks/git/GithubActionService.java +++ b/app/src/main/java/com/fastaccess/provider/tasks/git/GithubActionService.java @@ -5,10 +5,11 @@ import android.app.NotificationManager; import android.content.Context; import android.content.Intent; import android.os.Bundle; -import android.support.annotation.IntDef; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v4.app.NotificationCompat; + +import androidx.annotation.IntDef; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.core.app.NotificationCompat; import com.fastaccess.R; import com.fastaccess.helper.BundleConstant; @@ -18,6 +19,7 @@ import com.fastaccess.provider.rest.RestProvider; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; +import io.reactivex.disposables.CompositeDisposable; import io.reactivex.schedulers.Schedulers; @@ -37,6 +39,7 @@ public class GithubActionService extends IntentService { public static final int FORK_GIST = 8; private NotificationCompat.Builder notification; private NotificationManager notificationManager; + private CompositeDisposable disposable = new CompositeDisposable(); @IntDef({ STAR_REPO, @@ -112,99 +115,114 @@ public class GithubActionService extends IntentService { } } + @Override public void onDestroy() { + disposable.clear(); + super.onDestroy(); + } + private void forkGist(@Nullable String id, boolean isEnterprise) { if (id != null) { String msg = getString(R.string.forking, getString(R.string.gist)); - RestProvider.getGistService(isEnterprise) - .forkGist(id) - .doOnSubscribe(disposable -> showNotification(msg)) - .subscribeOn(Schedulers.io()) - .subscribe(response -> { - }, throwable -> hideNotification(msg), () -> hideNotification(msg)); + disposable.add( + RestProvider.getGistService(isEnterprise) + .forkGist(id) + .doOnSubscribe(disposable -> showNotification(msg)) + .subscribeOn(Schedulers.io()) + .subscribe(response -> { + }, throwable -> hideNotification(msg), () -> hideNotification(msg)) + ); } } private void forkRepo(@Nullable String id, @Nullable String login, boolean isEnterprise) { if (id != null && login != null) { String msg = getString(R.string.forking, id); - RestProvider.getRepoService(isEnterprise) - .forkRepo(login, id) - .doOnSubscribe(disposable -> showNotification(msg)) - .subscribeOn(Schedulers.io()) - .subscribe(response -> { - }, throwable -> hideNotification(msg), () -> hideNotification(msg)); + disposable.add( + RestProvider.getRepoService(isEnterprise) + .forkRepo(login, id) + .doOnSubscribe(disposable -> showNotification(msg)) + .subscribeOn(Schedulers.io()) + .subscribe(response -> { + }, throwable -> hideNotification(msg), () -> hideNotification(msg)) + ); } } private void starGist(@Nullable String id, boolean isEnterprise) { if (id != null) { String msg = getString(R.string.starring, getString(R.string.gist)); - RestProvider.getGistService(isEnterprise) + disposable.add(RestProvider.getGistService(isEnterprise) .starGist(id) .doOnSubscribe(disposable -> showNotification(msg)) .subscribeOn(Schedulers.io()) .subscribe(response -> { - }, throwable -> hideNotification(msg), () -> hideNotification(msg)); + }, throwable -> hideNotification(msg), () -> hideNotification(msg)) + ); } } private void starRepo(@Nullable String id, @Nullable String login, boolean isEnterprise) { if (id != null && login != null) { String msg = getString(R.string.starring, id); - RestProvider.getRepoService(isEnterprise) + disposable.add(RestProvider.getRepoService(isEnterprise) .starRepo(login, id) .doOnSubscribe(disposable -> showNotification(msg)) .subscribeOn(Schedulers.io()) .subscribe(response -> { - }, throwable -> hideNotification(msg), () -> hideNotification(msg)); + }, throwable -> hideNotification(msg), () -> hideNotification(msg)) + ); } } private void unStarGist(@Nullable String id, boolean isEnterprise) { if (id != null) { String msg = getString(R.string.un_starring, getString(R.string.gist)); - RestProvider.getGistService(isEnterprise) + disposable.add(RestProvider.getGistService(isEnterprise) .unStarGist(id) .doOnSubscribe(disposable -> showNotification(msg)) .subscribeOn(Schedulers.io()) .subscribe(response -> { - }, throwable -> hideNotification(msg), () -> hideNotification(msg)); + }, throwable -> hideNotification(msg), () -> hideNotification(msg)) + ); } } private void unStarRepo(@Nullable String id, @Nullable String login, boolean isEnterprise) { if (id != null && login != null) { String msg = getString(R.string.un_starring, id); - RestProvider.getRepoService(isEnterprise) + disposable.add(RestProvider.getRepoService(isEnterprise) .unstarRepo(login, id) .doOnSubscribe(disposable -> showNotification(msg)) .subscribeOn(Schedulers.io()) .subscribe(response -> { - }, throwable -> hideNotification(msg), () -> hideNotification(msg)); + }, throwable -> hideNotification(msg), () -> hideNotification(msg)) + ); } } private void unWatchRepo(@Nullable String id, @Nullable String login, boolean isEnterprise) { if (id != null && login != null) { String msg = getString(R.string.un_watching, id); - RestProvider.getRepoService(isEnterprise) + disposable.add(RestProvider.getRepoService(isEnterprise) .unwatchRepo(login, id) .doOnSubscribe(disposable -> showNotification(msg)) .subscribeOn(Schedulers.io()) .subscribe(response -> { - }, throwable -> hideNotification(msg), () -> hideNotification(msg)); + }, throwable -> hideNotification(msg), () -> hideNotification(msg)) + ); } } private void watchRepo(@Nullable String id, @Nullable String login, boolean isEnterprise) { if (id != null && login != null) { String msg = getString(R.string.watching, id); - RestProvider.getRepoService(isEnterprise) + disposable.add(RestProvider.getRepoService(isEnterprise) .watchRepo(login, id) .doOnSubscribe(disposable -> showNotification(msg)) .subscribeOn(Schedulers.io()) .subscribe(response -> { - }, throwable -> hideNotification(msg), () -> hideNotification(msg)); + }, throwable -> hideNotification(msg), () -> hideNotification(msg)) + ); } } diff --git a/app/src/main/java/com/fastaccess/provider/tasks/git/ReactionService.java b/app/src/main/java/com/fastaccess/provider/tasks/git/ReactionService.java index 63d9a3bc..618e6fe0 100644 --- a/app/src/main/java/com/fastaccess/provider/tasks/git/ReactionService.java +++ b/app/src/main/java/com/fastaccess/provider/tasks/git/ReactionService.java @@ -5,9 +5,9 @@ import android.app.NotificationManager; import android.content.Context; import android.content.Intent; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v4.app.NotificationCompat; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.core.app.NotificationCompat; import com.fastaccess.R; import com.fastaccess.data.dao.PostReactionModel; diff --git a/app/src/main/java/com/fastaccess/provider/tasks/notification/NotificationSchedulerJobTask.java b/app/src/main/java/com/fastaccess/provider/tasks/notification/NotificationSchedulerJobTask.java index 3f6f4d57..d587d10e 100644 --- a/app/src/main/java/com/fastaccess/provider/tasks/notification/NotificationSchedulerJobTask.java +++ b/app/src/main/java/com/fastaccess/provider/tasks/notification/NotificationSchedulerJobTask.java @@ -9,10 +9,10 @@ import android.content.Intent; import android.graphics.BitmapFactory; import android.media.AudioManager; import android.os.Build; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v4.app.NotificationCompat; -import android.support.v4.content.ContextCompat; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.core.app.NotificationCompat; +import androidx.core.content.ContextCompat; import com.annimon.stream.Stream; import com.fastaccess.R; diff --git a/app/src/main/java/com/fastaccess/provider/tasks/notification/ReadNotificationService.java b/app/src/main/java/com/fastaccess/provider/tasks/notification/ReadNotificationService.java index 76435993..07c751bc 100644 --- a/app/src/main/java/com/fastaccess/provider/tasks/notification/ReadNotificationService.java +++ b/app/src/main/java/com/fastaccess/provider/tasks/notification/ReadNotificationService.java @@ -7,9 +7,9 @@ import android.content.Context; import android.content.Intent; import android.net.Uri; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v4.app.NotificationCompat; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.core.app.NotificationCompat; import com.annimon.stream.LongStream; import com.fastaccess.R; diff --git a/app/src/main/java/com/fastaccess/provider/tasks/slack/SlackInvitationService.java b/app/src/main/java/com/fastaccess/provider/tasks/slack/SlackInvitationService.java index d8c0ed14..1c00ba23 100644 --- a/app/src/main/java/com/fastaccess/provider/tasks/slack/SlackInvitationService.java +++ b/app/src/main/java/com/fastaccess/provider/tasks/slack/SlackInvitationService.java @@ -2,7 +2,7 @@ package com.fastaccess.provider.tasks.slack; import android.app.IntentService; import android.content.Intent; -import android.support.annotation.Nullable; +import androidx.annotation.Nullable; import com.fastaccess.App; import com.fastaccess.R; diff --git a/app/src/main/java/com/fastaccess/provider/theme/ThemeEngine.kt b/app/src/main/java/com/fastaccess/provider/theme/ThemeEngine.kt index 74d30329..7dab67f5 100644 --- a/app/src/main/java/com/fastaccess/provider/theme/ThemeEngine.kt +++ b/app/src/main/java/com/fastaccess/provider/theme/ThemeEngine.kt @@ -3,7 +3,7 @@ package com.fastaccess.provider.theme import android.app.Activity import android.app.ActivityManager import android.graphics.BitmapFactory -import android.support.annotation.StyleRes +import androidx.annotation.StyleRes import com.danielstone.materialaboutlibrary.MaterialAboutActivity import com.fastaccess.R import com.fastaccess.helper.Logger diff --git a/app/src/main/java/com/fastaccess/provider/timeline/CommentsHelper.java b/app/src/main/java/com/fastaccess/provider/timeline/CommentsHelper.java index 8114ae47..1dde1391 100644 --- a/app/src/main/java/com/fastaccess/provider/timeline/CommentsHelper.java +++ b/app/src/main/java/com/fastaccess/provider/timeline/CommentsHelper.java @@ -1,8 +1,8 @@ package com.fastaccess.provider.timeline; import android.content.Context; -import android.support.annotation.IdRes; -import android.support.annotation.NonNull; +import androidx.annotation.IdRes; +import androidx.annotation.NonNull; import android.view.View; import android.widget.TextView; @@ -115,6 +115,7 @@ public class CommentsHelper { @NonNull public static ArrayList getUsers(@NonNull List comments) { return Stream.of(comments) + .filter(comment -> comment.getUser() != null) .map(comment -> comment.getUser().getLogin()) .distinct() .collect(Collectors.toCollection(ArrayList::new)); diff --git a/app/src/main/java/com/fastaccess/provider/timeline/HtmlHelper.java b/app/src/main/java/com/fastaccess/provider/timeline/HtmlHelper.java index 99e9ad1b..828e7643 100644 --- a/app/src/main/java/com/fastaccess/provider/timeline/HtmlHelper.java +++ b/app/src/main/java/com/fastaccess/provider/timeline/HtmlHelper.java @@ -4,9 +4,9 @@ package com.fastaccess.provider.timeline; import android.graphics.Color; import android.graphics.drawable.Drawable; import android.net.Uri; -import android.support.annotation.ColorInt; -import android.support.annotation.NonNull; -import android.support.v4.content.ContextCompat; +import androidx.annotation.ColorInt; +import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; import android.view.HapticFeedbackConstants; import android.widget.PopupMenu; import android.widget.TextView; @@ -26,7 +26,7 @@ import com.fastaccess.provider.timeline.handler.LinkHandler; import com.fastaccess.provider.timeline.handler.ListsHandler; import com.fastaccess.provider.timeline.handler.MarginHandler; import com.fastaccess.provider.timeline.handler.PreTagHandler; -import com.fastaccess.provider.timeline.handler.QouteHandler; +import com.fastaccess.provider.timeline.handler.QuoteHandler; import com.fastaccess.provider.timeline.handler.StrikethroughHandler; import com.fastaccess.provider.timeline.handler.SubScriptHandler; import com.fastaccess.provider.timeline.handler.SuperScriptHandler; @@ -89,7 +89,7 @@ public class HtmlHelper { mySpanner.registerHandler("code", new PreTagHandler(windowBackground, false, theme)); mySpanner.registerHandler("img", new DrawableHandler(textView, width)); mySpanner.registerHandler("g-emoji", new EmojiHandler()); - mySpanner.registerHandler("blockquote", new QouteHandler(windowBackground)); + mySpanner.registerHandler("blockquote", new QuoteHandler(windowBackground)); mySpanner.registerHandler("b", new BoldHandler()); mySpanner.registerHandler("strong", new BoldHandler()); mySpanner.registerHandler("i", new ItalicHandler()); diff --git a/app/src/main/java/com/fastaccess/provider/timeline/ReactionsProvider.java b/app/src/main/java/com/fastaccess/provider/timeline/ReactionsProvider.java index cd64cb37..e185c5cc 100644 --- a/app/src/main/java/com/fastaccess/provider/timeline/ReactionsProvider.java +++ b/app/src/main/java/com/fastaccess/provider/timeline/ReactionsProvider.java @@ -1,9 +1,9 @@ package com.fastaccess.provider.timeline; -import android.support.annotation.IdRes; -import android.support.annotation.IntDef; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.IdRes; +import androidx.annotation.IntDef; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import com.fastaccess.data.dao.PostReactionModel; import com.fastaccess.data.dao.ReactionsModel; diff --git a/app/src/main/java/com/fastaccess/provider/timeline/TimelineProvider.java b/app/src/main/java/com/fastaccess/provider/timeline/TimelineProvider.java index 983dea51..114357e1 100644 --- a/app/src/main/java/com/fastaccess/provider/timeline/TimelineProvider.java +++ b/app/src/main/java/com/fastaccess/provider/timeline/TimelineProvider.java @@ -2,8 +2,8 @@ package com.fastaccess.provider.timeline; import android.content.Context; import android.graphics.Color; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.text.style.BackgroundColorSpan; import com.fastaccess.R; @@ -112,6 +112,9 @@ public class TimelineProvider { .bold(issueEventModel.getMilestone().getTitle()) .append(" ") .append("milestone"); + } else if (event == IssueEventType.deployed) { + spannableBuilder.append(" ") + .bold("deployed"); } else { spannableBuilder.append(" ").append(event.name().replaceAll("_", " ")); } diff --git a/app/src/main/java/com/fastaccess/provider/timeline/handler/DrawableHandler.java b/app/src/main/java/com/fastaccess/provider/timeline/handler/DrawableHandler.java index fdf7ffa0..fe6517db 100644 --- a/app/src/main/java/com/fastaccess/provider/timeline/handler/DrawableHandler.java +++ b/app/src/main/java/com/fastaccess/provider/timeline/handler/DrawableHandler.java @@ -38,15 +38,14 @@ import static android.text.Spanned.SPAN_EXCLUSIVE_EXCLUSIVE; if (!PrefGetter.isAutoImageDisabled()) { builder.append(""); if (isNull()) return; + builder.append("\n"); DrawableGetter imageGetter = new DrawableGetter(textView, width); builder.setSpan(new ImageSpan(imageGetter.getDrawable(src)), start, builder.length(), SPAN_EXCLUSIVE_EXCLUSIVE); builder.setSpan(new CenterSpan(), start, builder.length(), SPAN_EXCLUSIVE_EXCLUSIVE); - appendNewLine(builder); + builder.append("\n"); } else { - builder.append(SpannableBuilder.builder().clickable("Image", v -> { - SchemeParser.launchUri(v.getContext(), src); - })); - appendNewLine(builder); + builder.append(SpannableBuilder.builder().clickable("Image", v -> SchemeParser.launchUri(v.getContext(), src))); + builder.append("\n"); } } } diff --git a/app/src/main/java/com/fastaccess/provider/timeline/handler/HrSpan.java b/app/src/main/java/com/fastaccess/provider/timeline/handler/HrSpan.java index 176612d2..3bd13a09 100644 --- a/app/src/main/java/com/fastaccess/provider/timeline/handler/HrSpan.java +++ b/app/src/main/java/com/fastaccess/provider/timeline/handler/HrSpan.java @@ -5,7 +5,7 @@ import android.graphics.Paint; import android.graphics.Rect; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import android.text.style.LineHeightSpan; import android.text.style.ReplacementSpan; diff --git a/app/src/main/java/com/fastaccess/provider/timeline/handler/ListsHandler.java b/app/src/main/java/com/fastaccess/provider/timeline/handler/ListsHandler.java index 6e5d01de..2d830c96 100644 --- a/app/src/main/java/com/fastaccess/provider/timeline/handler/ListsHandler.java +++ b/app/src/main/java/com/fastaccess/provider/timeline/handler/ListsHandler.java @@ -1,7 +1,7 @@ package com.fastaccess.provider.timeline.handler; import android.graphics.drawable.Drawable; -import android.support.annotation.Nullable; +import androidx.annotation.Nullable; import android.text.SpannableStringBuilder; import com.fastaccess.helper.Logger; diff --git a/app/src/main/java/com/fastaccess/provider/timeline/handler/PreTagHandler.java b/app/src/main/java/com/fastaccess/provider/timeline/handler/PreTagHandler.java index e1f40a74..0e7be88b 100644 --- a/app/src/main/java/com/fastaccess/provider/timeline/handler/PreTagHandler.java +++ b/app/src/main/java/com/fastaccess/provider/timeline/handler/PreTagHandler.java @@ -1,7 +1,7 @@ package com.fastaccess.provider.timeline.handler; import android.graphics.Color; -import android.support.annotation.ColorInt; +import androidx.annotation.ColorInt; import android.text.SpannableStringBuilder; import android.text.style.BackgroundColorSpan; import android.text.style.ForegroundColorSpan; diff --git a/app/src/main/java/com/fastaccess/provider/timeline/handler/QouteHandler.java b/app/src/main/java/com/fastaccess/provider/timeline/handler/QuoteHandler.java similarity index 61% rename from app/src/main/java/com/fastaccess/provider/timeline/handler/QouteHandler.java rename to app/src/main/java/com/fastaccess/provider/timeline/handler/QuoteHandler.java index e26b2677..1ead0e21 100644 --- a/app/src/main/java/com/fastaccess/provider/timeline/handler/QouteHandler.java +++ b/app/src/main/java/com/fastaccess/provider/timeline/handler/QuoteHandler.java @@ -1,6 +1,6 @@ package com.fastaccess.provider.timeline.handler; -import android.support.annotation.ColorInt; +import androidx.annotation.ColorInt; import android.text.SpannableStringBuilder; import com.zzhoujay.markdown.style.MarkDownQuoteSpan; @@ -15,13 +15,12 @@ import lombok.AllArgsConstructor; * Created by Kosh on 23 Apr 2017, 11:30 AM */ -@AllArgsConstructor public class QouteHandler extends TagNodeHandler { +@AllArgsConstructor public class QuoteHandler extends TagNodeHandler { @ColorInt private int color; + @Override public void handleTagNode(TagNode node, SpannableStringBuilder builder, int start, int end) { - builder.append("\n"); - builder.setSpan(new MarkDownQuoteSpan(color), (start > builder.length() - 1) ? start + 1 : start, builder.length() - 1, 33); - builder.append("\n"); + builder.setSpan(new MarkDownQuoteSpan(color), start + 1, builder.length(), 33); } } diff --git a/app/src/main/java/com/fastaccess/provider/timeline/handler/TableHandler.java b/app/src/main/java/com/fastaccess/provider/timeline/handler/TableHandler.java index 141946f4..4f432648 100644 --- a/app/src/main/java/com/fastaccess/provider/timeline/handler/TableHandler.java +++ b/app/src/main/java/com/fastaccess/provider/timeline/handler/TableHandler.java @@ -8,7 +8,7 @@ import android.graphics.Paint.Style; import android.graphics.PixelFormat; import android.graphics.Typeface; import android.graphics.drawable.Drawable; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import android.text.Layout.Alignment; import android.text.Spannable; import android.text.SpannableStringBuilder; diff --git a/app/src/main/java/com/fastaccess/provider/timeline/handler/drawable/DrawableGetter.java b/app/src/main/java/com/fastaccess/provider/timeline/handler/drawable/DrawableGetter.java index ed2c9188..93b1989b 100644 --- a/app/src/main/java/com/fastaccess/provider/timeline/handler/drawable/DrawableGetter.java +++ b/app/src/main/java/com/fastaccess/provider/timeline/handler/drawable/DrawableGetter.java @@ -2,12 +2,15 @@ package com.fastaccess.provider.timeline.handler.drawable; import android.content.Context; import android.graphics.drawable.Drawable; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; import android.text.Html; import android.widget.TextView; -import com.bumptech.glide.GenericRequestBuilder; import com.bumptech.glide.Glide; +import com.bumptech.glide.RequestBuilder; +import com.fastaccess.App; +import com.fastaccess.GlideApp; import com.fastaccess.R; import java.lang.ref.WeakReference; @@ -34,9 +37,11 @@ public class DrawableGetter implements Html.ImageGetter, Drawable.Callback { final UrlDrawable urlDrawable = new UrlDrawable(); if (container != null && container.get() != null) { Context context = container.get().getContext(); - final GenericRequestBuilder load = Glide.with(context) + final RequestBuilder load = Glide.with(context) .load(url) - .dontAnimate(); + .placeholder(ContextCompat.getDrawable(context, R.drawable.ic_image)) + .dontAnimate() + .override(width, width / 2); final GlideDrawableTarget target = new GlideDrawableTarget(urlDrawable, container, width); load.into(target); cachedTargets.add(target); @@ -57,7 +62,7 @@ public class DrawableGetter implements Html.ImageGetter, Drawable.Callback { public void clear(@NonNull DrawableGetter drawableGetter) { if (drawableGetter.cachedTargets != null) { for (GlideDrawableTarget target : drawableGetter.cachedTargets) { - Glide.clear(target); + GlideApp.with(App.getInstance()).clear(target); } } } diff --git a/app/src/main/java/com/fastaccess/provider/timeline/handler/drawable/GlideDrawableTarget.java b/app/src/main/java/com/fastaccess/provider/timeline/handler/drawable/GlideDrawableTarget.java index f9ffaf05..30f6b687 100644 --- a/app/src/main/java/com/fastaccess/provider/timeline/handler/drawable/GlideDrawableTarget.java +++ b/app/src/main/java/com/fastaccess/provider/timeline/handler/drawable/GlideDrawableTarget.java @@ -1,17 +1,21 @@ package com.fastaccess.provider.timeline.handler.drawable; import android.graphics.Rect; +import android.graphics.drawable.Animatable; import android.graphics.drawable.Drawable; import android.widget.TextView; -import com.bumptech.glide.load.resource.drawable.GlideDrawable; -import com.bumptech.glide.request.animation.GlideAnimation; +import com.bumptech.glide.load.resource.gif.GifDrawable; import com.bumptech.glide.request.target.SimpleTarget; +import com.bumptech.glide.request.transition.Transition; import com.fastaccess.R; import java.lang.ref.WeakReference; -class GlideDrawableTarget extends SimpleTarget { +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +class GlideDrawableTarget extends SimpleTarget { private final UrlDrawable urlDrawable; private final WeakReference container; private final int width; @@ -22,7 +26,7 @@ class GlideDrawableTarget extends SimpleTarget { this.width = width; } - @Override public void onResourceReady(GlideDrawable resource, GlideAnimation glideAnimation) { + @Override public void onResourceReady(final @NonNull Drawable resource, @Nullable Transition transition) { if (container != null && container.get() != null) { TextView textView = container.get(); textView.post(() -> { @@ -41,10 +45,10 @@ class GlideDrawableTarget extends SimpleTarget { resource.setBounds(rect); urlDrawable.setBounds(rect); urlDrawable.setDrawable(resource); - if (resource.isAnimated()) { + if (resource instanceof GifDrawable) { urlDrawable.setCallback((Drawable.Callback) textView.getTag(R.id.drawable_callback)); - resource.setLoopCount(GlideDrawable.LOOP_FOREVER); - resource.start(); + ((GifDrawable) resource).setLoopCount(GifDrawable.LOOP_FOREVER); + ((GifDrawable) resource).start(); } textView.setText(textView.getText()); textView.invalidate(); diff --git a/app/src/main/java/com/fastaccess/provider/timeline/handler/drawable/UrlDrawable.java b/app/src/main/java/com/fastaccess/provider/timeline/handler/drawable/UrlDrawable.java index 3478859e..938dc033 100644 --- a/app/src/main/java/com/fastaccess/provider/timeline/handler/drawable/UrlDrawable.java +++ b/app/src/main/java/com/fastaccess/provider/timeline/handler/drawable/UrlDrawable.java @@ -3,7 +3,7 @@ package com.fastaccess.provider.timeline.handler.drawable; import android.graphics.Canvas; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import com.bumptech.glide.load.resource.gif.GifDrawable; diff --git a/app/src/main/java/com/fastaccess/ui/adapter/AssigneesAdapter.java b/app/src/main/java/com/fastaccess/ui/adapter/AssigneesAdapter.java index 6398da33..6079b6a2 100644 --- a/app/src/main/java/com/fastaccess/ui/adapter/AssigneesAdapter.java +++ b/app/src/main/java/com/fastaccess/ui/adapter/AssigneesAdapter.java @@ -1,7 +1,7 @@ package com.fastaccess.ui.adapter; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.view.ViewGroup; import com.fastaccess.data.dao.model.User; diff --git a/app/src/main/java/com/fastaccess/ui/adapter/BranchesAdapter.java b/app/src/main/java/com/fastaccess/ui/adapter/BranchesAdapter.java index d9dd9a91..5c893c11 100644 --- a/app/src/main/java/com/fastaccess/ui/adapter/BranchesAdapter.java +++ b/app/src/main/java/com/fastaccess/ui/adapter/BranchesAdapter.java @@ -1,8 +1,8 @@ package com.fastaccess.ui.adapter; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v7.widget.AppCompatImageView; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.widget.AppCompatImageView; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; diff --git a/app/src/main/java/com/fastaccess/ui/adapter/CommentsAdapter.java b/app/src/main/java/com/fastaccess/ui/adapter/CommentsAdapter.java index c51c0645..802352b2 100644 --- a/app/src/main/java/com/fastaccess/ui/adapter/CommentsAdapter.java +++ b/app/src/main/java/com/fastaccess/ui/adapter/CommentsAdapter.java @@ -1,6 +1,6 @@ package com.fastaccess.ui.adapter; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import android.view.ViewGroup; import com.fastaccess.data.dao.model.Comment; diff --git a/app/src/main/java/com/fastaccess/ui/adapter/CommitFilesAdapter.java b/app/src/main/java/com/fastaccess/ui/adapter/CommitFilesAdapter.java index 15d40b9c..1deea53d 100644 --- a/app/src/main/java/com/fastaccess/ui/adapter/CommitFilesAdapter.java +++ b/app/src/main/java/com/fastaccess/ui/adapter/CommitFilesAdapter.java @@ -1,7 +1,7 @@ package com.fastaccess.ui.adapter; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.view.ViewGroup; import com.fastaccess.data.dao.CommitFileChanges; diff --git a/app/src/main/java/com/fastaccess/ui/adapter/CommitLinesAdapter.java b/app/src/main/java/com/fastaccess/ui/adapter/CommitLinesAdapter.java index a2348d09..808326c3 100644 --- a/app/src/main/java/com/fastaccess/ui/adapter/CommitLinesAdapter.java +++ b/app/src/main/java/com/fastaccess/ui/adapter/CommitLinesAdapter.java @@ -1,7 +1,7 @@ package com.fastaccess.ui.adapter; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.view.ViewGroup; import com.fastaccess.data.dao.CommitLinesModel; diff --git a/app/src/main/java/com/fastaccess/ui/adapter/CommitsAdapter.java b/app/src/main/java/com/fastaccess/ui/adapter/CommitsAdapter.java index 2a7ec721..dcc64565 100644 --- a/app/src/main/java/com/fastaccess/ui/adapter/CommitsAdapter.java +++ b/app/src/main/java/com/fastaccess/ui/adapter/CommitsAdapter.java @@ -1,6 +1,6 @@ package com.fastaccess.ui.adapter; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import android.view.ViewGroup; import com.fastaccess.data.dao.model.Commit; diff --git a/app/src/main/java/com/fastaccess/ui/adapter/FeedsAdapter.java b/app/src/main/java/com/fastaccess/ui/adapter/FeedsAdapter.java index 43cf047e..07e42cdc 100644 --- a/app/src/main/java/com/fastaccess/ui/adapter/FeedsAdapter.java +++ b/app/src/main/java/com/fastaccess/ui/adapter/FeedsAdapter.java @@ -1,6 +1,6 @@ package com.fastaccess.ui.adapter; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import android.view.ViewGroup; import com.fastaccess.data.dao.model.Event; diff --git a/app/src/main/java/com/fastaccess/ui/adapter/FragmentsPagerAdapter.java b/app/src/main/java/com/fastaccess/ui/adapter/FragmentsPagerAdapter.java index 18595d22..160e0ee4 100644 --- a/app/src/main/java/com/fastaccess/ui/adapter/FragmentsPagerAdapter.java +++ b/app/src/main/java/com/fastaccess/ui/adapter/FragmentsPagerAdapter.java @@ -1,8 +1,8 @@ package com.fastaccess.ui.adapter; -import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentManager; -import android.support.v4.app.FragmentStatePagerAdapter; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentStatePagerAdapter; import com.fastaccess.data.dao.FragmentPagerAdapterModel; diff --git a/app/src/main/java/com/fastaccess/ui/adapter/GistFilesAdapter.java b/app/src/main/java/com/fastaccess/ui/adapter/GistFilesAdapter.java index e7899d7d..a27e3fe5 100644 --- a/app/src/main/java/com/fastaccess/ui/adapter/GistFilesAdapter.java +++ b/app/src/main/java/com/fastaccess/ui/adapter/GistFilesAdapter.java @@ -1,7 +1,7 @@ package com.fastaccess.ui.adapter; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.view.ViewGroup; import com.fastaccess.data.dao.FilesListModel; diff --git a/app/src/main/java/com/fastaccess/ui/adapter/GistsAdapter.java b/app/src/main/java/com/fastaccess/ui/adapter/GistsAdapter.java index 4d5ab031..fb9acb65 100644 --- a/app/src/main/java/com/fastaccess/ui/adapter/GistsAdapter.java +++ b/app/src/main/java/com/fastaccess/ui/adapter/GistsAdapter.java @@ -1,6 +1,6 @@ package com.fastaccess.ui.adapter; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import android.view.ViewGroup; import com.fastaccess.data.dao.model.Gist; diff --git a/app/src/main/java/com/fastaccess/ui/adapter/IssuesAdapter.java b/app/src/main/java/com/fastaccess/ui/adapter/IssuesAdapter.java index 12655b48..9d1faed7 100644 --- a/app/src/main/java/com/fastaccess/ui/adapter/IssuesAdapter.java +++ b/app/src/main/java/com/fastaccess/ui/adapter/IssuesAdapter.java @@ -1,6 +1,6 @@ package com.fastaccess.ui.adapter; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import android.view.ViewGroup; import com.fastaccess.data.dao.model.Issue; diff --git a/app/src/main/java/com/fastaccess/ui/adapter/IssuesTimelineAdapter.java b/app/src/main/java/com/fastaccess/ui/adapter/IssuesTimelineAdapter.java index 6e507bf0..fdcde66d 100644 --- a/app/src/main/java/com/fastaccess/ui/adapter/IssuesTimelineAdapter.java +++ b/app/src/main/java/com/fastaccess/ui/adapter/IssuesTimelineAdapter.java @@ -1,7 +1,7 @@ package com.fastaccess.ui.adapter; -import android.support.annotation.NonNull; -import android.support.v7.widget.StaggeredGridLayoutManager; +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.StaggeredGridLayoutManager; import android.view.ViewGroup; import com.fastaccess.R; diff --git a/app/src/main/java/com/fastaccess/ui/adapter/LabelColorsAdapter.java b/app/src/main/java/com/fastaccess/ui/adapter/LabelColorsAdapter.java index 325fd051..03340443 100644 --- a/app/src/main/java/com/fastaccess/ui/adapter/LabelColorsAdapter.java +++ b/app/src/main/java/com/fastaccess/ui/adapter/LabelColorsAdapter.java @@ -1,7 +1,7 @@ package com.fastaccess.ui.adapter; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.view.ViewGroup; import com.fastaccess.ui.adapter.viewholder.LabelColorsViewHolder; diff --git a/app/src/main/java/com/fastaccess/ui/adapter/LabelsAdapter.java b/app/src/main/java/com/fastaccess/ui/adapter/LabelsAdapter.java index 1463f91f..9ac84a53 100644 --- a/app/src/main/java/com/fastaccess/ui/adapter/LabelsAdapter.java +++ b/app/src/main/java/com/fastaccess/ui/adapter/LabelsAdapter.java @@ -1,7 +1,7 @@ package com.fastaccess.ui.adapter; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.view.ViewGroup; import com.fastaccess.data.dao.LabelModel; diff --git a/app/src/main/java/com/fastaccess/ui/adapter/MilestonesAdapter.java b/app/src/main/java/com/fastaccess/ui/adapter/MilestonesAdapter.java index 142be747..07098506 100644 --- a/app/src/main/java/com/fastaccess/ui/adapter/MilestonesAdapter.java +++ b/app/src/main/java/com/fastaccess/ui/adapter/MilestonesAdapter.java @@ -1,6 +1,6 @@ package com.fastaccess.ui.adapter; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import android.view.ViewGroup; import com.fastaccess.data.dao.MilestoneModel; diff --git a/app/src/main/java/com/fastaccess/ui/adapter/NotificationsAdapter.java b/app/src/main/java/com/fastaccess/ui/adapter/NotificationsAdapter.java index dc06bd8b..820b2a19 100644 --- a/app/src/main/java/com/fastaccess/ui/adapter/NotificationsAdapter.java +++ b/app/src/main/java/com/fastaccess/ui/adapter/NotificationsAdapter.java @@ -1,7 +1,7 @@ package com.fastaccess.ui.adapter; -import android.support.annotation.NonNull; -import android.support.v7.widget.StaggeredGridLayoutManager; +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.StaggeredGridLayoutManager; import android.view.View; import android.view.ViewGroup; diff --git a/app/src/main/java/com/fastaccess/ui/adapter/PinnedReposAdapter.java b/app/src/main/java/com/fastaccess/ui/adapter/PinnedReposAdapter.java index dd1157aa..b715a44b 100644 --- a/app/src/main/java/com/fastaccess/ui/adapter/PinnedReposAdapter.java +++ b/app/src/main/java/com/fastaccess/ui/adapter/PinnedReposAdapter.java @@ -1,7 +1,7 @@ package com.fastaccess.ui.adapter; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.view.ViewGroup; import com.fastaccess.data.dao.model.PinnedRepos; diff --git a/app/src/main/java/com/fastaccess/ui/adapter/PullRequestAdapter.java b/app/src/main/java/com/fastaccess/ui/adapter/PullRequestAdapter.java index 962271b4..61b5af45 100644 --- a/app/src/main/java/com/fastaccess/ui/adapter/PullRequestAdapter.java +++ b/app/src/main/java/com/fastaccess/ui/adapter/PullRequestAdapter.java @@ -1,6 +1,6 @@ package com.fastaccess.ui.adapter; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import android.view.ViewGroup; import com.fastaccess.data.dao.model.PullRequest; diff --git a/app/src/main/java/com/fastaccess/ui/adapter/ReleasesAdapter.java b/app/src/main/java/com/fastaccess/ui/adapter/ReleasesAdapter.java index 288219a8..322b60b9 100644 --- a/app/src/main/java/com/fastaccess/ui/adapter/ReleasesAdapter.java +++ b/app/src/main/java/com/fastaccess/ui/adapter/ReleasesAdapter.java @@ -1,6 +1,6 @@ package com.fastaccess.ui.adapter; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import android.view.ViewGroup; import com.fastaccess.data.dao.model.Release; diff --git a/app/src/main/java/com/fastaccess/ui/adapter/RepoFilePathsAdapter.java b/app/src/main/java/com/fastaccess/ui/adapter/RepoFilePathsAdapter.java index 58d3f94c..51b78297 100644 --- a/app/src/main/java/com/fastaccess/ui/adapter/RepoFilePathsAdapter.java +++ b/app/src/main/java/com/fastaccess/ui/adapter/RepoFilePathsAdapter.java @@ -1,6 +1,6 @@ package com.fastaccess.ui.adapter; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import android.view.ViewGroup; import com.fastaccess.data.dao.model.RepoFile; diff --git a/app/src/main/java/com/fastaccess/ui/adapter/RepoFilesAdapter.java b/app/src/main/java/com/fastaccess/ui/adapter/RepoFilesAdapter.java index c60a328f..e5f5a686 100644 --- a/app/src/main/java/com/fastaccess/ui/adapter/RepoFilesAdapter.java +++ b/app/src/main/java/com/fastaccess/ui/adapter/RepoFilesAdapter.java @@ -1,6 +1,6 @@ package com.fastaccess.ui.adapter; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import android.view.ViewGroup; import com.fastaccess.data.dao.model.RepoFile; diff --git a/app/src/main/java/com/fastaccess/ui/adapter/ReposAdapter.java b/app/src/main/java/com/fastaccess/ui/adapter/ReposAdapter.java index 16976307..f3bf3b77 100644 --- a/app/src/main/java/com/fastaccess/ui/adapter/ReposAdapter.java +++ b/app/src/main/java/com/fastaccess/ui/adapter/ReposAdapter.java @@ -1,6 +1,6 @@ package com.fastaccess.ui.adapter; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import android.view.ViewGroup; import com.fastaccess.data.dao.model.Repo; diff --git a/app/src/main/java/com/fastaccess/ui/adapter/ReviewCommentsAdapter.java b/app/src/main/java/com/fastaccess/ui/adapter/ReviewCommentsAdapter.java index 9b42ca6b..38c499a8 100644 --- a/app/src/main/java/com/fastaccess/ui/adapter/ReviewCommentsAdapter.java +++ b/app/src/main/java/com/fastaccess/ui/adapter/ReviewCommentsAdapter.java @@ -1,7 +1,7 @@ package com.fastaccess.ui.adapter; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.view.ViewGroup; import com.fastaccess.data.dao.ReviewCommentModel; diff --git a/app/src/main/java/com/fastaccess/ui/adapter/SearchCodeAdapter.java b/app/src/main/java/com/fastaccess/ui/adapter/SearchCodeAdapter.java index 07091d36..114db6e5 100644 --- a/app/src/main/java/com/fastaccess/ui/adapter/SearchCodeAdapter.java +++ b/app/src/main/java/com/fastaccess/ui/adapter/SearchCodeAdapter.java @@ -1,6 +1,6 @@ package com.fastaccess.ui.adapter; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import android.view.ViewGroup; import com.fastaccess.data.dao.SearchCodeModel; diff --git a/app/src/main/java/com/fastaccess/ui/adapter/SettingsAdapter.java b/app/src/main/java/com/fastaccess/ui/adapter/SettingsAdapter.java index 0d2fb6e4..4a4296bd 100644 --- a/app/src/main/java/com/fastaccess/ui/adapter/SettingsAdapter.java +++ b/app/src/main/java/com/fastaccess/ui/adapter/SettingsAdapter.java @@ -1,7 +1,7 @@ package com.fastaccess.ui.adapter; import android.content.Context; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; diff --git a/app/src/main/java/com/fastaccess/ui/adapter/SimpleListAdapter.java b/app/src/main/java/com/fastaccess/ui/adapter/SimpleListAdapter.java index 066f39ae..39425e96 100644 --- a/app/src/main/java/com/fastaccess/ui/adapter/SimpleListAdapter.java +++ b/app/src/main/java/com/fastaccess/ui/adapter/SimpleListAdapter.java @@ -1,7 +1,7 @@ package com.fastaccess.ui.adapter; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.view.ViewGroup; import com.fastaccess.R; diff --git a/app/src/main/java/com/fastaccess/ui/adapter/SpinnerAdapter.java b/app/src/main/java/com/fastaccess/ui/adapter/SpinnerAdapter.java index 46b727ba..7fe7b87e 100644 --- a/app/src/main/java/com/fastaccess/ui/adapter/SpinnerAdapter.java +++ b/app/src/main/java/com/fastaccess/ui/adapter/SpinnerAdapter.java @@ -1,7 +1,7 @@ package com.fastaccess.ui.adapter; import android.content.Context; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; diff --git a/app/src/main/java/com/fastaccess/ui/adapter/TeamsAdapter.java b/app/src/main/java/com/fastaccess/ui/adapter/TeamsAdapter.java index 54706d8f..6c55294c 100644 --- a/app/src/main/java/com/fastaccess/ui/adapter/TeamsAdapter.java +++ b/app/src/main/java/com/fastaccess/ui/adapter/TeamsAdapter.java @@ -1,6 +1,6 @@ package com.fastaccess.ui.adapter; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import android.view.ViewGroup; import com.fastaccess.data.dao.TeamsModel; diff --git a/app/src/main/java/com/fastaccess/ui/adapter/TopicsAdapter.java b/app/src/main/java/com/fastaccess/ui/adapter/TopicsAdapter.java index 3936a171..ff5f2499 100644 --- a/app/src/main/java/com/fastaccess/ui/adapter/TopicsAdapter.java +++ b/app/src/main/java/com/fastaccess/ui/adapter/TopicsAdapter.java @@ -1,8 +1,8 @@ package com.fastaccess.ui.adapter; import android.content.Intent; -import android.support.annotation.ColorInt; -import android.support.annotation.NonNull; +import androidx.annotation.ColorInt; +import androidx.annotation.NonNull; import android.view.ViewGroup; import com.fastaccess.App; diff --git a/app/src/main/java/com/fastaccess/ui/adapter/UsersAdapter.java b/app/src/main/java/com/fastaccess/ui/adapter/UsersAdapter.java index 42d9ac08..6c36f6c0 100644 --- a/app/src/main/java/com/fastaccess/ui/adapter/UsersAdapter.java +++ b/app/src/main/java/com/fastaccess/ui/adapter/UsersAdapter.java @@ -1,6 +1,6 @@ package com.fastaccess.ui.adapter; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import android.view.ViewGroup; import com.fastaccess.data.dao.model.User; diff --git a/app/src/main/java/com/fastaccess/ui/adapter/viewholder/AssigneesViewHolder.java b/app/src/main/java/com/fastaccess/ui/adapter/viewholder/AssigneesViewHolder.java index 7027707b..8c5d9e16 100644 --- a/app/src/main/java/com/fastaccess/ui/adapter/viewholder/AssigneesViewHolder.java +++ b/app/src/main/java/com/fastaccess/ui/adapter/viewholder/AssigneesViewHolder.java @@ -1,7 +1,7 @@ package com.fastaccess.ui.adapter.viewholder; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.view.View; import android.view.ViewGroup; diff --git a/app/src/main/java/com/fastaccess/ui/adapter/viewholder/CommentsViewHolder.java b/app/src/main/java/com/fastaccess/ui/adapter/viewholder/CommentsViewHolder.java index de2545be..409643d5 100644 --- a/app/src/main/java/com/fastaccess/ui/adapter/viewholder/CommentsViewHolder.java +++ b/app/src/main/java/com/fastaccess/ui/adapter/viewholder/CommentsViewHolder.java @@ -1,8 +1,8 @@ package com.fastaccess.ui.adapter.viewholder; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v7.widget.AppCompatImageView; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.widget.AppCompatImageView; import android.view.View; import android.view.ViewGroup; import android.view.ViewTreeObserver; diff --git a/app/src/main/java/com/fastaccess/ui/adapter/viewholder/CommitCommentsViewHolder.kt b/app/src/main/java/com/fastaccess/ui/adapter/viewholder/CommitCommentsViewHolder.kt index 974377fa..f6e526cc 100644 --- a/app/src/main/java/com/fastaccess/ui/adapter/viewholder/CommitCommentsViewHolder.kt +++ b/app/src/main/java/com/fastaccess/ui/adapter/viewholder/CommitCommentsViewHolder.kt @@ -1,7 +1,7 @@ package com.fastaccess.ui.adapter.viewholder -import android.support.transition.ChangeBounds -import android.support.transition.TransitionManager +import androidx.transition.ChangeBounds +import androidx.transition.TransitionManager import android.view.View import android.view.ViewGroup import android.view.ViewTreeObserver @@ -74,7 +74,7 @@ class CommitCommentsViewHolder private constructor(view: View, adapter: BaseRecy name.text = author3.login } else { avatar.setUrl(null, null, false, false) - name.text = null + name.text = "" } if (!InputHelper.isEmpty(t.body)) { val width = adapter?.getRowWidth() ?: 0 diff --git a/app/src/main/java/com/fastaccess/ui/adapter/viewholder/CommitLinesViewHolder.java b/app/src/main/java/com/fastaccess/ui/adapter/viewholder/CommitLinesViewHolder.java index c4de7aaf..27bbe957 100644 --- a/app/src/main/java/com/fastaccess/ui/adapter/viewholder/CommitLinesViewHolder.java +++ b/app/src/main/java/com/fastaccess/ui/adapter/viewholder/CommitLinesViewHolder.java @@ -1,10 +1,10 @@ package com.fastaccess.ui.adapter.viewholder; import android.graphics.Color; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v4.content.ContextCompat; -import android.support.v7.widget.AppCompatTextView; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; +import androidx.appcompat.widget.AppCompatTextView; import android.view.View; import android.view.ViewGroup; @@ -36,6 +36,7 @@ public class CommitLinesViewHolder extends BaseViewHolder { patchAdditionColor = ViewHelper.getPatchAdditionColor(itemView.getContext()); patchDeletionColor = ViewHelper.getPatchDeletionColor(itemView.getContext()); patchRefColor = ViewHelper.getPatchRefColor(itemView.getContext()); + textView.setOnLongClickListener(this); } public static CommitLinesViewHolder newInstance(@NonNull ViewGroup viewGroup, @NonNull BaseRecyclerAdapter adapter) { diff --git a/app/src/main/java/com/fastaccess/ui/adapter/viewholder/CommitsViewHolder.java b/app/src/main/java/com/fastaccess/ui/adapter/viewholder/CommitsViewHolder.java index d66e5a94..6052fdc8 100644 --- a/app/src/main/java/com/fastaccess/ui/adapter/viewholder/CommitsViewHolder.java +++ b/app/src/main/java/com/fastaccess/ui/adapter/viewholder/CommitsViewHolder.java @@ -1,7 +1,7 @@ package com.fastaccess.ui.adapter.viewholder; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.view.View; import android.view.ViewGroup; diff --git a/app/src/main/java/com/fastaccess/ui/adapter/viewholder/FeedsViewHolder.java b/app/src/main/java/com/fastaccess/ui/adapter/viewholder/FeedsViewHolder.java index 67eb3ffd..81c19bab 100644 --- a/app/src/main/java/com/fastaccess/ui/adapter/viewholder/FeedsViewHolder.java +++ b/app/src/main/java/com/fastaccess/ui/adapter/viewholder/FeedsViewHolder.java @@ -1,8 +1,8 @@ package com.fastaccess.ui.adapter.viewholder; import android.content.res.Resources; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.text.TextUtils; import android.view.Gravity; import android.view.View; diff --git a/app/src/main/java/com/fastaccess/ui/adapter/viewholder/GistFilesViewHolder.java b/app/src/main/java/com/fastaccess/ui/adapter/viewholder/GistFilesViewHolder.java index 34494296..dadf0c1b 100644 --- a/app/src/main/java/com/fastaccess/ui/adapter/viewholder/GistFilesViewHolder.java +++ b/app/src/main/java/com/fastaccess/ui/adapter/viewholder/GistFilesViewHolder.java @@ -1,6 +1,6 @@ package com.fastaccess.ui.adapter.viewholder; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import android.text.format.Formatter; import android.view.View; import android.view.ViewGroup; diff --git a/app/src/main/java/com/fastaccess/ui/adapter/viewholder/GistsViewHolder.java b/app/src/main/java/com/fastaccess/ui/adapter/viewholder/GistsViewHolder.java index 2fc2e36f..5d5fed8e 100644 --- a/app/src/main/java/com/fastaccess/ui/adapter/viewholder/GistsViewHolder.java +++ b/app/src/main/java/com/fastaccess/ui/adapter/viewholder/GistsViewHolder.java @@ -1,7 +1,7 @@ package com.fastaccess.ui.adapter.viewholder; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.view.View; import android.view.ViewGroup; diff --git a/app/src/main/java/com/fastaccess/ui/adapter/viewholder/GroupedReviewsViewHolder.java b/app/src/main/java/com/fastaccess/ui/adapter/viewholder/GroupedReviewsViewHolder.java index cc4f3b26..9bc7fa2b 100644 --- a/app/src/main/java/com/fastaccess/ui/adapter/viewholder/GroupedReviewsViewHolder.java +++ b/app/src/main/java/com/fastaccess/ui/adapter/viewholder/GroupedReviewsViewHolder.java @@ -1,7 +1,7 @@ package com.fastaccess.ui.adapter.viewholder; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.view.View; import android.view.ViewGroup; import android.widget.LinearLayout; diff --git a/app/src/main/java/com/fastaccess/ui/adapter/viewholder/IssueDetailsViewHolder.java b/app/src/main/java/com/fastaccess/ui/adapter/viewholder/IssueDetailsViewHolder.java index b8faac85..18251cc1 100644 --- a/app/src/main/java/com/fastaccess/ui/adapter/viewholder/IssueDetailsViewHolder.java +++ b/app/src/main/java/com/fastaccess/ui/adapter/viewholder/IssueDetailsViewHolder.java @@ -1,10 +1,10 @@ package com.fastaccess.ui.adapter.viewholder; import android.graphics.Color; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.transition.ChangeBounds; -import android.support.transition.TransitionManager; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.transition.ChangeBounds; +import androidx.transition.TransitionManager; import android.text.TextUtils; import android.view.View; import android.view.ViewGroup; @@ -220,7 +220,7 @@ public class IssueDetailsViewHolder extends BaseViewHolder { owner.setVisibility(View.VISIBLE); owner.setText(R.string.owner); } else { - owner.setText(null); + owner.setText(""); owner.setVisibility(View.GONE); } if (reactionsModel != null) { diff --git a/app/src/main/java/com/fastaccess/ui/adapter/viewholder/IssueTimelineViewHolder.java b/app/src/main/java/com/fastaccess/ui/adapter/viewholder/IssueTimelineViewHolder.java index 01e94d5e..fe595d0f 100644 --- a/app/src/main/java/com/fastaccess/ui/adapter/viewholder/IssueTimelineViewHolder.java +++ b/app/src/main/java/com/fastaccess/ui/adapter/viewholder/IssueTimelineViewHolder.java @@ -1,7 +1,7 @@ package com.fastaccess.ui.adapter.viewholder; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.view.View; import android.view.ViewGroup; diff --git a/app/src/main/java/com/fastaccess/ui/adapter/viewholder/IssuesViewHolder.java b/app/src/main/java/com/fastaccess/ui/adapter/viewholder/IssuesViewHolder.java index 024a8027..dd71535e 100644 --- a/app/src/main/java/com/fastaccess/ui/adapter/viewholder/IssuesViewHolder.java +++ b/app/src/main/java/com/fastaccess/ui/adapter/viewholder/IssuesViewHolder.java @@ -1,8 +1,8 @@ package com.fastaccess.ui.adapter.viewholder; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v7.widget.AppCompatImageView; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.widget.AppCompatImageView; import android.view.View; import android.view.ViewGroup; diff --git a/app/src/main/java/com/fastaccess/ui/adapter/viewholder/LabelColorsViewHolder.java b/app/src/main/java/com/fastaccess/ui/adapter/viewholder/LabelColorsViewHolder.java index a4e986da..117b5b60 100644 --- a/app/src/main/java/com/fastaccess/ui/adapter/viewholder/LabelColorsViewHolder.java +++ b/app/src/main/java/com/fastaccess/ui/adapter/viewholder/LabelColorsViewHolder.java @@ -1,8 +1,8 @@ package com.fastaccess.ui.adapter.viewholder; import android.graphics.Color; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.view.View; import android.view.ViewGroup; diff --git a/app/src/main/java/com/fastaccess/ui/adapter/viewholder/LabelsViewHolder.java b/app/src/main/java/com/fastaccess/ui/adapter/viewholder/LabelsViewHolder.java index 6f17803b..cd57af4a 100644 --- a/app/src/main/java/com/fastaccess/ui/adapter/viewholder/LabelsViewHolder.java +++ b/app/src/main/java/com/fastaccess/ui/adapter/viewholder/LabelsViewHolder.java @@ -1,9 +1,9 @@ package com.fastaccess.ui.adapter.viewholder; import android.graphics.Color; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v7.widget.AppCompatImageView; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.widget.AppCompatImageView; import android.view.View; import android.view.ViewGroup; diff --git a/app/src/main/java/com/fastaccess/ui/adapter/viewholder/MilestonesViewHolder.java b/app/src/main/java/com/fastaccess/ui/adapter/viewholder/MilestonesViewHolder.java index c38475a8..f86bfdb7 100644 --- a/app/src/main/java/com/fastaccess/ui/adapter/viewholder/MilestonesViewHolder.java +++ b/app/src/main/java/com/fastaccess/ui/adapter/viewholder/MilestonesViewHolder.java @@ -1,7 +1,7 @@ package com.fastaccess.ui.adapter.viewholder; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.view.View; import android.view.ViewGroup; diff --git a/app/src/main/java/com/fastaccess/ui/adapter/viewholder/NotificationsHeaderViewHolder.java b/app/src/main/java/com/fastaccess/ui/adapter/viewholder/NotificationsHeaderViewHolder.java index d92b40c6..694b3ffd 100644 --- a/app/src/main/java/com/fastaccess/ui/adapter/viewholder/NotificationsHeaderViewHolder.java +++ b/app/src/main/java/com/fastaccess/ui/adapter/viewholder/NotificationsHeaderViewHolder.java @@ -1,8 +1,8 @@ package com.fastaccess.ui.adapter.viewholder; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v7.widget.AppCompatImageButton; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.widget.AppCompatImageButton; import android.view.View; import android.view.ViewGroup; diff --git a/app/src/main/java/com/fastaccess/ui/adapter/viewholder/NotificationsViewHolder.java b/app/src/main/java/com/fastaccess/ui/adapter/viewholder/NotificationsViewHolder.java index f4db564b..4a637447 100644 --- a/app/src/main/java/com/fastaccess/ui/adapter/viewholder/NotificationsViewHolder.java +++ b/app/src/main/java/com/fastaccess/ui/adapter/viewholder/NotificationsViewHolder.java @@ -1,9 +1,9 @@ package com.fastaccess.ui.adapter.viewholder; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v4.content.ContextCompat; -import android.support.v7.widget.CardView; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; +import androidx.cardview.widget.CardView; import android.view.View; import android.view.ViewGroup; @@ -28,7 +28,6 @@ public class NotificationsViewHolder extends BaseViewHolder) : - BaseViewHolder(view, adapter) { - - @BindView(R.id.stateImage) lateinit var stateImage: ForegroundImageView - @BindView(R.id.avatarLayout) lateinit var avatarLayout: AvatarLayout - @BindView(R.id.stateText) lateinit var stateText: FontTextView - @BindView(R.id.commitStatus) lateinit var commitStatus: ForegroundImageView - - override fun bind(t: PullRequestTimelineModel) { - val node = t.node - commitStatus.visibility = View.GONE - if (node != null) { - when { - node.asAssignedEvent() != null -> assignedEvent(node.asAssignedEvent()!!) - node.asBaseRefForcePushedEvent() != null -> forcePushEvent(node.asBaseRefForcePushedEvent()!!) - node.asClosedEvent() != null -> closedEvent(node.asClosedEvent()!!) - node.asCommit() != null -> commitEvent(node.asCommit()!!) - node.asDemilestonedEvent() != null -> demilestonedEvent(node.asDemilestonedEvent()!!) - node.asDeployedEvent() != null -> deployedEvent(node.asDeployedEvent()!!) - node.asHeadRefDeletedEvent() != null -> refDeletedEvent(node.asHeadRefDeletedEvent()!!) - node.asHeadRefForcePushedEvent() != null -> refForPushedEvent(node.asHeadRefForcePushedEvent()!!) - node.asHeadRefRestoredEvent() != null -> headRefRestoredEvent(node.asHeadRefRestoredEvent()!!) - node.asLabeledEvent() != null -> labeledEvent(node.asLabeledEvent()!!) - node.asLockedEvent() != null -> lockEvent(node.asLockedEvent()!!) - node.asMergedEvent() != null -> mergedEvent(node.asMergedEvent()!!) - node.asMilestonedEvent() != null -> milestoneEvent(node.asMilestonedEvent()!!) - node.asReferencedEvent() != null -> referenceEvent(node.asReferencedEvent()!!) - node.asRenamedTitleEvent() != null -> renamedEvent(node.asRenamedTitleEvent()!!) - node.asReopenedEvent() != null -> reopenedEvent(node.asReopenedEvent()!!) - node.asUnassignedEvent() != null -> unassignedEvent(node.asUnassignedEvent()!!) - node.asUnlabeledEvent() != null -> unlabeledEvent(node.asUnlabeledEvent()!!) - node.asUnlockedEvent() != null -> unlockedEvent(node.asUnlockedEvent()!!) - else -> reset() - } - } else { - reset() - } - } - - private fun reset() { - stateText.text = null - avatarLayout.setUrl(null, null, false, false) - } - - @SuppressLint("SetTextI18n") - private fun unlockedEvent(event: PullRequestTimelineQuery.AsUnlockedEvent) { - event.actor()?.let { - stateText.text = SpannableBuilder.builder() - .bold(it.login()) - .append(" ") - .append("unlocked this conversation") - .append(" ") - .append(ParseDateFormat.getTimeAgo((event.createdAt().toString()))) - stateImage.setImageResource(R.drawable.ic_lock) - avatarLayout.setUrl(it.avatarUrl().toString(), it.login(), false, LinkParserHelper.isEnterprise(it.url().toString())) - } - } - - private fun unlabeledEvent(event: PullRequestTimelineQuery.AsUnlabeledEvent) { - event.actor()?.let { - val color = Color.parseColor("#" + event.label().color()) - stateText.text = SpannableBuilder.builder() - .bold(it.login()) - .append(" ") - .append("removed") - .append(" ") - .append(event.label().name(), CodeSpan(color, ViewHelper.generateTextColor(color), 5.0f)) - .append(" ") - .append(ParseDateFormat.getTimeAgo((event.createdAt().toString()))) - stateImage.setImageResource(R.drawable.ic_label) - avatarLayout.setUrl(it.avatarUrl().toString(), it.login(), false, LinkParserHelper.isEnterprise(it.url().toString())) - } - } - - private fun unassignedEvent(event: PullRequestTimelineQuery.AsUnassignedEvent) { - event.actor()?.let { - stateText.text = SpannableBuilder.builder() - .bold(it.login()) - .append(" ") - .append("unassigned") //TODO add "removed their assignment" for self - .append(" ") - .append(event.user()?.login()) - .append(" ") - .append(ParseDateFormat.getTimeAgo((event.createdAt().toString()))) - stateImage.setImageResource(R.drawable.ic_profile) - avatarLayout.setUrl(it.avatarUrl().toString(), it.login(), false, LinkParserHelper.isEnterprise(it.url().toString())) - } - } - - private fun reopenedEvent(event: PullRequestTimelineQuery.AsReopenedEvent) { - event.actor()?.let { - stateText.text = SpannableBuilder.builder() - .bold(it.login()) - .append(" ") - .append("reopened this") - .append(" ") - .append(ParseDateFormat.getTimeAgo((event.createdAt().toString()))) - stateImage.setImageResource(R.drawable.ic_issue_opened) - avatarLayout.setUrl(it.avatarUrl().toString(), it.login(), false, LinkParserHelper.isEnterprise(it.url().toString())) - } - } - - private fun renamedEvent(event: PullRequestTimelineQuery.AsRenamedTitleEvent) { - event.actor()?.let { - stateText.text = SpannableBuilder.builder() - .bold(it.login()) - .append(" ") - .append("changed the title from").append(" ").append(event.previousTitle()) - .append(" ").append("to").append(" ").bold(event.currentTitle()) - .append(" ") - .append(ParseDateFormat.getTimeAgo((event.createdAt().toString()))) - stateImage.setImageResource(R.drawable.ic_edit) - avatarLayout.setUrl(it.avatarUrl().toString(), it.login(), false, LinkParserHelper.isEnterprise(it.url().toString())) - } - } - - private fun referenceEvent(event: PullRequestTimelineQuery.AsReferencedEvent) { - event.actor()?.let { - stateText.text = SpannableBuilder.builder() - .bold(it.login()) - .append(" ") - .append(if (event.isCrossRepository) "cross referenced this" else "referenced this") - .append(" ") - .append("from").append(" ") - .url(if (event.commit() != null) { - substring(event.commit()?.oid()?.toString()) - } else if (event.subject().asIssue() != null) { - if (event.isCrossRepository) { - "${event.commitRepository().nameWithOwner()} ${event.subject().asIssue()?.title()}#${event.subject().asIssue()?.number()}" - } else { - "${event.subject().asIssue()?.title()}#${event.subject().asIssue()?.number()}" - } - } else if (event.subject().asPullRequest() != null) { - if (event.isCrossRepository) { - "${event.commitRepository().nameWithOwner()} ${event.subject().asPullRequest()?.title()}" + - "#${event.subject().asPullRequest()?.number()}" - } else { - "${event.subject().asPullRequest()?.title()}#${event.subject().asPullRequest()?.number()}" - } - } else { - event.commitRepository().nameWithOwner() - }) - .append(" ") - .append(ParseDateFormat.getTimeAgo((event.createdAt().toString()))) - stateImage.setImageResource(R.drawable.ic_push) - avatarLayout.setUrl(it.avatarUrl().toString(), it.login(), false, LinkParserHelper.isEnterprise(it.url().toString())) - } - } - - private fun milestoneEvent(event: PullRequestTimelineQuery.AsMilestonedEvent) { - event.actor()?.let { - stateText.text = SpannableBuilder.builder() - .bold(it.login()) - .append(" ") - .append("added this to the") - .append(" ") - .append(event.milestoneTitle()).append(" ").append("milestone") - .append(" ") - .append(ParseDateFormat.getTimeAgo((event.createdAt().toString()))) - stateImage.setImageResource(R.drawable.ic_milestone) - avatarLayout.setUrl(it.avatarUrl().toString(), it.login(), false, LinkParserHelper.isEnterprise(it.url().toString())) - } - } - - private fun mergedEvent(event: PullRequestTimelineQuery.AsMergedEvent) { - event.actor()?.let { - stateText.text = SpannableBuilder.builder() - .bold(it.login()) - .append(" ") - .append("merged commit") - .append(" ") - .url(substring(event.commit()?.oid()?.toString())) - .append(" ") - .append("into") - .append(" ") - .append(event.actor()) - .append(":") - .append(event.mergeRefName(), BackgroundColorSpan(HtmlHelper.getWindowBackground(PrefGetter.getThemeType()))) - .append(" ") - .append(ParseDateFormat.getTimeAgo((event.createdAt().toString()))) - stateImage.setImageResource(R.drawable.ic_merge) - avatarLayout.setUrl(it.avatarUrl().toString(), it.login(), false, LinkParserHelper.isEnterprise(it.url().toString())) - } - } - - private fun lockEvent(event: PullRequestTimelineQuery.AsLockedEvent) { - event.actor()?.let { - stateText.text = SpannableBuilder.builder() - .bold(it.login()) - .append(" ") - .append("locked and limited conversation to collaborators") - .append(" ") - .append(ParseDateFormat.getTimeAgo((event.createdAt().toString()))) - stateImage.setImageResource(R.drawable.ic_lock) - avatarLayout.setUrl(it.avatarUrl().toString(), it.login(), false, LinkParserHelper.isEnterprise(it.url().toString())) - } - } - - private fun labeledEvent(event: PullRequestTimelineQuery.AsLabeledEvent) { - event.actor()?.let { - val color = Color.parseColor("#" + event.label().color()) - stateText.text = SpannableBuilder.builder() - .bold(it.login()) - .append(" ") - .append("labeled") - .append(" ") - .append(event.label().name(), CodeSpan(color, ViewHelper.generateTextColor(color), 5.0f)) - .append(" ") - .append(ParseDateFormat.getTimeAgo((event.createdAt().toString()))) - stateImage.setImageResource(R.drawable.ic_label) - avatarLayout.setUrl(it.avatarUrl().toString(), it.login(), false, LinkParserHelper.isEnterprise(it.url().toString())) - } - } - - private fun headRefRestoredEvent(event: PullRequestTimelineQuery.AsHeadRefRestoredEvent) { - event.actor()?.let { - stateText.text = SpannableBuilder.builder() - .bold(it.login()) - .append(" ") - .append("restored the") - .append(" ") - .append(it.login()) - .append(":") - .append(event.pullRequest().headRefName(), BackgroundColorSpan(HtmlHelper.getWindowBackground(PrefGetter.getThemeType()))) - .append(" ") - .append("branch") - .append(" ") - .append(ParseDateFormat.getTimeAgo((event.createdAt().toString()))) - stateImage.setImageResource(R.drawable.ic_push) - avatarLayout.setUrl(it.avatarUrl().toString(), it.login(), false, LinkParserHelper.isEnterprise(it.url().toString())) - } - } - - private fun refForPushedEvent(event: PullRequestTimelineQuery.AsHeadRefForcePushedEvent) { - event.actor()?.let { - stateText.text = SpannableBuilder.builder() - .bold(it.login()) - .append(" ") - .append("reference force pushed to", BackgroundColorSpan(HtmlHelper.getWindowBackground(PrefGetter.getThemeType()))) - .append(" ") - .url(substring(event.afterCommit().oid().toString())) - .append(" ") - .append(ParseDateFormat.getTimeAgo((event.createdAt().toString()))) - stateImage.setImageResource(R.drawable.ic_push) - avatarLayout.setUrl(it.avatarUrl().toString(), it.login(), false, LinkParserHelper.isEnterprise(it.url().toString())) - } - } - - private fun refDeletedEvent(event: PullRequestTimelineQuery.AsHeadRefDeletedEvent) { - event.actor()?.let { - stateText.text = SpannableBuilder.builder() - .bold(it.login()) - .append(" ") - .append("deleted the") - .append(" ") - .append(it.login()) - .append(":") - .append(substring(event.headRefName()), BackgroundColorSpan(HtmlHelper.getWindowBackground(PrefGetter.getThemeType()))) - .append(" ") - .append("branch") - .append(" ") - .append(ParseDateFormat.getTimeAgo((event.createdAt().toString()))) - stateImage.setImageResource(R.drawable.ic_trash) - avatarLayout.setUrl(it.avatarUrl().toString(), it.login(), false, LinkParserHelper.isEnterprise(it.url().toString())) - } - } - - private fun deployedEvent(event: PullRequestTimelineQuery.AsDeployedEvent) { - event.actor()?.let { - stateText.text = SpannableBuilder.builder() - .bold(it.login()) - .append(" ") - .append("made a deployment", BackgroundColorSpan(HtmlHelper.getWindowBackground(PrefGetter.getThemeType()))) - .append(" ") - .append(event.deployment().latestStatus()?.state()?.name) - .append(" ") - .append(ParseDateFormat.getTimeAgo((event.createdAt().toString()))) - stateImage.setImageResource(R.drawable.ic_push) - avatarLayout.setUrl(it.avatarUrl().toString(), it.login(), false, LinkParserHelper.isEnterprise(it.url().toString())) - } - } - - private fun demilestonedEvent(event: PullRequestTimelineQuery.AsDemilestonedEvent) { - event.actor()?.let { - stateText.text = SpannableBuilder.builder() - .bold(it.login()) - .append(" ") - .append("removed this from the") - .append(" ") - .append(event.milestoneTitle()).append(" ").append("milestone") - .append(" ") - .append(ParseDateFormat.getTimeAgo((event.createdAt().toString()))) - stateImage.setImageResource(R.drawable.ic_milestone) - avatarLayout.setUrl(it.avatarUrl().toString(), it.login(), false, LinkParserHelper.isEnterprise(it.url().toString())) - } - } - - private fun commitEvent(event: PullRequestTimelineQuery.AsCommit) { - event.author()?.let { - stateText.text = SpannableBuilder.builder()//Review[k0shk0sh] We may want to suppress more then 3 or 4 commits. since it will clog the it - .bold(if (it.user() == null) it.name() else it.user()?.login()) - .append(" ") - .append("committed") - .append(" ") - .append(event.messageHeadline()) - .append(" ") - .url(substring(event.oid().toString())) - .append(" ") - .append(ParseDateFormat.getTimeAgo((event.committedDate().toString()))) - stateImage.setImageResource(R.drawable.ic_push) - avatarLayout.setUrl(it.user()?.avatarUrl().toString(), it.user()?.login(), false, - LinkParserHelper.isEnterprise(it.user()?.url().toString())) - event.status()?.let { - commitStatus.visibility = View.VISIBLE - val context = commitStatus.context - commitStatus.tintDrawableColor(when (it.state()) { - StatusState.ERROR -> ContextCompat.getColor(context, R.color.material_red_700) - StatusState.FAILURE -> ContextCompat.getColor(context, R.color.material_deep_orange_700) - StatusState.SUCCESS -> ContextCompat.getColor(context, R.color.material_green_700) - else -> ContextCompat.getColor(context, R.color.material_yellow_700) - }) - } - } - } - - private fun closedEvent(event: PullRequestTimelineQuery.AsClosedEvent) { - event.actor()?.let { - stateText.text = SpannableBuilder.builder() - .bold(it.login()) - .append(" ") - .append("closed this in") - .append(" ") - .url(substring(event.commit()?.oid()?.toString())) - .append(" ") - .append(ParseDateFormat.getTimeAgo((event.createdAt().toString()))) - stateImage.setImageResource(R.drawable.ic_merge) - avatarLayout.setUrl(it.avatarUrl().toString(), it.login(), false, LinkParserHelper.isEnterprise(it.url().toString())) - } - } - - private fun forcePushEvent(event: PullRequestTimelineQuery.AsBaseRefForcePushedEvent) { - event.actor()?.let { - stateText.text = SpannableBuilder.builder() - .bold(it.login()) - .append(" ") - .append("force pushed to", BackgroundColorSpan(HtmlHelper.getWindowBackground(PrefGetter.getThemeType()))) - .append(" ") - .url(substring(event.afterCommit().oid().toString())) - .append(" ") - .append(ParseDateFormat.getTimeAgo((event.createdAt().toString()))) - stateImage.setImageResource(R.drawable.ic_push) - avatarLayout.setUrl(it.avatarUrl().toString(), it.login(), false, LinkParserHelper.isEnterprise(it.url().toString())) - } - } - - private fun assignedEvent(event: PullRequestTimelineQuery.AsAssignedEvent) { - event.actor()?.let { - stateText.text = SpannableBuilder.builder() - .bold(it.login()) - .append(" ") - .append("assigned") //TODO add "self-assigned" for self - .append(" ") - .append(event.user()?.login()) - .append(" ") - .append(ParseDateFormat.getTimeAgo((event.createdAt().toString()))) - stateImage.setImageResource(R.drawable.ic_profile) - avatarLayout.setUrl(it.avatarUrl().toString(), it.login(), false, LinkParserHelper.isEnterprise(it.url().toString())) - } - } - - private fun substring(value: String?): String { - if (value == null) { - return "" - } - return if (value.length <= 7) value - else value.substring(0, 7) - } - - companion object { - fun newInstance(parent: ViewGroup, adapter: BaseRecyclerAdapter<*, *, *>): PullRequestEventViewHolder { - return PullRequestEventViewHolder(getView(parent, R.layout.issue_timeline_row_item), adapter) - } - } -} \ No newline at end of file diff --git a/app/src/main/java/com/fastaccess/ui/adapter/viewholder/PullRequestFilesViewHolder.java b/app/src/main/java/com/fastaccess/ui/adapter/viewholder/PullRequestFilesViewHolder.java index 0c857809..9f0eedc7 100644 --- a/app/src/main/java/com/fastaccess/ui/adapter/viewholder/PullRequestFilesViewHolder.java +++ b/app/src/main/java/com/fastaccess/ui/adapter/viewholder/PullRequestFilesViewHolder.java @@ -1,7 +1,7 @@ package com.fastaccess.ui.adapter.viewholder; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.view.View; import android.view.ViewGroup; @@ -9,6 +9,7 @@ import com.fastaccess.R; import com.fastaccess.data.dao.CommitFileChanges; import com.fastaccess.data.dao.CommitFileModel; import com.fastaccess.data.dao.CommitLinesModel; +import com.fastaccess.helper.AppHelper; import com.fastaccess.ui.adapter.CommitLinesAdapter; import com.fastaccess.ui.adapter.callback.OnToggleView; import com.fastaccess.ui.modules.repos.pull_requests.pull_request.details.files.PullRequestFilesMvp; @@ -136,5 +137,12 @@ public class PullRequestFilesViewHolder extends BaseViewHolder 0 ? item.getLeftLineNo() : item.getRightLineNo(); + String url = commitFileChanges.getCommitFileModel().getBlobUrl() + "#L" + lineNo; + AppHelper.copyToClipboard(v.getContext(), url); + } } diff --git a/app/src/main/java/com/fastaccess/ui/adapter/viewholder/PullRequestViewHolder.java b/app/src/main/java/com/fastaccess/ui/adapter/viewholder/PullRequestViewHolder.java index 7898539a..3675ee0c 100644 --- a/app/src/main/java/com/fastaccess/ui/adapter/viewholder/PullRequestViewHolder.java +++ b/app/src/main/java/com/fastaccess/ui/adapter/viewholder/PullRequestViewHolder.java @@ -1,7 +1,7 @@ package com.fastaccess.ui.adapter.viewholder; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.view.View; import android.view.ViewGroup; diff --git a/app/src/main/java/com/fastaccess/ui/adapter/viewholder/PullStatusViewHolder.java b/app/src/main/java/com/fastaccess/ui/adapter/viewholder/PullStatusViewHolder.java index 6bb63784..4051cdf0 100644 --- a/app/src/main/java/com/fastaccess/ui/adapter/viewholder/PullStatusViewHolder.java +++ b/app/src/main/java/com/fastaccess/ui/adapter/viewholder/PullStatusViewHolder.java @@ -1,7 +1,7 @@ package com.fastaccess.ui.adapter.viewholder; -import android.support.annotation.NonNull; -import android.support.v4.content.ContextCompat; +import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; import android.text.method.LinkMovementMethod; import android.view.View; import android.view.ViewGroup; @@ -11,7 +11,6 @@ import com.fastaccess.R; import com.fastaccess.data.dao.PullRequestStatusModel; import com.fastaccess.data.dao.types.StatusStateType; import com.fastaccess.helper.InputHelper; -import com.fastaccess.helper.Logger; import com.fastaccess.provider.scheme.SchemeParser; import com.fastaccess.ui.widgets.FontTextView; import com.fastaccess.ui.widgets.ForegroundImageView; @@ -45,10 +44,11 @@ public class PullStatusViewHolder extends BaseViewHolder } @Override public void bind(@NonNull PullRequestStatusModel pullRequestStatusModel) { - Logger.e(pullRequestStatusModel.getState(), pullRequestStatusModel.isMergable()); if (pullRequestStatusModel.getState() != null) { StatusStateType stateType = pullRequestStatusModel.getState(); stateImage.setImageResource(stateType.getDrawableRes()); + String mergeableState = pullRequestStatusModel.getMergeableState(); + boolean isBlocked = "blocked".equalsIgnoreCase(mergeableState); if (stateType == StatusStateType.failure) { stateImage.tintDrawableColor(red); if (pullRequestStatusModel.isMergable()) { @@ -63,7 +63,7 @@ public class PullStatusViewHolder extends BaseViewHolder if (pullRequestStatusModel.isMergable()) { stateImage.setImageResource(R.drawable.ic_check_small); stateImage.tintDrawableColor(green); - status.setText(R.string.commit_can_be_merged); + status.setText(!isBlocked ? R.string.commit_can_be_merged : R.string.can_not_merge_pr); } else { stateImage.setImageResource(stateType.getDrawableRes()); stateImage.tintDrawableColor(indigo); @@ -72,7 +72,7 @@ public class PullStatusViewHolder extends BaseViewHolder } else { stateImage.tintDrawableColor(green); if (pullRequestStatusModel.isMergable()) { - status.setText(R.string.commit_can_be_merged); + status.setText(!isBlocked ? R.string.commit_can_be_merged : R.string.can_not_merge_pr); } else { status.setText(R.string.checks_passed); } diff --git a/app/src/main/java/com/fastaccess/ui/adapter/viewholder/ReleasesViewHolder.java b/app/src/main/java/com/fastaccess/ui/adapter/viewholder/ReleasesViewHolder.java index 7dbf3e88..aa1db2df 100644 --- a/app/src/main/java/com/fastaccess/ui/adapter/viewholder/ReleasesViewHolder.java +++ b/app/src/main/java/com/fastaccess/ui/adapter/viewholder/ReleasesViewHolder.java @@ -1,7 +1,7 @@ package com.fastaccess.ui.adapter.viewholder; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.view.View; import android.view.ViewGroup; diff --git a/app/src/main/java/com/fastaccess/ui/adapter/viewholder/RepoFilePathsViewHolder.java b/app/src/main/java/com/fastaccess/ui/adapter/viewholder/RepoFilePathsViewHolder.java index 258c6d3b..ef8d7221 100644 --- a/app/src/main/java/com/fastaccess/ui/adapter/viewholder/RepoFilePathsViewHolder.java +++ b/app/src/main/java/com/fastaccess/ui/adapter/viewholder/RepoFilePathsViewHolder.java @@ -1,6 +1,6 @@ package com.fastaccess.ui.adapter.viewholder; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import android.view.View; import android.view.ViewGroup; diff --git a/app/src/main/java/com/fastaccess/ui/adapter/viewholder/RepoFilesViewHolder.java b/app/src/main/java/com/fastaccess/ui/adapter/viewholder/RepoFilesViewHolder.java index 22268678..d88509de 100644 --- a/app/src/main/java/com/fastaccess/ui/adapter/viewholder/RepoFilesViewHolder.java +++ b/app/src/main/java/com/fastaccess/ui/adapter/viewholder/RepoFilesViewHolder.java @@ -1,6 +1,6 @@ package com.fastaccess.ui.adapter.viewholder; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import android.text.format.Formatter; import android.view.View; import android.view.ViewGroup; diff --git a/app/src/main/java/com/fastaccess/ui/adapter/viewholder/ReposViewHolder.java b/app/src/main/java/com/fastaccess/ui/adapter/viewholder/ReposViewHolder.java index 6b490e7b..380cfb26 100644 --- a/app/src/main/java/com/fastaccess/ui/adapter/viewholder/ReposViewHolder.java +++ b/app/src/main/java/com/fastaccess/ui/adapter/viewholder/ReposViewHolder.java @@ -1,8 +1,8 @@ package com.fastaccess.ui.adapter.viewholder; import android.graphics.Color; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.text.format.Formatter; import android.view.View; import android.view.ViewGroup; @@ -94,6 +94,10 @@ public class ReposViewHolder extends BaseViewHolder { language.setText(repo.getLanguage()); language.setTextColor(ColorsProvider.getColorAsColor(repo.getLanguage(), language.getContext())); language.setVisibility(View.VISIBLE); + } else { + language.setTextColor(Color.BLACK); + language.setVisibility(View.GONE); + language.setText(""); } } } diff --git a/app/src/main/java/com/fastaccess/ui/adapter/viewholder/ReviewCommentsViewHolder.java b/app/src/main/java/com/fastaccess/ui/adapter/viewholder/ReviewCommentsViewHolder.java index e29faf00..a4859ed5 100644 --- a/app/src/main/java/com/fastaccess/ui/adapter/viewholder/ReviewCommentsViewHolder.java +++ b/app/src/main/java/com/fastaccess/ui/adapter/viewholder/ReviewCommentsViewHolder.java @@ -1,10 +1,10 @@ package com.fastaccess.ui.adapter.viewholder; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.transition.ChangeBounds; -import android.support.transition.TransitionManager; -import android.support.v7.widget.AppCompatImageView; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.transition.ChangeBounds; +import androidx.transition.TransitionManager; +import androidx.appcompat.widget.AppCompatImageView; import android.text.TextUtils; import android.view.View; import android.view.ViewGroup; @@ -150,7 +150,7 @@ public class ReviewCommentsViewHolder extends BaseViewHolder owner.setVisibility(View.VISIBLE); owner.setText(R.string.original_poster); } else { - owner.setText(null); + owner.setText(""); owner.setVisibility(View.GONE); } } diff --git a/app/src/main/java/com/fastaccess/ui/adapter/viewholder/SearchCodeViewHolder.java b/app/src/main/java/com/fastaccess/ui/adapter/viewholder/SearchCodeViewHolder.java index b1ba2cdf..a96a2caa 100644 --- a/app/src/main/java/com/fastaccess/ui/adapter/viewholder/SearchCodeViewHolder.java +++ b/app/src/main/java/com/fastaccess/ui/adapter/viewholder/SearchCodeViewHolder.java @@ -1,7 +1,7 @@ package com.fastaccess.ui.adapter.viewholder; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.view.View; import android.view.ViewGroup; diff --git a/app/src/main/java/com/fastaccess/ui/adapter/viewholder/SimpleViewHolder.java b/app/src/main/java/com/fastaccess/ui/adapter/viewholder/SimpleViewHolder.java index d91b25e2..f964a7b1 100644 --- a/app/src/main/java/com/fastaccess/ui/adapter/viewholder/SimpleViewHolder.java +++ b/app/src/main/java/com/fastaccess/ui/adapter/viewholder/SimpleViewHolder.java @@ -1,7 +1,7 @@ package com.fastaccess.ui.adapter.viewholder; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.view.View; import com.fastaccess.R; diff --git a/app/src/main/java/com/fastaccess/ui/adapter/viewholder/TeamsViewHolder.java b/app/src/main/java/com/fastaccess/ui/adapter/viewholder/TeamsViewHolder.java index 6183fd34..314a270c 100644 --- a/app/src/main/java/com/fastaccess/ui/adapter/viewholder/TeamsViewHolder.java +++ b/app/src/main/java/com/fastaccess/ui/adapter/viewholder/TeamsViewHolder.java @@ -1,7 +1,7 @@ package com.fastaccess.ui.adapter.viewholder; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.view.View; import android.view.ViewGroup; diff --git a/app/src/main/java/com/fastaccess/ui/adapter/viewholder/TimelineCommentsViewHolder.java b/app/src/main/java/com/fastaccess/ui/adapter/viewholder/TimelineCommentsViewHolder.java index c18914dd..5ee5a0a4 100644 --- a/app/src/main/java/com/fastaccess/ui/adapter/viewholder/TimelineCommentsViewHolder.java +++ b/app/src/main/java/com/fastaccess/ui/adapter/viewholder/TimelineCommentsViewHolder.java @@ -1,9 +1,9 @@ package com.fastaccess.ui.adapter.viewholder; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.transition.ChangeBounds; -import android.support.transition.TransitionManager; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.transition.ChangeBounds; +import androidx.transition.TransitionManager; import android.text.TextUtils; import android.view.View; import android.view.ViewGroup; @@ -162,14 +162,14 @@ public class TimelineCommentsViewHolder extends BaseViewHolder { owner.setVisibility(View.VISIBLE); owner.setText(R.string.original_poster); } else { - owner.setText(null); + owner.setText(""); owner.setVisibility(View.GONE); } } } } else { avatar.setUrl(null, null, false, false); - name.setText(null); + name.setText(""); } if (!InputHelper.isEmpty(commentsModel.getPath()) && commentsModel.getPosition() > 0) { pathText.setVisibility(View.VISIBLE); diff --git a/app/src/main/java/com/fastaccess/ui/adapter/viewholder/TrendingViewHolder.kt b/app/src/main/java/com/fastaccess/ui/adapter/viewholder/TrendingViewHolder.kt index c55acee1..8c151003 100644 --- a/app/src/main/java/com/fastaccess/ui/adapter/viewholder/TrendingViewHolder.kt +++ b/app/src/main/java/com/fastaccess/ui/adapter/viewholder/TrendingViewHolder.kt @@ -40,7 +40,7 @@ open class TrendingViewHolder(itemView: View, adapter: BaseRecyclerAdapter> extends TiActivity implements - BaseMvp.FAView, NavigationView.OnNavigationItemSelectedListener { +public abstract class BaseActivity> extends TiActivity implements BaseMvp.FAView { @State boolean isProgressShowing; @Nullable @BindView(R.id.toolbar) protected Toolbar toolbar; @Nullable @BindView(R.id.appbar) protected AppBarLayout appbar; @Nullable @BindView(R.id.drawer) protected DrawerLayout drawer; @Nullable @BindView(R.id.extrasNav) public NavigationView extraNav; - @Nullable @BindView(R.id.accountsNav) NavigationView accountsNav; + @Nullable @BindView(R.id.drawerViewPager) ViewPager drawerViewPager; @State String schemeUrl; @State Bundle presenterStateBundle = new Bundle(); @@ -110,7 +110,6 @@ public abstract class BaseActivity System.currentTimeMillis()) { return true; } else { - Toast.makeText(App.getInstance(), R.string.press_again_to_exit, Toast.LENGTH_SHORT).show(); + showMessage(R.string.press_again_to_exit, R.string.press_again_to_exit); } backPressTimer = System.currentTimeMillis(); return false; @@ -469,7 +467,7 @@ public abstract class BaseActivity { - if (ViewHelper.isTablet(getActivity())) { + if (ViewHelper.isTablet(requireContext())) { if (dialog.getWindow() != null) { dialog.getWindow().setLayout( ViewGroup.LayoutParams.WRAP_CONTENT, diff --git a/app/src/main/java/com/fastaccess/ui/base/BaseDialogFragment.java b/app/src/main/java/com/fastaccess/ui/base/BaseDialogFragment.java index 75af217b..e0ddd490 100644 --- a/app/src/main/java/com/fastaccess/ui/base/BaseDialogFragment.java +++ b/app/src/main/java/com/fastaccess/ui/base/BaseDialogFragment.java @@ -6,16 +6,17 @@ import android.annotation.SuppressLint; import android.app.Dialog; import android.content.Context; import android.os.Bundle; -import android.support.annotation.LayoutRes; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.annotation.StringRes; -import android.support.v7.view.ContextThemeWrapper; +import androidx.annotation.LayoutRes; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.annotation.StringRes; +import androidx.appcompat.view.ContextThemeWrapper; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.evernote.android.state.StateSaver; +import com.fastaccess.App; import com.fastaccess.R; import com.fastaccess.helper.AnimHelper; import com.fastaccess.helper.AppHelper; @@ -26,6 +27,8 @@ import com.fastaccess.ui.widgets.dialog.ProgressDialogFragment; import net.grandcentrix.thirtyinch.TiDialogFragment; +import org.jetbrains.annotations.NotNull; + import butterknife.ButterKnife; import butterknife.Unbinder; @@ -44,7 +47,7 @@ public abstract class BaseDialogFragment AnimHelper.revealDialog(dialog, - getResources().getInteger(android.R.integer.config_longAnimTime))); + App.getInstance().getResources().getInteger(android.R.integer.config_longAnimTime))); } return dialog; } - @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { + @Override public void onViewCreated(@NotNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); onFragmentCreated(view, savedInstanceState); } diff --git a/app/src/main/java/com/fastaccess/ui/base/BaseFragment.java b/app/src/main/java/com/fastaccess/ui/base/BaseFragment.java index 99c76c9a..b721b593 100644 --- a/app/src/main/java/com/fastaccess/ui/base/BaseFragment.java +++ b/app/src/main/java/com/fastaccess/ui/base/BaseFragment.java @@ -3,11 +3,11 @@ package com.fastaccess.ui.base; import android.annotation.SuppressLint; import android.content.Context; import android.os.Bundle; -import android.support.annotation.LayoutRes; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.annotation.StringRes; -import android.support.v7.view.ContextThemeWrapper; +import androidx.annotation.LayoutRes; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.annotation.StringRes; +import androidx.appcompat.view.ContextThemeWrapper; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -96,7 +96,7 @@ public abstract class BaseFragment, private val extraNav: NavigationView?, private val accountsNav: NavigationView?) - : BaseViewHolder.OnItemClickListener { +class MainNavDrawer(val view: BaseActivity<*, *>, private val extraNav: NavigationView?) { - private var menusHolder: ViewGroup? = null - private val togglePinned: View? = view.findViewById(R.id.togglePinned) - private val pinnedList: DynamicRecyclerView? = view.findViewById(R.id.pinnedList) - private val pinnedListAdapter = PinnedReposAdapter(true) - private val userModel: Login? = Login.getUser() init { - menusHolder = view.findViewById(R.id.menusHolder) - pinnedListAdapter.listener = object : BaseViewHolder.OnItemClickListener { - override fun onItemClick(position: Int, v: View?, item: PinnedRepos?) { - if (v != null && item != null) { - view.closeDrawer() - Handler().postDelayed({ SchemeParser.launchUri(v.context, item.pinnedRepo.htmlUrl) }, 250) - } - } - - override fun onItemLongClick(position: Int, v: View?, item: PinnedRepos?) {} - } - pinnedList?.adapter = pinnedListAdapter - togglePinned?.setOnClickListener { - view.closeDrawer() - Handler().postDelayed({ PinnedReposActivity.startActivity(view) }, 250) + setupView() + val viewpager = view.findViewById(R.id.drawerViewPager) + viewpager?.let { + it.adapter = FragmentsPagerAdapter(view.getSupportFragmentManager(), FragmentPagerAdapterModel.buildForDrawer(view)) + view.findViewById(R.id.drawerTabLayout)?.setupWithViewPager(it) } } - fun setupViewDrawer() { - extraNav?.let { - val header = it.getHeaderView(0) - setupView(header) - } - accountsNav?.let { - setupAccounts() - setupPinned() - setupItems() - } - } - - private fun setupItems() { - userModel?.let { - view.findViewById(R.id.repos).setOnClickListener { - view.closeDrawer() - Handler().postDelayed({ UserPagerActivity.startActivity(view, userModel.login, false, PrefGetter.isEnterprise(), 2) }, 250) - } - view.findViewById(R.id.starred).setOnClickListener { - view.closeDrawer() - Handler().postDelayed({ UserPagerActivity.startActivity(view, userModel.login, false, PrefGetter.isEnterprise(), 3) }, 250) - } - } - } - - private fun setupAccounts() { - val addAccount = view.findViewById(R.id.addAccLayout) - val recyclerView = view.findViewById(R.id.accLists) - val toggleImage = view.findViewById(R.id.toggleImage) - val toggle = view.findViewById(R.id.toggle) - val toggleAccountsLayout = view.findViewById(R.id.toggleAccountsLayout) - toggleImage.rotation = if (toggleAccountsLayout.visibility == View.VISIBLE) 180f else 0f - addAccount.setOnClickListener { - view.closeDrawer() - Handler().postDelayed({ - if (PrefGetter.isProEnabled() || PrefGetter.isEnterpriseEnabled()) { - val intent = Intent(view, LoginChooserActivity::class.java) - intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP - view.startActivity(intent) - } else { - view.startActivity(Intent(view, PremiumActivity::class.java)) - } - }, 250) - } - toggle.setOnClickListener { - TransitionManager.beginDelayedTransition(menusHolder ?: extraNav!!) - val isVisible = recyclerView.visibility == View.VISIBLE - recyclerView.visibility = if (isVisible) View.GONE else View.VISIBLE - toggleImage.rotation = if (recyclerView.visibility == View.VISIBLE) 180f else 0f - } - val adapter = LoginAdapter(true) - view.getPresenter().manageViewDisposable(Login.getAccounts() - .doOnComplete { - if (!adapter.isEmpty) { - toggleAccountsLayout.visibility = View.VISIBLE - adapter.listener = this - recyclerView.adapter = adapter - } else { - toggleAccountsLayout.visibility = View.GONE - } - } - .subscribe({ adapter.addItem(it) }, ::print)) - } - - private fun setupPinned() { - if (extraNav != null) { - view.getPresenter().manageViewDisposable(PinnedRepos.getMenuRepos() - .subscribe({ pinnedListAdapter.insertItems(it) }, ::println)) - } - } - - private fun setupView(view: View) { + fun setupView() { + val view = extraNav?.getHeaderView(0) ?: return + val userModel: Login? = Login.getUser() userModel?.let { (view.findViewById(R.id.navAvatarLayout) as AvatarLayout).setUrl(it.avatarUrl, null, false, PrefGetter.isEnterprise()) @@ -150,53 +45,6 @@ class MainNavDrawer(val view: BaseActivity<*, *>, private val extraNav: Navigati } view.findViewById(R.id.donatedIcon).visibility = if (PrefGetter.hasSupported()) View.VISIBLE else View.GONE view.findViewById(R.id.proTextView).visibility = if (PrefGetter.isProEnabled()) View.VISIBLE else View.GONE - view.findViewById(R.id.navAccHolder).setOnClickListener { - if (extraNav != null && accountsNav != null) { - TransitionManager.beginDelayedTransition(menusHolder ?: extraNav) - accountsNav.visibility = if (accountsNav.visibility == View.VISIBLE) View.GONE else View.VISIBLE - view.findViewById(R.id.navToggle).rotation = if (accountsNav.visibility == View.VISIBLE) 180f else 0f - setupPinned() - } - } } } - - fun onMainNavItemClick(item: MenuItem) { - if (item.isChecked) return - Handler().postDelayed({ - if (!view.isFinishing()) { - when { - item.itemId == R.id.navToRepo -> view.onNavToRepoClicked() - item.itemId == R.id.gists -> GistsListActivity.startActivity(view) - item.itemId == R.id.pinnedMenu -> PinnedReposActivity.startActivity(view) - item.itemId == R.id.mainView -> { - val intent = Intent(view, MainActivity::class.java) - intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP - view.startActivity(intent) - view.finish() - } - item.itemId == R.id.profile -> userModel?.let { - UserPagerActivity.startActivity(view, it.login, false, PrefGetter.isEnterprise(), 0) - } - item.itemId == R.id.settings -> view.onOpenSettings() - item.itemId == R.id.about -> view.startActivity(Intent(view, FastHubAboutActivity::class.java)) - item.itemId == R.id.orgs -> view.onOpenOrgsDialog() - item.itemId == R.id.notifications -> view.startActivity(Intent(view, NotificationActivity::class.java)) - item.itemId == R.id.trending -> view.startActivity(Intent(view, TrendingActivity::class.java)) - item.itemId == R.id.reportBug -> view.startActivity(CreateIssueActivity.startForResult(view)) - item.itemId == R.id.faq -> view.startActivity(Intent(view, PlayStoreWarningActivity::class.java)) - item.itemId == R.id.restorePurchase -> view.startActivity(Intent(view, CheckPurchaseActivity::class.java)) - } - } - }, 250) - } - - override fun onItemLongClick(position: Int, v: View?, item: Login) {} - - override fun onItemClick(position: Int, v: View, item: Login) { - view.getPresenter().manageViewDisposable(RxHelper.getObservable(Login.onMultipleLogin(item, item.isIsEnterprise, false)) - .doOnSubscribe { view.showProgress(0) } - .doOnComplete { view.hideProgress() } - .subscribe({ view.onRestartApp() }, ::println)) - } } \ No newline at end of file diff --git a/app/src/main/java/com/fastaccess/ui/base/mvp/BaseMvp.java b/app/src/main/java/com/fastaccess/ui/base/mvp/BaseMvp.java index 18c769b8..fec3eb79 100644 --- a/app/src/main/java/com/fastaccess/ui/base/mvp/BaseMvp.java +++ b/app/src/main/java/com/fastaccess/ui/base/mvp/BaseMvp.java @@ -1,9 +1,9 @@ package com.fastaccess.ui.base.mvp; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.annotation.StringRes; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.annotation.StringRes; import com.fastaccess.ui.widgets.dialog.MessageDialogView; diff --git a/app/src/main/java/com/fastaccess/ui/base/mvp/presenter/BasePresenter.java b/app/src/main/java/com/fastaccess/ui/base/mvp/presenter/BasePresenter.java index d3c7da5d..bce70d9d 100644 --- a/app/src/main/java/com/fastaccess/ui/base/mvp/presenter/BasePresenter.java +++ b/app/src/main/java/com/fastaccess/ui/base/mvp/presenter/BasePresenter.java @@ -1,13 +1,18 @@ package com.fastaccess.ui.base.mvp.presenter; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.annotation.StringRes; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.annotation.StringRes; import com.evernote.android.state.StateSaver; import com.fastaccess.R; import com.fastaccess.data.dao.GitHubErrorResponse; +import com.fastaccess.data.dao.GithubStatus; +import com.fastaccess.helper.InputHelper; +import com.fastaccess.helper.Logger; +import com.fastaccess.helper.ObjectsCompat; import com.fastaccess.helper.RxHelper; import com.fastaccess.provider.rest.RestProvider; import com.fastaccess.ui.base.mvp.BaseMvp; @@ -21,7 +26,6 @@ import java.util.concurrent.TimeoutException; import io.reactivex.Observable; import io.reactivex.disposables.Disposable; import io.reactivex.functions.Consumer; -import retrofit2.HttpException; /** @@ -108,9 +112,7 @@ public class BasePresenter extends TiPresenter impl @StringRes private int getPrettifiedErrorMessage(@Nullable Throwable throwable) { int resId = R.string.network_error; - if (throwable instanceof HttpException) { - resId = R.string.network_error; - } else if (throwable instanceof IOException) { + if (throwable instanceof IOException) { resId = R.string.request_error; } else if (throwable instanceof TimeoutException) { resId = R.string.unexpected_error; @@ -120,9 +122,14 @@ public class BasePresenter extends TiPresenter impl public void onCheckGitHubStatus() { manageObservable(RestProvider.gitHubStatus() + .filter(ObjectsCompat::nonNull) .doOnNext(gitHubStatusModel -> { - if (!"good".equalsIgnoreCase(gitHubStatusModel.getStatus())) { - sendToView(v -> v.showErrorMessage("Github Status:\n" + gitHubStatusModel.getBody())); + Logger.e(gitHubStatusModel); + GithubStatus status = gitHubStatusModel.getStatus(); + String description = status != null ? status.getDescription() : null; + String indicatorStatus = status != null ? status.getIndicator() : null; + if (!InputHelper.isEmpty(description) && !"none".equalsIgnoreCase(indicatorStatus)) { + sendToView(v -> v.showErrorMessage("Github Status:(" + indicatorStatus + ")\n" + description)); } })); } diff --git a/app/src/main/java/com/fastaccess/ui/modules/about/FastHubAboutActivity.java b/app/src/main/java/com/fastaccess/ui/modules/about/FastHubAboutActivity.java index ae41b37d..0f55f9b9 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/about/FastHubAboutActivity.java +++ b/app/src/main/java/com/fastaccess/ui/modules/about/FastHubAboutActivity.java @@ -3,9 +3,9 @@ package com.fastaccess.ui.modules.about; import android.content.Context; import android.content.Intent; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v4.content.ContextCompat; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; import android.view.MenuItem; import android.view.View; import android.widget.Toast; @@ -154,6 +154,7 @@ public class FastHubAboutActivity extends MaterialAboutActivity { .setOnClickAction(() -> new LibsBuilder() .withActivityStyle(AppHelper.isNightMode(getResources()) ? Libs.ActivityStyle.DARK : Libs.ActivityStyle.LIGHT) .withAutoDetect(true) + .withActivityTitle(this.getResources().getString(R.string.open_source_libs)) .withAboutIconShown(true) .withAboutVersionShown(true) .start(this)) diff --git a/app/src/main/java/com/fastaccess/ui/modules/changelog/ChangelogBottomSheetDialog.java b/app/src/main/java/com/fastaccess/ui/modules/changelog/ChangelogBottomSheetDialog.java index c3f8acae..6d972dce 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/changelog/ChangelogBottomSheetDialog.java +++ b/app/src/main/java/com/fastaccess/ui/modules/changelog/ChangelogBottomSheetDialog.java @@ -2,8 +2,8 @@ package com.fastaccess.ui.modules.changelog; import android.app.Dialog; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.view.View; import android.widget.ProgressBar; diff --git a/app/src/main/java/com/fastaccess/ui/modules/changelog/ChangelogMvp.java b/app/src/main/java/com/fastaccess/ui/modules/changelog/ChangelogMvp.java index 0245fc2f..b1f09f38 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/changelog/ChangelogMvp.java +++ b/app/src/main/java/com/fastaccess/ui/modules/changelog/ChangelogMvp.java @@ -1,6 +1,6 @@ package com.fastaccess.ui.modules.changelog; -import android.support.annotation.Nullable; +import androidx.annotation.Nullable; import com.fastaccess.ui.base.mvp.BaseMvp; diff --git a/app/src/main/java/com/fastaccess/ui/modules/code/CodeViewerActivity.java b/app/src/main/java/com/fastaccess/ui/modules/code/CodeViewerActivity.java index 218a1741..35b8f128 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/code/CodeViewerActivity.java +++ b/app/src/main/java/com/fastaccess/ui/modules/code/CodeViewerActivity.java @@ -4,8 +4,8 @@ import android.content.Context; import android.content.Intent; import android.net.Uri; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.view.Menu; import android.view.MenuItem; import android.webkit.MimeTypeMap; diff --git a/app/src/main/java/com/fastaccess/ui/modules/editor/EditorActivity.kt b/app/src/main/java/com/fastaccess/ui/modules/editor/EditorActivity.kt index d3cec953..88929744 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/editor/EditorActivity.kt +++ b/app/src/main/java/com/fastaccess/ui/modules/editor/EditorActivity.kt @@ -4,9 +4,9 @@ import android.annotation.SuppressLint import android.app.Activity import android.content.Intent import android.os.Bundle -import android.support.annotation.StringRes -import android.support.transition.TransitionManager -import android.support.v4.app.FragmentManager +import androidx.annotation.StringRes +import androidx.transition.TransitionManager +import androidx.fragment.app.FragmentManager import android.view.Menu import android.view.MenuItem import android.view.View @@ -39,8 +39,10 @@ class EditorActivity : BaseActivity(), EditorMv private var participants: ArrayList? = null private val sentFromFastHub: String by lazy { - "\n\n_" + getString(R.string.sent_from_fasthub, AppHelper.getDeviceName(), "", - "[" + getString(R.string.app_name) + "](https://play.google.com/store/apps/details?id=com.fastaccess.github)") + "_" + "\n\n_" + getString( + R.string.sent_from_fasthub, AppHelper.getDeviceName(), "", + "[" + getString(R.string.app_name) + "](https://play.google.com/store/apps/details?id=com.fastaccess.github)" + ) + "_" } @BindView(R.id.replyQuote) lateinit var replyQuote: LinearLayout @@ -76,9 +78,11 @@ class EditorActivity : BaseActivity(), EditorMv } else { quote.maxLines = 3 } - quote.setCompoundDrawablesWithIntrinsicBounds(0, 0, - if (quote.maxLines == 3) R.drawable.ic_arrow_drop_down - else R.drawable.ic_arrow_drop_up, 0) + quote.setCompoundDrawablesWithIntrinsicBounds( + 0, 0, + if (quote.maxLines == 3) R.drawable.ic_arrow_drop_down + else R.drawable.ic_arrow_drop_up, 0 + ) } override fun onCreate(savedInstanceState: Bundle?) { @@ -96,10 +100,12 @@ class EditorActivity : BaseActivity(), EditorMv override fun onSendResultAndFinish(commentModel: Comment, isNew: Boolean) { hideProgress() val intent = Intent() - intent.putExtras(Bundler.start() + intent.putExtras( + Bundler.start() .put(BundleConstant.ITEM, commentModel) .put(BundleConstant.EXTRA, isNew) - .end()) + .end() + ) setResult(Activity.RESULT_OK, intent) finish() } @@ -114,10 +120,12 @@ class EditorActivity : BaseActivity(), EditorMv override fun onSendReviewResultAndFinish(comment: EditReviewCommentModel, isNew: Boolean) { hideProgress() val intent = Intent() - intent.putExtras(Bundler.start() + intent.putExtras( + Bundler.start() .put(BundleConstant.ITEM, comment) .put(BundleConstant.EXTRA, isNew) - .end()) + .end() + ) setResult(Activity.RESULT_OK, intent) finish() } @@ -164,13 +172,15 @@ class EditorActivity : BaseActivity(), EditorMv override fun onBackPressed() { if (!InputHelper.isEmpty(editText)) { ViewHelper.hideKeyboard(editText) - MessageDialogView.newInstance(getString(R.string.close), getString(R.string.unsaved_data_warning), - Bundler.start() - .put("primary_extra", getString(R.string.discard)) - .put("secondary_extra", getString(R.string.cancel)) - .put(BundleConstant.EXTRA, true) - .end()) - .show(supportFragmentManager, MessageDialogView.TAG) + MessageDialogView.newInstance( + getString(R.string.close), getString(R.string.unsaved_data_warning), + Bundler.start() + .put("primary_extra", getString(R.string.discard)) + .put("secondary_extra", getString(R.string.cancel)) + .put(BundleConstant.EXTRA, true) + .end() + ) + .show(supportFragmentManager, MessageDialogView.TAG) return } @@ -203,28 +213,29 @@ class EditorActivity : BaseActivity(), EditorMv val intent = intent if (intent != null && intent.extras != null) { val bundle = intent.extras - extraType = bundle.getString(BundleConstant.EXTRA_TYPE) - reviewComment = bundle.getParcelable(BundleConstant.REVIEW_EXTRA) - itemId = bundle.getString(BundleConstant.ID) - login = bundle.getString(BundleConstant.EXTRA_TWO) + extraType = bundle?.getString(BundleConstant.EXTRA_TYPE) + reviewComment = bundle?.getParcelable(BundleConstant.REVIEW_EXTRA) + itemId = bundle?.getString(BundleConstant.ID) + login = bundle?.getString(BundleConstant.EXTRA_TWO) if (extraType.equals(BundleConstant.ExtraType.EDIT_COMMIT_COMMENT_EXTRA, ignoreCase = true) - || extraType.equals(BundleConstant.ExtraType.NEW_COMMIT_COMMENT_EXTRA, ignoreCase = true)) { - sha = bundle.getString(BundleConstant.EXTRA_THREE) + || extraType.equals(BundleConstant.ExtraType.NEW_COMMIT_COMMENT_EXTRA, ignoreCase = true) + ) { + sha = bundle?.getString(BundleConstant.EXTRA_THREE) } else { - issueNumber = bundle.getInt(BundleConstant.EXTRA_THREE) + issueNumber = bundle?.getInt(BundleConstant.EXTRA_THREE) ?: -1 } - commentId = bundle.getLong(BundleConstant.EXTRA_FOUR) - val textToUpdate = bundle.getString(BundleConstant.EXTRA) + commentId = bundle?.getLong(BundleConstant.EXTRA_FOUR) ?: -1 + val textToUpdate = bundle?.getString(BundleConstant.EXTRA) if (!InputHelper.isEmpty(textToUpdate)) { - editText.setText(String.format("%s", textToUpdate)) + editText.setText(String.format("%s ", textToUpdate)) editText.setSelection(InputHelper.toString(editText).length) } - if (bundle.getString("message", "").isBlank()) { + if (bundle?.getString("message", "").isNullOrEmpty()) { replyQuote.visibility = GONE } else { - MarkDownProvider.setMdText(quote, bundle.getString("message", "")) + MarkDownProvider.setMdText(quote, bundle?.getString("message", "")) } - participants = bundle.getStringArrayList("participants") + participants = bundle?.getStringArrayList("participants") } } } \ No newline at end of file diff --git a/app/src/main/java/com/fastaccess/ui/modules/editor/comment/CommentEditorFragment.kt b/app/src/main/java/com/fastaccess/ui/modules/editor/comment/CommentEditorFragment.kt index 6d7996ee..42fe49e4 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/editor/comment/CommentEditorFragment.kt +++ b/app/src/main/java/com/fastaccess/ui/modules/editor/comment/CommentEditorFragment.kt @@ -5,8 +5,8 @@ import android.app.Activity import android.content.Context import android.content.Intent import android.os.Bundle -import android.support.transition.TransitionManager -import android.support.v4.app.FragmentManager +import androidx.transition.TransitionManager +import androidx.fragment.app.FragmentManager import android.view.View import android.view.ViewGroup import android.widget.EditText @@ -18,7 +18,6 @@ import com.fastaccess.helper.Bundler import com.fastaccess.helper.InputHelper import com.fastaccess.helper.ViewHelper import com.fastaccess.provider.emoji.Emoji -import com.fastaccess.provider.timeline.CommentsHelper import com.fastaccess.ui.base.BaseFragment import com.fastaccess.ui.base.mvp.BaseMvp import com.fastaccess.ui.base.mvp.presenter.BasePresenter @@ -69,7 +68,7 @@ class CommentEditorFragment : BaseFragment } @Override public void onUpdatePinIcon(@NonNull Gist gist) { - pinUnpin.setImageDrawable(PinnedGists.isPinned(gist.getId()) + pinUnpin.setImageDrawable(PinnedGists.isPinned(gist.getGistId().hashCode()) ? ContextCompat.getDrawable(this, R.drawable.ic_pin_filled) : ContextCompat.getDrawable(this, R.drawable.ic_pin)); } @@ -307,7 +307,7 @@ public class GistActivity extends BaseActivity } @SuppressWarnings("ConstantConditions") @Override public void onClearEditText() { - if (commentEditorFragment != null && commentEditorFragment.commentText != null) commentEditorFragment.commentText.setText(null); + if (commentEditorFragment != null && commentEditorFragment.commentText != null) commentEditorFragment.commentText.setText(""); } @NonNull @Override public ArrayList getNamesToTag() { diff --git a/app/src/main/java/com/fastaccess/ui/modules/gists/gist/GistMvp.java b/app/src/main/java/com/fastaccess/ui/modules/gists/gist/GistMvp.java index 09a289f2..10367ab7 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/gists/gist/GistMvp.java +++ b/app/src/main/java/com/fastaccess/ui/modules/gists/gist/GistMvp.java @@ -1,8 +1,8 @@ package com.fastaccess.ui.modules.gists.gist; import android.content.Intent; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import com.fastaccess.data.dao.model.Gist; import com.fastaccess.ui.base.mvp.BaseMvp; diff --git a/app/src/main/java/com/fastaccess/ui/modules/gists/gist/GistPresenter.java b/app/src/main/java/com/fastaccess/ui/modules/gists/gist/GistPresenter.java index 0f724e68..41e465ba 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/gists/gist/GistPresenter.java +++ b/app/src/main/java/com/fastaccess/ui/modules/gists/gist/GistPresenter.java @@ -2,8 +2,8 @@ package com.fastaccess.ui.modules.gists.gist; import android.content.Intent; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import com.fastaccess.data.dao.model.Gist; import com.fastaccess.data.dao.model.Login; diff --git a/app/src/main/java/com/fastaccess/ui/modules/gists/gist/comments/GistCommentsFragment.java b/app/src/main/java/com/fastaccess/ui/modules/gists/gist/comments/GistCommentsFragment.java index 3e74e18f..9e5644fb 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/gists/gist/comments/GistCommentsFragment.java +++ b/app/src/main/java/com/fastaccess/ui/modules/gists/gist/comments/GistCommentsFragment.java @@ -4,10 +4,10 @@ import android.app.Activity; import android.content.Context; import android.content.Intent; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.annotation.StringRes; -import android.support.v4.widget.SwipeRefreshLayout; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.annotation.StringRes; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import android.view.View; import com.evernote.android.state.State; diff --git a/app/src/main/java/com/fastaccess/ui/modules/gists/gist/comments/GistCommentsMvp.java b/app/src/main/java/com/fastaccess/ui/modules/gists/gist/comments/GistCommentsMvp.java index ae637373..556bab7a 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/gists/gist/comments/GistCommentsMvp.java +++ b/app/src/main/java/com/fastaccess/ui/modules/gists/gist/comments/GistCommentsMvp.java @@ -1,9 +1,9 @@ package com.fastaccess.ui.modules.gists.gist.comments; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v4.widget.SwipeRefreshLayout; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import com.fastaccess.data.dao.model.Comment; import com.fastaccess.data.dao.model.User; diff --git a/app/src/main/java/com/fastaccess/ui/modules/gists/gist/comments/GistCommentsPresenter.java b/app/src/main/java/com/fastaccess/ui/modules/gists/gist/comments/GistCommentsPresenter.java index c6e9f778..40a45459 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/gists/gist/comments/GistCommentsPresenter.java +++ b/app/src/main/java/com/fastaccess/ui/modules/gists/gist/comments/GistCommentsPresenter.java @@ -1,8 +1,8 @@ package com.fastaccess.ui.modules.gists.gist.comments; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.text.TextUtils; import android.view.View; import android.widget.PopupMenu; diff --git a/app/src/main/java/com/fastaccess/ui/modules/gists/gist/files/GistFilesListFragment.java b/app/src/main/java/com/fastaccess/ui/modules/gists/gist/files/GistFilesListFragment.java index c87109af..311ee301 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/gists/gist/files/GistFilesListFragment.java +++ b/app/src/main/java/com/fastaccess/ui/modules/gists/gist/files/GistFilesListFragment.java @@ -1,9 +1,9 @@ package com.fastaccess.ui.modules.gists.gist.files; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v4.widget.SwipeRefreshLayout; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import android.view.View; import com.evernote.android.state.State; diff --git a/app/src/main/java/com/fastaccess/ui/modules/gists/gist/files/GistFilesListMvp.java b/app/src/main/java/com/fastaccess/ui/modules/gists/gist/files/GistFilesListMvp.java index cbda030a..00d4d9e2 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/gists/gist/files/GistFilesListMvp.java +++ b/app/src/main/java/com/fastaccess/ui/modules/gists/gist/files/GistFilesListMvp.java @@ -1,7 +1,7 @@ package com.fastaccess.ui.modules.gists.gist.files; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import com.fastaccess.data.dao.FilesListModel; import com.fastaccess.ui.base.mvp.BaseMvp; diff --git a/app/src/main/java/com/fastaccess/ui/modules/gists/gist/files/GistFilesListPresenter.java b/app/src/main/java/com/fastaccess/ui/modules/gists/gist/files/GistFilesListPresenter.java index 7b94da52..3d6b38d2 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/gists/gist/files/GistFilesListPresenter.java +++ b/app/src/main/java/com/fastaccess/ui/modules/gists/gist/files/GistFilesListPresenter.java @@ -1,7 +1,7 @@ package com.fastaccess.ui.modules.gists.gist.files; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.view.View; import com.fastaccess.R; diff --git a/app/src/main/java/com/fastaccess/ui/modules/gists/starred/StarredGistsFragment.java b/app/src/main/java/com/fastaccess/ui/modules/gists/starred/StarredGistsFragment.java new file mode 100644 index 00000000..61eaba8c --- /dev/null +++ b/app/src/main/java/com/fastaccess/ui/modules/gists/starred/StarredGistsFragment.java @@ -0,0 +1,145 @@ +package com.fastaccess.ui.modules.gists.starred; + +import android.app.Activity; +import android.content.Intent; +import android.os.Bundle; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.annotation.StringRes; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; +import android.view.View; + +import com.fastaccess.R; +import com.fastaccess.data.dao.model.Gist; +import com.fastaccess.helper.BundleConstant; +import com.fastaccess.provider.rest.loadmore.OnLoadMore; +import com.fastaccess.ui.adapter.GistsAdapter; +import com.fastaccess.ui.base.BaseFragment; +import com.fastaccess.ui.modules.gists.gist.GistActivity; +import com.fastaccess.ui.widgets.StateLayout; +import com.fastaccess.ui.widgets.recyclerview.DynamicRecyclerView; +import com.fastaccess.ui.widgets.recyclerview.scroll.RecyclerViewFastScroller; + +import java.util.List; + +import butterknife.BindView; + +/** + * Created by Kosh on 11 Nov 2016, 12:36 PM + */ + +public class StarredGistsFragment extends BaseFragment implements StarredGistsMvp.View { + + @BindView(R.id.recycler) DynamicRecyclerView recycler; + @BindView(R.id.refresh) SwipeRefreshLayout refresh; + @BindView(R.id.stateLayout) StateLayout stateLayout; + @BindView(R.id.fastScroller) RecyclerViewFastScroller fastScroller; + + private GistsAdapter adapter; + private OnLoadMore onLoadMore; + + public static StarredGistsFragment newInstance() { + return new StarredGistsFragment(); + } + + @Override protected int fragmentLayout() { + return R.layout.small_grid_refresh_list; + } + + @Override protected void onFragmentCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + stateLayout.setEmptyText(R.string.no_gists); + refresh.setOnRefreshListener(this); + stateLayout.setOnReloadListener(this); + recycler.setEmptyView(stateLayout, refresh); + adapter = new GistsAdapter(getPresenter().getGists(), true); + adapter.setListener(getPresenter()); + getLoadMore().initialize(getPresenter().getCurrentPage(), getPresenter().getPreviousTotal()); + recycler.setAdapter(adapter); + recycler.addOnScrollListener(getLoadMore()); + recycler.addDivider(); + if (getPresenter().getGists().isEmpty() && !getPresenter().isApiCalled()) { + onRefresh(); + } + fastScroller.attachRecyclerView(recycler); + } + + @Override public void onRefresh() { + getPresenter().onCallApi(1, null); + } + + @Override public void onNotifyAdapter(@Nullable List items, int page) { + hideProgress(); + if (items == null || items.isEmpty()) { + adapter.clear(); + return; + } + if (page <= 1) { + adapter.insertItems(items); + } else { + adapter.addItems(items); + } + } + + @Override public void showProgress(@StringRes int resId) { + refresh.setRefreshing(true); + stateLayout.showProgress(); + } + + @Override public void hideProgress() { + refresh.setRefreshing(false); + stateLayout.hideProgress(); + } + + @Override public void showErrorMessage(@NonNull String message) { + showReload(); + super.showErrorMessage(message); + } + + @Override public void showMessage(int titleRes, int msgRes) { + showReload(); + super.showMessage(titleRes, msgRes); + } + + @NonNull @Override public StarredGistsPresenter providePresenter() { + return new StarredGistsPresenter(); + } + + @NonNull @Override public OnLoadMore getLoadMore() { + if (onLoadMore == null) { + onLoadMore = new OnLoadMore<>(getPresenter(), null); + } + return onLoadMore; + } + + @Override public void onStartGistView(@NonNull String gistId) { + startActivityForResult(GistActivity.createIntent(getContext(), gistId, isEnterprise()), BundleConstant.REQUEST_CODE); + } + + @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (resultCode == Activity.RESULT_OK && requestCode == BundleConstant.REQUEST_CODE) { + if (data != null && data.getExtras() != null) { + Gist gistsModel = data.getExtras().getParcelable(BundleConstant.ITEM); + if (gistsModel != null && adapter != null) { + adapter.removeItem(gistsModel); + } + } else { + onRefresh(); + } + } + } + + @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()); + } +} diff --git a/app/src/main/java/com/fastaccess/ui/modules/gists/starred/StarredGistsMvp.java b/app/src/main/java/com/fastaccess/ui/modules/gists/starred/StarredGistsMvp.java new file mode 100644 index 00000000..94353c32 --- /dev/null +++ b/app/src/main/java/com/fastaccess/ui/modules/gists/starred/StarredGistsMvp.java @@ -0,0 +1,37 @@ +package com.fastaccess.ui.modules.gists.starred; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; + +import com.fastaccess.data.dao.model.Gist; +import com.fastaccess.provider.rest.loadmore.OnLoadMore; +import com.fastaccess.ui.base.mvp.BaseMvp; +import com.fastaccess.ui.widgets.recyclerview.BaseViewHolder; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by Kosh on 11 Nov 2016, 12:35 PM + */ + +interface StarredGistsMvp { + interface View extends BaseMvp.FAView, SwipeRefreshLayout.OnRefreshListener, android.view.View.OnClickListener { + + void onNotifyAdapter(@Nullable List items, int page); + + @NonNull OnLoadMore getLoadMore(); + + void onStartGistView(@NonNull String gistId); + } + + interface Presenter extends BaseMvp.FAPresenter, + BaseViewHolder.OnItemClickListener, + BaseMvp.PaginationListener { + + @NonNull ArrayList getGists(); + + void onWorkOffline(@NonNull String login); + } +} diff --git a/app/src/main/java/com/fastaccess/ui/modules/gists/starred/StarredGistsPresenter.java b/app/src/main/java/com/fastaccess/ui/modules/gists/starred/StarredGistsPresenter.java new file mode 100644 index 00000000..cd81af92 --- /dev/null +++ b/app/src/main/java/com/fastaccess/ui/modules/gists/starred/StarredGistsPresenter.java @@ -0,0 +1,78 @@ +package com.fastaccess.ui.modules.gists.starred; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import android.view.View; + +import com.fastaccess.data.dao.model.Gist; +import com.fastaccess.provider.rest.RestProvider; +import com.fastaccess.provider.scheme.SchemeParser; +import com.fastaccess.ui.base.mvp.presenter.BasePresenter; + +import java.util.ArrayList; + +/** + * Created by Kosh on 11 Nov 2016, 12:36 PM + */ + +class StarredGistsPresenter extends BasePresenter implements StarredGistsMvp.Presenter { + private ArrayList gistsModels = new ArrayList<>(); + private int page; + private int previousTotal; + private int lastPage = Integer.MAX_VALUE; + + @Override public int getCurrentPage() { + return page; + } + + @Override public int getPreviousTotal() { + return previousTotal; + } + + @Override public void setCurrentPage(int page) { + this.page = page; + } + + @Override public void setPreviousTotal(int previousTotal) { + this.previousTotal = previousTotal; + } + + @Override public void onError(@NonNull Throwable throwable) { + sendToView(view -> { + if (view.getLoadMore().getParameter() != null) { + onWorkOffline(view.getLoadMore().getParameter()); + } + }); + super.onError(throwable); + } + + @Override public boolean onCallApi(int page, @Nullable String parameter) { + if (page == 1) { + lastPage = Integer.MAX_VALUE; + sendToView(view -> view.getLoadMore().reset()); + } + setCurrentPage(page); + if (page > lastPage || lastPage == 0) { + sendToView(StarredGistsMvp.View::hideProgress); + return false; + } + makeRestCall(RestProvider.getGistService(isEnterprise()).getStarredGists(page), + listResponse -> { + lastPage = listResponse.getLast(); + sendToView(view -> view.onNotifyAdapter(listResponse.getItems(), page)); + }); + return true; + } + + @NonNull @Override public ArrayList getGists() { + return gistsModels; + } + + @Override public void onWorkOffline(@NonNull String login) {}// do nothing for now. + + @Override public void onItemClick(int position, View v, Gist item) { + SchemeParser.launchUri(v.getContext(), item.getHtmlUrl()); + } + + @Override public void onItemLongClick(int position, View v, Gist item) {} +} diff --git a/app/src/main/java/com/fastaccess/ui/modules/login/LoginActivity.java b/app/src/main/java/com/fastaccess/ui/modules/login/LoginActivity.java index b645d940..cd0f7d57 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/login/LoginActivity.java +++ b/app/src/main/java/com/fastaccess/ui/modules/login/LoginActivity.java @@ -3,12 +3,12 @@ package com.fastaccess.ui.modules.login; import android.app.Activity; import android.content.Intent; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.annotation.StringRes; -import android.support.design.widget.FloatingActionButton; -import android.support.design.widget.TextInputEditText; -import android.support.design.widget.TextInputLayout; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.annotation.StringRes; +import com.google.android.material.floatingactionbutton.FloatingActionButton; +import com.google.android.material.textfield.TextInputEditText; +import com.google.android.material.textfield.TextInputLayout; import android.view.View; import android.widget.ProgressBar; diff --git a/app/src/main/java/com/fastaccess/ui/modules/login/LoginMvp.java b/app/src/main/java/com/fastaccess/ui/modules/login/LoginMvp.java index 239f1bcc..23fd05c2 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/login/LoginMvp.java +++ b/app/src/main/java/com/fastaccess/ui/modules/login/LoginMvp.java @@ -2,8 +2,8 @@ package com.fastaccess.ui.modules.login; import android.content.Intent; import android.net.Uri; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import com.fastaccess.data.dao.AccessTokenModel; import com.fastaccess.data.dao.model.Login; diff --git a/app/src/main/java/com/fastaccess/ui/modules/login/LoginPresenter.java b/app/src/main/java/com/fastaccess/ui/modules/login/LoginPresenter.java index b2653e7d..c673e437 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/login/LoginPresenter.java +++ b/app/src/main/java/com/fastaccess/ui/modules/login/LoginPresenter.java @@ -2,8 +2,8 @@ package com.fastaccess.ui.modules.login; import android.content.Intent; import android.net.Uri; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import com.fastaccess.BuildConfig; import com.fastaccess.R; @@ -66,7 +66,7 @@ public class LoginPresenter extends BasePresenter implements Logi } @NonNull @Override public Uri getAuthorizationUrl() { - return new Uri.Builder().scheme("https") + return new Uri.Builder().scheme("https") .authority("github.com") .appendPath("login") .appendPath("oauth") @@ -114,25 +114,29 @@ public class LoginPresenter extends BasePresenter implements Logi getView().onEmptyPassword(passwordIsEmpty); getView().onEmptyEndpoint(endpointIsEmpty); if ((!usernameIsEmpty && !passwordIsEmpty)) { - String authToken = Credentials.basic(username, password); - if (isBasicAuth && !isEnterprise()) { - AuthModel authModel = new AuthModel(); - authModel.setScopes(Arrays.asList("user", "repo", "gist", "notifications", "read:org")); - authModel.setNote(BuildConfig.APPLICATION_ID); - authModel.setClientSecret(GithubConfigHelper.getSecret()); - authModel.setClientId(GithubConfigHelper.getClientId()); - authModel.setNoteUrl(GithubConfigHelper.getRedirectUrl()); - if (!InputHelper.isEmpty(twoFactorCode)) { - authModel.setOtpCode(twoFactorCode); - } - makeRestCall(LoginProvider.getLoginRestService(authToken, twoFactorCode, null).login(authModel), accessTokenModel -> { + try { + String authToken = Credentials.basic(username, password); + if (isBasicAuth && !isEnterprise()) { + AuthModel authModel = new AuthModel(); + authModel.setScopes(Arrays.asList("user", "repo", "gist", "notifications", "read:org")); + authModel.setNote(BuildConfig.APPLICATION_ID); + authModel.setClientSecret(GithubConfigHelper.getSecret()); + authModel.setClientId(GithubConfigHelper.getClientId()); + authModel.setNoteUrl(GithubConfigHelper.getRedirectUrl()); if (!InputHelper.isEmpty(twoFactorCode)) { - PrefGetter.setOtpCode(twoFactorCode); + authModel.setOtpCode(twoFactorCode); } - onTokenResponse(accessTokenModel); - }); - } else { - accessTokenLogin(password, endpoint, twoFactorCode, authToken); + makeRestCall(LoginProvider.getLoginRestService(authToken, twoFactorCode, null).login(authModel), accessTokenModel -> { + if (!InputHelper.isEmpty(twoFactorCode)) { + PrefGetter.setOtpCode(twoFactorCode); + } + onTokenResponse(accessTokenModel); + }); + } else { + accessTokenLogin(password, endpoint, twoFactorCode, authToken); + } + } catch (Exception e) { + sendToView(view -> view.showMessage("Error", "The app was about to crash!!(" + e.getMessage() + ")")); } } } diff --git a/app/src/main/java/com/fastaccess/ui/modules/login/chooser/LoginChooserActivity.kt b/app/src/main/java/com/fastaccess/ui/modules/login/chooser/LoginChooserActivity.kt index 6bd8318e..3466fdea 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/login/chooser/LoginChooserActivity.kt +++ b/app/src/main/java/com/fastaccess/ui/modules/login/chooser/LoginChooserActivity.kt @@ -3,8 +3,8 @@ package com.fastaccess.ui.modules.login.chooser import android.content.Context import android.content.Intent import android.os.Bundle -import android.support.design.widget.CoordinatorLayout -import android.support.transition.TransitionManager +import androidx.coordinatorlayout.widget.CoordinatorLayout +import androidx.transition.TransitionManager import android.view.View import android.widget.RelativeLayout import butterknife.BindView diff --git a/app/src/main/java/com/fastaccess/ui/modules/main/MainActivity.java b/app/src/main/java/com/fastaccess/ui/modules/main/MainActivity.java index e50ec8a9..9735bbbc 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/main/MainActivity.java +++ b/app/src/main/java/com/fastaccess/ui/modules/main/MainActivity.java @@ -3,10 +3,11 @@ package com.fastaccess.ui.modules.main; import android.content.Intent; import android.graphics.Typeface; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.design.widget.FloatingActionButton; -import android.support.v4.view.GravityCompat; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import com.google.android.material.floatingactionbutton.FloatingActionButton; +import androidx.fragment.app.FragmentManager; +import androidx.core.view.GravityCompat; import android.view.Menu; import android.view.MenuItem; import android.widget.Toast; @@ -34,6 +35,8 @@ import butterknife.OnClick; import it.sephiroth.android.library.bottomnavigation.BottomNavigation; import shortbread.Shortcut; +import static com.fastaccess.helper.AppHelper.getFragmentByTag; + public class MainActivity extends BaseActivity implements MainMvp.View { @State @MainMvp.NavigationType int navType = MainMvp.FEEDS; @@ -146,6 +149,29 @@ public class MainActivity extends BaseActivity impl finish(); } + @Override public void onScrollTop(int index) { + super.onScrollTop(index); + FragmentManager fragmentManager = getSupportFragmentManager(); + if (index == 0) { + FeedsFragment homeView = (FeedsFragment) getFragmentByTag(fragmentManager, FeedsFragment.TAG); + if (homeView != null) { + homeView.onScrollTop(index); + } + } else if (index == 1) { + MyIssuesPagerFragment issuesView = (MyIssuesPagerFragment) getFragmentByTag + (fragmentManager, MyIssuesPagerFragment.TAG); + if (issuesView != null) { + issuesView.onScrollTop(index); + } + } else if (index == 2) { + MyPullsPagerFragment pullRequestView = (MyPullsPagerFragment) getFragmentByTag + (fragmentManager, MyPullsPagerFragment.TAG); + if (pullRequestView != null) { + pullRequestView.onScrollTop(0); + } + } + } + @Shortcut(id = "myIssues", icon = R.drawable.ic_app_shortcut_issues, shortLabelRes = R.string.issues, rank = 2, action = "myIssues") public void myIssues() {}//do nothing diff --git a/app/src/main/java/com/fastaccess/ui/modules/main/MainMvp.java b/app/src/main/java/com/fastaccess/ui/modules/main/MainMvp.java index 50b04eea..58b8adda 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/main/MainMvp.java +++ b/app/src/main/java/com/fastaccess/ui/modules/main/MainMvp.java @@ -1,10 +1,10 @@ package com.fastaccess.ui.modules.main; -import android.support.annotation.IntDef; -import android.support.annotation.NonNull; -import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentManager; -import android.support.v4.widget.DrawerLayout; +import androidx.annotation.IntDef; +import androidx.annotation.NonNull; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.drawerlayout.widget.DrawerLayout; import com.fastaccess.ui.base.mvp.BaseMvp; diff --git a/app/src/main/java/com/fastaccess/ui/modules/main/MainPresenter.java b/app/src/main/java/com/fastaccess/ui/modules/main/MainPresenter.java index 7f7d7b0c..b21aabcf 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/main/MainPresenter.java +++ b/app/src/main/java/com/fastaccess/ui/modules/main/MainPresenter.java @@ -1,11 +1,11 @@ package com.fastaccess.ui.modules.main; -import android.support.annotation.IdRes; -import android.support.annotation.NonNull; -import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentManager; -import android.support.v4.view.GravityCompat; -import android.support.v4.widget.DrawerLayout; +import androidx.annotation.IdRes; +import androidx.annotation.NonNull; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.core.view.GravityCompat; +import androidx.drawerlayout.widget.DrawerLayout; import com.fastaccess.R; import com.fastaccess.data.dao.model.Login; @@ -132,5 +132,7 @@ public class MainPresenter extends BasePresenter implements MainMv } } - @Override public void onMenuItemReselect(@IdRes int id, int position, boolean fromUser) {} + @Override public void onMenuItemReselect(@IdRes int id, int position, boolean fromUser) { + sendToView(view -> view.onScrollTop(position)); + } } diff --git a/app/src/main/java/com/fastaccess/ui/modules/main/donation/DonateActivity.kt b/app/src/main/java/com/fastaccess/ui/modules/main/donation/DonateActivity.kt index e475fd1a..240debda 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/main/donation/DonateActivity.kt +++ b/app/src/main/java/com/fastaccess/ui/modules/main/donation/DonateActivity.kt @@ -4,7 +4,7 @@ import android.app.Activity import android.content.Context import android.content.Intent import android.os.Bundle -import android.support.v4.app.Fragment +import androidx.fragment.app.Fragment import com.fastaccess.BuildConfig import com.fastaccess.R import com.fastaccess.helper.* @@ -39,38 +39,41 @@ class DonateActivity : BaseActivity(RxBillingService.getInstance(this, BuildConfig.DEBUG) - .purchase(ProductType.IN_APP, productKey, "inapp:com.fastaccess.github:" + productKey)) - .subscribe({ p: Purchase?, throwable: Throwable? -> - if (throwable == null) { - FabricProvider.logPurchase(productKey, price, priceText) - showMessage(R.string.success, R.string.success_purchase_message) - enableProduct(productKey, applicationContext) - val intent = Intent() - intent.putExtra(BundleConstant.ITEM, productKey) - setResult(Activity.RESULT_OK, intent) - } else { - if (throwable is RxBillingServiceException) { - val code = throwable.code - if (code == RxBillingServiceError.ITEM_ALREADY_OWNED) { - enableProduct(productKey, applicationContext) - val intent = Intent() - intent.putExtra(BundleConstant.ITEM, productKey) - setResult(Activity.RESULT_OK, intent) - } else { - showErrorMessage(throwable.message!!) - Logger.e(code) - setResult(Activity.RESULT_CANCELED) - } + val bundle: Bundle? = intent?.extras + + val productKey = bundle?.getString(BundleConstant.EXTRA) + val price = bundle?.getLong(BundleConstant.EXTRA_FOUR, 0) + val priceText = bundle?.getString(BundleConstant.EXTRA_FIVE) + subscription = RxHelper.getSingle( + RxBillingService.getInstance(this, BuildConfig.DEBUG) + .purchase(ProductType.IN_APP, productKey, "inapp:com.fastaccess.github:$productKey") + ) + .subscribe { _: Purchase?, throwable: Throwable? -> + if (throwable == null) { + FabricProvider.logPurchase(productKey, price, priceText) + showMessage(R.string.success, R.string.success_purchase_message) + enableProduct(productKey, applicationContext) + val intent = Intent() + intent.putExtra(BundleConstant.ITEM, productKey) + setResult(Activity.RESULT_OK, intent) + } else { + if (throwable is RxBillingServiceException) { + val code = throwable.code + if (code == RxBillingServiceError.ITEM_ALREADY_OWNED) { + enableProduct(productKey, applicationContext) + val intent = Intent() + intent.putExtra(BundleConstant.ITEM, productKey) + setResult(Activity.RESULT_OK, intent) + } else { + showErrorMessage(throwable.message!!) + Logger.e(code) + setResult(Activity.RESULT_CANCELED) } - throwable.printStackTrace() } - finish() - }) + throwable.printStackTrace() + } + finish() + } } override fun onDestroy() { @@ -81,36 +84,40 @@ class DonateActivity : BaseActivity PrefGetter.enableAmlodTheme() - context.getString(R.string.midnight_blue_theme_purchase) -> PrefGetter.enableMidNightBlueTheme() - context.getString(R.string.theme_bluish_purchase) -> PrefGetter.enableBluishTheme() - context.getString(R.string.donation_product_2), context.getString(R.string.fasthub_pro_purchase) -> PrefGetter.setProItems() - context.getString(R.string.fasthub_enterprise_purchase) -> PrefGetter.setEnterpriseItem() context.getString(R.string.donation_product_3), context.getString(R.string.donation_product_4), context.getString(R.string.fasthub_all_features_purchase) -> { PrefGetter.setProItems() PrefGetter.setEnterpriseItem() } + context.getString(R.string.donation_product_2), context.getString(R.string.fasthub_pro_purchase) -> PrefGetter.setProItems() + context.getString(R.string.fasthub_enterprise_purchase) -> PrefGetter.setEnterpriseItem() + context.getString(R.string.donation_product_1), context.getString(R.string.amlod_theme_purchase) -> PrefGetter.enableAmlodTheme() + context.getString(R.string.midnight_blue_theme_purchase) -> PrefGetter.enableMidNightBlueTheme() + context.getString(R.string.theme_bluish_purchase) -> PrefGetter.enableBluishTheme() else -> Logger.e(productKey) } } diff --git a/app/src/main/java/com/fastaccess/ui/modules/main/donation/DonationActivity.java b/app/src/main/java/com/fastaccess/ui/modules/main/donation/DonationActivity.java index 11588940..2bd4256f 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/main/donation/DonationActivity.java +++ b/app/src/main/java/com/fastaccess/ui/modules/main/donation/DonationActivity.java @@ -1,8 +1,8 @@ package com.fastaccess.ui.modules.main.donation; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.design.widget.AppBarLayout; +import androidx.annotation.NonNull; +import com.google.android.material.appbar.AppBarLayout; import android.view.View; import com.fastaccess.App; diff --git a/app/src/main/java/com/fastaccess/ui/modules/main/drawer/AccountDrawerFragment.kt b/app/src/main/java/com/fastaccess/ui/modules/main/drawer/AccountDrawerFragment.kt new file mode 100644 index 00000000..9cd67476 --- /dev/null +++ b/app/src/main/java/com/fastaccess/ui/modules/main/drawer/AccountDrawerFragment.kt @@ -0,0 +1,132 @@ +package com.fastaccess.ui.modules.main.drawer + +import android.content.Intent +import android.os.Bundle +import android.view.View +import com.fastaccess.R +import com.fastaccess.data.dao.model.Login +import com.fastaccess.data.dao.model.PinnedRepos +import com.fastaccess.helper.PrefGetter +import com.fastaccess.helper.RxHelper +import com.fastaccess.provider.scheme.SchemeParser +import com.fastaccess.ui.adapter.LoginAdapter +import com.fastaccess.ui.adapter.PinnedReposAdapter +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.login.chooser.LoginChooserActivity +import com.fastaccess.ui.modules.main.MainMvp +import com.fastaccess.ui.modules.main.premium.PremiumActivity +import com.fastaccess.ui.modules.pinned.PinnedReposActivity +import com.fastaccess.ui.modules.user.UserPagerActivity +import com.fastaccess.ui.widgets.recyclerview.BaseViewHolder +import kotlinx.android.synthetic.main.accounts_menu_layout.* + +/** + * Created by Kosh on 25.03.18. + */ +class AccountDrawerFragment : BaseFragment>(), + BaseViewHolder.OnItemClickListener { + + private val pinnedListAdapter = PinnedReposAdapter(true) + private val adapter = LoginAdapter(true) + private val userModel by lazy { Login.getUser() } + + override fun fragmentLayout() = R.layout.accounts_menu_layout + + override fun providePresenter() = BasePresenter() + + override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) { + pinnedListAdapter.listener = this + pinnedList.adapter = pinnedListAdapter + + adapter.listener = object : BaseViewHolder.OnItemClickListener { + override fun onItemLongClick(position: Int, v: View?, item: Login?) {} + + override fun onItemClick(position: Int, v: View?, item: Login) { + presenter.manageViewDisposable(RxHelper.getObservable(Login.onMultipleLogin(item, item.isIsEnterprise, false)) + .doOnSubscribe { showProgress(0) } + .doOnComplete { hideProgress() } + .subscribe({ (activity as? BaseActivity<*, *>?)?.onRestartApp() }, ::println)) + } + } + accLists.adapter = adapter + + logout.setOnClickListener { + postDelayedAndClose { + activity?.let { + (it as? BaseActivity<*, *>)?.onLogoutPressed() + } + } + } + togglePinned?.setOnClickListener { + postDelayedAndClose { PinnedReposActivity.startActivity(it.context) } + } + addAccLayout.setOnClickListener { + postDelayedAndClose { + if (PrefGetter.isProEnabled() || PrefGetter.isEnterpriseEnabled()) { + val intent = Intent(it.context, LoginChooserActivity::class.java) + intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP + startActivity(intent) + } else { + startActivity(Intent(it.context, PremiumActivity::class.java)) + } + } + } + repos.setOnClickListener { + postDelayedAndClose { + UserPagerActivity.startActivity(it.context, userModel.login, false, PrefGetter.isEnterprise(), 2) + } + } + starred.setOnClickListener { + postDelayedAndClose { + UserPagerActivity.startActivity(it.context, userModel.login, false, PrefGetter.isEnterprise(), 3) + } + } + + loadAccount() + loadPinned() + } + + override fun onItemClick(position: Int, v: View?, item: PinnedRepos?) { + if (v != null && item != null) { + postDelayedAndClose { SchemeParser.launchUri(v.context, item.pinnedRepo.htmlUrl) } + } + } + + override fun onItemLongClick(position: Int, v: View?, item: PinnedRepos?) = Unit + + override fun setUserVisibleHint(isVisibleToUser: Boolean) { + super.setUserVisibleHint(isVisibleToUser) + if (isVisibleToUser) { + loadPinned() + } + } + + private fun loadAccount() { + presenter.manageViewDisposable(Login.getAccounts() + .doOnComplete { + if (!adapter.isEmpty) { + toggleAccountsLayout.visibility = View.VISIBLE + } else { + toggleAccountsLayout.visibility = View.GONE + } + } + .subscribe({ adapter.addItem(it) }, ::print)) + } + + private fun loadPinned() { + presenter?.manageViewDisposable(PinnedRepos.getMenuRepos() + .subscribe({ pinnedListAdapter.insertItems(it) }, ::println)) + } + + private fun closeDrawer() { + val activity = activity as? BaseActivity<*, *>? ?: return + activity.closeDrawer() + } + + private fun postDelayedAndClose(method: () -> Unit) { + closeDrawer() + view?.postDelayed({ method.invoke() }, 250) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/fastaccess/ui/modules/main/drawer/MainDrawerFragment.kt b/app/src/main/java/com/fastaccess/ui/modules/main/drawer/MainDrawerFragment.kt new file mode 100644 index 00000000..42ae7934 --- /dev/null +++ b/app/src/main/java/com/fastaccess/ui/modules/main/drawer/MainDrawerFragment.kt @@ -0,0 +1,82 @@ +package com.fastaccess.ui.modules.main.drawer + +import android.content.Intent +import android.os.Bundle +import com.google.android.material.navigation.NavigationView +import android.view.MenuItem +import android.view.View +import com.fastaccess.R +import com.fastaccess.data.dao.model.Login +import com.fastaccess.helper.PrefGetter +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.about.FastHubAboutActivity +import com.fastaccess.ui.modules.gists.GistsListActivity +import com.fastaccess.ui.modules.main.MainActivity +import com.fastaccess.ui.modules.main.MainMvp +import com.fastaccess.ui.modules.main.donation.CheckPurchaseActivity +import com.fastaccess.ui.modules.main.playstore.PlayStoreWarningActivity +import com.fastaccess.ui.modules.notification.NotificationActivity +import com.fastaccess.ui.modules.pinned.PinnedReposActivity +import com.fastaccess.ui.modules.repos.RepoPagerActivity +import com.fastaccess.ui.modules.repos.RepoPagerMvp +import com.fastaccess.ui.modules.repos.issues.create.CreateIssueActivity +import com.fastaccess.ui.modules.trending.TrendingActivity +import com.fastaccess.ui.modules.user.UserPagerActivity +import kotlinx.android.synthetic.main.main_nav_fragment_layout.* + +/** + * Created by Kosh on 25.03.18. + */ +class MainDrawerFragment : BaseFragment>(), NavigationView.OnNavigationItemSelectedListener { + + private val userModel by lazy { Login.getUser() } + + override fun fragmentLayout() = R.layout.main_nav_fragment_layout + + override fun providePresenter() = BasePresenter() + + override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) { + mainNav.setNavigationItemSelectedListener(this) + } + + override fun onNavigationItemSelected(item: MenuItem): Boolean { + val activity = activity as? BaseActivity<*, *>? ?: return false + activity.closeDrawer() + if (item.isChecked) return false + mainNav.postDelayed({ + if (!activity.isFinishing()) { + when { + item.itemId == R.id.navToRepo -> activity.onNavToRepoClicked() + item.itemId == R.id.gists -> GistsListActivity.startActivity(activity) + item.itemId == R.id.pinnedMenu -> PinnedReposActivity.startActivity(activity) + item.itemId == R.id.mainView -> { + if (activity !is MainActivity) { + val intent = Intent(activity, MainActivity::class.java) + intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP + activity.startActivity(intent) + activity.finish() + } + } + item.itemId == R.id.profile -> userModel?.let { + UserPagerActivity.startActivity(activity, it.login, false, PrefGetter.isEnterprise(), 0) + } + item.itemId == R.id.settings -> activity.onOpenSettings() + item.itemId == R.id.about -> activity.startActivity(Intent(activity, FastHubAboutActivity::class.java)) + item.itemId == R.id.orgs -> activity.onOpenOrgsDialog() + item.itemId == R.id.notifications -> activity.startActivity(Intent(activity, NotificationActivity::class.java)) + item.itemId == R.id.trending -> activity.startActivity(Intent(activity, TrendingActivity::class.java)) + item.itemId == R.id.openFatHub -> activity.startActivity( + RepoPagerActivity.createIntent(activity, "FastHub", "k0shk0sh", RepoPagerMvp.ISSUES) + ) + item.itemId == R.id.faq -> activity.startActivity(Intent(activity, PlayStoreWarningActivity::class.java)) + item.itemId == R.id.restorePurchase -> activity.startActivity(Intent(activity, CheckPurchaseActivity::class.java)) + } + } + }, 250) + return true + } + + fun getMenu() = mainNav?.menu +} \ No newline at end of file diff --git a/app/src/main/java/com/fastaccess/ui/modules/main/issues/MyIssuesFragment.java b/app/src/main/java/com/fastaccess/ui/modules/main/issues/MyIssuesFragment.java index a46784cb..2a349bda 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/main/issues/MyIssuesFragment.java +++ b/app/src/main/java/com/fastaccess/ui/modules/main/issues/MyIssuesFragment.java @@ -2,10 +2,10 @@ package com.fastaccess.ui.modules.main.issues; import android.content.Context; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.annotation.StringRes; -import android.support.v4.widget.SwipeRefreshLayout; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.annotation.StringRes; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import android.view.View; import com.evernote.android.state.State; diff --git a/app/src/main/java/com/fastaccess/ui/modules/main/issues/MyIssuesMvp.java b/app/src/main/java/com/fastaccess/ui/modules/main/issues/MyIssuesMvp.java index 8981af77..57a999f6 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/main/issues/MyIssuesMvp.java +++ b/app/src/main/java/com/fastaccess/ui/modules/main/issues/MyIssuesMvp.java @@ -1,8 +1,8 @@ package com.fastaccess.ui.modules.main.issues; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v4.widget.SwipeRefreshLayout; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import com.fastaccess.data.dao.model.Issue; import com.fastaccess.data.dao.types.IssueState; diff --git a/app/src/main/java/com/fastaccess/ui/modules/main/issues/MyIssuesPresenter.java b/app/src/main/java/com/fastaccess/ui/modules/main/issues/MyIssuesPresenter.java index 50c4d55e..14f59bbe 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/main/issues/MyIssuesPresenter.java +++ b/app/src/main/java/com/fastaccess/ui/modules/main/issues/MyIssuesPresenter.java @@ -1,7 +1,7 @@ package com.fastaccess.ui.modules.main.issues; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.view.View; import com.fastaccess.data.dao.model.Issue; diff --git a/app/src/main/java/com/fastaccess/ui/modules/main/issues/pager/MyIssuesPagerFragment.java b/app/src/main/java/com/fastaccess/ui/modules/main/issues/pager/MyIssuesPagerFragment.java index 0d2ab609..5d3fe750 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/main/issues/pager/MyIssuesPagerFragment.java +++ b/app/src/main/java/com/fastaccess/ui/modules/main/issues/pager/MyIssuesPagerFragment.java @@ -1,10 +1,10 @@ package com.fastaccess.ui.modules.main.issues.pager; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.design.widget.TabLayout; -import android.support.v4.view.ViewPager; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import com.google.android.material.tabs.TabLayout; +import androidx.viewpager.widget.ViewPager; import android.view.MenuInflater; import android.view.View; import android.widget.PopupMenu; @@ -109,6 +109,16 @@ public class MyIssuesPagerFragment extends BaseFragment(BundleConstant.ITEM) } @OnClick(R.id.cancel) fun onCancel() { @@ -38,7 +35,7 @@ class FastHubNotificationDialog : BaseDialogFragment = BasePresenter() - override fun onBackPressed() {} - override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val textView = findViewById(R.id.description) diff --git a/app/src/main/java/com/fastaccess/ui/modules/main/premium/GmsTaskListeners.java b/app/src/main/java/com/fastaccess/ui/modules/main/premium/GmsTaskListeners.java index e15fd70c..3e8664d4 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/main/premium/GmsTaskListeners.java +++ b/app/src/main/java/com/fastaccess/ui/modules/main/premium/GmsTaskListeners.java @@ -1,6 +1,6 @@ package com.github.b3er.rxfirebase.common; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import com.google.android.gms.tasks.OnCompleteListener; import com.google.android.gms.tasks.Task; import io.reactivex.CompletableEmitter; diff --git a/app/src/main/java/com/fastaccess/ui/modules/main/premium/PremiumActivity.kt b/app/src/main/java/com/fastaccess/ui/modules/main/premium/PremiumActivity.kt index 36f791bf..d0b50a9e 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/main/premium/PremiumActivity.kt +++ b/app/src/main/java/com/fastaccess/ui/modules/main/premium/PremiumActivity.kt @@ -5,7 +5,7 @@ import android.app.Activity import android.content.Context import android.content.Intent import android.os.Bundle -import android.support.transition.TransitionManager +import androidx.transition.TransitionManager import android.view.View import android.widget.Button import android.widget.EditText diff --git a/app/src/main/java/com/fastaccess/ui/modules/main/pullrequests/MyPullRequestFragment.java b/app/src/main/java/com/fastaccess/ui/modules/main/pullrequests/MyPullRequestFragment.java index 970a2f18..99a93ce2 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/main/pullrequests/MyPullRequestFragment.java +++ b/app/src/main/java/com/fastaccess/ui/modules/main/pullrequests/MyPullRequestFragment.java @@ -2,10 +2,10 @@ package com.fastaccess.ui.modules.main.pullrequests; import android.content.Context; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.annotation.StringRes; -import android.support.v4.widget.SwipeRefreshLayout; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.annotation.StringRes; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import android.view.View; import com.evernote.android.state.State; @@ -156,7 +156,7 @@ public class MyPullRequestFragment extends BaseFragment view.onUpdateReadState(new GroupedNotificationModel(item), position)); - ReadNotificationService.unSubscribe(v.getContext(), item.getId()); } else { if (item.getSubject() != null && item.getSubject().getUrl() != null) { if (item.isUnread() && !PrefGetter.isMarkAsReadEnabled()) { diff --git a/app/src/main/java/com/fastaccess/ui/modules/notification/callback/OnNotificationChangedListener.java b/app/src/main/java/com/fastaccess/ui/modules/notification/callback/OnNotificationChangedListener.java index 1df8c5f0..80bd317d 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/notification/callback/OnNotificationChangedListener.java +++ b/app/src/main/java/com/fastaccess/ui/modules/notification/callback/OnNotificationChangedListener.java @@ -1,6 +1,6 @@ package com.fastaccess.ui.modules.notification.callback; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import com.fastaccess.data.dao.GroupedNotificationModel; diff --git a/app/src/main/java/com/fastaccess/ui/modules/notification/unread/UnreadNotificationMvp.java b/app/src/main/java/com/fastaccess/ui/modules/notification/unread/UnreadNotificationMvp.java index 40fd70a4..61b38a45 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/notification/unread/UnreadNotificationMvp.java +++ b/app/src/main/java/com/fastaccess/ui/modules/notification/unread/UnreadNotificationMvp.java @@ -1,8 +1,8 @@ package com.fastaccess.ui.modules.notification.unread; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v4.widget.SwipeRefreshLayout; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import com.fastaccess.data.dao.GroupedNotificationModel; import com.fastaccess.data.dao.model.Notification; diff --git a/app/src/main/java/com/fastaccess/ui/modules/notification/unread/UnreadNotificationsFragment.java b/app/src/main/java/com/fastaccess/ui/modules/notification/unread/UnreadNotificationsFragment.java index fb5962b6..84095873 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/notification/unread/UnreadNotificationsFragment.java +++ b/app/src/main/java/com/fastaccess/ui/modules/notification/unread/UnreadNotificationsFragment.java @@ -3,9 +3,9 @@ package com.fastaccess.ui.modules.notification.unread; import android.content.Context; import android.net.Uri; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.annotation.StringRes; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.annotation.StringRes; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; diff --git a/app/src/main/java/com/fastaccess/ui/modules/notification/unread/UnreadNotificationsPresenter.java b/app/src/main/java/com/fastaccess/ui/modules/notification/unread/UnreadNotificationsPresenter.java index 75ea175f..c3d76aee 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/notification/unread/UnreadNotificationsPresenter.java +++ b/app/src/main/java/com/fastaccess/ui/modules/notification/unread/UnreadNotificationsPresenter.java @@ -1,6 +1,7 @@ package com.fastaccess.ui.modules.notification.unread; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; + import android.view.View; import com.fastaccess.R; @@ -31,11 +32,6 @@ public class UnreadNotificationsPresenter extends BasePresenter view.onRemove(position)); - ReadNotificationService.unSubscribe(v.getContext(), item.getId()); } else { if (item.getSubject() != null && item.getSubject().getUrl() != null) { if (item.isUnread() && !PrefGetter.isMarkAsReadEnabled()) { diff --git a/app/src/main/java/com/fastaccess/ui/modules/parser/LinksParserActivity.java b/app/src/main/java/com/fastaccess/ui/modules/parser/LinksParserActivity.java index f053f3d9..8fc1143c 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/parser/LinksParserActivity.java +++ b/app/src/main/java/com/fastaccess/ui/modules/parser/LinksParserActivity.java @@ -4,8 +4,8 @@ import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.widget.Toast; import com.fastaccess.App; diff --git a/app/src/main/java/com/fastaccess/ui/modules/pinned/PinnedReposActivity.java b/app/src/main/java/com/fastaccess/ui/modules/pinned/PinnedReposActivity.java index f32dfd4a..f6267c6f 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/pinned/PinnedReposActivity.java +++ b/app/src/main/java/com/fastaccess/ui/modules/pinned/PinnedReposActivity.java @@ -3,9 +3,9 @@ package com.fastaccess.ui.modules.pinned; import android.content.Context; import android.content.Intent; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.design.widget.TabLayout; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import com.google.android.material.tabs.TabLayout; import com.fastaccess.R; import com.fastaccess.data.dao.FragmentPagerAdapterModel; diff --git a/app/src/main/java/com/fastaccess/ui/modules/pinned/gist/PinnedGistFragment.java b/app/src/main/java/com/fastaccess/ui/modules/pinned/gist/PinnedGistFragment.java index e599bdfe..6c07ea41 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/pinned/gist/PinnedGistFragment.java +++ b/app/src/main/java/com/fastaccess/ui/modules/pinned/gist/PinnedGistFragment.java @@ -1,8 +1,8 @@ package com.fastaccess.ui.modules.pinned.gist; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.view.View; import com.fastaccess.R; diff --git a/app/src/main/java/com/fastaccess/ui/modules/pinned/gist/PinnedGistMvp.java b/app/src/main/java/com/fastaccess/ui/modules/pinned/gist/PinnedGistMvp.java index a6db4ed5..089a79e0 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/pinned/gist/PinnedGistMvp.java +++ b/app/src/main/java/com/fastaccess/ui/modules/pinned/gist/PinnedGistMvp.java @@ -1,7 +1,7 @@ package com.fastaccess.ui.modules.pinned.gist; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import com.fastaccess.data.dao.model.Gist; import com.fastaccess.ui.base.mvp.BaseMvp; diff --git a/app/src/main/java/com/fastaccess/ui/modules/pinned/gist/PinnedGistPresenter.java b/app/src/main/java/com/fastaccess/ui/modules/pinned/gist/PinnedGistPresenter.java index b2db040b..1b878524 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/pinned/gist/PinnedGistPresenter.java +++ b/app/src/main/java/com/fastaccess/ui/modules/pinned/gist/PinnedGistPresenter.java @@ -1,6 +1,6 @@ package com.fastaccess.ui.modules.pinned.gist; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import android.view.View; import com.fastaccess.data.dao.model.Gist; diff --git a/app/src/main/java/com/fastaccess/ui/modules/pinned/issue/PinnedIssueFragment.java b/app/src/main/java/com/fastaccess/ui/modules/pinned/issue/PinnedIssueFragment.java index 2120c35e..550fadf3 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/pinned/issue/PinnedIssueFragment.java +++ b/app/src/main/java/com/fastaccess/ui/modules/pinned/issue/PinnedIssueFragment.java @@ -1,8 +1,8 @@ package com.fastaccess.ui.modules.pinned.issue; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.view.View; import com.fastaccess.R; diff --git a/app/src/main/java/com/fastaccess/ui/modules/pinned/issue/PinnedIssueMvp.java b/app/src/main/java/com/fastaccess/ui/modules/pinned/issue/PinnedIssueMvp.java index dd0dadd4..2d478538 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/pinned/issue/PinnedIssueMvp.java +++ b/app/src/main/java/com/fastaccess/ui/modules/pinned/issue/PinnedIssueMvp.java @@ -1,7 +1,7 @@ package com.fastaccess.ui.modules.pinned.issue; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import com.fastaccess.data.dao.model.Issue; import com.fastaccess.ui.base.mvp.BaseMvp; diff --git a/app/src/main/java/com/fastaccess/ui/modules/pinned/issue/PinnedIssuePresenter.java b/app/src/main/java/com/fastaccess/ui/modules/pinned/issue/PinnedIssuePresenter.java index d2f2d1b3..7f423bd5 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/pinned/issue/PinnedIssuePresenter.java +++ b/app/src/main/java/com/fastaccess/ui/modules/pinned/issue/PinnedIssuePresenter.java @@ -1,6 +1,6 @@ package com.fastaccess.ui.modules.pinned.issue; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import android.view.View; import com.fastaccess.data.dao.model.Issue; diff --git a/app/src/main/java/com/fastaccess/ui/modules/pinned/pullrequest/PinnedPullRequestFragment.java b/app/src/main/java/com/fastaccess/ui/modules/pinned/pullrequest/PinnedPullRequestFragment.java index 2960669f..2ddf26eb 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/pinned/pullrequest/PinnedPullRequestFragment.java +++ b/app/src/main/java/com/fastaccess/ui/modules/pinned/pullrequest/PinnedPullRequestFragment.java @@ -1,8 +1,8 @@ package com.fastaccess.ui.modules.pinned.pullrequest; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.view.View; import com.fastaccess.R; @@ -64,7 +64,7 @@ public class PinnedPullRequestFragment extends BaseFragment implements BannerInfoMvp.View { - - @BindView(R.id.imageChooser) Button imageChooser; - - @Override protected int layout() { - return R.layout.activity_banner_info; - } - - @Override protected boolean isTransparent() { - return false; - } - - @Override protected boolean canBack() { - return true; - } - - @Override protected boolean isSecured() { - return false; - } - - @Override public void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - } - - @OnClick(R.id.imageChooser) void onChooseImage() { - if (ActivityHelper.checkAndRequestReadWritePermission(this)) { - showFileChooser(); - } - } - - @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { - if (requestCode == BundleConstant.REQUEST_CODE) { - if (resultCode == RESULT_OK) { - String path = FileHelper.getPath(this, data.getData()); - if (path == null) { - showMessage(R.string.error, R.string.image_error); - return; - } - getPresenter().onPostImage(path); - } - - finish(); - } - } - - @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { - super.onRequestPermissionsResult(requestCode, permissions, grantResults); - if (requestCode == 1) { - if (permissions[0].equals(Manifest.permission.READ_EXTERNAL_STORAGE)) { - if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { - showFileChooser(); - } else { - Toasty.error(App.getInstance(), getString(R.string.permission_failed)).show(); - } - } - } - } - - @NonNull @Override public BannerInfoPresenter providePresenter() { - return new BannerInfoPresenter(); - } - - @Override public void onFinishedUploading() { - showMessage(R.string.success, R.string.successfully_submitted); - setResult(RESULT_OK); - finish(); - } - - private void showFileChooser() { - Intent intent = new Intent(); - intent.setType("image/*"); - intent.setAction(Intent.ACTION_GET_CONTENT); - startActivityForResult(Intent.createChooser(intent, getString(R.string.select_picture)), BundleConstant.REQUEST_CODE); - } -} diff --git a/app/src/main/java/com/fastaccess/ui/modules/profile/banner/BannerInfoMvp.java b/app/src/main/java/com/fastaccess/ui/modules/profile/banner/BannerInfoMvp.java deleted file mode 100644 index a305dcaf..00000000 --- a/app/src/main/java/com/fastaccess/ui/modules/profile/banner/BannerInfoMvp.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.fastaccess.ui.modules.profile.banner; - -import android.support.annotation.NonNull; - -import com.fastaccess.ui.base.mvp.BaseMvp; - -/** - * Created by JediB on 5/25/2017. - */ - -public interface BannerInfoMvp { - - interface View extends BaseMvp.FAView { - void onFinishedUploading(); - } - - interface Presenter { - void onPostImage(@NonNull String path); - } - -} diff --git a/app/src/main/java/com/fastaccess/ui/modules/profile/banner/BannerInfoPresenter.java b/app/src/main/java/com/fastaccess/ui/modules/profile/banner/BannerInfoPresenter.java deleted file mode 100644 index f85d6d0c..00000000 --- a/app/src/main/java/com/fastaccess/ui/modules/profile/banner/BannerInfoPresenter.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.fastaccess.ui.modules.profile.banner; - -import android.support.annotation.NonNull; - -import com.fastaccess.ui.base.mvp.presenter.BasePresenter; - -/** - * Created by JediB on 5/25/2017. - */ - -public class BannerInfoPresenter extends BasePresenter implements BannerInfoMvp.Presenter { -// @NonNull private Observable getHeaderGist() { -// return RxHelper.getObserver(RestProvider.getGistService(true).getGistFile(ProfileOverviewMvp.HEADER_FST_URL)); -// } - - @Override public void onPostImage(@NonNull String path) { -// Login login = Login.getUser(); -// RequestBody image = RequestBody.create(MediaType.parse("image/*"), new File(path)); -// ImgurProvider.getImgurService().postImage("", image); -// makeRestCall(RxHelper.getObserver(ImgurProvider.getImgurService().postImage("", image)) -// .filter(imgurReponseModel -> imgurReponseModel != null && imgurReponseModel.getData() != null) -// .map(imgurReponseModel -> imgurReponseModel.getData().getLink()) -// .flatMap(link -> getHeaderGist(), (imageLink, gistContent) -> { -// boolean isReplace = false; -// if (gistContent.contains(login.getLogin() + "->")) { -// String[] splitByNewLine = gistContent.split("\n"); -// for (String s : splitByNewLine) { -// String[] splitByUser = s.split("->"); -// if (login.getLogin().equalsIgnoreCase(splitByUser[0])) { -// gistContent = gistContent.replaceFirst(splitByUser[0] + "->" + -// splitByUser[1], login.getLogin() + "->" + imageLink); -// isReplace = true; -// break; -// } -// } -// } -// PrefGetter.setProfileBackgroundUrl(imageLink); -// if (!isReplace) { -// gistContent += "\n" + login.getLogin() + "->" + imageLink; -// } -// return gistContent; -// }) -// .map(s -> { -// CreateGistModel createGistModel = new CreateGistModel(); -// createGistModel.setPublicGist(true); -// HashMap modelHashMap = new HashMap<>(); -// FilesListModel file = new FilesListModel(); -// file.setFilename("header.fst"); -// file.setContent(s); -// modelHashMap.put("header.fst", file); -// createGistModel.setFiles(modelHashMap); -// return createGistModel; -// }) -// .flatMap(body -> RxHelper.getObserver(RestProvider.getGistService().editGist(body, ProfileOverviewMvp.HEADER_GIST_ID))), -// gist -> sendToView(BannerInfoMvp.View::onFinishedUploading)); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/fastaccess/ui/modules/profile/followers/ProfileFollowersFragment.java b/app/src/main/java/com/fastaccess/ui/modules/profile/followers/ProfileFollowersFragment.java index 2080cdc8..82a0c183 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/profile/followers/ProfileFollowersFragment.java +++ b/app/src/main/java/com/fastaccess/ui/modules/profile/followers/ProfileFollowersFragment.java @@ -1,10 +1,10 @@ package com.fastaccess.ui.modules.profile.followers; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.annotation.StringRes; -import android.support.v4.widget.SwipeRefreshLayout; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.annotation.StringRes; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import android.view.View; import com.fastaccess.R; diff --git a/app/src/main/java/com/fastaccess/ui/modules/profile/followers/ProfileFollowersMvp.java b/app/src/main/java/com/fastaccess/ui/modules/profile/followers/ProfileFollowersMvp.java index 24625ec8..3b8c59b4 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/profile/followers/ProfileFollowersMvp.java +++ b/app/src/main/java/com/fastaccess/ui/modules/profile/followers/ProfileFollowersMvp.java @@ -1,9 +1,9 @@ package com.fastaccess.ui.modules.profile.followers; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v4.widget.SwipeRefreshLayout; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import com.fastaccess.data.dao.model.User; import com.fastaccess.provider.rest.loadmore.OnLoadMore; diff --git a/app/src/main/java/com/fastaccess/ui/modules/profile/followers/ProfileFollowersPresenter.java b/app/src/main/java/com/fastaccess/ui/modules/profile/followers/ProfileFollowersPresenter.java index a9dfbd4c..ea45c400 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/profile/followers/ProfileFollowersPresenter.java +++ b/app/src/main/java/com/fastaccess/ui/modules/profile/followers/ProfileFollowersPresenter.java @@ -1,7 +1,7 @@ package com.fastaccess.ui.modules.profile.followers; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.view.View; import com.fastaccess.data.dao.model.User; diff --git a/app/src/main/java/com/fastaccess/ui/modules/profile/following/ProfileFollowingFragment.java b/app/src/main/java/com/fastaccess/ui/modules/profile/following/ProfileFollowingFragment.java index 3da3b821..5fe9654e 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/profile/following/ProfileFollowingFragment.java +++ b/app/src/main/java/com/fastaccess/ui/modules/profile/following/ProfileFollowingFragment.java @@ -1,10 +1,10 @@ package com.fastaccess.ui.modules.profile.following; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.annotation.StringRes; -import android.support.v4.widget.SwipeRefreshLayout; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.annotation.StringRes; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import android.view.View; import com.fastaccess.R; diff --git a/app/src/main/java/com/fastaccess/ui/modules/profile/following/ProfileFollowingMvp.java b/app/src/main/java/com/fastaccess/ui/modules/profile/following/ProfileFollowingMvp.java index c21fa694..1249e8c1 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/profile/following/ProfileFollowingMvp.java +++ b/app/src/main/java/com/fastaccess/ui/modules/profile/following/ProfileFollowingMvp.java @@ -1,9 +1,9 @@ package com.fastaccess.ui.modules.profile.following; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v4.widget.SwipeRefreshLayout; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import com.fastaccess.data.dao.model.User; import com.fastaccess.provider.rest.loadmore.OnLoadMore; diff --git a/app/src/main/java/com/fastaccess/ui/modules/profile/following/ProfileFollowingPresenter.java b/app/src/main/java/com/fastaccess/ui/modules/profile/following/ProfileFollowingPresenter.java index 8f75fd1d..443f7aa7 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/profile/following/ProfileFollowingPresenter.java +++ b/app/src/main/java/com/fastaccess/ui/modules/profile/following/ProfileFollowingPresenter.java @@ -1,7 +1,7 @@ package com.fastaccess.ui.modules.profile.following; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.view.View; import com.fastaccess.data.dao.model.User; diff --git a/app/src/main/java/com/fastaccess/ui/modules/profile/gists/ProfileGistsFragment.java b/app/src/main/java/com/fastaccess/ui/modules/profile/gists/ProfileGistsFragment.java index ab3e18d6..7f5ae1aa 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/profile/gists/ProfileGistsFragment.java +++ b/app/src/main/java/com/fastaccess/ui/modules/profile/gists/ProfileGistsFragment.java @@ -3,10 +3,10 @@ package com.fastaccess.ui.modules.profile.gists; import android.app.Activity; import android.content.Intent; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.annotation.StringRes; -import android.support.v4.widget.SwipeRefreshLayout; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.annotation.StringRes; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import android.view.View; import com.fastaccess.R; diff --git a/app/src/main/java/com/fastaccess/ui/modules/profile/gists/ProfileGistsMvp.java b/app/src/main/java/com/fastaccess/ui/modules/profile/gists/ProfileGistsMvp.java index b8a958f2..c0c484eb 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/profile/gists/ProfileGistsMvp.java +++ b/app/src/main/java/com/fastaccess/ui/modules/profile/gists/ProfileGistsMvp.java @@ -1,8 +1,8 @@ package com.fastaccess.ui.modules.profile.gists; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v4.widget.SwipeRefreshLayout; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import com.fastaccess.data.dao.model.Gist; import com.fastaccess.provider.rest.loadmore.OnLoadMore; diff --git a/app/src/main/java/com/fastaccess/ui/modules/profile/gists/ProfileGistsPresenter.java b/app/src/main/java/com/fastaccess/ui/modules/profile/gists/ProfileGistsPresenter.java index 44fda497..e098ccc7 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/profile/gists/ProfileGistsPresenter.java +++ b/app/src/main/java/com/fastaccess/ui/modules/profile/gists/ProfileGistsPresenter.java @@ -1,7 +1,7 @@ package com.fastaccess.ui.modules.profile.gists; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.view.View; import com.annimon.stream.Stream; diff --git a/app/src/main/java/com/fastaccess/ui/modules/profile/org/OrgProfileOverviewFragment.java b/app/src/main/java/com/fastaccess/ui/modules/profile/org/OrgProfileOverviewFragment.java index 75b9ce33..e9859f48 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/profile/org/OrgProfileOverviewFragment.java +++ b/app/src/main/java/com/fastaccess/ui/modules/profile/org/OrgProfileOverviewFragment.java @@ -2,10 +2,10 @@ package com.fastaccess.ui.modules.profile.org; import android.annotation.SuppressLint; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.annotation.StringRes; -import android.support.transition.TransitionManager; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.annotation.StringRes; +import androidx.transition.TransitionManager; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; diff --git a/app/src/main/java/com/fastaccess/ui/modules/profile/org/OrgProfileOverviewMvp.java b/app/src/main/java/com/fastaccess/ui/modules/profile/org/OrgProfileOverviewMvp.java index fa661a15..1bc7ce54 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/profile/org/OrgProfileOverviewMvp.java +++ b/app/src/main/java/com/fastaccess/ui/modules/profile/org/OrgProfileOverviewMvp.java @@ -1,8 +1,8 @@ package com.fastaccess.ui.modules.profile.org; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import com.fastaccess.data.dao.model.User; import com.fastaccess.ui.base.mvp.BaseMvp; diff --git a/app/src/main/java/com/fastaccess/ui/modules/profile/org/OrgProfileOverviewPresenter.java b/app/src/main/java/com/fastaccess/ui/modules/profile/org/OrgProfileOverviewPresenter.java index 6b3fb1cf..5146430b 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/profile/org/OrgProfileOverviewPresenter.java +++ b/app/src/main/java/com/fastaccess/ui/modules/profile/org/OrgProfileOverviewPresenter.java @@ -1,8 +1,8 @@ package com.fastaccess.ui.modules.profile.org; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import com.fastaccess.data.dao.model.User; import com.fastaccess.helper.BundleConstant; diff --git a/app/src/main/java/com/fastaccess/ui/modules/profile/org/members/OrgMembersFragment.java b/app/src/main/java/com/fastaccess/ui/modules/profile/org/members/OrgMembersFragment.java index 027b040f..3655cec0 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/profile/org/members/OrgMembersFragment.java +++ b/app/src/main/java/com/fastaccess/ui/modules/profile/org/members/OrgMembersFragment.java @@ -1,10 +1,10 @@ package com.fastaccess.ui.modules.profile.org.members; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.annotation.StringRes; -import android.support.v4.widget.SwipeRefreshLayout; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.annotation.StringRes; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import android.view.View; import com.fastaccess.R; diff --git a/app/src/main/java/com/fastaccess/ui/modules/profile/org/members/OrgMembersMvp.java b/app/src/main/java/com/fastaccess/ui/modules/profile/org/members/OrgMembersMvp.java index 74d03018..ab60bfb0 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/profile/org/members/OrgMembersMvp.java +++ b/app/src/main/java/com/fastaccess/ui/modules/profile/org/members/OrgMembersMvp.java @@ -1,9 +1,9 @@ package com.fastaccess.ui.modules.profile.org.members; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v4.widget.SwipeRefreshLayout; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import com.fastaccess.data.dao.model.User; import com.fastaccess.provider.rest.loadmore.OnLoadMore; diff --git a/app/src/main/java/com/fastaccess/ui/modules/profile/org/members/OrgMembersPresenter.java b/app/src/main/java/com/fastaccess/ui/modules/profile/org/members/OrgMembersPresenter.java index c771193c..517386a1 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/profile/org/members/OrgMembersPresenter.java +++ b/app/src/main/java/com/fastaccess/ui/modules/profile/org/members/OrgMembersPresenter.java @@ -1,7 +1,7 @@ package com.fastaccess.ui.modules.profile.org.members; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.view.View; import com.fastaccess.data.dao.model.User; diff --git a/app/src/main/java/com/fastaccess/ui/modules/profile/org/project/OrgProjectActivity.kt b/app/src/main/java/com/fastaccess/ui/modules/profile/org/project/OrgProjectActivity.kt index cd8e9a96..e81823d9 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/profile/org/project/OrgProjectActivity.kt +++ b/app/src/main/java/com/fastaccess/ui/modules/profile/org/project/OrgProjectActivity.kt @@ -3,7 +3,7 @@ package com.fastaccess.ui.modules.profile.org.project import android.content.Context import android.content.Intent import android.os.Bundle -import android.support.design.widget.AppBarLayout +import com.google.android.material.appbar.AppBarLayout import butterknife.BindView import com.evernote.android.state.State import com.fastaccess.R @@ -39,13 +39,15 @@ class OrgProjectActivity : BaseActivity { if (event.getAction() == MotionEvent.ACTION_UP) { ActivityHelper.startCustomTab(getActivity(), userModel.getAvatarUrl()); @@ -276,10 +265,6 @@ public class ProfileOverviewFragment extends BaseFragment nodes) { if (pinnedReposTextView == null) return; if (!nodes.isEmpty()) { @@ -323,38 +308,6 @@ public class ProfileOverviewFragment extends BaseFragment= Build.VERSION_CODES.M) { - username.setTextColor(getResources().getColor(android.R.color.primary_text_dark, getActivity().getTheme())); - userInformation.setBackground(getResources().getDrawable(R.drawable.scrim, getActivity().getTheme())); - } else { - username.setTextColor(getResources().getColor(android.R.color.primary_text_dark)); - userInformation.setBackground(getResources().getDrawable(R.drawable.scrim)); - } - chooseBanner.setVisibility(GONE); - if (getPresenter().getLogin().equals(Login.getUser().getLogin())) { - chooseBanner_pencil.setVisibility(VISIBLE); - chooseBanner_pencil.bringToFront(); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - chooseBanner_pencil.setColorFilter(getResources().getColor(R.color.material_light_white, getActivity().getTheme())); - chooseBanner_pencil.setForegroundGravity(TOP); - } else { - chooseBanner_pencil.setColorFilter(getResources().getColor(R.color.material_light_white)); - } - } - } - } - private void onHideProgress() { hideProgress(); } diff --git a/app/src/main/java/com/fastaccess/ui/modules/profile/overview/ProfileOverviewMvp.java b/app/src/main/java/com/fastaccess/ui/modules/profile/overview/ProfileOverviewMvp.java index a3117244..ea23173e 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/profile/overview/ProfileOverviewMvp.java +++ b/app/src/main/java/com/fastaccess/ui/modules/profile/overview/ProfileOverviewMvp.java @@ -1,9 +1,8 @@ package com.fastaccess.ui.modules.profile.overview; -import android.graphics.Bitmap; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import com.fastaccess.data.dao.model.User; import com.fastaccess.ui.base.mvp.BaseMvp; @@ -30,12 +29,8 @@ public interface ProfileOverviewMvp { void onInitOrgs(@Nullable List orgs); - void onHeaderLoaded(@Nullable Bitmap bitmap); - void onUserNotFound(); - void onImagePosted(@Nullable String link); - void onInitPinnedRepos(@NonNull List nodes); } diff --git a/app/src/main/java/com/fastaccess/ui/modules/profile/overview/ProfileOverviewPresenter.java b/app/src/main/java/com/fastaccess/ui/modules/profile/overview/ProfileOverviewPresenter.java index 55f91001..07f319d8 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/profile/overview/ProfileOverviewPresenter.java +++ b/app/src/main/java/com/fastaccess/ui/modules/profile/overview/ProfileOverviewPresenter.java @@ -2,8 +2,8 @@ package com.fastaccess.ui.modules.profile.overview; import android.graphics.Bitmap; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.text.TextUtils; import com.apollographql.apollo.ApolloCall; diff --git a/app/src/main/java/com/fastaccess/ui/modules/profile/repos/ProfileReposFilterBottomSheetDialog.java b/app/src/main/java/com/fastaccess/ui/modules/profile/repos/ProfileReposFilterBottomSheetDialog.java index f040bc6d..76462b91 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/profile/repos/ProfileReposFilterBottomSheetDialog.java +++ b/app/src/main/java/com/fastaccess/ui/modules/profile/repos/ProfileReposFilterBottomSheetDialog.java @@ -3,8 +3,8 @@ package com.fastaccess.ui.modules.profile.repos; import android.content.Context; import android.content.Intent; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.view.View; import android.widget.ArrayAdapter; import android.widget.LinearLayout; diff --git a/app/src/main/java/com/fastaccess/ui/modules/profile/repos/ProfileReposFragment.java b/app/src/main/java/com/fastaccess/ui/modules/profile/repos/ProfileReposFragment.java index 8c3a9968..6cd60647 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/profile/repos/ProfileReposFragment.java +++ b/app/src/main/java/com/fastaccess/ui/modules/profile/repos/ProfileReposFragment.java @@ -1,10 +1,10 @@ package com.fastaccess.ui.modules.profile.repos; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.annotation.StringRes; -import android.support.v4.widget.SwipeRefreshLayout; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.annotation.StringRes; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import android.view.View; import com.fastaccess.R; diff --git a/app/src/main/java/com/fastaccess/ui/modules/profile/repos/ProfileReposMvp.java b/app/src/main/java/com/fastaccess/ui/modules/profile/repos/ProfileReposMvp.java index d94bf278..94268f56 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/profile/repos/ProfileReposMvp.java +++ b/app/src/main/java/com/fastaccess/ui/modules/profile/repos/ProfileReposMvp.java @@ -1,8 +1,8 @@ package com.fastaccess.ui.modules.profile.repos; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v4.widget.SwipeRefreshLayout; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import com.fastaccess.data.dao.model.Repo; import com.fastaccess.provider.rest.loadmore.OnLoadMore; diff --git a/app/src/main/java/com/fastaccess/ui/modules/profile/repos/ProfileReposPresenter.java b/app/src/main/java/com/fastaccess/ui/modules/profile/repos/ProfileReposPresenter.java index 3581cde1..8a722c32 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/profile/repos/ProfileReposPresenter.java +++ b/app/src/main/java/com/fastaccess/ui/modules/profile/repos/ProfileReposPresenter.java @@ -1,7 +1,7 @@ package com.fastaccess.ui.modules.profile.repos; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.text.TextUtils; import android.view.View; diff --git a/app/src/main/java/com/fastaccess/ui/modules/profile/starred/ProfileStarredFragment.java b/app/src/main/java/com/fastaccess/ui/modules/profile/starred/ProfileStarredFragment.java index 39a0541b..3347608a 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/profile/starred/ProfileStarredFragment.java +++ b/app/src/main/java/com/fastaccess/ui/modules/profile/starred/ProfileStarredFragment.java @@ -2,10 +2,10 @@ package com.fastaccess.ui.modules.profile.starred; import android.content.Context; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.annotation.StringRes; -import android.support.v4.widget.SwipeRefreshLayout; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.annotation.StringRes; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import android.view.View; import com.fastaccess.R; diff --git a/app/src/main/java/com/fastaccess/ui/modules/profile/starred/ProfileStarredMvp.java b/app/src/main/java/com/fastaccess/ui/modules/profile/starred/ProfileStarredMvp.java index 939bd74a..e8c2c9a4 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/profile/starred/ProfileStarredMvp.java +++ b/app/src/main/java/com/fastaccess/ui/modules/profile/starred/ProfileStarredMvp.java @@ -1,8 +1,8 @@ package com.fastaccess.ui.modules.profile.starred; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v4.widget.SwipeRefreshLayout; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import com.fastaccess.data.dao.model.Repo; import com.fastaccess.provider.rest.loadmore.OnLoadMore; diff --git a/app/src/main/java/com/fastaccess/ui/modules/profile/starred/ProfileStarredPresenter.java b/app/src/main/java/com/fastaccess/ui/modules/profile/starred/ProfileStarredPresenter.java index 182e710f..230e0974 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/profile/starred/ProfileStarredPresenter.java +++ b/app/src/main/java/com/fastaccess/ui/modules/profile/starred/ProfileStarredPresenter.java @@ -1,7 +1,7 @@ package com.fastaccess.ui.modules.profile.starred; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.view.View; import com.fastaccess.data.dao.Pageable; diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/DummyFragment.java b/app/src/main/java/com/fastaccess/ui/modules/repos/DummyFragment.java index f9833711..3c55fdad 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/repos/DummyFragment.java +++ b/app/src/main/java/com/fastaccess/ui/modules/repos/DummyFragment.java @@ -1,8 +1,8 @@ package com.fastaccess.ui.modules.repos; import android.os.Bundle; -import android.support.annotation.Nullable; -import android.support.v4.app.Fragment; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; 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 bafa6704..c9f133d0 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 @@ -7,12 +7,12 @@ import android.graphics.Color; import android.graphics.Rect; import android.graphics.Typeface; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.design.widget.FloatingActionButton; -import android.support.transition.TransitionManager; -import android.support.v4.widget.TextViewCompat; -import android.support.v7.widget.RecyclerView; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import com.google.android.material.floatingactionbutton.FloatingActionButton; +import androidx.transition.TransitionManager; +import androidx.core.widget.TextViewCompat; +import androidx.recyclerview.widget.RecyclerView; import android.text.format.Formatter; import android.view.Menu; import android.view.MenuItem; @@ -45,6 +45,7 @@ import com.fastaccess.ui.adapter.TopicsAdapter; import com.fastaccess.ui.base.BaseActivity; import com.fastaccess.ui.modules.filter.issues.FilterIssuesActivity; import com.fastaccess.ui.modules.main.MainActivity; +import com.fastaccess.ui.modules.repos.code.RepoCodePagerFragment; import com.fastaccess.ui.modules.repos.extras.labels.LabelsDialogFragment; import com.fastaccess.ui.modules.repos.extras.license.RepoLicenseBottomSheet; import com.fastaccess.ui.modules.repos.extras.milestone.create.MilestoneDialogFragment; @@ -578,19 +579,18 @@ public class RepoPagerActivity extends BaseActivity getNamesToTag() { diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/code/commit/details/CommitPagerMvp.java b/app/src/main/java/com/fastaccess/ui/modules/repos/code/commit/details/CommitPagerMvp.java index eada71e5..4e57ef09 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/repos/code/commit/details/CommitPagerMvp.java +++ b/app/src/main/java/com/fastaccess/ui/modules/repos/code/commit/details/CommitPagerMvp.java @@ -1,8 +1,8 @@ package com.fastaccess.ui.modules.repos.code.commit.details; import android.content.Intent; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import com.fastaccess.data.dao.model.Comment; import com.fastaccess.data.dao.model.Commit; diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/code/commit/details/CommitPagerPresenter.java b/app/src/main/java/com/fastaccess/ui/modules/repos/code/commit/details/CommitPagerPresenter.java index 1e1a7149..89a870a5 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/repos/code/commit/details/CommitPagerPresenter.java +++ b/app/src/main/java/com/fastaccess/ui/modules/repos/code/commit/details/CommitPagerPresenter.java @@ -1,8 +1,8 @@ package com.fastaccess.ui.modules.repos.code.commit.details; import android.content.Intent; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import com.fastaccess.data.dao.CommentRequestModel; import com.fastaccess.data.dao.MarkdownModel; diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/code/commit/details/comments/CommitCommentsFragment.java b/app/src/main/java/com/fastaccess/ui/modules/repos/code/commit/details/comments/CommitCommentsFragment.java index c699ac4d..437e6485 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/repos/code/commit/details/comments/CommitCommentsFragment.java +++ b/app/src/main/java/com/fastaccess/ui/modules/repos/code/commit/details/comments/CommitCommentsFragment.java @@ -4,10 +4,10 @@ import android.app.Activity; import android.content.Context; import android.content.Intent; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.annotation.StringRes; -import android.support.v4.widget.SwipeRefreshLayout; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.annotation.StringRes; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import android.view.View; import com.evernote.android.state.State; diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/code/commit/details/comments/CommitCommentsMvp.java b/app/src/main/java/com/fastaccess/ui/modules/repos/code/commit/details/comments/CommitCommentsMvp.java index 09d53ac7..d5d234f8 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/repos/code/commit/details/comments/CommitCommentsMvp.java +++ b/app/src/main/java/com/fastaccess/ui/modules/repos/code/commit/details/comments/CommitCommentsMvp.java @@ -1,9 +1,9 @@ package com.fastaccess.ui.modules.repos.code.commit.details.comments; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v4.widget.SwipeRefreshLayout; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import com.fastaccess.data.dao.TimelineModel; import com.fastaccess.data.dao.model.Comment; diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/code/commit/details/comments/CommitCommentsPresenter.java b/app/src/main/java/com/fastaccess/ui/modules/repos/code/commit/details/comments/CommitCommentsPresenter.java index f6a6785b..438c527d 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/repos/code/commit/details/comments/CommitCommentsPresenter.java +++ b/app/src/main/java/com/fastaccess/ui/modules/repos/code/commit/details/comments/CommitCommentsPresenter.java @@ -1,8 +1,8 @@ package com.fastaccess.ui.modules.repos.code.commit.details.comments; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.view.View; import android.widget.PopupMenu; diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/code/commit/details/files/CommitFilesFragment.java b/app/src/main/java/com/fastaccess/ui/modules/repos/code/commit/details/files/CommitFilesFragment.java index eabef096..72094848 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/repos/code/commit/details/files/CommitFilesFragment.java +++ b/app/src/main/java/com/fastaccess/ui/modules/repos/code/commit/details/files/CommitFilesFragment.java @@ -4,8 +4,8 @@ import android.app.Activity; import android.content.Context; import android.content.Intent; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.view.View; import com.evernote.android.state.State; diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/code/commit/details/files/CommitFilesMvp.java b/app/src/main/java/com/fastaccess/ui/modules/repos/code/commit/details/files/CommitFilesMvp.java index 7578a27e..e7f9bbe8 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/repos/code/commit/details/files/CommitFilesMvp.java +++ b/app/src/main/java/com/fastaccess/ui/modules/repos/code/commit/details/files/CommitFilesMvp.java @@ -1,8 +1,8 @@ package com.fastaccess.ui.modules.repos.code.commit.details.files; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import com.fastaccess.data.dao.CommentRequestModel; import com.fastaccess.data.dao.CommitFileChanges; diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/code/commit/details/files/CommitFilesPresenter.java b/app/src/main/java/com/fastaccess/ui/modules/repos/code/commit/details/files/CommitFilesPresenter.java index b28ff936..a94e22da 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/repos/code/commit/details/files/CommitFilesPresenter.java +++ b/app/src/main/java/com/fastaccess/ui/modules/repos/code/commit/details/files/CommitFilesPresenter.java @@ -2,8 +2,8 @@ package com.fastaccess.ui.modules.repos.code.commit.details.files; import android.app.Activity; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.view.MenuInflater; import android.view.View; import android.widget.PopupMenu; diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/code/commit/details/files/CommitFilesSingleton.java b/app/src/main/java/com/fastaccess/ui/modules/repos/code/commit/details/files/CommitFilesSingleton.java index 53d2b166..21ddfa90 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/repos/code/commit/details/files/CommitFilesSingleton.java +++ b/app/src/main/java/com/fastaccess/ui/modules/repos/code/commit/details/files/CommitFilesSingleton.java @@ -1,7 +1,7 @@ package com.fastaccess.ui.modules.repos.code.commit.details.files; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import com.fastaccess.data.dao.CommitFileListModel; diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/code/commit/history/FileCommitHistoryActivity.kt b/app/src/main/java/com/fastaccess/ui/modules/repos/code/commit/history/FileCommitHistoryActivity.kt index 4c81c543..195168ff 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/repos/code/commit/history/FileCommitHistoryActivity.kt +++ b/app/src/main/java/com/fastaccess/ui/modules/repos/code/commit/history/FileCommitHistoryActivity.kt @@ -35,22 +35,28 @@ class FileCommitHistoryActivity : BaseActivity getCachedFiles(@NonNull String url, @NonNull String ref); - void onDeleteFile(@NonNull String message, @NonNull RepoFile item); + void onDeleteFile(@NonNull String message, @NonNull RepoFile item, @NonNull String branch); } diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/code/files/RepoFilesPresenter.java b/app/src/main/java/com/fastaccess/ui/modules/repos/code/files/RepoFilesPresenter.java index a9d11eac..d8afefda 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/repos/code/files/RepoFilesPresenter.java +++ b/app/src/main/java/com/fastaccess/ui/modules/repos/code/files/RepoFilesPresenter.java @@ -1,8 +1,8 @@ package com.fastaccess.ui.modules.repos.code.files; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v4.widget.SwipeRefreshLayout; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import android.view.View; import com.fastaccess.R; @@ -98,7 +98,7 @@ class RepoFilesPresenter extends BasePresenter implements Rep } @Override public void onInitDataAndRequest(@NonNull String login, @NonNull String repoId, @NonNull String path, - @NonNull String ref, boolean clear, @NonNull RepoFile toAppend) { + @NonNull String ref, boolean clear, @Nullable RepoFile toAppend) { if (clear) pathsModel.clear(); this.login = login; this.repoId = repoId; @@ -121,8 +121,8 @@ class RepoFilesPresenter extends BasePresenter implements Rep return pathsModel.getPaths(url, ref); } - @Override public void onDeleteFile(@NonNull String message, @NonNull RepoFile item) { - CommitRequestModel body = new CommitRequestModel(message, null, item.getSha()); + @Override public void onDeleteFile(@NonNull String message, @NonNull RepoFile item, @NonNull String branch) { + CommitRequestModel body = new CommitRequestModel(message, null, item.getSha(), branch); makeRestCall(RestProvider.getContentService(isEnterprise()) .deleteFile(login, repoId, item.getPath(), ref, body), gitCommitModel -> sendToView(SwipeRefreshLayout.OnRefreshListener::onRefresh)); diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/code/files/activity/RepoFilesActivity.java b/app/src/main/java/com/fastaccess/ui/modules/repos/code/files/activity/RepoFilesActivity.java index 22dac63b..eb39b365 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/repos/code/files/activity/RepoFilesActivity.java +++ b/app/src/main/java/com/fastaccess/ui/modules/repos/code/files/activity/RepoFilesActivity.java @@ -4,8 +4,8 @@ import android.content.Context; import android.content.Intent; import android.net.Uri; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.view.MenuItem; import com.annimon.stream.Objects; diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/code/files/paths/RepoFilePathFragment.java b/app/src/main/java/com/fastaccess/ui/modules/repos/code/files/paths/RepoFilePathFragment.java index efdcb629..3cbaf7d4 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/repos/code/files/paths/RepoFilePathFragment.java +++ b/app/src/main/java/com/fastaccess/ui/modules/repos/code/files/paths/RepoFilePathFragment.java @@ -5,10 +5,10 @@ import android.content.Context; import android.content.Intent; import android.net.Uri; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.annotation.StringRes; -import android.support.v7.widget.RecyclerView; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.annotation.StringRes; +import androidx.recyclerview.widget.RecyclerView; import android.view.View; import com.annimon.stream.Objects; @@ -179,11 +179,13 @@ public class RepoFilePathFragment extends BaseFragment 2 ? adapter.getItemCount() - 2 : adapter.getItemCount() - 1; - if (position > 0 && position <= adapter.getItemCount()) { - if (position == 1) position = 0; - RepoFile repoFilesModel = adapter.getItem(position); - onItemClicked(repoFilesModel, position); + if (getRepoFilesView().isRefreshing()) return; + if (adapter.getItemCount() > 1) { + adapter.removeItem(adapter.getItemCount() - 1); + RepoFile model = adapter.getItem(adapter.getItemCount() - 1); + getRepoFilesView().onSetData(getPresenter().getLogin(), getPresenter().getRepoId(), + Objects.toString(model.getPath(), ""), ref, false, null); + recycler.scrollToPosition(adapter.getItemCount() - 1); } else { onBackClicked(); } @@ -272,7 +274,7 @@ public class RepoFilePathFragment extends BaseFragment models = new ArrayList<>(); if (!InputHelper.isEmpty(item.getZipBallUrl())) { - models.add(new SimpleUrlsModel(getString(R.string.download_as_zip), item.getZipBallUrl())); + String url = item.getZipBallUrl(); + if (!url.endsWith(".tar.gz")) { + url = url + ".tar.gz"; + } + models.add(new SimpleUrlsModel(getString(R.string.download_as_zip), url)); } if (!InputHelper.isEmpty(item.getTarballUrl())) { models.add(new SimpleUrlsModel(getString(R.string.download_as_tar), item.getTarballUrl())); diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/code/releases/RepoReleasesMvp.java b/app/src/main/java/com/fastaccess/ui/modules/repos/code/releases/RepoReleasesMvp.java index 6eff70fe..2ddd9bf6 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/repos/code/releases/RepoReleasesMvp.java +++ b/app/src/main/java/com/fastaccess/ui/modules/repos/code/releases/RepoReleasesMvp.java @@ -1,9 +1,9 @@ package com.fastaccess.ui.modules.repos.code.releases; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v4.widget.SwipeRefreshLayout; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import com.fastaccess.data.dao.SimpleUrlsModel; import com.fastaccess.data.dao.model.Release; diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/code/releases/RepoReleasesPresenter.java b/app/src/main/java/com/fastaccess/ui/modules/repos/code/releases/RepoReleasesPresenter.java index 31206dd1..9a077008 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/repos/code/releases/RepoReleasesPresenter.java +++ b/app/src/main/java/com/fastaccess/ui/modules/repos/code/releases/RepoReleasesPresenter.java @@ -1,8 +1,8 @@ package com.fastaccess.ui.modules.repos.code.releases; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.view.View; import com.fastaccess.R; diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/extras/assignees/AssigneesDialogFragment.java b/app/src/main/java/com/fastaccess/ui/modules/repos/extras/assignees/AssigneesDialogFragment.java index 1a149500..33512af6 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/repos/extras/assignees/AssigneesDialogFragment.java +++ b/app/src/main/java/com/fastaccess/ui/modules/repos/extras/assignees/AssigneesDialogFragment.java @@ -2,10 +2,10 @@ package com.fastaccess.ui.modules.repos.extras.assignees; import android.content.Context; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.annotation.StringRes; -import android.support.v4.widget.SwipeRefreshLayout; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.annotation.StringRes; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import android.view.View; import com.annimon.stream.Collectors; @@ -22,6 +22,8 @@ import com.fastaccess.ui.widgets.StateLayout; import com.fastaccess.ui.widgets.recyclerview.DynamicRecyclerView; import com.fastaccess.ui.widgets.recyclerview.scroll.RecyclerViewFastScroller; +import org.jetbrains.annotations.NotNull; + import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedHashMap; @@ -57,7 +59,7 @@ public class AssigneesDialogFragment extends BaseDialogFragment(), RepoLicenseMvp.View, - PrettifyWebView.OnContentChangedListener { + PrettifyWebView.OnContentChangedListener { @State var content: String? = null @@ -32,10 +32,11 @@ class RepoLicenseBottomSheet : BaseMvpBottomSheetDialogFragment", "
")
+            val licenseText = license.replace(
+                "
", "
"
+            )
             webView.setGithubContent("
$licenseText
", null, false) } else { hideProgress() @@ -46,9 +47,9 @@ class RepoLicenseBottomSheet : BaseMvpBottomSheetDialogFragment parentFragment as LockIssuePrCallback + context is LockIssuePrCallback -> context + else -> null + } + } + + override fun onDetach() { + lockIssuePrCallback = null + super.onDetach() + } + + override fun layoutRes(): Int = R.layout.lock_issue_pr_dialog + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + cancel.setOnClickListener { dismiss() } + ok.setOnClickListener { + lockIssuePrCallback?.onLock(lockReason.selectedItem as String) + dismiss() + } + } + + companion object { + fun newInstance() = LockIssuePrBottomSheetDialog() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/extras/locking/LockIssuePrCallback.kt b/app/src/main/java/com/fastaccess/ui/modules/repos/extras/locking/LockIssuePrCallback.kt new file mode 100644 index 00000000..bb088cb3 --- /dev/null +++ b/app/src/main/java/com/fastaccess/ui/modules/repos/extras/locking/LockIssuePrCallback.kt @@ -0,0 +1,9 @@ +package com.fastaccess.ui.modules.repos.extras.locking + +/** + * Created by Kosh on 10.02.18. + */ + +interface LockIssuePrCallback { + fun onLock(reason: String) +} \ No newline at end of file diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/extras/milestone/MilestoneDialogFragment.java b/app/src/main/java/com/fastaccess/ui/modules/repos/extras/milestone/MilestoneDialogFragment.java index ac723f18..164b9a0e 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/repos/extras/milestone/MilestoneDialogFragment.java +++ b/app/src/main/java/com/fastaccess/ui/modules/repos/extras/milestone/MilestoneDialogFragment.java @@ -2,11 +2,11 @@ package com.fastaccess.ui.modules.repos.extras.milestone; import android.content.Context; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.annotation.StringRes; -import android.support.design.widget.AppBarLayout; -import android.support.v7.widget.Toolbar; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.annotation.StringRes; +import com.google.android.material.appbar.AppBarLayout; +import androidx.appcompat.widget.Toolbar; import android.view.View; import com.fastaccess.R; diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/extras/milestone/MilestoneMvp.java b/app/src/main/java/com/fastaccess/ui/modules/repos/extras/milestone/MilestoneMvp.java index 62590d8b..e5cd49f9 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/repos/extras/milestone/MilestoneMvp.java +++ b/app/src/main/java/com/fastaccess/ui/modules/repos/extras/milestone/MilestoneMvp.java @@ -1,7 +1,7 @@ package com.fastaccess.ui.modules.repos.extras.milestone; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import com.fastaccess.data.dao.MilestoneModel; import com.fastaccess.ui.base.mvp.BaseMvp; diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/extras/milestone/MilestonePresenter.java b/app/src/main/java/com/fastaccess/ui/modules/repos/extras/milestone/MilestonePresenter.java index 6325f9fe..992d9327 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/repos/extras/milestone/MilestonePresenter.java +++ b/app/src/main/java/com/fastaccess/ui/modules/repos/extras/milestone/MilestonePresenter.java @@ -1,6 +1,6 @@ package com.fastaccess.ui.modules.repos.extras.milestone; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import android.view.View; import com.fastaccess.R; diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/extras/milestone/create/CreateMilestoneDialogFragment.java b/app/src/main/java/com/fastaccess/ui/modules/repos/extras/milestone/create/CreateMilestoneDialogFragment.java index 735e21bb..3cd9a6bc 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/repos/extras/milestone/create/CreateMilestoneDialogFragment.java +++ b/app/src/main/java/com/fastaccess/ui/modules/repos/extras/milestone/create/CreateMilestoneDialogFragment.java @@ -2,11 +2,11 @@ package com.fastaccess.ui.modules.repos.extras.milestone.create; import android.content.Context; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.design.widget.TextInputEditText; -import android.support.design.widget.TextInputLayout; -import android.support.v7.widget.Toolbar; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import com.google.android.material.textfield.TextInputEditText; +import com.google.android.material.textfield.TextInputLayout; +import androidx.appcompat.widget.Toolbar; import android.view.MotionEvent; import android.view.View; @@ -20,6 +20,8 @@ import com.fastaccess.helper.InputHelper; import com.fastaccess.helper.ParseDateFormat; import com.fastaccess.ui.base.BaseDialogFragment; +import org.jetbrains.annotations.NotNull; + import butterknife.BindView; import butterknife.OnTouch; @@ -48,7 +50,7 @@ public class CreateMilestoneDialogFragment extends BaseDialogFragment(), EditRepoFileMvp.Presenter { @com.evernote.android.state.State var model: EditRepoFileModel? = null + var fileContent: String? = null var downloadedContent: String? = null @@ -23,7 +23,6 @@ class EditRepoFilePresenter : BasePresenter(), EditRepoFil intent?.let { it.extras?.let { model = it.getParcelable(BundleConstant.ITEM) - Logger.e(model) loadContent() } } @@ -42,7 +41,7 @@ class EditRepoFilePresenter : BasePresenter(), EditRepoFil } if (!text.isNullOrBlank() && !description.isNullOrBlank() && !filename.isNullOrBlank()) { model?.let { - val commitModel = CommitRequestModel(description!!, Base64.encodeToString(text!!.toByteArray(), Base64.DEFAULT), it.sha) + val commitModel = CommitRequestModel(description!!, Base64.encodeToString(text!!.toByteArray(), Base64.DEFAULT), it.sha, it.ref) val observable = RestProvider.getContentService(isEnterprise).updateCreateFile(it.login, it.repoId, if (it.path.isNullOrBlank()) { filename!! @@ -61,7 +60,10 @@ class EditRepoFilePresenter : BasePresenter(), EditRepoFil private fun loadContent() { model?.contentUrl?.let { makeRestCall(RestProvider.getRepoService(isEnterprise) - .getFileAsStream(it), { sendToView({ v -> v.onSetText(it) }) }) + .getFileAsStream(it), { + fileContent = it + sendToView({ v -> v.onSetText(it) }) + }) } } } \ No newline at end of file diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/git/delete/DeleteFileBottomSheetFragment.kt b/app/src/main/java/com/fastaccess/ui/modules/repos/git/delete/DeleteFileBottomSheetFragment.kt index 27f603b1..1a95b3d3 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/repos/git/delete/DeleteFileBottomSheetFragment.kt +++ b/app/src/main/java/com/fastaccess/ui/modules/repos/git/delete/DeleteFileBottomSheetFragment.kt @@ -2,7 +2,7 @@ package com.fastaccess.ui.modules.repos.git.delete import android.content.Context import android.os.Bundle -import android.support.design.widget.TextInputLayout +import com.google.android.material.textfield.TextInputLayout import android.view.View import butterknife.BindView import butterknife.OnClick @@ -37,7 +37,7 @@ class DeleteFileBottomSheetFragment : BaseBottomSheetDialog() { @OnClick(R.id.cancel) fun onCancel() = dismiss() - override fun onAttach(context: Context?) { + override fun onAttach(context: Context) { super.onAttach(context) if (parentFragment is DeleteContentFileCallback) { deleteCallback = parentFragment as DeleteContentFileCallback diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/issues/RepoIssuesPagerFragment.java b/app/src/main/java/com/fastaccess/ui/modules/repos/issues/RepoIssuesPagerFragment.java index 63a8c197..42d842be 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/repos/issues/RepoIssuesPagerFragment.java +++ b/app/src/main/java/com/fastaccess/ui/modules/repos/issues/RepoIssuesPagerFragment.java @@ -2,10 +2,10 @@ package com.fastaccess.ui.modules.repos.issues; import android.content.Context; 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 androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import com.google.android.material.tabs.TabLayout; +import androidx.fragment.app.Fragment; import android.view.View; import android.widget.TextView; diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/issues/RepoIssuesPagerMvp.java b/app/src/main/java/com/fastaccess/ui/modules/repos/issues/RepoIssuesPagerMvp.java index 2fc218cb..f0311015 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/repos/issues/RepoIssuesPagerMvp.java +++ b/app/src/main/java/com/fastaccess/ui/modules/repos/issues/RepoIssuesPagerMvp.java @@ -1,6 +1,6 @@ package com.fastaccess.ui.modules.repos.issues; -import android.support.annotation.IntRange; +import androidx.annotation.IntRange; import com.fastaccess.ui.base.mvp.BaseMvp; import com.fastaccess.ui.modules.repos.RepoPagerMvp; diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/issues/create/CreateIssueActivity.java b/app/src/main/java/com/fastaccess/ui/modules/repos/issues/create/CreateIssueActivity.java index 43f81a02..4fc2a5ea 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/repos/issues/create/CreateIssueActivity.java +++ b/app/src/main/java/com/fastaccess/ui/modules/repos/issues/create/CreateIssueActivity.java @@ -5,12 +5,12 @@ import android.content.Context; import android.content.Intent; import android.graphics.Color; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.design.widget.TextInputLayout; -import android.support.transition.TransitionManager; -import android.support.v4.app.Fragment; -import android.support.v7.app.AlertDialog; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import com.google.android.material.textfield.TextInputLayout; +import androidx.transition.TransitionManager; +import androidx.fragment.app.Fragment; +import androidx.appcompat.app.AlertDialog; import android.view.MotionEvent; import android.view.View; import android.widget.LinearLayout; @@ -396,7 +396,7 @@ public class CreateIssueActivity extends BaseActivity getNamesToTag() { @@ -416,8 +416,17 @@ public class IssuePagerActivity extends BaseActivity(); } + @Override public void onLock(@NonNull String reason) { + getPresenter().onLockUnlockIssue(reason); + } + + private IssueTimelineFragment getIssueTimelineFragment() { + if (pager == null || pager.getAdapter() == null) return null; + return (IssueTimelineFragment) pager.getAdapter().instantiateItem(pager, 0); + } + private void hideShowFab() { - if (getPresenter().isLocked() && !getPresenter().isOwner()) { + if (getPresenter().isLocked() && !getPresenter().isOwner() && !getPresenter().isCollaborator()) { getSupportFragmentManager().beginTransaction().hide(commentEditorFragment).commit(); return; } diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/issues/issue/details/IssuePagerMvp.java b/app/src/main/java/com/fastaccess/ui/modules/repos/issues/issue/details/IssuePagerMvp.java index b2e76899..b781cade 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/repos/issues/issue/details/IssuePagerMvp.java +++ b/app/src/main/java/com/fastaccess/ui/modules/repos/issues/issue/details/IssuePagerMvp.java @@ -2,8 +2,8 @@ package com.fastaccess.ui.modules.repos.issues.issue.details; import android.content.Intent; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import com.fastaccess.data.dao.LabelModel; import com.fastaccess.data.dao.MilestoneModel; @@ -13,6 +13,7 @@ import com.fastaccess.ui.base.mvp.BaseMvp; import com.fastaccess.ui.modules.editor.comment.CommentEditorFragment; import com.fastaccess.ui.modules.repos.extras.assignees.AssigneesMvp; import com.fastaccess.ui.modules.repos.extras.labels.LabelsMvp; +import com.fastaccess.ui.modules.repos.extras.locking.LockIssuePrCallback; import java.util.ArrayList; @@ -24,7 +25,7 @@ public interface IssuePagerMvp { interface View extends BaseMvp.FAView, LabelsMvp.SelectedLabelsListener, AssigneesMvp.SelectedAssigneesListener, IssuePrCallback, - CommentEditorFragment.CommentListener { + CommentEditorFragment.CommentListener, LockIssuePrCallback { void onSetupIssue(boolean isUpdate); void showSuccessIssueActionMsg(boolean isClose); @@ -62,7 +63,7 @@ public interface IssuePagerMvp { void onOpenCloseIssue(); - void onLockUnlockIssue(); + void onLockUnlockIssue(String reason); void onPutMilestones(@NonNull MilestoneModel milestone); diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/issues/issue/details/IssuePagerPresenter.java b/app/src/main/java/com/fastaccess/ui/modules/repos/issues/issue/details/IssuePagerPresenter.java index a1578094..f894621f 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/repos/issues/issue/details/IssuePagerPresenter.java +++ b/app/src/main/java/com/fastaccess/ui/modules/repos/issues/issue/details/IssuePagerPresenter.java @@ -2,8 +2,8 @@ package com.fastaccess.ui.modules.repos.issues.issue.details; import android.content.Intent; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.text.TextUtils; import com.annimon.stream.Collectors; @@ -13,6 +13,7 @@ import com.fastaccess.data.dao.AssigneesRequestModel; import com.fastaccess.data.dao.IssueRequestModel; import com.fastaccess.data.dao.LabelListModel; import com.fastaccess.data.dao.LabelModel; +import com.fastaccess.data.dao.LockIssuePrModel; import com.fastaccess.data.dao.MilestoneModel; import com.fastaccess.data.dao.NotificationSubscriptionBodyModel; import com.fastaccess.data.dao.PullsIssuesParser; @@ -131,7 +132,7 @@ class IssuePagerPresenter extends BasePresenter implements I if (proceedCloseIssue) { onOpenCloseIssue(); } else if (proceedLockUnlock) { - onLockUnlockIssue(); + onLockUnlockIssue(null); } } } @@ -155,15 +156,21 @@ class IssuePagerPresenter extends BasePresenter implements I } } - @Override public void onLockUnlockIssue() { + @Override public void onLockUnlockIssue(String reason) { Issue currentIssue = getIssue(); if (currentIssue == null) return; - String login = currentIssue.getUser().getLogin(); - String repoId = currentIssue.getRepoId(); + String login = getLogin(); + String repoId = getRepoId(); int number = currentIssue.getNumber(); + LockIssuePrModel model = null; + if (!isLocked() && !InputHelper.isEmpty(reason)) { + model = new LockIssuePrModel(true, reason); + } IssueService issueService = RestProvider.getIssueService(isEnterprise()); Observable> observable = RxHelper - .getObservable(isLocked() ? issueService.unlockIssue(login, repoId, number) : issueService.lockIssue(login, repoId, number)); + .getObservable(model == null + ? issueService.unlockIssue(login, repoId, number) : + issueService.lockIssue(model, login, repoId, number)); makeRestCall(observable, booleanResponse -> { int code = booleanResponse.code(); if (code == 204) { diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/issues/issue/details/timeline/IssueTimelineFragment.java b/app/src/main/java/com/fastaccess/ui/modules/repos/issues/issue/details/timeline/IssueTimelineFragment.java index 2bc482d1..3f0103d0 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/repos/issues/issue/details/timeline/IssueTimelineFragment.java +++ b/app/src/main/java/com/fastaccess/ui/modules/repos/issues/issue/details/timeline/IssueTimelineFragment.java @@ -4,9 +4,9 @@ import android.app.Activity; import android.content.Context; import android.content.Intent; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.annotation.StringRes; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.annotation.StringRes; import android.view.View; import com.evernote.android.state.State; @@ -289,15 +289,14 @@ public class IssueTimelineFragment extends BaseFragment adapter.getItemCount()) { + showMessage(R.string.error, R.string.comment_is_too_far_to_paginate); + } } } diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/issues/issue/details/timeline/IssueTimelineMvp.java b/app/src/main/java/com/fastaccess/ui/modules/repos/issues/issue/details/timeline/IssueTimelineMvp.java index 77d70940..ef6029c4 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/repos/issues/issue/details/timeline/IssueTimelineMvp.java +++ b/app/src/main/java/com/fastaccess/ui/modules/repos/issues/issue/details/timeline/IssueTimelineMvp.java @@ -1,10 +1,10 @@ package com.fastaccess.ui.modules.repos.issues.issue.details.timeline; import android.os.Bundle; -import android.support.annotation.IdRes; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v4.widget.SwipeRefreshLayout; +import androidx.annotation.IdRes; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import com.fastaccess.data.dao.TimelineModel; import com.fastaccess.data.dao.model.Comment; diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/issues/issue/details/timeline/IssueTimelinePresenter.java b/app/src/main/java/com/fastaccess/ui/modules/repos/issues/issue/details/timeline/IssueTimelinePresenter.java index 153fbd1f..836b71e5 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/repos/issues/issue/details/timeline/IssueTimelinePresenter.java +++ b/app/src/main/java/com/fastaccess/ui/modules/repos/issues/issue/details/timeline/IssueTimelinePresenter.java @@ -3,8 +3,8 @@ package com.fastaccess.ui.modules.repos.issues.issue.details.timeline; import android.app.Activity; import android.net.Uri; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.view.View; import android.widget.PopupMenu; diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/projects/RepoProjectsFragmentPager.kt b/app/src/main/java/com/fastaccess/ui/modules/repos/projects/RepoProjectsFragmentPager.kt index b6b3ccf6..7ab086d8 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/repos/projects/RepoProjectsFragmentPager.kt +++ b/app/src/main/java/com/fastaccess/ui/modules/repos/projects/RepoProjectsFragmentPager.kt @@ -1,7 +1,7 @@ package com.fastaccess.ui.modules.repos.projects import android.os.Bundle -import android.support.design.widget.TabLayout +import com.google.android.material.tabs.TabLayout import android.view.View import butterknife.BindView import com.fastaccess.R @@ -37,15 +37,21 @@ class RepoProjectsFragmentPager : BaseFragment? - counts?.let { - if (!it.isEmpty()) it.onEach { updateCount(it) } - } + counts?.let { counts -> if (counts.isNotEmpty()) counts.onEach { updateCount(it) } } } else { counts = hashSetOf() } @@ -64,11 +70,11 @@ class RepoProjectsFragmentPager : BaseFragment parentFragment as ProjectPagerMvp.DeletePageListener @@ -62,23 +62,25 @@ class ProjectColumnFragment : BaseFragment(presenter) } - onLoadMore!!.parameter = getColumn().id + onLoadMore?.parameter = getColumn()?.id return onLoadMore!! } @@ -108,23 +110,24 @@ class ProjectColumnFragment : BaseFragment + columnName.text = column.name + refresh.setOnRefreshListener { presenter.onCallApi(1, column.id) } + stateLayout.setOnReloadListener { presenter.onCallApi(1, column.id) } + stateLayout.setEmptyText(R.string.no_cards) + recycler.setEmptyView(stateLayout, refresh) + getLoadMore().initialize(presenter.currentPage, presenter.previousTotal) + adapter.listener = presenter + recycler.adapter = adapter + recycler.addOnScrollListener(getLoadMore()) + fastScroller.attachRecyclerView(recycler) + if (presenter.getCards().isEmpty() && !presenter.isApiCalled) { + presenter.onCallApi(1, column.id) + } + addCard.visibility = if (isOwner()) View.VISIBLE else View.GONE + deleteColumn.visibility = if (isOwner()) View.VISIBLE else View.GONE + editColumn.visibility = if (isOwner()) View.VISIBLE else View.GONE } - addCard.visibility = if(isOwner()) View.VISIBLE else View.GONE - deleteColumn.visibility = if(isOwner()) View.VISIBLE else View.GONE - editColumn.visibility = if(isOwner()) View.VISIBLE else View.GONE } override fun showProgress(@StringRes resId: Int) { @@ -161,10 +164,10 @@ class ProjectColumnFragment : BaseFragment(), ProjectPage val repoId = repoId if (repoId != null && !repoId.isNullOrBlank()) { makeRestCall(Observable.zip(RestProvider.getProjectsService(isEnterprise).getProjectColumns(projectId), - RestProvider.getRepoService(isEnterprise).isCollaborator(login, repoId, Login.getUser().login), - BiFunction { items: Pageable, response: Response -> - viewerCanUpdate = response.code() == 204 - return@BiFunction items - }) - .flatMap { - if (it.items != null) { - return@flatMap Observable.just(it.items) - } - return@flatMap Observable.just(listOf()) - }, - { t -> - columns.clear() - columns.addAll(t) - sendToView { it.onInitPager(columns) } - }) + RestProvider.getRepoService(isEnterprise).isCollaborator(login, repoId, Login.getUser().login), + BiFunction { items: Pageable, response: Response -> + viewerCanUpdate = response.code() == 204 + return@BiFunction items + }) + .flatMap { + if (it.items != null) { + return@flatMap Observable.just(it.items) + } + return@flatMap Observable.just(listOf()) + }) { t -> + columns.clear() + columns.addAll(t) + sendToView { it.onInitPager(columns) } + } } else { makeRestCall(RestProvider.getProjectsService(isEnterprise).getProjectColumns(projectId) - .flatMap { - if (it.items != null) { - return@flatMap Observable.just(it.items) - } - return@flatMap Observable.just(listOf()) - }, - { t -> - columns.clear() - columns.addAll(t) - sendToView { it.onInitPager(columns) } - }) + .flatMap { + if (it.items != null) { + return@flatMap Observable.just(it.items) + } + return@flatMap Observable.just(listOf()) + }) { t -> + columns.clear() + columns.addAll(t) + sendToView { it.onInitPager(columns) } + } } } @@ -74,7 +72,7 @@ class ProjectPagerPresenter : BasePresenter(), ProjectPage it.extras?.let { projectId = it.getLong(BundleConstant.ID) repoId = it.getString(BundleConstant.ITEM) - login = it.getString(BundleConstant.EXTRA) + login = it.getString(BundleConstant.EXTRA) ?: "" } } if (columns.isEmpty()) { diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/projects/list/RepoProjectFragment.kt b/app/src/main/java/com/fastaccess/ui/modules/repos/projects/list/RepoProjectFragment.kt index 3fb414dc..ba936b2f 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/repos/projects/list/RepoProjectFragment.kt +++ b/app/src/main/java/com/fastaccess/ui/modules/repos/projects/list/RepoProjectFragment.kt @@ -2,8 +2,8 @@ package com.fastaccess.ui.modules.repos.projects.list import android.content.Context import android.os.Bundle -import android.support.annotation.StringRes -import android.support.v4.widget.SwipeRefreshLayout +import androidx.annotation.StringRes +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout import android.view.View import butterknife.BindView import com.fastaccess.R @@ -33,7 +33,7 @@ class RepoProjectFragment : BaseFragment(), RepoProjectMv override fun onFragmentCreate(bundle: Bundle?) { bundle?.let { repoId = it.getString(BundleConstant.ID) - login = it.getString(BundleConstant.EXTRA) + login = it.getString(BundleConstant.EXTRA) ?: "" } } @@ -74,145 +74,151 @@ class RepoProjectPresenter : BasePresenter(), RepoProjectMv if (repoId != null && !repoId.isNullOrBlank()) { if (parameter == IssueState.open) { val query = RepoProjectsOpenQuery.builder() - .name(repoId) - .owner(login) - .page(getPage()) - .build() + .name(repoId) + .owner(login) + .page(getPage()) + .build() makeRestCall(Rx2Apollo.from(apollo.query(query)) - .flatMap { - val list = arrayListOf() - it.data()?.repository()?.let { - it.projects().let { - lastPage = if (it.pageInfo().hasNextPage()) Int.MAX_VALUE else 0 - pages.clear() - count = it.totalCount() - it.edges()?.let { - pages.addAll(it.map { it.cursor() }) - } - it.nodes()?.let { - list.addAll(it) - } + .flatMap { response -> + val list = arrayListOf() + response.data()?.repository()?.let { repos -> + repos.projects().let { + lastPage = if (it.pageInfo().hasNextPage()) Int.MAX_VALUE else 0 + pages.clear() + count = it.totalCount() + it.edges()?.let { + pages.addAll(it.map { it.cursor() }) + } + it.nodes()?.let { + list.addAll(it) } } - return@flatMap Observable.just(list) - }, - { - sendToView({ v -> - v.onNotifyAdapter(it, page) - if (page == 1) v.onChangeTotalCount(count) - }) - }) + } + return@flatMap Observable.just(list) + } + ) { + sendToView { v -> + v.onNotifyAdapter(it, page) + if (page == 1) v.onChangeTotalCount(count) + } + } } else { val query = RepoProjectsClosedQuery.builder() - .name(repoId) - .owner(login) - .page(getPage()) - .build() + .name(repoId) + .owner(login) + .page(getPage()) + .build() makeRestCall(Rx2Apollo.from(apollo.query(query)) - .flatMap { - val list = arrayListOf() - it.data()?.repository()?.let { - it.projects().let { - lastPage = if (it.pageInfo().hasNextPage()) Int.MAX_VALUE else 0 - pages.clear() - count = it.totalCount() - it.edges()?.let { - pages.addAll(it.map { it.cursor() }) - } - it.nodes()?.let { - val toConvert = arrayListOf() - it.onEach { - val columns = RepoProjectsOpenQuery.Columns(it.columns().__typename(), it.columns().totalCount()) - val node = RepoProjectsOpenQuery.Node(it.__typename(), it.name(), it.number(), it.body(), - it.createdAt(), it.id(), it.viewerCanUpdate(), columns, it.databaseId()) - toConvert.add(node) - } - list.addAll(toConvert) + .flatMap { response -> + val list = arrayListOf() + response.data()?.repository()?.let { repository -> + repository.projects().let { projects1 -> + lastPage = if (projects1.pageInfo().hasNextPage()) Int.MAX_VALUE else 0 + pages.clear() + count = projects1.totalCount() + projects1.edges()?.let { edges -> + pages.addAll(edges.map { it.cursor() }) + } + projects1.nodes()?.let { nodesList -> + val toConvert = arrayListOf() + nodesList.onEach { + val columns = RepoProjectsOpenQuery.Columns(it.columns().__typename(), it.columns().totalCount()) + val node = RepoProjectsOpenQuery.Node( + it.__typename(), it.name(), it.number(), it.body(), + it.createdAt(), it.id(), it.viewerCanUpdate(), columns, it.databaseId() + ) + toConvert.add(node) } + list.addAll(toConvert) } } - return@flatMap Observable.just(list) - }, - { - sendToView({ v -> - v.onNotifyAdapter(it, page) - if (page == 1) v.onChangeTotalCount(count) - }) - }) + } + return@flatMap Observable.just(list) + } + ) { + sendToView { v -> + v.onNotifyAdapter(it, page) + if (page == 1) v.onChangeTotalCount(count) + } + } } } else { if (parameter == IssueState.open) { val query = OrgProjectsOpenQuery.builder() - .owner(login) - .page(getPage()) - .build() + .owner(login) + .page(getPage()) + .build() makeRestCall(Rx2Apollo.from(apollo.query(query)) - .flatMap { - val list = arrayListOf() - it.data()?.organization()?.let { - it.projects().let { - lastPage = if (it.pageInfo().hasNextPage()) Int.MAX_VALUE else 0 - pages.clear() - count = it.totalCount() - it.edges()?.let { - pages.addAll(it.map { it.cursor() }) - } - it.nodes()?.let { - val toConvert = arrayListOf() - it.onEach { - val columns = RepoProjectsOpenQuery.Columns(it.columns().__typename(), it.columns().totalCount()) - val node = RepoProjectsOpenQuery.Node(it.__typename(), it.name(), it.number(), it.body(), - it.createdAt(), it.id(), it.viewerCanUpdate(), columns, it.databaseId()) - toConvert.add(node) - } - list.addAll(toConvert) + .flatMap { + val list = arrayListOf() + it.data()?.organization()?.let { + it.projects().let { + lastPage = if (it.pageInfo().hasNextPage()) Int.MAX_VALUE else 0 + pages.clear() + count = it.totalCount() + it.edges()?.let { + pages.addAll(it.map { it.cursor() }) + } + it.nodes()?.let { + val toConvert = arrayListOf() + it.onEach { + val columns = RepoProjectsOpenQuery.Columns(it.columns().__typename(), it.columns().totalCount()) + val node = RepoProjectsOpenQuery.Node( + it.__typename(), it.name(), it.number(), it.body(), + it.createdAt(), it.id(), it.viewerCanUpdate(), columns, it.databaseId() + ) + toConvert.add(node) } + list.addAll(toConvert) } } - return@flatMap Observable.just(list) - }, - { - sendToView({ v -> - v.onNotifyAdapter(it, page) - if (page == 1) v.onChangeTotalCount(count) - }) - }) + } + return@flatMap Observable.just(list) + } + ) { + sendToView { v -> + v.onNotifyAdapter(it, page) + if (page == 1) v.onChangeTotalCount(count) + } + } } else { val query = OrgProjectsClosedQuery.builder() - .owner(login) - .page(getPage()) - .build() + .owner(login) + .page(getPage()) + .build() makeRestCall(Rx2Apollo.from(apollo.query(query)) - .flatMap { - val list = arrayListOf() - it.data()?.organization()?.let { - it.projects().let { - lastPage = if (it.pageInfo().hasNextPage()) Int.MAX_VALUE else 0 - pages.clear() - count = it.totalCount() - it.edges()?.let { - pages.addAll(it.map { it.cursor() }) - } - it.nodes()?.let { - val toConvert = arrayListOf() - it.onEach { - val columns = RepoProjectsOpenQuery.Columns(it.columns().__typename(), it.columns().totalCount()) - val node = RepoProjectsOpenQuery.Node(it.__typename(), it.name(), it.number(), it.body(), - it.createdAt(), it.id(), it.viewerCanUpdate(), columns, it.databaseId()) - toConvert.add(node) - } - list.addAll(toConvert) + .flatMap { + val list = arrayListOf() + it.data()?.organization()?.let { + it.projects().let { + lastPage = if (it.pageInfo().hasNextPage()) Int.MAX_VALUE else 0 + pages.clear() + count = it.totalCount() + it.edges()?.let { + pages.addAll(it.map { it.cursor() }) + } + it.nodes()?.let { + val toConvert = arrayListOf() + it.onEach { + val columns = RepoProjectsOpenQuery.Columns(it.columns().__typename(), it.columns().totalCount()) + val node = RepoProjectsOpenQuery.Node( + it.__typename(), it.name(), it.number(), it.body(), + it.createdAt(), it.id(), it.viewerCanUpdate(), columns, it.databaseId() + ) + toConvert.add(node) } + list.addAll(toConvert) } } - return@flatMap Observable.just(list) - }, - { - sendToView({ v -> - v.onNotifyAdapter(it, page) - if (page == 1) v.onChangeTotalCount(count) - }) - }) + } + return@flatMap Observable.just(list) + } + ) { + sendToView { v -> + v.onNotifyAdapter(it, page) + if (page == 1) v.onChangeTotalCount(count) + } + } } } return true diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/RepoPullRequestPagerFragment.java b/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/RepoPullRequestPagerFragment.java index 11bb369f..e96a34f6 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/RepoPullRequestPagerFragment.java +++ b/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/RepoPullRequestPagerFragment.java @@ -2,10 +2,10 @@ package com.fastaccess.ui.modules.repos.pull_requests; import android.content.Context; 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 androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import com.google.android.material.tabs.TabLayout; +import androidx.fragment.app.Fragment; import android.view.View; import android.widget.TextView; diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/RepoPullRequestPagerMvp.java b/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/RepoPullRequestPagerMvp.java index 1eee1f77..4699f18b 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/RepoPullRequestPagerMvp.java +++ b/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/RepoPullRequestPagerMvp.java @@ -1,6 +1,6 @@ package com.fastaccess.ui.modules.repos.pull_requests; -import android.support.annotation.IntRange; +import androidx.annotation.IntRange; import com.fastaccess.ui.base.mvp.BaseMvp; import com.fastaccess.ui.modules.repos.RepoPagerMvp; diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/RepoPullRequestFragment.java b/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/RepoPullRequestFragment.java index 3c5ab957..8931b18e 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/RepoPullRequestFragment.java +++ b/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/RepoPullRequestFragment.java @@ -4,10 +4,10 @@ import android.app.Activity; import android.content.Context; import android.content.Intent; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.annotation.StringRes; -import android.support.v4.widget.SwipeRefreshLayout; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.annotation.StringRes; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import android.view.View; import com.fastaccess.R; @@ -109,8 +109,7 @@ public class RepoPullRequestFragment extends BaseFragment getNamesToTag() { @@ -488,6 +493,10 @@ public class PullRequestPagerActivity extends BaseActivity(); } + @Override public void onLock(String reason) { + getPresenter().onLockUnlockConversations(reason); + } + protected void hideAndClearReviews() { getPresenter().getCommitComment().clear(); AnimHelper.mimicFabVisibility(false, prReviewHolder, null); @@ -502,13 +511,14 @@ public class PullRequestPagerActivity extends BaseActivity, PullRequestFilesMvp.PatchCallback, - CommentEditorFragment.CommentListener, ReviewChangesMvp.ReviewSubmissionCallback { + CommentEditorFragment.CommentListener, ReviewChangesMvp.ReviewSubmissionCallback, + LockIssuePrCallback { void onSetupIssue(boolean update); @@ -70,7 +72,7 @@ public interface PullRequestPagerMvp { void onOpenCloseIssue(); - void onLockUnlockConversations(); + void onLockUnlockConversations(String reason); @NonNull SpannableBuilder getMergeBy(@NonNull PullRequest pullRequest, @NonNull Context context); diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/details/PullRequestPagerPresenter.java b/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/details/PullRequestPagerPresenter.java index db41ba07..db383c68 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/details/PullRequestPagerPresenter.java +++ b/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/details/PullRequestPagerPresenter.java @@ -3,8 +3,8 @@ package com.fastaccess.ui.modules.repos.pull_requests.pull_request.details; import android.content.Context; import android.content.Intent; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.text.TextUtils; import com.annimon.stream.Collectors; @@ -15,6 +15,7 @@ import com.fastaccess.data.dao.CommentRequestModel; import com.fastaccess.data.dao.IssueRequestModel; import com.fastaccess.data.dao.LabelListModel; import com.fastaccess.data.dao.LabelModel; +import com.fastaccess.data.dao.LockIssuePrModel; import com.fastaccess.data.dao.MergeRequestModel; import com.fastaccess.data.dao.MilestoneModel; import com.fastaccess.data.dao.NotificationSubscriptionBodyModel; @@ -128,18 +129,22 @@ class PullRequestPagerPresenter extends BasePresenter if (proceedCloseIssue) { onOpenCloseIssue(); } else if (proceedLockUnlock) { - onLockUnlockConversations(); + onLockUnlockConversations(null); } } } - @Override public void onLockUnlockConversations() { + @Override public void onLockUnlockConversations(String reason) { PullRequest currentPullRequest = getPullRequest(); if (currentPullRequest == null) return; IssueService service = RestProvider.getIssueService(isEnterprise()); + LockIssuePrModel model = null; + if (!isLocked() && !InputHelper.isEmpty(reason)) { + model = new LockIssuePrModel(true, reason); + } Observable> observable = RxHelper - .getObservable(isLocked() ? service.unlockIssue(login, repoId, issueNumber) : - service.lockIssue(login, repoId, issueNumber)); + .getObservable(model == null ? service.unlockIssue(login, repoId, issueNumber) : + service.lockIssue(model, login, repoId, issueNumber)); makeRestCall(observable, booleanResponse -> { int code = booleanResponse.code(); if (code == 204) { @@ -309,9 +314,11 @@ class PullRequestPagerPresenter extends BasePresenter } private void callApi() { + Login loggedInUser = Login.getUser(); + if (loggedInUser == null) return; makeRestCall(RxHelper.getObservable(Observable.zip(RestProvider.getPullRequestService(isEnterprise()) .getPullRequest(login, repoId, issueNumber), - RestProvider.getRepoService(isEnterprise()).isCollaborator(login, repoId, Login.getUser().getLogin()), + RestProvider.getRepoService(isEnterprise()).isCollaborator(login, repoId, loggedInUser.getLogin()), RestProvider.getIssueService(isEnterprise()).getIssue(login, repoId, issueNumber), (pullRequestModel, booleanResponse, issue) -> { this.pullRequest = pullRequestModel; diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/details/commits/PullRequestCommitsFragment.java b/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/details/commits/PullRequestCommitsFragment.java index a8dd48f7..1ffd7e19 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/details/commits/PullRequestCommitsFragment.java +++ b/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/details/commits/PullRequestCommitsFragment.java @@ -1,10 +1,10 @@ package com.fastaccess.ui.modules.repos.pull_requests.pull_request.details.commits; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.annotation.StringRes; -import android.support.v4.widget.SwipeRefreshLayout; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.annotation.StringRes; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import android.view.View; import com.fastaccess.R; diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/details/commits/PullRequestCommitsMvp.java b/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/details/commits/PullRequestCommitsMvp.java index 6c9316b9..f04f6a36 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/details/commits/PullRequestCommitsMvp.java +++ b/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/details/commits/PullRequestCommitsMvp.java @@ -1,9 +1,9 @@ package com.fastaccess.ui.modules.repos.pull_requests.pull_request.details.commits; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v4.widget.SwipeRefreshLayout; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import com.fastaccess.data.dao.model.Commit; import com.fastaccess.provider.rest.loadmore.OnLoadMore; diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/details/commits/PullRequestCommitsPresenter.java b/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/details/commits/PullRequestCommitsPresenter.java index 28e96c4b..d8765e47 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/details/commits/PullRequestCommitsPresenter.java +++ b/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/details/commits/PullRequestCommitsPresenter.java @@ -1,8 +1,8 @@ package com.fastaccess.ui.modules.repos.pull_requests.pull_request.details.commits; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.view.View; import com.fastaccess.data.dao.model.Commit; diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/details/files/PullRequestFilesFragment.java b/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/details/files/PullRequestFilesFragment.java index 178e505c..59f02f7b 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/details/files/PullRequestFilesFragment.java +++ b/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/details/files/PullRequestFilesFragment.java @@ -4,10 +4,10 @@ import android.app.Activity; import android.content.Context; import android.content.Intent; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.annotation.StringRes; -import android.support.v4.widget.SwipeRefreshLayout; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.annotation.StringRes; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import android.view.View; import com.evernote.android.state.State; diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/details/files/PullRequestFilesMvp.java b/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/details/files/PullRequestFilesMvp.java index a75bc1d1..633db903 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/details/files/PullRequestFilesMvp.java +++ b/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/details/files/PullRequestFilesMvp.java @@ -1,9 +1,9 @@ package com.fastaccess.ui.modules.repos.pull_requests.pull_request.details.files; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v4.widget.SwipeRefreshLayout; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import com.fastaccess.data.dao.CommentRequestModel; import com.fastaccess.data.dao.CommitFileChanges; diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/details/files/PullRequestFilesPresenter.java b/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/details/files/PullRequestFilesPresenter.java index 4f3d126e..7c00fd68 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/details/files/PullRequestFilesPresenter.java +++ b/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/details/files/PullRequestFilesPresenter.java @@ -3,8 +3,8 @@ package com.fastaccess.ui.modules.repos.pull_requests.pull_request.details.files import android.app.Activity; import android.net.Uri; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.view.MenuInflater; import android.view.View; import android.widget.PopupMenu; diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/details/files/fullscreen/FullScreenFileChangeActivity.kt b/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/details/files/fullscreen/FullScreenFileChangeActivity.kt index 99f13ce3..7ad7685c 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/details/files/fullscreen/FullScreenFileChangeActivity.kt +++ b/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/details/files/fullscreen/FullScreenFileChangeActivity.kt @@ -4,8 +4,8 @@ import android.app.Activity import android.content.Intent import android.net.Uri import android.os.Bundle -import android.support.v4.app.Fragment -import android.support.v4.widget.SwipeRefreshLayout +import androidx.fragment.app.Fragment +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout import android.view.Menu import android.view.MenuItem import android.view.View diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/details/timeline/timeline/PullRequestTimelineFragment.java b/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/details/timeline/timeline/PullRequestTimelineFragment.java index 09cb51ac..b55ecd51 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/details/timeline/timeline/PullRequestTimelineFragment.java +++ b/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/details/timeline/timeline/PullRequestTimelineFragment.java @@ -4,9 +4,9 @@ import android.app.Activity; import android.content.Context; import android.content.Intent; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.annotation.StringRes; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.annotation.StringRes; import android.view.View; import com.evernote.android.state.State; diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/details/timeline/timeline/PullRequestTimelineMvp.java b/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/details/timeline/timeline/PullRequestTimelineMvp.java index b2a4246f..e440250b 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/details/timeline/timeline/PullRequestTimelineMvp.java +++ b/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/details/timeline/timeline/PullRequestTimelineMvp.java @@ -1,10 +1,10 @@ package com.fastaccess.ui.modules.repos.pull_requests.pull_request.details.timeline.timeline; import android.os.Bundle; -import android.support.annotation.IdRes; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v4.widget.SwipeRefreshLayout; +import androidx.annotation.IdRes; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import com.fastaccess.data.dao.EditReviewCommentModel; import com.fastaccess.data.dao.ReviewCommentModel; diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/details/timeline/timeline/PullRequestTimelinePresenter.java b/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/details/timeline/timeline/PullRequestTimelinePresenter.java index 51808142..102d0951 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/details/timeline/timeline/PullRequestTimelinePresenter.java +++ b/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/details/timeline/timeline/PullRequestTimelinePresenter.java @@ -3,8 +3,8 @@ package com.fastaccess.ui.modules.repos.pull_requests.pull_request.details.timel import android.app.Activity; import android.net.Uri; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.util.SparseArray; import android.view.View; import android.widget.PopupMenu; @@ -375,7 +375,10 @@ public class PullRequestTimelinePresenter extends BasePresenter models = TimelineConverter.INSTANCE.convert(response.getItems(), comments); if (page == 1 && status != null) { status.setMergable(parameter.isMergeable()); - if (status.getState() != null) models.add(0, new TimelineModel(status)); + status.setMergeableState(parameter.getMergeableState()); + if (status.getState() != null) { + models.add(0, new TimelineModel(status)); + } } return models; } else { diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/merge/MergePullReqeustMvp.java b/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/merge/MergePullReqeustMvp.java index 9b0e45c5..8daff5d5 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/merge/MergePullReqeustMvp.java +++ b/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/merge/MergePullReqeustMvp.java @@ -1,6 +1,6 @@ package com.fastaccess.ui.modules.repos.pull_requests.pull_request.merge; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import com.fastaccess.ui.base.mvp.BaseMvp; diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/merge/MergePullRequestDialogFragment.java b/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/merge/MergePullRequestDialogFragment.java index 9ee81a7b..79a29eef 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/merge/MergePullRequestDialogFragment.java +++ b/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/merge/MergePullRequestDialogFragment.java @@ -2,10 +2,10 @@ package com.fastaccess.ui.modules.repos.pull_requests.pull_request.merge; import android.content.Context; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.design.widget.TextInputLayout; -import android.support.v7.widget.AppCompatSpinner; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import com.google.android.material.textfield.TextInputLayout; +import androidx.appcompat.widget.AppCompatSpinner; import android.view.View; import com.fastaccess.R; @@ -16,6 +16,8 @@ import com.fastaccess.helper.PrefGetter; import com.fastaccess.ui.base.BaseDialogFragment; import com.fastaccess.ui.modules.main.premium.PremiumActivity; +import org.jetbrains.annotations.NotNull; + import butterknife.BindView; import butterknife.OnClick; import butterknife.OnItemSelected; @@ -40,7 +42,7 @@ public class MergePullRequestDialogFragment extends BaseDialogFragment(), WikiMvp.View { loadMenu() } if (wiki.content != null) { - val baseUrl = Uri.Builder().scheme("https") - .authority(LinkParserHelper.HOST_DEFAULT) - .appendPath(presenter.login) - .appendPath(presenter.repoId) - .appendPath("wiki") - .build() - .toString() - Logger.e(baseUrl) + val baseUrl = Uri.Builder().scheme(LinkParserHelper.PROTOCOL_HTTPS) + .authority(LinkParserHelper.HOST_DEFAULT) + .appendPath(presenter.login) + .appendPath(presenter.repoId) + .appendPath("wiki") + .build() + .toString() webView.setWikiContent(wiki.content, baseUrl) } } - private fun loadMenu() { - navMenu.menu.clear() - wiki.sidebar.onEach { - navMenu.menu.add(R.id.languageGroup, it.title?.hashCode()!!, Menu.NONE, it.title) - .setCheckable(true) - .isChecked = it.title.toLowerCase() == selectedTitle.toLowerCase() - } + override fun onSetPage(page: String) { + selectedTitle = page } override fun canBack(): Boolean = true @@ -93,18 +87,6 @@ class WikiActivity : BaseActivity(), WikiMvp.View { setTaskName("${presenter.login}/${presenter.repoId} - Wiki - $selectedTitle") } - private fun onSidebarClicked(item: MenuItem) { - this.selectedTitle = item.title.toString() - setTaskName("${presenter.login}/${presenter.repoId} - Wiki - $selectedTitle") - closeDrawerLayout() - wiki.sidebar.first { it.title?.toLowerCase() == item.title.toString().toLowerCase() } - .let { presenter.onSidebarClicked(it) } - } - - private fun closeDrawerLayout() { - drawerLayout.closeDrawer(Gravity.END) - } - override fun onCreateOptionsMenu(menu: Menu?): Boolean { menuInflater.inflate(R.menu.trending_menu, menu) menu?.findItem(R.id.menu)?.setIcon(R.drawable.ic_menu) @@ -117,6 +99,13 @@ class WikiActivity : BaseActivity(), WikiMvp.View { drawerLayout.openDrawer(Gravity.END) return true } + R.id.share -> { + ActivityHelper.shareUrl( + this, "${LinkParserHelper.PROTOCOL_HTTPS}://${LinkParserHelper.HOST_DEFAULT}/" + + "${presenter.login}/${presenter.repoId}/wiki/$selectedTitle" + ) + return true + } android.R.id.home -> { if (!presenter.login.isNullOrEmpty() && !presenter.repoId.isNullOrEmpty()) { val nameParse = NameParser("") @@ -157,6 +146,31 @@ class WikiActivity : BaseActivity(), WikiMvp.View { stateLayout.hideProgress() } + override fun showPrivateRepoError() { + onLoadContent(WikiContentModel("

${getString(R.string.private_wiki_error_msg)}

", null, listOf())) + } + + private fun onSidebarClicked(item: MenuItem) { + this.selectedTitle = item.title.toString() + setTaskName("${presenter.login}/${presenter.repoId} - Wiki - $selectedTitle") + closeDrawerLayout() + wiki.sidebar.first { it.title?.toLowerCase() == item.title.toString().toLowerCase() } + .let { presenter.onSidebarClicked(it) } + } + + private fun closeDrawerLayout() { + drawerLayout.closeDrawer(Gravity.END) + } + + private fun loadMenu() { + navMenu.menu.clear() + wiki.sidebar.onEach { + navMenu.menu.add(R.id.languageGroup, it.title?.hashCode()!!, Menu.NONE, it.title) + .setCheckable(true) + .isChecked = it.title.toLowerCase() == selectedTitle.toLowerCase() + } + } + companion object { fun getWiki(context: Context, repoId: String?, username: String?): Intent { return getWiki(context, repoId, username, null) @@ -164,11 +178,13 @@ class WikiActivity : BaseActivity(), WikiMvp.View { fun getWiki(context: Context, repoId: String?, username: String?, page: String?): Intent { val intent = Intent(context, WikiActivity::class.java) - intent.putExtras(Bundler.start() + intent.putExtras( + Bundler.start() .put(BundleConstant.ID, repoId) .put(BundleConstant.EXTRA, username) .put(BundleConstant.EXTRA_TWO, page) - .end()) + .end() + ) return intent } } diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/wiki/WikiMvp.kt b/app/src/main/java/com/fastaccess/ui/modules/repos/wiki/WikiMvp.kt index 71ece421..0ed37bed 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/repos/wiki/WikiMvp.kt +++ b/app/src/main/java/com/fastaccess/ui/modules/repos/wiki/WikiMvp.kt @@ -11,6 +11,8 @@ import com.fastaccess.ui.base.mvp.BaseMvp interface WikiMvp { interface View : BaseMvp.FAView { fun onLoadContent(wiki: WikiContentModel) + fun onSetPage(page: String) + fun showPrivateRepoError() } interface Presenter { diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/wiki/WikiPresenter.kt b/app/src/main/java/com/fastaccess/ui/modules/repos/wiki/WikiPresenter.kt index d51e3199..b26141c5 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/repos/wiki/WikiPresenter.kt +++ b/app/src/main/java/com/fastaccess/ui/modules/repos/wiki/WikiPresenter.kt @@ -1,15 +1,22 @@ package com.fastaccess.ui.modules.repos.wiki import android.content.Intent +import com.fastaccess.BuildConfig +import com.fastaccess.R +import com.fastaccess.data.dao.wiki.FirebaseWikiConfigModel import com.fastaccess.data.dao.wiki.WikiContentModel import com.fastaccess.data.dao.wiki.WikiSideBarModel import com.fastaccess.helper.BundleConstant import com.fastaccess.helper.RxHelper import com.fastaccess.provider.rest.jsoup.JsoupProvider import com.fastaccess.ui.base.mvp.presenter.BasePresenter +import com.github.b3er.rxfirebase.database.RxFirebaseDatabase +import com.google.firebase.database.FirebaseDatabase import io.reactivex.Observable import org.jsoup.Jsoup import org.jsoup.nodes.Document +import retrofit2.HttpException +import java.util.* /** * Created by Kosh on 13 Jun 2017, 8:14 PM @@ -18,66 +25,94 @@ class WikiPresenter : BasePresenter(), WikiMvp.Presenter { @com.evernote.android.state.State var repoId: String? = null @com.evernote.android.state.State var login: String? = null + private var firebaseWikiConfigModel: FirebaseWikiConfigModel? = null override fun onActivityCreated(intent: Intent?) { if (intent != null) { val bundle = intent.extras - repoId = bundle.getString(BundleConstant.ID) - login = bundle.getString(BundleConstant.EXTRA) - val page = bundle.getString(BundleConstant.EXTRA_TWO) + repoId = bundle?.getString(BundleConstant.ID) + login = bundle?.getString(BundleConstant.EXTRA) + val page = bundle?.getString(BundleConstant.EXTRA_TWO) + if (!page.isNullOrEmpty()) { + sendToView { it.onSetPage(page) } + } if (!repoId.isNullOrEmpty() && !login.isNullOrEmpty()) { - onSidebarClicked(WikiSideBarModel("Home", "$login/$repoId/wiki" + - if (!page.isNullOrEmpty()) "/$page" else "")) + onSidebarClicked(WikiSideBarModel("Home", "$login/$repoId/wiki" + if (!page.isNullOrEmpty()) "/$page" else "")) } } } override fun onSidebarClicked(sidebar: WikiSideBarModel) { + if (BuildConfig.DEBUG) { + firebaseWikiConfigModel = FirebaseWikiConfigModel() + callApi(sidebar) + } else { + if (firebaseWikiConfigModel == null) { + manageDisposable( + RxHelper.getSingle(RxFirebaseDatabase.data(FirebaseDatabase.getInstance().reference.child("github_wiki"))) + .doOnSubscribe { sendToView { it.showProgress(0) } } + .map { + firebaseWikiConfigModel = FirebaseWikiConfigModel.map(it.value as? HashMap) + return@map firebaseWikiConfigModel + } + .subscribe( + { callApi(sidebar) }, + { callApi(sidebar) } + ) + ) + } else { + callApi(sidebar) + } + } + } + + private fun callApi(sidebar: WikiSideBarModel) { manageViewDisposable(RxHelper.getObservable(JsoupProvider.getWiki().getWiki(sidebar.link)) - .flatMap { s -> RxHelper.getObservable(getWikiContent(s)) } - .doOnSubscribe { sendToView { it.showProgress(0) } } - .subscribe({ response -> sendToView { view -> view.onLoadContent(response) } }, - { throwable -> onError(throwable) }, { sendToView({ it.hideProgress() }) })) + .flatMap { s -> RxHelper.getObservable(getWikiContent(s)) } + .doOnSubscribe { sendToView { it.showProgress(0) } } + .subscribe( + { response -> sendToView { view -> view.onLoadContent(response) } }, + { throwable -> + if (throwable is HttpException) { + if (throwable.code() == 404) { + sendToView { it.showPrivateRepoError() } + return@subscribe + } + } + onError(throwable) + }, + { sendToView { it.hideProgress() } } + ) + ) } private fun getWikiContent(body: String?): Observable { return Observable.fromPublisher { s -> - try { - val document: Document = Jsoup.parse(body, "") - val wikiWrapper = document.select("#wiki-wrapper") - if (wikiWrapper.isNotEmpty()) { - val cloneUrl = wikiWrapper.select(".clone-url") -// val bottomRightBar = wikiWrapper.select(".wiki-custom-sidebar") - if (cloneUrl.isNotEmpty()) { - cloneUrl.remove() - } -// if (bottomRightBar.isNotEmpty()) { -// bottomRightBar.remove() -// } - val headerHtml = wikiWrapper.select(".gh-header .gh-header-meta") - val revision = headerHtml.select("a.history") - if (revision.isNotEmpty()) { - revision.remove() - } - val header = "
${headerHtml.html()}
" - val wikiContent = wikiWrapper.select(".wiki-content") - val content = header + wikiContent.select(".wiki-body").html() - val rightBarList = wikiContent.select(".wiki-pages").select("li") - val sidebarList = arrayListOf() - if (rightBarList.isNotEmpty()) { - rightBarList.onEach { - val sidebarTitle = it.select("a").text() - val sidebarLink = it.select("a").attr("href") - sidebarList.add(WikiSideBarModel(sidebarTitle, sidebarLink)) - } - } - s.onNext(WikiContentModel(content, "", sidebarList)) - } else { - s.onNext(WikiContentModel("

No Wiki

", "", arrayListOf())) - } - } catch (e: Exception) { - e.printStackTrace() + val document: Document = Jsoup.parse(body, "") + val firebaseWikiConfigModel = firebaseWikiConfigModel ?: kotlin.run { + s.onNext(WikiContentModel("

No Wiki

", "", arrayListOf())) + s.onComplete() + return@fromPublisher } + val wikiWrapper = document.select(firebaseWikiConfigModel.wikiWrapper) + if (!wikiWrapper.isNullOrEmpty()) { + val header = wikiWrapper.select(firebaseWikiConfigModel.wikiHeader)?.text() + val subHeaderText = wikiWrapper.select(firebaseWikiConfigModel.wikiSubHeader)?.text() + val wikiContent = wikiWrapper.select(firebaseWikiConfigModel.wikiContent) + val wikiBody = wikiContent?.select(firebaseWikiConfigModel.wikiBody)?.html() + val rightBarList = wikiContent?.select(firebaseWikiConfigModel.sideBarUl)?.select(firebaseWikiConfigModel.sideBarList) + val headerHtml = "

$header

$subHeaderText

" + val content = "$headerHtml $wikiBody" + s.onNext(WikiContentModel(content, null, rightBarList?.map { + WikiSideBarModel( + it.select(firebaseWikiConfigModel.sideBarListTitle).text(), + it.select(firebaseWikiConfigModel.sideBarListTitle).attr(firebaseWikiConfigModel.sideBarListLink) + ) + } ?: listOf())) + } else { + s.onNext(WikiContentModel("

No Wiki

", "", arrayListOf())) + } + s.onComplete() } } diff --git a/app/src/main/java/com/fastaccess/ui/modules/reviews/AddReviewDialogFragment.kt b/app/src/main/java/com/fastaccess/ui/modules/reviews/AddReviewDialogFragment.kt index f98a14f3..baa17f83 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/reviews/AddReviewDialogFragment.kt +++ b/app/src/main/java/com/fastaccess/ui/modules/reviews/AddReviewDialogFragment.kt @@ -3,8 +3,8 @@ package com.fastaccess.ui.modules.reviews import android.content.Context import android.graphics.Color import android.os.Bundle -import android.support.v4.content.ContextCompat -import android.support.v7.widget.Toolbar +import androidx.core.content.ContextCompat +import androidx.appcompat.widget.Toolbar import android.view.View import android.widget.TextView import butterknife.BindView @@ -37,7 +37,7 @@ class AddReviewDialogFragment : BaseDialogFragment(BundleConstant.ITEM) - lineNo.text = SpannableBuilder.builder() + arguments?.getParcelable(BundleConstant.ITEM)?.let { item -> + lineNo.text = SpannableBuilder.builder() .append(if (item.leftLineNo >= 0) String.format("%s.", item.leftLineNo) else "") .append(if (item.rightLineNo >= 0) String.format("%s.", item.rightLineNo) else "") - lineNo.visibility = if (InputHelper.isEmpty(lineNo)) View.GONE else View.VISIBLE + lineNo.visibility = if (InputHelper.isEmpty(lineNo)) View.GONE else View.VISIBLE - val context = context ?: return - when (item.color) { - CommitLinesModel.ADDITION -> textView.setBackgroundColor(ViewHelper.getPatchAdditionColor(context)) - CommitLinesModel.DELETION -> textView.setBackgroundColor(ViewHelper.getPatchDeletionColor(context)) - CommitLinesModel.PATCH -> textView.setBackgroundColor(ViewHelper.getPatchRefColor(context)) - else -> textView.setBackgroundColor(Color.TRANSPARENT) - } - if (item.noNewLine) { - textView.text = SpannableBuilder.builder().append(item.text.replace(spacePattern, " ")).append(" ") - .append(ContextCompat.getDrawable(context, R.drawable.ic_newline)) - } else { - textView.text = item.text.replace(spacePattern, " ") - } - toolbar.setTitle(R.string.add_comment) - toolbar.setNavigationIcon(R.drawable.ic_clear) - toolbar.setNavigationOnClickListener { dismiss() } - toolbar.inflateMenu(R.menu.add_menu) - toolbar.setOnMenuItemClickListener { - if (commentEditorFragment?.getEditText()?.text.isNullOrEmpty()) { - commentEditorFragment?.getEditText()?.error = getString(R.string.required_field) - } else { - commentEditorFragment?.getEditText()?.error = null - commentCallback?.onCommentAdded(InputHelper.toString(commentEditorFragment?.getEditText()?.text), - item, arguments!!.getBundle(BundleConstant.EXTRA)) - dismiss() + val context = context ?: return + when (item.color) { + CommitLinesModel.ADDITION -> textView.setBackgroundColor(ViewHelper.getPatchAdditionColor(context)) + CommitLinesModel.DELETION -> textView.setBackgroundColor(ViewHelper.getPatchDeletionColor(context)) + CommitLinesModel.PATCH -> textView.setBackgroundColor(ViewHelper.getPatchRefColor(context)) + else -> textView.setBackgroundColor(Color.TRANSPARENT) + } + if (item.noNewLine) { + textView.text = SpannableBuilder.builder().append(item.text.replace(spacePattern, " ")).append(" ") + .append(ContextCompat.getDrawable(context, R.drawable.ic_newline)) + } else { + textView.text = item.text.replace(spacePattern, " ") + } + toolbar.setTitle(R.string.add_comment) + toolbar.setNavigationIcon(R.drawable.ic_clear) + toolbar.setNavigationOnClickListener { dismiss() } + toolbar.inflateMenu(R.menu.add_menu) + toolbar.setOnMenuItemClickListener { + if (commentEditorFragment?.getEditText()?.text.isNullOrEmpty()) { + commentEditorFragment?.getEditText()?.error = getString(R.string.required_field) + } else { + commentEditorFragment?.getEditText()?.error = null + commentCallback?.onCommentAdded( + InputHelper.toString(commentEditorFragment?.getEditText()?.text), + item, arguments!!.getBundle(BundleConstant.EXTRA) + ) + dismiss() + } + return@setOnMenuItemClickListener true } - return@setOnMenuItemClickListener true } + } override fun providePresenter(): BasePresenter = BasePresenter() @@ -103,9 +107,9 @@ class AddReviewDialogFragment : BaseDialogFragment? { diff --git a/app/src/main/java/com/fastaccess/ui/modules/search/SearchActivity.java b/app/src/main/java/com/fastaccess/ui/modules/search/SearchActivity.java index 5339f4ba..32c1c421 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/search/SearchActivity.java +++ b/app/src/main/java/com/fastaccess/ui/modules/search/SearchActivity.java @@ -3,11 +3,11 @@ package com.fastaccess.ui.modules.search; import android.content.Context; import android.content.Intent; import android.os.Bundle; -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 androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import com.google.android.material.appbar.AppBarLayout; +import com.google.android.material.tabs.TabLayout; +import androidx.fragment.app.Fragment; import android.text.Editable; import android.view.View; import android.widget.ArrayAdapter; diff --git a/app/src/main/java/com/fastaccess/ui/modules/search/SearchMvp.java b/app/src/main/java/com/fastaccess/ui/modules/search/SearchMvp.java index 84d515c8..bc10ac31 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/search/SearchMvp.java +++ b/app/src/main/java/com/fastaccess/ui/modules/search/SearchMvp.java @@ -1,9 +1,9 @@ package com.fastaccess.ui.modules.search; -import android.support.annotation.IntRange; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v4.view.ViewPager; +import androidx.annotation.IntRange; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.viewpager.widget.ViewPager; import android.widget.AutoCompleteTextView; import com.fastaccess.data.dao.model.SearchHistory; diff --git a/app/src/main/java/com/fastaccess/ui/modules/search/SearchPresenter.java b/app/src/main/java/com/fastaccess/ui/modules/search/SearchPresenter.java index 4080c415..50e79c59 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/search/SearchPresenter.java +++ b/app/src/main/java/com/fastaccess/ui/modules/search/SearchPresenter.java @@ -1,7 +1,7 @@ package com.fastaccess.ui.modules.search; -import android.support.annotation.NonNull; -import android.support.v4.view.ViewPager; +import androidx.annotation.NonNull; +import androidx.viewpager.widget.ViewPager; import android.widget.AutoCompleteTextView; import com.annimon.stream.Stream; diff --git a/app/src/main/java/com/fastaccess/ui/modules/search/SearchUserActivity.kt b/app/src/main/java/com/fastaccess/ui/modules/search/SearchUserActivity.kt index 91a3bf35..a6083567 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/search/SearchUserActivity.kt +++ b/app/src/main/java/com/fastaccess/ui/modules/search/SearchUserActivity.kt @@ -30,7 +30,7 @@ class SearchUserActivity : BaseActivity { + final Glide glide = Glide.get(App.getInstance()); + disposable.add(RxHelper.getObservable(Observable.fromCallable(() -> { + glide.clearDiskCache(); + return true; + })).subscribe(aBoolean -> { + glide.clearMemory(); + Toasty.info(App.getInstance(), getString(R.string.restart_app_message), Toast.LENGTH_LONG).show(); + })); + return true; + }); } private void addNotifications() { @@ -324,7 +351,7 @@ public class SettingsCategoryFragment extends PreferenceFragmentCompat implement Map savedPref = gson.fromJson(json.toString(), typeOfHashMap); if (savedPref != null && !savedPref.isEmpty()) { for (Map.Entry stringEntry : savedPref.entrySet()) { - PrefHelper.set(stringEntry.getKey(), stringEntry.getKey()); + PrefHelper.set(stringEntry.getKey(), stringEntry.getValue()); } } callback.onThemeChanged(); diff --git a/app/src/main/java/com/fastaccess/ui/modules/settings/sound/NotificationSoundBottomSheet.kt b/app/src/main/java/com/fastaccess/ui/modules/settings/sound/NotificationSoundBottomSheet.kt index 34702822..c329db5b 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/settings/sound/NotificationSoundBottomSheet.kt +++ b/app/src/main/java/com/fastaccess/ui/modules/settings/sound/NotificationSoundBottomSheet.kt @@ -33,7 +33,7 @@ class NotificationSoundBottomSheet : BaseMvpBottomSheetDialogFragment if (!canPlaySound) return@setOnCheckedChangeListener val sound = radioGroup.getChildAt(id).tag as NotificationSoundModel - if (mediaPlayer.isPlaying) mediaPlayer.stop() + if (mediaPlayer.isPlaying) { + mediaPlayer.stop() + } mediaPlayer.reset() - mediaPlayer.setDataSource(context, sound.uri) - mediaPlayer.prepare() - mediaPlayer.start() + sound.uri?.let { + mediaPlayer.setDataSource(requireContext(), it) + mediaPlayer.prepare() + mediaPlayer.start() + } } } diff --git a/app/src/main/java/com/fastaccess/ui/modules/theme/code/ThemeCodeActivity.kt b/app/src/main/java/com/fastaccess/ui/modules/theme/code/ThemeCodeActivity.kt index 315c60cf..29be78a8 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/theme/code/ThemeCodeActivity.kt +++ b/app/src/main/java/com/fastaccess/ui/modules/theme/code/ThemeCodeActivity.kt @@ -45,6 +45,8 @@ class ThemeCodeActivity : BaseActivity(), override fun onInitAdapter(list: List) { val adapter = SpinnerAdapter(this, list) spinner.adapter = adapter + val themePosition = list.indexOf(PrefGetter.getCodeTheme()) + if (themePosition >= 0) spinner.setSelection(themePosition) } @OnItemSelected(R.id.themesList) fun onItemSelect() { diff --git a/app/src/main/java/com/fastaccess/ui/modules/theme/fragment/ThemeFragment.kt b/app/src/main/java/com/fastaccess/ui/modules/theme/fragment/ThemeFragment.kt index 0e79bf0b..1a01bd96 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/theme/fragment/ThemeFragment.kt +++ b/app/src/main/java/com/fastaccess/ui/modules/theme/fragment/ThemeFragment.kt @@ -5,8 +5,8 @@ import android.content.Context import android.content.Intent import android.graphics.Color import android.os.Bundle -import android.support.design.widget.FloatingActionButton -import android.support.v7.widget.Toolbar +import com.google.android.material.floatingactionbutton.FloatingActionButton +import androidx.appcompat.widget.Toolbar import android.view.ContextThemeWrapper import android.view.LayoutInflater import android.view.View @@ -37,7 +37,7 @@ class ThemeFragment : BaseFragment(), Tr @BindView(R.id.searchEditText) lateinit var searchEditText: FontEditText - @State var selectedTitle: String = "All Language" + @State var selectedTitle: String = "All" - @OnTextChanged(value = R.id.searchEditText, callback = OnTextChanged.Callback.AFTER_TEXT_CHANGED) fun onTextChange(s: Editable) { + @OnTextChanged(value = [R.id.searchEditText], callback = OnTextChanged.Callback.AFTER_TEXT_CHANGED) fun onTextChange(s: Editable) { val text = s.toString() if (text.isEmpty()) { AnimHelper.animateVisibility(clear, false) @@ -102,11 +104,11 @@ class TrendingActivity : BaseActivity(), Tr override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) navMenu.itemIconTintList = null - trendingFragment = supportFragmentManager.findFragmentById(R.id.trendingFragment) as TrendingFragment? - navMenu.setNavigationItemSelectedListener({ item -> + trendingFragment = supportFragmentManager.findFragmentById(R.id.trendingFragment) as? TrendingFragment + navMenu.setNavigationItemSelectedListener { item -> closeDrawerLayout() onItemClicked(item) - }) + } setupIntent(savedInstanceState) if (savedInstanceState == null) { presenter.onLoadLanguage() @@ -134,6 +136,13 @@ class TrendingActivity : BaseActivity(), Tr drawerLayout.openDrawer(Gravity.END) true } + R.id.share -> { + ActivityHelper.shareUrl( + this, "${LinkParserHelper.PROTOCOL_HTTPS}://${LinkParserHelper.HOST_DEFAULT}" + + "/trending/$selectedTitle" + ) + return true + } android.R.id.home -> { startActivity(Intent(this, MainActivity::class.java)) finish() @@ -145,9 +154,9 @@ class TrendingActivity : BaseActivity(), Tr override fun onAppend(title: String, color: Int) { navMenu.menu.add(R.id.languageGroup, title.hashCode(), Menu.NONE, title) - .setCheckable(true) - .setIcon(createOvalShape(color)) - .isChecked = title.toLowerCase() == selectedTitle.toLowerCase() + .setCheckable(true) + .setIcon(createOvalShape(color)) + .isChecked = title.toLowerCase() == selectedTitle.toLowerCase() } override fun onClearMenu() { @@ -156,7 +165,7 @@ class TrendingActivity : BaseActivity(), Tr private fun onItemClicked(item: MenuItem?): Boolean { selectedTitle = when (item?.title.toString()) { - "All Language" -> "" + "All" -> "" else -> item?.title.toString() } Logger.e(selectedTitle) @@ -188,15 +197,15 @@ class TrendingActivity : BaseActivity(), Tr if (intent != null && intent.extras != null) { val bundle = intent.extras if (bundle != null) { - val lang: String = bundle.getString(BundleConstant.EXTRA) + val lang: String = bundle.getString(BundleConstant.EXTRA) ?: "All" val query: String? = bundle.getString(BundleConstant.EXTRA_TWO) - if (!lang.isEmpty()) { + if (lang.isNotEmpty()) { selectedTitle = lang } if (query.isNullOrEmpty()) { daily.isSelected = true } else { - when (query?.toLowerCase()) { + when (query.toLowerCase(Locale.getDefault())) { "daily" -> daily.isSelected = true "weekly" -> weekly.isSelected = true "monthly" -> monthly.isSelected = true @@ -223,10 +232,12 @@ class TrendingActivity : BaseActivity(), Tr companion object { fun getTrendingIntent(context: Context, lang: String?, query: String?): Intent { val intent = Intent(context, TrendingActivity::class.java) - intent.putExtras(Bundler.start() + intent.putExtras( + Bundler.start() .put(BundleConstant.EXTRA, lang) .put(BundleConstant.EXTRA_TWO, query) - .end()) + .end() + ) return intent } } diff --git a/app/src/main/java/com/fastaccess/ui/modules/trending/TrendingMvp.kt b/app/src/main/java/com/fastaccess/ui/modules/trending/TrendingMvp.kt index dbd68d5c..f2971223 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/trending/TrendingMvp.kt +++ b/app/src/main/java/com/fastaccess/ui/modules/trending/TrendingMvp.kt @@ -1,6 +1,6 @@ package com.fastaccess.ui.modules.trending -import android.support.annotation.ColorInt +import androidx.annotation.ColorInt import com.fastaccess.ui.base.mvp.BaseMvp /** diff --git a/app/src/main/java/com/fastaccess/ui/modules/trending/TrendingPresenter.kt b/app/src/main/java/com/fastaccess/ui/modules/trending/TrendingPresenter.kt index f6d44553..438a3d28 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/trending/TrendingPresenter.kt +++ b/app/src/main/java/com/fastaccess/ui/modules/trending/TrendingPresenter.kt @@ -25,7 +25,6 @@ class TrendingPresenter : BasePresenter(), TrendingMvp.Present val lanColor = Color.parseColor(color.color) sendToView { it.onAppend(t, lanColor) } } catch (e: Exception) { - e.printStackTrace() sendToView { it.onAppend(t, Color.LTGRAY) } } } else { diff --git a/app/src/main/java/com/fastaccess/ui/modules/trending/fragment/TrendingFragment.kt b/app/src/main/java/com/fastaccess/ui/modules/trending/fragment/TrendingFragment.kt index ad4d0d77..8c78474a 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/trending/fragment/TrendingFragment.kt +++ b/app/src/main/java/com/fastaccess/ui/modules/trending/fragment/TrendingFragment.kt @@ -1,17 +1,19 @@ package com.fastaccess.ui.modules.trending.fragment import android.os.Bundle -import android.support.v4.widget.SwipeRefreshLayout +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout import android.view.View import butterknife.BindView import com.evernote.android.state.State import com.fastaccess.R import com.fastaccess.data.dao.TrendingModel +import com.fastaccess.helper.Logger import com.fastaccess.ui.adapter.TrendingAdapter import com.fastaccess.ui.base.BaseFragment import com.fastaccess.ui.widgets.StateLayout import com.fastaccess.ui.widgets.recyclerview.DynamicRecyclerView import com.fastaccess.ui.widgets.recyclerview.scroll.RecyclerViewFastScroller +import kotlin.math.sin /** * Created by Kosh on 30 May 2017, 11:37 PM @@ -43,13 +45,14 @@ class TrendingFragment : BaseFragment) { + adapter.insertItems(items) } override fun onSetQuery(lang: String, since: String) { this.lang = lang this.since = since + Logger.e(lang, since) adapter.clear() presenter.onCallApi(lang, since) } diff --git a/app/src/main/java/com/fastaccess/ui/modules/trending/fragment/TrendingFragmentMvp.kt b/app/src/main/java/com/fastaccess/ui/modules/trending/fragment/TrendingFragmentMvp.kt index 68a66dcc..c3957d2f 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/trending/fragment/TrendingFragmentMvp.kt +++ b/app/src/main/java/com/fastaccess/ui/modules/trending/fragment/TrendingFragmentMvp.kt @@ -11,7 +11,7 @@ import com.fastaccess.ui.widgets.recyclerview.BaseViewHolder interface TrendingFragmentMvp { interface View : BaseMvp.FAView { - fun onNotifyAdapter(items: TrendingModel) + fun onNotifyAdapter(items: List) fun onSetQuery(lang: String, since: String) fun clearAdapter() } diff --git a/app/src/main/java/com/fastaccess/ui/modules/trending/fragment/TrendingFragmentPresenter.kt b/app/src/main/java/com/fastaccess/ui/modules/trending/fragment/TrendingFragmentPresenter.kt index f30468ae..29780f94 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/trending/fragment/TrendingFragmentPresenter.kt +++ b/app/src/main/java/com/fastaccess/ui/modules/trending/fragment/TrendingFragmentPresenter.kt @@ -1,17 +1,20 @@ package com.fastaccess.ui.modules.trending.fragment import android.view.View +import com.fastaccess.data.dao.FirebaseTrendingConfigModel import com.fastaccess.data.dao.TrendingModel -import com.fastaccess.helper.InputHelper +import com.fastaccess.helper.Logger import com.fastaccess.helper.RxHelper import com.fastaccess.provider.rest.jsoup.JsoupProvider import com.fastaccess.ui.base.mvp.presenter.BasePresenter import com.fastaccess.ui.modules.repos.RepoPagerActivity +import com.github.b3er.rxfirebase.database.RxFirebaseDatabase +import com.google.firebase.database.FirebaseDatabase import io.reactivex.Observable import io.reactivex.disposables.Disposable import org.jsoup.Jsoup -import org.jsoup.nodes.Document -import org.jsoup.select.Elements +import java.util.* +import kotlin.collections.ArrayList /** * Created by Kosh on 30 May 2017, 11:04 PM @@ -22,6 +25,7 @@ class TrendingFragmentPresenter : BasePresenter(), Tre private var disposel: Disposable? = null private val trendingList: ArrayList = ArrayList() + private var firebaseTrendingConfigModel: FirebaseTrendingConfigModel? = null override fun getTendingList(): ArrayList { return trendingList @@ -30,53 +34,81 @@ class TrendingFragmentPresenter : BasePresenter(), Tre override fun onItemLongClick(position: Int, v: View?, item: TrendingModel?) {} override fun onItemClick(position: Int, v: View?, item: TrendingModel?) { - val split = item?.title?.trim()?.split("/")!! - v?.context!!.startActivity(RepoPagerActivity.createIntent(v.context!!, split[1].trim(), split[0].trim())) + val split = item?.title?.trim()?.split("/") ?: return + v?.context?.let { it.startActivity(RepoPagerActivity.createIntent(it, split[1].trim(), split[0].trim())) } } override fun onCallApi(lang: String, since: String) { disposel?.let { if (!it.isDisposed) it.dispose() } - disposel = RxHelper.getObservable(JsoupProvider.getTrendingService().getTrending( - (if (!InputHelper.isEmpty(lang)) lang.replace(" ".toRegex(), "-") else "").toLowerCase(), since)) - .flatMap { s -> RxHelper.getObservable(getTrendingObservable(s)) } - .doOnSubscribe { - sendToView { - it.showProgress(0) - it.clearAdapter() + val config = firebaseTrendingConfigModel + + if (com.fastaccess.BuildConfig.DEBUG) { + callApi(lang, since) + } else { + if (config == null) { + manageDisposable(RxHelper.getSingle(RxFirebaseDatabase.data(FirebaseDatabase.getInstance().reference.child("github_trending"))) + .doOnSubscribe { sendToView { it.showProgress(0) } } + .map { + firebaseTrendingConfigModel = FirebaseTrendingConfigModel + .map(it.value as? HashMap) + return@map firebaseTrendingConfigModel } + .subscribe( + { callApi(lang, since) }, + { callApi(lang, since) } + ) + ) + } else { + callApi(lang, since) + } + } + } + + private fun callApi( + lang: String, + since: String + ) { + val model = firebaseTrendingConfigModel ?: FirebaseTrendingConfigModel() + + val language = if (lang == "All") "" else lang.replace(" ", "_").toLowerCase(Locale.getDefault()) + + disposel = RxHelper.getObservable(JsoupProvider.getTrendingService(model.pathUrl).getTrending(language, since)) + .doOnSubscribe { + sendToView { + it.showProgress(0) + it.clearAdapter() } - .subscribe({ response -> sendToView { view -> view.onNotifyAdapter(response) } }, - { throwable -> onError(throwable) }, { sendToView({ it.hideProgress() }) }) + }.flatMap { + RxHelper.getObservable(getTrendingObservable(it.body() ?: "", model)) + }.subscribe( + { response -> sendToView { view -> view.onNotifyAdapter(response) } }, + { throwable -> onError(throwable) }, + { sendToView { it.hideProgress() } } + ) manageDisposable(disposel) } - private fun getTrendingObservable(response: String): Observable { + private fun getTrendingObservable(html: String, trendingModel: FirebaseTrendingConfigModel): Observable> { return Observable.fromPublisher { s -> - val document: Document = Jsoup.parse(response, "") - val repoList = document.select(".repo-list") - if (repoList.isNotEmpty()) { - val list: Elements? = repoList.select("li") - list?.let { - if (list.isNotEmpty()) { - it.onEach { - val title = it.select(".d-inline-block > h3 > a").text() - val description = it.select(".py-1 > p").text() - val stars = it.select(".f6 > a[href*=/stargazers]").text() - val forks = it.select(".f6 > a[href*=/network]").text() - var todayStars = it.select(".f6 > span.float-right").text() - if (todayStars.isNullOrBlank()) { - todayStars = it.select(".f6 > span.float-sm-right").text() - } - var language = it.select(".f6 .mr-3 > span[itemprop=programmingLanguage]").text() - if (language.isNullOrBlank()) { - language = it.select(".f6 span[itemprop=programmingLanguage]").text() - } - s.onNext(TrendingModel(title, description, language, stars, forks, todayStars)) - } - } - } + val document = Jsoup.parse(html, "") + val list = document.select(trendingModel.listName) + val trendingList = arrayListOf() + list.select(trendingModel.listNameSublistTag)?.let { li -> + trendingList.addAll(li.map { body -> + val trendingLang = kotlin.runCatching { body.select(trendingModel.language).text() } + .getOrNull() ?: kotlin.runCatching { body.select(trendingModel.languageFallback).text() }.getOrNull() + val todayStars = kotlin.runCatching { body.select(trendingModel.todayStars).text() } + .getOrNull() ?: kotlin.runCatching { body.select(trendingModel.todayStarsFallback).text() }.getOrNull() + val title = kotlin.runCatching { body.select(trendingModel.title).text() }.getOrNull() + val description = kotlin.runCatching { body.select(trendingModel.description).text() }.getOrNull() + val stars = kotlin.runCatching { body.select(trendingModel.stars).text() }.getOrNull() + val forks = kotlin.runCatching { body.select(trendingModel.forks).text() }.getOrNull() + TrendingModel(title, description, trendingLang, stars, forks, todayStars) + }) } + Logger.e(trendingList as List?) + s.onNext(trendingList) s.onComplete() } } diff --git a/app/src/main/java/com/fastaccess/ui/modules/user/UserPagerActivity.java b/app/src/main/java/com/fastaccess/ui/modules/user/UserPagerActivity.java index d068cf18..097aaf96 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/user/UserPagerActivity.java +++ b/app/src/main/java/com/fastaccess/ui/modules/user/UserPagerActivity.java @@ -6,11 +6,11 @@ import android.content.Context; import android.content.Intent; import android.net.Uri; 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 android.support.v4.view.ViewPager; +import androidx.annotation.NonNull; +import com.google.android.material.floatingactionbutton.FloatingActionButton; +import com.google.android.material.tabs.TabLayout; +import androidx.fragment.app.Fragment; +import androidx.viewpager.widget.ViewPager; import android.view.Menu; import android.view.MenuItem; import android.widget.TextView; @@ -25,6 +25,7 @@ import com.fastaccess.helper.ActivityHelper; import com.fastaccess.helper.BundleConstant; import com.fastaccess.helper.Bundler; import com.fastaccess.helper.InputHelper; +import com.fastaccess.helper.Logger; import com.fastaccess.helper.ViewHelper; import com.fastaccess.provider.scheme.LinkParserHelper; import com.fastaccess.ui.adapter.FragmentsPagerAdapter; @@ -117,8 +118,12 @@ public class UserPagerActivity extends BaseActivity implements UserPagerMvp.Presenter { @com.evernote.android.state.State int isMember = -1; + @com.evernote.android.state.State boolean isUserBlocked; + @com.evernote.android.state.State boolean isUserBlockedRequested; + + @Override public void onCheckBlocking(@NonNull String login) { + makeRestCall(RestProvider.getUserService(isEnterprise()).isUserBlocked(login), + booleanResponse -> sendToView(view -> { + isUserBlockedRequested = true; + isUserBlocked = booleanResponse.code() == 204; + view.onInvalidateMenu(); + })); + } @Override public void checkOrgMembership(@NonNull String org) { makeRestCall(RestProvider.getOrgService(isEnterprise()).isMember(org, Login.getUser().getLogin()), @@ -22,4 +33,24 @@ import lombok.Getter; view.onInitOrg(isMember == 1); })); } + + @Override public void onBlockUser(@NonNull String login) { + if (isUserBlocked()) { + onUnblockUser(login); + } else { + makeRestCall(RestProvider.getUserService(isEnterprise()).blockUser(login), + booleanResponse -> sendToView(view -> { + isUserBlocked = true; + view.onUserBlocked(); + })); + } + } + + @Override public void onUnblockUser(@NonNull String login) { + makeRestCall(RestProvider.getUserService(isEnterprise()).unBlockUser(login), + booleanResponse -> sendToView(view -> { + isUserBlocked = false; + view.onUserUnBlocked(); + })); + } } diff --git a/app/src/main/java/com/fastaccess/ui/widgets/AppbarRefreshLayout.java b/app/src/main/java/com/fastaccess/ui/widgets/AppbarRefreshLayout.java index 75426e44..52e681d0 100644 --- a/app/src/main/java/com/fastaccess/ui/widgets/AppbarRefreshLayout.java +++ b/app/src/main/java/com/fastaccess/ui/widgets/AppbarRefreshLayout.java @@ -1,8 +1,8 @@ package com.fastaccess.ui.widgets; import android.content.Context; -import android.support.annotation.NonNull; -import android.support.v4.widget.SwipeRefreshLayout; +import androidx.annotation.NonNull; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import android.util.AttributeSet; import com.fastaccess.R; diff --git a/app/src/main/java/com/fastaccess/ui/widgets/AutoLinearLayout.java b/app/src/main/java/com/fastaccess/ui/widgets/AutoLinearLayout.java index 674e07ad..a9a2eba6 100644 --- a/app/src/main/java/com/fastaccess/ui/widgets/AutoLinearLayout.java +++ b/app/src/main/java/com/fastaccess/ui/widgets/AutoLinearLayout.java @@ -2,7 +2,7 @@ package com.fastaccess.ui.widgets; import android.content.Context; import android.content.res.TypedArray; -import android.support.v4.view.GravityCompat; +import androidx.core.view.GravityCompat; import android.util.AttributeSet; import android.view.Gravity; import android.view.View; diff --git a/app/src/main/java/com/fastaccess/ui/widgets/AvatarLayout.java b/app/src/main/java/com/fastaccess/ui/widgets/AvatarLayout.java index db80caf5..702469fb 100644 --- a/app/src/main/java/com/fastaccess/ui/widgets/AvatarLayout.java +++ b/app/src/main/java/com/fastaccess/ui/widgets/AvatarLayout.java @@ -1,18 +1,21 @@ package com.fastaccess.ui.widgets; import android.content.Context; -import android.support.annotation.AttrRes; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.annotation.StyleRes; -import android.support.v4.content.ContextCompat; -import android.support.v7.widget.TooltipCompat; + +import androidx.annotation.AttrRes; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.annotation.StyleRes; +import androidx.core.content.ContextCompat; +import androidx.appcompat.widget.TooltipCompat; + import android.util.AttributeSet; import android.view.View; import android.widget.FrameLayout; import com.bumptech.glide.Glide; import com.bumptech.glide.load.engine.DiskCacheStrategy; +import com.bumptech.glide.signature.ObjectKey; import com.fastaccess.R; import com.fastaccess.helper.InputHelper; import com.fastaccess.helper.PrefGetter; @@ -71,6 +74,10 @@ public class AvatarLayout extends FrameLayout { } public void setUrl(@Nullable String url, @Nullable String login, boolean isOrg, boolean isEnterprise) { + setUrl(url, login, isOrg, isEnterprise, false); + } + + public void setUrl(@Nullable String url, @Nullable String login, boolean isOrg, boolean isEnterprise, boolean reload) { this.login = login; this.isOrg = isOrg; this.isEnterprise = isEnterprise; @@ -85,10 +92,11 @@ public class AvatarLayout extends FrameLayout { .load(url) .fallback(ContextCompat.getDrawable(getContext(), R.drawable.ic_fasthub_mascot)) .diskCacheStrategy(DiskCacheStrategy.ALL) + .signature(new ObjectKey(reload ? String.valueOf(System.currentTimeMillis()) : "0")) .dontAnimate() .into(avatar); } - + private void setBackground() { if (PrefGetter.isRectAvatar()) { setBackgroundResource(R.drawable.rect_shape); diff --git a/app/src/main/java/com/fastaccess/ui/widgets/CardsPagerTransformerBasic.kt b/app/src/main/java/com/fastaccess/ui/widgets/CardsPagerTransformerBasic.kt index e9b17cef..7e2a073f 100644 --- a/app/src/main/java/com/fastaccess/ui/widgets/CardsPagerTransformerBasic.kt +++ b/app/src/main/java/com/fastaccess/ui/widgets/CardsPagerTransformerBasic.kt @@ -1,6 +1,6 @@ package com.fastaccess.ui.widgets -import android.support.v4.view.ViewPager +import androidx.viewpager.widget.ViewPager import android.view.View class CardsPagerTransformerBasic(private val baseElevation: Int, private val raisingElevation: Int) : ViewPager.PageTransformer { diff --git a/app/src/main/java/com/fastaccess/ui/widgets/ColorPickerPreference.java b/app/src/main/java/com/fastaccess/ui/widgets/ColorPickerPreference.java index ff1abdf7..bd3c919a 100644 --- a/app/src/main/java/com/fastaccess/ui/widgets/ColorPickerPreference.java +++ b/app/src/main/java/com/fastaccess/ui/widgets/ColorPickerPreference.java @@ -3,8 +3,8 @@ package com.fastaccess.ui.widgets; import android.content.Context; import android.content.res.TypedArray; import android.graphics.PorterDuff; -import android.support.v7.preference.Preference; -import android.support.v7.preference.PreferenceViewHolder; +import androidx.preference.Preference; +import androidx.preference.PreferenceViewHolder; import android.util.AttributeSet; import android.util.TypedValue; import android.widget.Button; diff --git a/app/src/main/java/com/fastaccess/ui/widgets/DiffLineSpan.java b/app/src/main/java/com/fastaccess/ui/widgets/DiffLineSpan.java index 7c7d3432..3fe837b4 100644 --- a/app/src/main/java/com/fastaccess/ui/widgets/DiffLineSpan.java +++ b/app/src/main/java/com/fastaccess/ui/widgets/DiffLineSpan.java @@ -5,10 +5,10 @@ import android.graphics.Color; import android.graphics.Paint; import android.graphics.Rect; import android.graphics.Typeface; -import android.support.annotation.ColorInt; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v4.content.ContextCompat; +import androidx.annotation.ColorInt; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; import android.text.SpannableString; import android.text.SpannableStringBuilder; import android.text.Spanned; diff --git a/app/src/main/java/com/fastaccess/ui/widgets/FloatingActionButtonBehavior.java b/app/src/main/java/com/fastaccess/ui/widgets/FloatingActionButtonBehavior.java index 16f87946..2b81f3d7 100644 --- a/app/src/main/java/com/fastaccess/ui/widgets/FloatingActionButtonBehavior.java +++ b/app/src/main/java/com/fastaccess/ui/widgets/FloatingActionButtonBehavior.java @@ -1,10 +1,10 @@ package com.fastaccess.ui.widgets; import android.content.Context; -import android.support.annotation.NonNull; -import android.support.design.widget.CoordinatorLayout; -import android.support.design.widget.FloatingActionButton; -import android.support.design.widget.Snackbar; +import androidx.annotation.NonNull; +import androidx.coordinatorlayout.widget.CoordinatorLayout; +import com.google.android.material.floatingactionbutton.FloatingActionButton; +import com.google.android.material.snackbar.Snackbar; import android.util.AttributeSet; import android.view.View; import android.view.ViewGroup; diff --git a/app/src/main/java/com/fastaccess/ui/widgets/FontAutoCompleteEditText.java b/app/src/main/java/com/fastaccess/ui/widgets/FontAutoCompleteEditText.java index 5d2c4c43..e499cf2a 100644 --- a/app/src/main/java/com/fastaccess/ui/widgets/FontAutoCompleteEditText.java +++ b/app/src/main/java/com/fastaccess/ui/widgets/FontAutoCompleteEditText.java @@ -1,8 +1,8 @@ package com.fastaccess.ui.widgets; import android.content.Context; -import android.support.annotation.NonNull; -import android.support.v7.widget.AppCompatAutoCompleteTextView; +import androidx.annotation.NonNull; +import androidx.appcompat.widget.AppCompatAutoCompleteTextView; import android.util.AttributeSet; import android.view.inputmethod.EditorInfo; diff --git a/app/src/main/java/com/fastaccess/ui/widgets/FontButton.java b/app/src/main/java/com/fastaccess/ui/widgets/FontButton.java index 0f984b1b..7ec78827 100644 --- a/app/src/main/java/com/fastaccess/ui/widgets/FontButton.java +++ b/app/src/main/java/com/fastaccess/ui/widgets/FontButton.java @@ -1,8 +1,8 @@ package com.fastaccess.ui.widgets; import android.content.Context; -import android.support.annotation.NonNull; -import android.support.v7.widget.AppCompatButton; +import androidx.annotation.NonNull; +import androidx.appcompat.widget.AppCompatButton; import android.util.AttributeSet; import com.fastaccess.helper.TypeFaceHelper; diff --git a/app/src/main/java/com/fastaccess/ui/widgets/FontCheckbox.java b/app/src/main/java/com/fastaccess/ui/widgets/FontCheckbox.java index 6b9b4edf..b0730a73 100644 --- a/app/src/main/java/com/fastaccess/ui/widgets/FontCheckbox.java +++ b/app/src/main/java/com/fastaccess/ui/widgets/FontCheckbox.java @@ -1,8 +1,8 @@ package com.fastaccess.ui.widgets; import android.content.Context; -import android.support.annotation.NonNull; -import android.support.v7.widget.AppCompatCheckBox; +import androidx.annotation.NonNull; +import androidx.appcompat.widget.AppCompatCheckBox; import android.util.AttributeSet; import com.fastaccess.helper.TypeFaceHelper; diff --git a/app/src/main/java/com/fastaccess/ui/widgets/FontEditText.java b/app/src/main/java/com/fastaccess/ui/widgets/FontEditText.java index cad084b5..03e4a0aa 100644 --- a/app/src/main/java/com/fastaccess/ui/widgets/FontEditText.java +++ b/app/src/main/java/com/fastaccess/ui/widgets/FontEditText.java @@ -1,11 +1,13 @@ package com.fastaccess.ui.widgets; +import android.annotation.SuppressLint; import android.content.Context; -import android.support.annotation.NonNull; -import android.support.v7.widget.AppCompatEditText; +import androidx.annotation.NonNull; +import androidx.appcompat.widget.AppCompatEditText; import android.util.AttributeSet; import android.view.inputmethod.EditorInfo; +import com.crashlytics.android.Crashlytics; import com.fastaccess.helper.TypeFaceHelper; /** @@ -35,4 +37,13 @@ public class FontEditText extends AppCompatEditText { setImeOptions(getImeOptions() | EditorInfo.IME_FLAG_NO_FULLSCREEN); TypeFaceHelper.applyTypeface(this); } + + @SuppressLint("SetTextI18n") public void setText(CharSequence text, BufferType type) { + try { + super.setText(text, type); + } catch (Exception e) { + setText("I tried, but your OEM just sucks because they modify the framework components and therefore causing the app to crash!" + ".\nFastHub"); + Crashlytics.logException(e); + } + } } diff --git a/app/src/main/java/com/fastaccess/ui/widgets/FontRadioButton.java b/app/src/main/java/com/fastaccess/ui/widgets/FontRadioButton.java index 6464e5fd..d40221d6 100644 --- a/app/src/main/java/com/fastaccess/ui/widgets/FontRadioButton.java +++ b/app/src/main/java/com/fastaccess/ui/widgets/FontRadioButton.java @@ -1,8 +1,8 @@ package com.fastaccess.ui.widgets; import android.content.Context; -import android.support.annotation.NonNull; -import android.support.v7.widget.AppCompatRadioButton; +import androidx.annotation.NonNull; +import androidx.appcompat.widget.AppCompatRadioButton; import android.util.AttributeSet; import com.fastaccess.helper.TypeFaceHelper; diff --git a/app/src/main/java/com/fastaccess/ui/widgets/FontSwitchView.java b/app/src/main/java/com/fastaccess/ui/widgets/FontSwitchView.java index 3376ed67..d6726374 100644 --- a/app/src/main/java/com/fastaccess/ui/widgets/FontSwitchView.java +++ b/app/src/main/java/com/fastaccess/ui/widgets/FontSwitchView.java @@ -1,8 +1,8 @@ package com.fastaccess.ui.widgets; import android.content.Context; -import android.support.annotation.NonNull; -import android.support.v7.widget.SwitchCompat; +import androidx.annotation.NonNull; +import androidx.appcompat.widget.SwitchCompat; import android.util.AttributeSet; import com.fastaccess.helper.TypeFaceHelper; diff --git a/app/src/main/java/com/fastaccess/ui/widgets/FontTextView.java b/app/src/main/java/com/fastaccess/ui/widgets/FontTextView.java index ab38511c..fd52772d 100644 --- a/app/src/main/java/com/fastaccess/ui/widgets/FontTextView.java +++ b/app/src/main/java/com/fastaccess/ui/widgets/FontTextView.java @@ -1,19 +1,23 @@ package com.fastaccess.ui.widgets; +import android.annotation.SuppressLint; import android.content.Context; import android.content.res.TypedArray; import android.graphics.drawable.Drawable; import android.graphics.drawable.ScaleDrawable; import android.os.Parcelable; -import android.support.annotation.ColorInt; -import android.support.annotation.DrawableRes; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v4.content.ContextCompat; -import android.support.v7.widget.AppCompatTextView; + +import androidx.annotation.ColorInt; +import androidx.annotation.DrawableRes; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; +import androidx.appcompat.widget.AppCompatTextView; + import android.util.AttributeSet; import android.view.Gravity; +import com.crashlytics.android.Crashlytics; import com.evernote.android.state.State; import com.evernote.android.state.StateSaver; import com.fastaccess.R; @@ -57,6 +61,22 @@ public class FontTextView extends AppCompatTextView { this.selected = selected; } + @Override public void setTextCursorDrawable(@Nullable Drawable textCursorDrawable) { + try { + super.setTextCursorDrawable(textCursorDrawable); + } catch (Exception e) { + Crashlytics.logException(e); + } + } + + @Override public void setTextCursorDrawable(int textCursorDrawable) { + try { + super.setTextCursorDrawable(textCursorDrawable); + } catch (Exception e) { + Crashlytics.logException(e); + } + } + private void init(@NonNull Context context, @Nullable AttributeSet attributeSet) { if (attributeSet != null) { TypedArray tp = context.obtainStyledAttributes(attributeSet, R.styleable.FontTextView); diff --git a/app/src/main/java/com/fastaccess/ui/widgets/ForegroundImageView.java b/app/src/main/java/com/fastaccess/ui/widgets/ForegroundImageView.java index 0ef9bb77..e8a1b078 100644 --- a/app/src/main/java/com/fastaccess/ui/widgets/ForegroundImageView.java +++ b/app/src/main/java/com/fastaccess/ui/widgets/ForegroundImageView.java @@ -1,10 +1,10 @@ package com.fastaccess.ui.widgets; import android.content.Context; -import android.support.annotation.ColorInt; -import android.support.annotation.NonNull; -import android.support.v7.widget.AppCompatImageView; -import android.support.v7.widget.TooltipCompat; +import androidx.annotation.ColorInt; +import androidx.annotation.NonNull; +import androidx.appcompat.widget.AppCompatImageView; +import androidx.appcompat.widget.TooltipCompat; import android.util.AttributeSet; import com.fastaccess.helper.ViewHelper; diff --git a/app/src/main/java/com/fastaccess/ui/widgets/ForegroundRelativeLayout.java b/app/src/main/java/com/fastaccess/ui/widgets/ForegroundRelativeLayout.java index 7a8c00ac..4b8ac853 100644 --- a/app/src/main/java/com/fastaccess/ui/widgets/ForegroundRelativeLayout.java +++ b/app/src/main/java/com/fastaccess/ui/widgets/ForegroundRelativeLayout.java @@ -5,7 +5,7 @@ import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.drawable.Drawable; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import android.util.AttributeSet; import android.view.ViewOutlineProvider; import android.widget.RelativeLayout; diff --git a/app/src/main/java/com/fastaccess/ui/widgets/LabelSpan.java b/app/src/main/java/com/fastaccess/ui/widgets/LabelSpan.java index 0e055ad9..d673bb86 100644 --- a/app/src/main/java/com/fastaccess/ui/widgets/LabelSpan.java +++ b/app/src/main/java/com/fastaccess/ui/widgets/LabelSpan.java @@ -5,9 +5,9 @@ import android.graphics.Color; import android.graphics.Paint; import android.graphics.Paint.FontMetricsInt; import android.graphics.RectF; -import android.support.annotation.NonNull; -import android.support.v4.text.TextUtilsCompat; -import android.support.v4.view.ViewCompat; +import androidx.annotation.NonNull; +import androidx.core.text.TextUtilsCompat; +import androidx.core.view.ViewCompat; import android.text.Spanned; import android.text.TextPaint; import android.text.TextUtils; diff --git a/app/src/main/java/com/fastaccess/ui/widgets/NestedCoordinatorLayout.java b/app/src/main/java/com/fastaccess/ui/widgets/NestedCoordinatorLayout.java index 92288039..0c0d8a1b 100644 --- a/app/src/main/java/com/fastaccess/ui/widgets/NestedCoordinatorLayout.java +++ b/app/src/main/java/com/fastaccess/ui/widgets/NestedCoordinatorLayout.java @@ -1,10 +1,10 @@ package com.fastaccess.ui.widgets; import android.content.Context; -import android.support.annotation.NonNull; -import android.support.design.widget.CoordinatorLayout; -import android.support.v4.view.NestedScrollingChild; -import android.support.v4.view.NestedScrollingChildHelper; +import androidx.annotation.NonNull; +import androidx.coordinatorlayout.widget.CoordinatorLayout; +import androidx.core.view.NestedScrollingChild; +import androidx.core.view.NestedScrollingChildHelper; import android.util.AttributeSet; import android.view.View; diff --git a/app/src/main/java/com/fastaccess/ui/widgets/SpannableBuilder.java b/app/src/main/java/com/fastaccess/ui/widgets/SpannableBuilder.java index fa9ecb9d..54e24dfc 100644 --- a/app/src/main/java/com/fastaccess/ui/widgets/SpannableBuilder.java +++ b/app/src/main/java/com/fastaccess/ui/widgets/SpannableBuilder.java @@ -1,7 +1,7 @@ package com.fastaccess.ui.widgets; import android.graphics.drawable.Drawable; -import android.support.annotation.ColorInt; +import androidx.annotation.ColorInt; import android.text.SpannableStringBuilder; import android.text.TextPaint; import android.text.style.BackgroundColorSpan; diff --git a/app/src/main/java/com/fastaccess/ui/widgets/StateLayout.java b/app/src/main/java/com/fastaccess/ui/widgets/StateLayout.java index 7a126f42..bf58cc06 100644 --- a/app/src/main/java/com/fastaccess/ui/widgets/StateLayout.java +++ b/app/src/main/java/com/fastaccess/ui/widgets/StateLayout.java @@ -2,9 +2,9 @@ package com.fastaccess.ui.widgets; import android.content.Context; import android.os.Parcelable; -import android.support.annotation.NonNull; -import android.support.annotation.StringRes; -import android.support.v4.widget.NestedScrollView; +import androidx.annotation.NonNull; +import androidx.annotation.StringRes; +import androidx.core.widget.NestedScrollView; import android.util.AttributeSet; import com.evernote.android.state.State; @@ -95,7 +95,7 @@ public class StateLayout extends NestedScrollView { } public void setEmptyText(@NonNull String text) { - this.emptyTextValue = text + "\n\n¯\\_(ツ)_/¯"; + this.emptyTextValue = text; emptyText.setText(emptyTextValue); } diff --git a/app/src/main/java/com/fastaccess/ui/widgets/TabletBehavior.java b/app/src/main/java/com/fastaccess/ui/widgets/TabletBehavior.java index ed72458b..b5d7549a 100644 --- a/app/src/main/java/com/fastaccess/ui/widgets/TabletBehavior.java +++ b/app/src/main/java/com/fastaccess/ui/widgets/TabletBehavior.java @@ -1,9 +1,9 @@ package com.fastaccess.ui.widgets; import android.content.Context; -import android.support.design.widget.AppBarLayout; -import android.support.design.widget.CoordinatorLayout; -import android.support.v7.widget.Toolbar; +import com.google.android.material.appbar.AppBarLayout; +import androidx.coordinatorlayout.widget.CoordinatorLayout; +import androidx.appcompat.widget.Toolbar; import android.util.AttributeSet; import android.view.View; diff --git a/app/src/main/java/com/fastaccess/ui/widgets/ViewPagerView.java b/app/src/main/java/com/fastaccess/ui/widgets/ViewPagerView.java index 929c1b72..6faa4659 100644 --- a/app/src/main/java/com/fastaccess/ui/widgets/ViewPagerView.java +++ b/app/src/main/java/com/fastaccess/ui/widgets/ViewPagerView.java @@ -3,10 +3,10 @@ package com.fastaccess.ui.widgets; import android.annotation.SuppressLint; import android.content.Context; import android.content.res.TypedArray; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v4.view.PagerAdapter; -import android.support.v4.view.ViewPager; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.viewpager.widget.PagerAdapter; +import androidx.viewpager.widget.ViewPager; import android.util.AttributeSet; import android.view.MotionEvent; diff --git a/app/src/main/java/com/fastaccess/ui/widgets/color/ColorGenerator.java b/app/src/main/java/com/fastaccess/ui/widgets/color/ColorGenerator.java index 8219a84e..0d1f215c 100644 --- a/app/src/main/java/com/fastaccess/ui/widgets/color/ColorGenerator.java +++ b/app/src/main/java/com/fastaccess/ui/widgets/color/ColorGenerator.java @@ -1,9 +1,9 @@ package com.fastaccess.ui.widgets.color; import android.content.Context; -import android.support.annotation.ColorInt; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.ColorInt; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import com.annimon.stream.Objects; import com.fastaccess.helper.AppHelper; diff --git a/app/src/main/java/com/fastaccess/ui/widgets/contributions/ContributionsProvider.java b/app/src/main/java/com/fastaccess/ui/widgets/contributions/ContributionsProvider.java index ecf9228a..4e44f9b7 100644 --- a/app/src/main/java/com/fastaccess/ui/widgets/contributions/ContributionsProvider.java +++ b/app/src/main/java/com/fastaccess/ui/widgets/contributions/ContributionsProvider.java @@ -1,7 +1,7 @@ package com.fastaccess.ui.widgets.contributions; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import com.fastaccess.helper.InputHelper; diff --git a/app/src/main/java/com/fastaccess/ui/widgets/dialog/ListDialogView.java b/app/src/main/java/com/fastaccess/ui/widgets/dialog/ListDialogView.java index 45cd3c5b..348b0692 100644 --- a/app/src/main/java/com/fastaccess/ui/widgets/dialog/ListDialogView.java +++ b/app/src/main/java/com/fastaccess/ui/widgets/dialog/ListDialogView.java @@ -3,8 +3,8 @@ package com.fastaccess.ui.widgets.dialog; import android.content.Context; import android.os.Bundle; import android.os.Parcelable; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.view.View; import com.fastaccess.R; @@ -20,6 +20,8 @@ import com.fastaccess.ui.widgets.recyclerview.scroll.RecyclerViewFastScroller; import net.grandcentrix.thirtyinch.TiPresenter; +import org.jetbrains.annotations.NotNull; + import java.util.ArrayList; import java.util.List; @@ -61,7 +63,7 @@ public class ListDialogView extends BaseDialogFragment imp fastScroller.attachRecyclerView(recycler); } - @Override public void onAttach(Context context) { + @Override public void onAttach(@NotNull Context context) { super.onAttach(context); if (getParentFragment() != null && getParentFragment() instanceof onSimpleItemSelection) { onSimpleItemSelection = (onSimpleItemSelection) getParentFragment(); diff --git a/app/src/main/java/com/fastaccess/ui/widgets/dialog/MessageDialogView.java b/app/src/main/java/com/fastaccess/ui/widgets/dialog/MessageDialogView.java index 784512de..47581af8 100644 --- a/app/src/main/java/com/fastaccess/ui/widgets/dialog/MessageDialogView.java +++ b/app/src/main/java/com/fastaccess/ui/widgets/dialog/MessageDialogView.java @@ -2,8 +2,8 @@ package com.fastaccess.ui.widgets.dialog; import android.content.Context; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.view.View; import com.fastaccess.R; diff --git a/app/src/main/java/com/fastaccess/ui/widgets/dialog/ProgressDialogFragment.java b/app/src/main/java/com/fastaccess/ui/widgets/dialog/ProgressDialogFragment.java index 3869c8dd..5bf73fe1 100644 --- a/app/src/main/java/com/fastaccess/ui/widgets/dialog/ProgressDialogFragment.java +++ b/app/src/main/java/com/fastaccess/ui/widgets/dialog/ProgressDialogFragment.java @@ -5,9 +5,9 @@ import android.content.res.Resources; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.annotation.StringRes; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.annotation.StringRes; import android.view.View; import android.view.Window; diff --git a/app/src/main/java/com/fastaccess/ui/widgets/markdown/MarkDownLayout.kt b/app/src/main/java/com/fastaccess/ui/widgets/markdown/MarkDownLayout.kt index 835e3579..23520f00 100644 --- a/app/src/main/java/com/fastaccess/ui/widgets/markdown/MarkDownLayout.kt +++ b/app/src/main/java/com/fastaccess/ui/widgets/markdown/MarkDownLayout.kt @@ -2,9 +2,9 @@ package com.fastaccess.ui.widgets.markdown import android.annotation.SuppressLint import android.content.Context -import android.support.design.widget.Snackbar -import android.support.transition.TransitionManager -import android.support.v4.app.FragmentManager +import com.google.android.material.snackbar.Snackbar +import androidx.transition.TransitionManager +import androidx.fragment.app.FragmentManager import android.util.AttributeSet import android.view.View import android.widget.EditText diff --git a/app/src/main/java/com/fastaccess/ui/widgets/markdown/MarkdownEditText.kt b/app/src/main/java/com/fastaccess/ui/widgets/markdown/MarkdownEditText.kt index 213b9211..f5773def 100644 --- a/app/src/main/java/com/fastaccess/ui/widgets/markdown/MarkdownEditText.kt +++ b/app/src/main/java/com/fastaccess/ui/widgets/markdown/MarkdownEditText.kt @@ -1,10 +1,13 @@ package com.fastaccess.ui.widgets.markdown +import android.annotation.SuppressLint import android.content.Context import android.util.AttributeSet import android.view.View import android.widget.ArrayAdapter import android.widget.ListView +import android.widget.TextView +import com.crashlytics.android.Crashlytics import com.fastaccess.ui.widgets.FontEditText import java.util.* @@ -34,7 +37,7 @@ class MarkdownEditText : FontEditText { if (inMentionMode != -1) { val complete = mention.adapter.getItem(position).toString() + " " val end = selectionEnd - text.replace(inMentionMode, end, complete, 0, complete.length) + text?.replace(inMentionMode, end, complete, 0, complete.length) inMentionMode = -1 } } catch (ignored: Exception) { @@ -91,9 +94,16 @@ class MarkdownEditText : FontEditText { private fun updateMentionList(mentioning: String) { participants?.let { - val mentions = it.filter { it.toLowerCase().startsWith(mentioning.replace("@", "").toLowerCase()) } - val adapter = ArrayAdapter(context, android.R.layout.simple_list_item_1, - android.R.id.text1, mentions.subList(0, Math.min(mentions.size, 3))) + val mentions = it.filter { + it.toLowerCase(Locale.getDefault()) + .startsWith( + mentioning.replace("@", "").toLowerCase(Locale.getDefault()) + ) + } + val adapter = ArrayAdapter( + context, android.R.layout.simple_list_item_1, + android.R.id.text1, mentions.subList(0, Math.min(mentions.size, 3)) + ) mention?.setAdapter(adapter) } } diff --git a/app/src/main/java/com/fastaccess/ui/widgets/recyclerview/BaseRecyclerAdapter.java b/app/src/main/java/com/fastaccess/ui/widgets/recyclerview/BaseRecyclerAdapter.java index a364590e..405d4636 100644 --- a/app/src/main/java/com/fastaccess/ui/widgets/recyclerview/BaseRecyclerAdapter.java +++ b/app/src/main/java/com/fastaccess/ui/widgets/recyclerview/BaseRecyclerAdapter.java @@ -1,10 +1,10 @@ package com.fastaccess.ui.widgets.recyclerview; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v7.widget.GridLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.support.v7.widget.StaggeredGridLayoutManager; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import androidx.recyclerview.widget.StaggeredGridLayoutManager; import android.view.View; import android.view.ViewGroup; diff --git a/app/src/main/java/com/fastaccess/ui/widgets/recyclerview/BaseViewHolder.java b/app/src/main/java/com/fastaccess/ui/widgets/recyclerview/BaseViewHolder.java index 6f4b3d9a..80a3e5d4 100644 --- a/app/src/main/java/com/fastaccess/ui/widgets/recyclerview/BaseViewHolder.java +++ b/app/src/main/java/com/fastaccess/ui/widgets/recyclerview/BaseViewHolder.java @@ -1,9 +1,9 @@ package com.fastaccess.ui.widgets.recyclerview; -import android.support.annotation.LayoutRes; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v7.widget.RecyclerView; +import androidx.annotation.LayoutRes; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; diff --git a/app/src/main/java/com/fastaccess/ui/widgets/recyclerview/BottomPaddingDecoration.java b/app/src/main/java/com/fastaccess/ui/widgets/recyclerview/BottomPaddingDecoration.java index 056f5a85..f64b5560 100644 --- a/app/src/main/java/com/fastaccess/ui/widgets/recyclerview/BottomPaddingDecoration.java +++ b/app/src/main/java/com/fastaccess/ui/widgets/recyclerview/BottomPaddingDecoration.java @@ -2,11 +2,11 @@ package com.fastaccess.ui.widgets.recyclerview; import android.content.Context; import android.graphics.Rect; -import android.support.annotation.NonNull; -import android.support.v7.widget.GridLayoutManager; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.support.v7.widget.StaggeredGridLayoutManager; +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import androidx.recyclerview.widget.StaggeredGridLayoutManager; import android.view.View; import com.fastaccess.R; @@ -35,7 +35,14 @@ class BottomPaddingDecoration extends RecyclerView.ItemDecoration { super.getItemOffsets(outRect, view, parent, state); int dataSize = state.getItemCount(); int position = parent.getChildAdapterPosition(view); - if (parent.getLayoutManager() instanceof LinearLayoutManager) { + if (parent.getLayoutManager() instanceof GridLayoutManager) { + GridLayoutManager grid = (GridLayoutManager) parent.getLayoutManager(); + if ((dataSize - position) <= grid.getSpanCount()) { + outRect.set(0, 0, 0, bottomPadding); + } else { + outRect.set(0, 0, 0, 0); + } + } else if (parent.getLayoutManager() instanceof LinearLayoutManager) { if (dataSize > 0 && position == dataSize - 1) { outRect.set(0, 0, 0, bottomPadding); } else { @@ -48,13 +55,6 @@ class BottomPaddingDecoration extends RecyclerView.ItemDecoration { } else { outRect.set(0, 0, 0, 0); } - } else if (parent.getLayoutManager() instanceof GridLayoutManager) { - GridLayoutManager grid = (GridLayoutManager) parent.getLayoutManager(); - if ((dataSize - position) <= grid.getSpanCount()) { - outRect.set(0, 0, 0, bottomPadding); - } else { - outRect.set(0, 0, 0, 0); - } } } } \ No newline at end of file diff --git a/app/src/main/java/com/fastaccess/ui/widgets/recyclerview/DynamicRecyclerView.java b/app/src/main/java/com/fastaccess/ui/widgets/recyclerview/DynamicRecyclerView.java index f110d1fa..29b31c04 100644 --- a/app/src/main/java/com/fastaccess/ui/widgets/recyclerview/DynamicRecyclerView.java +++ b/app/src/main/java/com/fastaccess/ui/widgets/recyclerview/DynamicRecyclerView.java @@ -2,12 +2,12 @@ package com.fastaccess.ui.widgets.recyclerview; import android.content.Context; import android.content.res.Resources; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v7.widget.GridLayoutManager; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.support.v7.widget.StaggeredGridLayoutManager; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import androidx.recyclerview.widget.StaggeredGridLayoutManager; import android.util.AttributeSet; import android.view.View; @@ -149,10 +149,10 @@ public class DynamicRecyclerView extends RecyclerView { private boolean canAddDivider() { if (getLayoutManager() != null) { - if (getLayoutManager() instanceof LinearLayoutManager) { - return true; - } else if (getLayoutManager() instanceof GridLayoutManager) { + if (getLayoutManager() instanceof GridLayoutManager) { return ((GridLayoutManager) getLayoutManager()).getSpanCount() == 1; + } else if (getLayoutManager() instanceof LinearLayoutManager) { + return true; } else if (getLayoutManager() instanceof StaggeredGridLayoutManager) { return ((StaggeredGridLayoutManager) getLayoutManager()).getSpanCount() == 1; } diff --git a/app/src/main/java/com/fastaccess/ui/widgets/recyclerview/InsetDividerDecoration.java b/app/src/main/java/com/fastaccess/ui/widgets/recyclerview/InsetDividerDecoration.java index 991ecfc6..17677ee7 100644 --- a/app/src/main/java/com/fastaccess/ui/widgets/recyclerview/InsetDividerDecoration.java +++ b/app/src/main/java/com/fastaccess/ui/widgets/recyclerview/InsetDividerDecoration.java @@ -3,10 +3,10 @@ package com.fastaccess.ui.widgets.recyclerview; import android.graphics.Canvas; import android.graphics.Paint; -import android.support.annotation.ColorInt; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v7.widget.RecyclerView; +import androidx.annotation.ColorInt; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; import android.view.View; /** diff --git a/app/src/main/java/com/fastaccess/ui/widgets/recyclerview/ProgressBarViewHolder.java b/app/src/main/java/com/fastaccess/ui/widgets/recyclerview/ProgressBarViewHolder.java index a34127c0..845cf9b2 100644 --- a/app/src/main/java/com/fastaccess/ui/widgets/recyclerview/ProgressBarViewHolder.java +++ b/app/src/main/java/com/fastaccess/ui/widgets/recyclerview/ProgressBarViewHolder.java @@ -1,6 +1,6 @@ package com.fastaccess.ui.widgets.recyclerview; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import android.view.View; import android.view.ViewGroup; diff --git a/app/src/main/java/com/fastaccess/ui/widgets/recyclerview/layout_manager/GridManager.java b/app/src/main/java/com/fastaccess/ui/widgets/recyclerview/layout_manager/GridManager.java index 9f3cc68f..5da83d04 100644 --- a/app/src/main/java/com/fastaccess/ui/widgets/recyclerview/layout_manager/GridManager.java +++ b/app/src/main/java/com/fastaccess/ui/widgets/recyclerview/layout_manager/GridManager.java @@ -1,8 +1,8 @@ package com.fastaccess.ui.widgets.recyclerview.layout_manager; import android.content.Context; -import android.support.v7.widget.GridLayoutManager; -import android.support.v7.widget.RecyclerView; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; import android.util.AttributeSet; /** diff --git a/app/src/main/java/com/fastaccess/ui/widgets/recyclerview/layout_manager/LinearManager.java b/app/src/main/java/com/fastaccess/ui/widgets/recyclerview/layout_manager/LinearManager.java index 2d830d36..60806a83 100644 --- a/app/src/main/java/com/fastaccess/ui/widgets/recyclerview/layout_manager/LinearManager.java +++ b/app/src/main/java/com/fastaccess/ui/widgets/recyclerview/layout_manager/LinearManager.java @@ -1,8 +1,8 @@ package com.fastaccess.ui.widgets.recyclerview.layout_manager; import android.content.Context; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; import android.util.AttributeSet; /** diff --git a/app/src/main/java/com/fastaccess/ui/widgets/recyclerview/layout_manager/StaggeredManager.java b/app/src/main/java/com/fastaccess/ui/widgets/recyclerview/layout_manager/StaggeredManager.java index 46a75430..0f866dda 100644 --- a/app/src/main/java/com/fastaccess/ui/widgets/recyclerview/layout_manager/StaggeredManager.java +++ b/app/src/main/java/com/fastaccess/ui/widgets/recyclerview/layout_manager/StaggeredManager.java @@ -1,8 +1,8 @@ package com.fastaccess.ui.widgets.recyclerview.layout_manager; import android.content.Context; -import android.support.v7.widget.RecyclerView; -import android.support.v7.widget.StaggeredGridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import androidx.recyclerview.widget.StaggeredGridLayoutManager; import android.util.AttributeSet; /** diff --git a/app/src/main/java/com/fastaccess/ui/widgets/recyclerview/scroll/InfiniteScroll.java b/app/src/main/java/com/fastaccess/ui/widgets/recyclerview/scroll/InfiniteScroll.java index 7a55a496..c197ce47 100644 --- a/app/src/main/java/com/fastaccess/ui/widgets/recyclerview/scroll/InfiniteScroll.java +++ b/app/src/main/java/com/fastaccess/ui/widgets/recyclerview/scroll/InfiniteScroll.java @@ -1,9 +1,9 @@ package com.fastaccess.ui.widgets.recyclerview.scroll; -import android.support.v7.widget.GridLayoutManager; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.support.v7.widget.StaggeredGridLayoutManager; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import androidx.recyclerview.widget.StaggeredGridLayoutManager; import com.fastaccess.ui.widgets.recyclerview.BaseRecyclerAdapter; diff --git a/app/src/main/java/com/fastaccess/ui/widgets/recyclerview/scroll/RecyclerViewFastScroller.java b/app/src/main/java/com/fastaccess/ui/widgets/recyclerview/scroll/RecyclerViewFastScroller.java index f16a7e69..a5a2842b 100755 --- a/app/src/main/java/com/fastaccess/ui/widgets/recyclerview/scroll/RecyclerViewFastScroller.java +++ b/app/src/main/java/com/fastaccess/ui/widgets/recyclerview/scroll/RecyclerViewFastScroller.java @@ -3,12 +3,12 @@ package com.fastaccess.ui.widgets.recyclerview.scroll; import android.annotation.SuppressLint; import android.app.Activity; import android.content.Context; -import android.support.annotation.NonNull; -import android.support.design.widget.AppBarLayout; -import android.support.v7.widget.GridLayoutManager; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.support.v7.widget.StaggeredGridLayoutManager; +import androidx.annotation.NonNull; +import com.google.android.material.appbar.AppBarLayout; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import androidx.recyclerview.widget.StaggeredGridLayoutManager; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.MotionEvent; diff --git a/app/src/main/java/com/prettifier/pretty/NestedWebView.java b/app/src/main/java/com/prettifier/pretty/NestedWebView.java index 500f3023..2d51d69d 100644 --- a/app/src/main/java/com/prettifier/pretty/NestedWebView.java +++ b/app/src/main/java/com/prettifier/pretty/NestedWebView.java @@ -3,11 +3,11 @@ package com.prettifier.pretty; import android.annotation.SuppressLint; import android.content.Context; import android.os.Build; -import android.support.annotation.RequiresApi; -import android.support.v4.view.MotionEventCompat; -import android.support.v4.view.NestedScrollingChild; -import android.support.v4.view.NestedScrollingChildHelper; -import android.support.v4.view.ViewCompat; +import androidx.annotation.RequiresApi; +import androidx.core.view.MotionEventCompat; +import androidx.core.view.NestedScrollingChild; +import androidx.core.view.NestedScrollingChildHelper; +import androidx.core.view.ViewCompat; import android.util.AttributeSet; import android.view.MotionEvent; import android.webkit.WebView; diff --git a/app/src/main/java/com/prettifier/pretty/PrettifyWebView.java b/app/src/main/java/com/prettifier/pretty/PrettifyWebView.java index bcfe5c55..d7a8451f 100644 --- a/app/src/main/java/com/prettifier/pretty/PrettifyWebView.java +++ b/app/src/main/java/com/prettifier/pretty/PrettifyWebView.java @@ -5,8 +5,8 @@ import android.content.Context; import android.content.res.TypedArray; import android.net.Uri; import android.os.Build; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; diff --git a/app/src/main/java/com/prettifier/pretty/helper/CodeThemesHelper.java b/app/src/main/java/com/prettifier/pretty/helper/CodeThemesHelper.java index f00c3cc6..87974e6f 100644 --- a/app/src/main/java/com/prettifier/pretty/helper/CodeThemesHelper.java +++ b/app/src/main/java/com/prettifier/pretty/helper/CodeThemesHelper.java @@ -1,6 +1,6 @@ package com.prettifier.pretty.helper; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import com.annimon.stream.Stream; import com.fastaccess.App; diff --git a/app/src/main/java/com/prettifier/pretty/helper/GithubHelper.java b/app/src/main/java/com/prettifier/pretty/helper/GithubHelper.java index 97e44a6d..73859e42 100644 --- a/app/src/main/java/com/prettifier/pretty/helper/GithubHelper.java +++ b/app/src/main/java/com/prettifier/pretty/helper/GithubHelper.java @@ -2,8 +2,8 @@ package com.prettifier.pretty.helper; import android.content.Context; import android.net.Uri; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import com.fastaccess.data.dao.NameParser; import com.fastaccess.helper.PrefGetter; @@ -26,7 +26,7 @@ public class GithubHelper { @Nullable String baseUrl, boolean dark, boolean isWiki, boolean replace) { if (baseUrl == null) { - return mergeContent(context, source, dark); + return mergeContent(context, Jsoup.parse(source).html(), dark); } else { return mergeContent(context, parseReadme(source, baseUrl, isWiki), dark); } @@ -122,7 +122,7 @@ public class GithubHelper { " \n" + "\n" + "\n" + - "\n" + Jsoup.parse(source).body().html() + + "\n" + source + "\n\n" + "\n" + "\n" + diff --git a/app/src/main/java/com/prettifier/pretty/helper/PrettifyHelper.java b/app/src/main/java/com/prettifier/pretty/helper/PrettifyHelper.java index 7f3087f3..3cdf1f4a 100644 --- a/app/src/main/java/com/prettifier/pretty/helper/PrettifyHelper.java +++ b/app/src/main/java/com/prettifier/pretty/helper/PrettifyHelper.java @@ -1,6 +1,6 @@ package com.prettifier.pretty.helper; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; /** * Created by Kosh on 25 Dec 2016, 9:12 PM diff --git a/app/src/main/res/drawable/ic_back.xml b/app/src/main/res/drawable/ic_back.xml index 5b537948..75ba12d8 100644 --- a/app/src/main/res/drawable/ic_back.xml +++ b/app/src/main/res/drawable/ic_back.xml @@ -1,6 +1,7 @@ + + + + diff --git a/app/src/main/res/drawable/ic_person.xml b/app/src/main/res/drawable/ic_person.xml new file mode 100644 index 00000000..cd59a3e6 --- /dev/null +++ b/app/src/main/res/drawable/ic_person.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_rocket.xml b/app/src/main/res/drawable/ic_rocket.xml new file mode 100644 index 00000000..ed8825cc --- /dev/null +++ b/app/src/main/res/drawable/ic_rocket.xml @@ -0,0 +1,10 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layouts/main_layouts/layout-land/bottom_fab.xml b/app/src/main/res/layouts/main_layouts/layout-land/bottom_fab.xml index 2a5fb4b0..f543c080 100644 --- a/app/src/main/res/layouts/main_layouts/layout-land/bottom_fab.xml +++ b/app/src/main/res/layouts/main_layouts/layout-land/bottom_fab.xml @@ -1,5 +1,5 @@ - - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layouts/main_layouts/layout-land/header_title_with_toolbar.xml b/app/src/main/res/layouts/main_layouts/layout-land/header_title_with_toolbar.xml index bb6ef69f..c41fbd76 100644 --- a/app/src/main/res/layouts/main_layouts/layout-land/header_title_with_toolbar.xml +++ b/app/src/main/res/layouts/main_layouts/layout-land/header_title_with_toolbar.xml @@ -1,5 +1,5 @@ - - - + - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layouts/main_layouts/layout-land/repo_file_header_layout.xml b/app/src/main/res/layouts/main_layouts/layout-land/repo_file_header_layout.xml index d624a675..079958ee 100644 --- a/app/src/main/res/layouts/main_layouts/layout-land/repo_file_header_layout.xml +++ b/app/src/main/res/layouts/main_layouts/layout-land/repo_file_header_layout.xml @@ -55,14 +55,18 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" - android:layout_marginEnd="@dimen/avatar_margin_end" - android:layout_marginStart="@dimen/avatar_margin" android:background="?selectableItemBackgroundBorderless" android:contentDescription="@string/home" android:padding="@dimen/spacing_micro" android:src="@drawable/ic_home"/> - + + diff --git a/app/src/main/res/layouts/main_layouts/layout-sw600dp/bottom_fab.xml b/app/src/main/res/layouts/main_layouts/layout-sw600dp/bottom_fab.xml index 635135e9..297e804b 100644 --- a/app/src/main/res/layouts/main_layouts/layout-sw600dp/bottom_fab.xml +++ b/app/src/main/res/layouts/main_layouts/layout-sw600dp/bottom_fab.xml @@ -1,5 +1,5 @@ - - - - + - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layouts/main_layouts/layout-sw600dp/repo_file_header_layout.xml b/app/src/main/res/layouts/main_layouts/layout-sw600dp/repo_file_header_layout.xml index 0b087710..48113abf 100644 --- a/app/src/main/res/layouts/main_layouts/layout-sw600dp/repo_file_header_layout.xml +++ b/app/src/main/res/layouts/main_layouts/layout-sw600dp/repo_file_header_layout.xml @@ -57,14 +57,18 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" - android:layout_marginEnd="@dimen/avatar_margin_end" - android:layout_marginStart="@dimen/avatar_margin" android:background="?selectableItemBackgroundBorderless" android:contentDescription="@string/home" android:padding="@dimen/spacing_micro" android:src="@drawable/ic_home"/> - + + diff --git a/app/src/main/res/layouts/main_layouts/layout/accounts_menu_layout.xml b/app/src/main/res/layouts/main_layouts/layout/accounts_menu_layout.xml index c992b920..90eb1c3f 100644 --- a/app/src/main/res/layouts/main_layouts/layout/accounts_menu_layout.xml +++ b/app/src/main/res/layouts/main_layouts/layout/accounts_menu_layout.xml @@ -1,5 +1,5 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layouts/main_layouts/layout/activity_banner_info.xml b/app/src/main/res/layouts/main_layouts/layout/activity_banner_info.xml deleted file mode 100644 index 03160511..00000000 --- a/app/src/main/res/layouts/main_layouts/layout/activity_banner_info.xml +++ /dev/null @@ -1,66 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - -