Merge branch 'development' into patch-1

This commit is contained in:
Kosh Sergani 2019-12-26 09:01:31 +01:00 committed by GitHub
commit 7f394dc9cb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
618 changed files with 2691 additions and 3494 deletions

2
.gitignore vendored
View File

@ -3,7 +3,7 @@
/local.properties
.DS_Store
/build
/gradle.properties
/release_gradle.properties
/.idea/
/app/google-services.json
/app/build/

View File

@ -1,46 +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
webhooks: https://www.travisbuddy.com/
on_success: never

View File

@ -1,9 +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 {
@ -11,7 +11,7 @@ buildProperties {
file rootProject.file('debug_gradle.properties')
}
secrets {
file rootProject.file('gradle.properties')
file rootProject.file('release_gradle.properties')
}
}
@ -24,14 +24,13 @@ android {
storePassword((buildProperties.secrets['android_store_password'] | buildProperties.notThere['android_store_password']).string)
}
}
compileSdkVersion 27
buildToolsVersion '27.0.3'
compileSdkVersion 29
defaultConfig {
applicationId "com.fastaccess.github"
minSdkVersion 21
targetSdkVersion 27
versionCode 467
versionName "4.6.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
@ -39,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
@ -90,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' }
@ -118,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.10'
implementation 'io.reactivex.rxjava2:rxandroid:2.0.2'
implementation 'com.squareup.okhttp3:logging-interceptor:3.10.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'
@ -153,39 +156,34 @@ 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.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'
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 "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: 'com.google.gms.google-services'

View File

@ -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<View> textInputLayoutHasHint(final String expectedErrorText) {
return new TypeSafeMatcher<View>() {
@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<View> textInputLayoutHasError(final String expectedErrorText) {
return new TypeSafeMatcher<View>() {
@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<View> bottomNavSelection(@IntRange(from = 0, to = 3) final int position) {
return new TypeSafeMatcher<View>() {
@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<View> getConstraints() {
return isAssignableFrom(BottomNavigation.class);
}
@Override public String getDescription() {
return "BottomNavigation";
}
@Override public void perform(UiController uiController, View view) {
((BottomNavigation) view).setSelectedIndex(index, false);
}
};
}
}

View File

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

View File

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

View File

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

View File

@ -1,22 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest package="com.fastaccess"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:installLocation="auto">
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.fastaccess"
android:installLocation="auto">
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="com.android.vending.BILLING"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="com.android.vending.BILLING" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission
android:name="android.permission.READ_PHONE_STATE"
tools:node="remove"/>
<meta-data
android:name="com.google.firebase.messaging.default_notification_icon"
android:resource="@drawable/ic_notification"/>
tools:node="remove" />
<application
android:name=".App"
@ -33,15 +29,15 @@
<activity
android:name=".ui.modules.main.donation.CheckPurchaseActivity"
android:configChanges="keyboard|orientation|screenSize"
android:theme="@style/ThemeTranslucent"/>
android:theme="@style/ThemeTranslucent" />
<activity
android:name=".ui.modules.main.MainActivity"
android:launchMode="singleTask"
android:theme="@style/SplashTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER"/>
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
@ -52,14 +48,14 @@
android:screenOrientation="portrait"
android:theme="@style/LoginTheme">
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="login"
android:scheme="fasthub"/>
android:scheme="fasthub" />
</intent-filter>
</activity>
<activity
@ -68,14 +64,14 @@
android:label="@string/app_name"
android:launchMode="singleTop"
android:screenOrientation="portrait"
android:theme="@style/LoginTheme"/>
android:theme="@style/LoginTheme" />
<activity
android:name=".ui.modules.user.UserPagerActivity"
android:label="@string/user"
android:parentActivityName=".ui.modules.main.MainActivity">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".ui.modules.main.MainActivity"/>
android:value=".ui.modules.main.MainActivity" />
</activity>
<activity
android:name=".ui.modules.repos.RepoPagerActivity"
@ -83,7 +79,7 @@
android:parentActivityName=".ui.modules.main.MainActivity">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".ui.modules.main.MainActivity"/>
android:value=".ui.modules.main.MainActivity" />
</activity>
<activity
android:name=".ui.modules.repos.issues.issue.details.IssuePagerActivity"
@ -92,19 +88,19 @@
android:windowSoftInputMode="stateAlwaysHidden">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".ui.modules.repos.RepoPagerActivity"/>
android:value=".ui.modules.repos.RepoPagerActivity" />
</activity>
<activity
android:name=".ui.modules.repos.issues.create.CreateIssueActivity"
android:configChanges="keyboard|orientation|screenSize"
android:label="@string/create_issue"/>
android:label="@string/create_issue" />
<activity
android:name=".ui.modules.repos.pull_requests.pull_request.details.PullRequestPagerActivity"
android:label="@string/pull_request"
android:parentActivityName=".ui.modules.repos.RepoPagerActivity">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".ui.modules.repos.RepoPagerActivity"/>
android:value=".ui.modules.repos.RepoPagerActivity" />
</activity>
<activity
android:name=".ui.modules.repos.code.commit.details.CommitPagerActivity"
@ -113,21 +109,21 @@
android:windowSoftInputMode="stateAlwaysHidden">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".ui.modules.repos.RepoPagerActivity"/>
android:value=".ui.modules.repos.RepoPagerActivity" />
</activity>
<activity
android:name=".ui.modules.code.CodeViewerActivity"
android:configChanges="keyboard|orientation|screenSize"
android:label="@string/viewer"/>
android:label="@string/viewer" />
<activity
android:name=".ui.modules.editor.EditorActivity"
android:configChanges="keyboard|orientation|screenSize"
android:label="@string/markdown"
android:windowSoftInputMode="adjustResize"/>
android:windowSoftInputMode="adjustResize" />
<activity
android:name=".ui.modules.gists.create.CreateGistActivity"
android:configChanges="keyboard|orientation|screenSize"
android:label="@string/create_gist"/>
android:label="@string/create_gist" />
<activity
android:name=".ui.modules.gists.gist.GistActivity"
android:label="@string/gist"
@ -135,14 +131,14 @@
android:windowSoftInputMode="stateAlwaysHidden">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".ui.modules.main.MainActivity"/>
android:value=".ui.modules.main.MainActivity" />
</activity>
<activity
android:name=".ui.modules.search.SearchActivity"
android:parentActivityName=".ui.modules.main.MainActivity">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".ui.modules.main.MainActivity"/>
android:value=".ui.modules.main.MainActivity" />
</activity>
<activity
android:name=".ui.modules.notification.NotificationActivity"
@ -150,48 +146,48 @@
android:parentActivityName=".ui.modules.main.MainActivity">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".ui.modules.main.MainActivity"/>
android:value=".ui.modules.main.MainActivity" />
</activity>
<activity
android:name=".ui.modules.about.FastHubAboutActivity"
android:theme="@style/AppTheme.AboutActivity.Light"/>
android:theme="@style/AppTheme.AboutActivity.Light" />
<activity
android:name=".ui.modules.pinned.PinnedReposActivity"
android:label="@string/pinned"/>
android:label="@string/pinned" />
<activity
android:name=".ui.modules.gists.GistsListActivity"
android:label="@string/public_gists"/>
<activity android:name=".ui.modules.profile.org.teams.details.TeamPagerActivity"/>
android:label="@string/public_gists" />
<activity android:name=".ui.modules.profile.org.teams.details.TeamPagerActivity" />
<activity
android:name=".ui.modules.repos.code.files.activity.RepoFilesActivity"
android:parentActivityName=".ui.modules.repos.RepoPagerActivity">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".ui.modules.repos.RepoPagerActivity"/>
android:value=".ui.modules.repos.RepoPagerActivity" />
</activity>
<activity android:name=".ui.modules.filter.issues.FilterIssuesActivity"/>
<activity android:name=".ui.modules.main.donation.DonationActivity"/>
<activity android:name=".ui.modules.repos.code.commit.viewer.FullCommitFileActivity"/>
<activity android:name=".ui.modules.filter.issues.FilterIssuesActivity" />
<activity android:name=".ui.modules.main.donation.DonationActivity" />
<activity android:name=".ui.modules.repos.code.commit.viewer.FullCommitFileActivity" />
<activity
android:name=".ui.modules.search.repos.files.SearchFileActivity"
android:parentActivityName=".ui.modules.repos.RepoPagerActivity">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".ui.modules.repos.RepoPagerActivity"/>
android:value=".ui.modules.repos.RepoPagerActivity" />
</activity>
<activity
android:name=".ui.modules.settings.SettingsActivity"
android:configChanges="keyboard|orientation|screenSize"/>
android:configChanges="keyboard|orientation|screenSize" />
<activity
android:name=".ui.modules.settings.category.SettingsCategoryActivity"
android:configChanges="keyboard|orientation|screenSize"/>
android:configChanges="keyboard|orientation|screenSize" />
<activity
android:name=".ui.modules.repos.code.releases.ReleasesListActivity"
android:label="@string/releases"
android:parentActivityName=".ui.modules.repos.RepoPagerActivity">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".ui.modules.repos.RepoPagerActivity"/>
android:value=".ui.modules.repos.RepoPagerActivity" />
</activity>
<activity
android:name=".ui.modules.trending.TrendingActivity"
@ -200,41 +196,41 @@
android:windowSoftInputMode="stateAlwaysHidden">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".ui.modules.main.MainActivity"/>
android:value=".ui.modules.main.MainActivity" />
</activity>
<activity android:name=".ui.modules.theme.ThemeActivity"/>
<activity android:name=".ui.modules.theme.ThemeActivity" />
<activity
android:name=".ui.modules.theme.code.ThemeCodeActivity"
android:label="@string/theme_title"/>
android:label="@string/theme_title" />
<activity
android:name=".ui.modules.main.donation.DonateActivity"
android:configChanges="keyboard|orientation|screenSize"
android:theme="@style/ThemeTranslucent"/>
android:theme="@style/ThemeTranslucent" />
<activity
android:name=".ui.modules.repos.wiki.WikiActivity"
android:label="@string/gollum"
android:parentActivityName=".ui.modules.repos.RepoPagerActivity">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".ui.modules.repos.RepoPagerActivity"/>
android:value=".ui.modules.repos.RepoPagerActivity" />
</activity>
<activity
android:name=".ui.modules.main.premium.PremiumActivity"
android:configChanges="keyboard|orientation|screenSize"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateAlwaysHidden"/>
android:windowSoftInputMode="stateAlwaysHidden" />
<activity
android:name=".ui.modules.repos.git.EditRepoFileActivity"
android:configChanges="keyboard|orientation|screenSize"
android:label="@string/markdown"
android:windowSoftInputMode="adjustResize"/>
android:windowSoftInputMode="adjustResize" />
<activity
android:name=".ui.modules.repos.code.commit.history.FileCommitHistoryActivity"
android:label="@string/commits"
android:parentActivityName=".ui.modules.repos.RepoPagerActivity">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".ui.modules.repos.RepoPagerActivity"/>
android:value=".ui.modules.repos.RepoPagerActivity" />
</activity>
<activity
android:name=".ui.modules.repos.projects.details.ProjectPagerActivity"
@ -242,7 +238,7 @@
android:parentActivityName=".ui.modules.repos.RepoPagerActivity">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".ui.modules.repos.RepoPagerActivity"/>
android:value=".ui.modules.repos.RepoPagerActivity" />
</activity>
<activity
android:name=".ui.modules.profile.org.project.OrgProjectActivity"
@ -250,16 +246,16 @@
android:parentActivityName=".ui.modules.user.UserPagerActivity">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".ui.modules.user.UserPagerActivity"/>
android:value=".ui.modules.user.UserPagerActivity" />
</activity>
<activity android:name=".ui.modules.main.playstore.PlayStoreWarningActivity"/>
<activity android:name=".ui.modules.main.playstore.PlayStoreWarningActivity" />
<activity
android:name=".ui.modules.repos.pull_requests.pull_request.details.files.fullscreen.FullScreenFileChangeActivity"
android:configChanges="keyboard|orientation|screenSize"/>
android:configChanges="keyboard|orientation|screenSize" />
<activity android:name=".ui.modules.search.SearchUserActivity"/>
<activity android:name=".ui.modules.search.SearchUserActivity" />
<activity
android:name=".ui.modules.parser.LinksParserActivity"
@ -267,37 +263,37 @@
android:noHistory="true"
android:theme="@android:style/Theme.NoDisplay">
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<action android:name="android.intent.action.VIEW" />
<data
android:host="github.com"
android:scheme="http"/>
android:scheme="http" />
<data
android:host="github.com"
android:scheme="https"/>
android:scheme="https" />
<data
android:host="gist.github.com"
android:scheme="http"/>
android:scheme="http" />
<data
android:host="gist.github.com"
android:scheme="https"/>
android:scheme="https" />
<data
android:host="raw.githubusercontent.com"
android:scheme="https"/>
android:scheme="https" />
<data
android:host="gist.githubusercontent.com"
android:scheme="https"/>
<data android:pathPattern=".*"/>
android:scheme="https" />
<data android:pathPattern=".*" />
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEND"/>
<action android:name="android.intent.action.SEND" />
<data android:mimeType="text/plain"/>
<data android:mimeType="text/plain" />
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
@ -305,25 +301,29 @@
android:name=".provider.tasks.notification.NotificationSchedulerJobTask"
android:exported="false">
<intent-filter>
<action android:name="com.firebase.jobdispatcher.ACTION_EXECUTE"/>
<action android:name="com.firebase.jobdispatcher.ACTION_EXECUTE" />
</intent-filter>
</service>
<service android:name=".provider.tasks.notification.ReadNotificationService"/>
<service android:name=".provider.tasks.git.GithubActionService"/>
<service android:name=".provider.tasks.git.ReactionService"/>
<service android:name=".provider.tasks.slack.SlackInvitationService"/>
<service android:name=".provider.tasks.version.CheckVersionService"/>
<service android:name=".provider.tasks.notification.ReadNotificationService" />
<service android:name=".provider.tasks.git.GithubActionService" />
<service android:name=".provider.tasks.git.ReactionService" />
<service android:name=".provider.tasks.slack.SlackInvitationService" />
<service android:name=".provider.tasks.version.CheckVersionService" />
<service
android:name=".provider.fcm.PushNotificationService"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
<meta-data
android:name="io.fabric.ApiKey"
android:value="6ed82b6e0756853d7d782a3f547f84f9ecba217e"/>
android:value="6ed82b6e0756853d7d782a3f547f84f9ecba217e" />
<meta-data
android:name="com.google.firebase.messaging.default_notification_icon"
android:resource="@drawable/ic_notification" />
</application>
</manifest>

View File

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

View File

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

View File

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

View File

@ -0,0 +1,8 @@
package com.fastaccess
import com.bumptech.glide.annotation.GlideModule
import com.bumptech.glide.module.AppGlideModule
@GlideModule
class GlideModule : AppGlideModule()

View File

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

View File

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

View File

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

View File

@ -1,31 +1,31 @@
package com.fastaccess.data.dao
import android.os.Parcel
import com.fastaccess.helper.KotlinParcelable
import com.fastaccess.helper.parcelableCreator
import com.fastaccess.helper.readBoolean
import com.fastaccess.helper.writeBoolean
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) : KotlinParcelable {
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.readBoolean())
parcel.readString() ?: "",
parcel.readString() ?: "",
parcel.readString() ?: "",
parcel.readString() ?: "",
parcel.readString() ?: "",
parcel.readString() ?: "",
parcel.readString() ?: "",
parcel.readBooleanCompat()
)
override fun writeToParcel(dest: Parcel, flags: Int) = with(dest) {
writeString(login)
@ -35,7 +35,7 @@ data class EditRepoFileModel(val login: String,
writeString(sha)
writeString(contentUrl)
writeString(fileName)
writeBoolean(isEdit)
writeBooleanCompat(isEdit)
}
companion object {

View File

@ -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<String, String>?): 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
}
}
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -5,23 +5,24 @@ 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) : KotlinParcelable {
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 = 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 writeToParcel(dest: Parcel, flags: Int) = with(dest) {

View File

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

View File

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

View File

@ -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<Event> events, @android.support.annotation.Nullable String user) {
public static Disposable save(@androidx.annotation.Nullable List<Event> events, @androidx.annotation.Nullable String user) {
return RxHelper.getSingle(Single.fromPublisher(s -> {
try {
Login login = Login.getUser();

View File

@ -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<FastHubNotification> getNotifications() {
@NonNull public static Observable<FastHubNotification> getNotifications() {
return App.getInstance().getDataStore()
.select(FastHubNotification.class)
.orderBy(FastHubNotification.DATE.desc())

View File

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

View File

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

View File

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

View File

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

View File

@ -72,7 +72,7 @@ import lombok.NoArgsConstructor;
})).subscribe(o -> {/*do nothing*/}, Throwable::printStackTrace);
}
public static Disposable save(@android.support.annotation.Nullable List<Notification> models) {
public static Disposable save(@androidx.annotation.Nullable List<Notification> 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<Boolean> saveAsSingle(@android.support.annotation.Nullable List<Notification> models) {
public static Single<Boolean> saveAsSingle(@androidx.annotation.Nullable List<Notification> models) {
if (models == null || models.isEmpty()) {
return Single.just(true);
}

View File

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

View File

@ -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.GistConverter;

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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<ReactionsModel> reaction;
private List<PullRequestReviewModel> 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<PullRequestTimelineQuery.Edge2> edges = pullRequestReview.comments().edges();
if (edges != null && !edges.isEmpty()) {
List<PullRequestReviewModel> 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<ReactionsModel> getReaction() {
return reaction;
}
public void setReaction(List<ReactionsModel> reaction) {
this.reaction = reaction;
}
public List<PullRequestReviewModel> getComments() {
return comments;
}
public void setComments(List<PullRequestReviewModel> 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;
}
}

View File

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

View File

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

View File

@ -1,6 +1,6 @@
package com.fastaccess.data.dao.types;
import android.support.annotation.DrawableRes;
import androidx.annotation.DrawableRes;
import com.fastaccess.R;

View File

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

View File

@ -1,6 +1,6 @@
package com.fastaccess.data.dao.types;
import android.support.annotation.StringRes;
import androidx.annotation.StringRes;
import com.fastaccess.R;

View File

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

View File

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

View File

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

View File

@ -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<String, String>?): 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
}
}
}

View File

@ -7,16 +7,19 @@ 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<WikiSideBarModel>) : KotlinParcelable {
data class WikiContentModel(
val content: String? = null,
private val footer: String? = null,
val sidebar: List<WikiSideBarModel>
) : KotlinParcelable {
companion object {
@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 writeToParcel(dest: Parcel, flags: Int) = with(dest) {

View File

@ -7,14 +7,17 @@ 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) : KotlinParcelable {
data class WikiSideBarModel(
val title: String? = null,
val link: String? = null
) : KotlinParcelable {
companion object {
@JvmField val CREATOR = parcelableCreator(::WikiSideBarModel)
}
constructor(source: Parcel) : this(
source.readString(),
source.readString()
source.readString(),
source.readString()
)
override fun writeToParcel(dest: Parcel, flags: Int) = with(dest) {

View File

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

View File

@ -1,6 +1,6 @@
package com.fastaccess.data.service;
import android.support.annotation.Nullable;
import androidx.annotation.Nullable;
import com.fastaccess.data.dao.ImgurReponseModel;

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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<String>
@GET("{lan}") fun getTrending(@Path("lan") lan: String?, @Query("since") since: String?): Observable<Response<String>>
@GET("{path}") fun getWiki(@Path(value = "path", encoded = true) path: String?): Observable<String>
}

View File

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

View File

@ -12,15 +12,15 @@ 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;

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -13,6 +13,6 @@ inline fun <reified T> parcelableCreator(crossinline create: (Parcel) -> T) = ob
override fun newArray(size: Int) = arrayOfNulls<T>(size)
}
fun Parcel.readBoolean() = readInt() != 0
fun Parcel.readBooleanCompat() = readInt() != 0
fun Parcel.writeBoolean(value: Boolean) = writeInt(if (value) 1 else 0)
fun Parcel.writeBooleanCompat(value: Boolean) = writeInt(if (value) 1 else 0)

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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<String, LanguageColorModel> 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;
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -4,11 +4,14 @@ 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 androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import android.text.TextUtils;
import android.widget.Toast;
import com.crashlytics.android.Crashlytics;
import com.fastaccess.App;
import com.fastaccess.BuildConfig;
import com.fastaccess.R;
@ -91,31 +94,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);
String authToken = isEnterprise ? PrefGetter.getEnterpriseToken() : PrefGetter.getToken();
if (!TextUtils.isEmpty(authToken)) {
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);
}
}

View File

@ -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<ResponseBody, String> {
public static class StringResponseConverter implements Converter<ResponseBody, String> {
@Override public String convert(@NonNull ResponseBody value) throws IOException {
return value.string();
}

View File

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

Some files were not shown because too many files have changed in this diff Show More