mirror of
https://github.com/sudoxnym/habitica-android.git
synced 2026-07-13 17:51:57 +00:00
Fix ktlint setup
This commit is contained in:
parent
890345ae49
commit
ddd7927c4f
238 changed files with 1264 additions and 963 deletions
128
.github/workflows/android.yml
vendored
128
.github/workflows/android.yml
vendored
|
|
@ -2,14 +2,12 @@ name: Android CI
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches: [ develop ]
|
branches: [ develop, release ]
|
||||||
pull_request:
|
pull_request:
|
||||||
branches: [ develop ]
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
- name: set up JDK 11
|
- name: set up JDK 11
|
||||||
|
|
@ -18,29 +16,17 @@ jobs:
|
||||||
java-version: '11'
|
java-version: '11'
|
||||||
distribution: 'adopt'
|
distribution: 'adopt'
|
||||||
cache: gradle
|
cache: gradle
|
||||||
|
- name: Prepare
|
||||||
|
run: ./.github/actions/prepare-run
|
||||||
|
- name: Validate Gradle wrapper
|
||||||
|
uses: gradle/wrapper-validation-action
|
||||||
|
- name: Run with Gradle
|
||||||
|
uses: gradle/gradle-build-action
|
||||||
|
with:
|
||||||
|
arguments: assembleProdDebug -PdisablePreDex
|
||||||
|
|
||||||
- name: Grant execute permission for gradlew
|
unit-test:
|
||||||
run: chmod +x gradlew
|
|
||||||
- name: copy properties file
|
|
||||||
uses: canastro/copy-file-action@master
|
|
||||||
with:
|
|
||||||
source: "habitica.properties.example"
|
|
||||||
target: "habitica.properties"
|
|
||||||
- name: copy resources file
|
|
||||||
uses: canastro/copy-file-action@master
|
|
||||||
with:
|
|
||||||
source: "habitica.resources.example"
|
|
||||||
target: "habitica.resources"
|
|
||||||
- name: copy google services file
|
|
||||||
uses: canastro/copy-file-action@master
|
|
||||||
with:
|
|
||||||
source: "Habitica/google-services.json.example"
|
|
||||||
target: "Habitica/google-services.json"
|
|
||||||
- name: Build with Gradle
|
|
||||||
run: ./gradlew assembleProdDebug -PdisablePreDex
|
|
||||||
test:
|
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
- name: set up JDK 11
|
- name: set up JDK 11
|
||||||
|
|
@ -49,28 +35,36 @@ jobs:
|
||||||
java-version: '11'
|
java-version: '11'
|
||||||
distribution: 'adopt'
|
distribution: 'adopt'
|
||||||
cache: gradle
|
cache: gradle
|
||||||
- name: Grant execute permission for gradlew
|
- name: Prepare
|
||||||
run: chmod +x gradlew
|
run: ./.github/actions/prepare-run
|
||||||
- name: copy properties file
|
- name: Validate Gradle wrapper
|
||||||
uses: canastro/copy-file-action@master
|
uses: gradle/wrapper-validation-action
|
||||||
|
- name: Run with Gradle
|
||||||
|
uses: gradle/gradle-build-action
|
||||||
with:
|
with:
|
||||||
source: "habitica.properties.example"
|
arguments: testProdDebugUnitTest
|
||||||
target: "habitica.properties"
|
|
||||||
- name: copy resources file
|
ui-test:
|
||||||
uses: canastro/copy-file-action@master
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- name: set up JDK 11
|
||||||
|
uses: actions/setup-java@v2
|
||||||
with:
|
with:
|
||||||
source: "habitica.resources.example"
|
java-version: '11'
|
||||||
target: "habitica.resources"
|
distribution: 'adopt'
|
||||||
- name: copy google services file
|
cache: gradle
|
||||||
uses: canastro/copy-file-action@master
|
- name: Prepare
|
||||||
|
run: ./.github/actions/prepare-run
|
||||||
|
- name: Validate Gradle wrapper
|
||||||
|
uses: gradle/wrapper-validation-action
|
||||||
|
- name: Run with Gradle
|
||||||
|
uses: gradle/gradle-build-action
|
||||||
with:
|
with:
|
||||||
source: "Habitica/google-services.json.example"
|
arguments: testProdDebugUnitTest
|
||||||
target: "Habitica/google-services.json"
|
|
||||||
- name: Run Tests
|
|
||||||
run: ./gradlew testProdDebugUnitTest
|
|
||||||
lint:
|
lint:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
- name: set up JDK 11
|
- name: set up JDK 11
|
||||||
|
|
@ -79,28 +73,17 @@ jobs:
|
||||||
java-version: '11'
|
java-version: '11'
|
||||||
distribution: 'adopt'
|
distribution: 'adopt'
|
||||||
cache: gradle
|
cache: gradle
|
||||||
- name: copy properties file
|
- name: Prepare
|
||||||
uses: canastro/copy-file-action@master
|
run: ./.github/actions/prepare-run
|
||||||
|
- name: Validate Gradle wrapper
|
||||||
|
uses: gradle/wrapper-validation-action
|
||||||
|
- name: Run with Gradle
|
||||||
|
uses: gradle/gradle-build-action
|
||||||
with:
|
with:
|
||||||
source: "habitica.properties.example"
|
arguments: ktlint
|
||||||
target: "habitica.properties"
|
|
||||||
- name: copy resources file
|
|
||||||
uses: canastro/copy-file-action@master
|
|
||||||
with:
|
|
||||||
source: "habitica.resources.example"
|
|
||||||
target: "habitica.resources"
|
|
||||||
- name: copy google services file
|
|
||||||
uses: canastro/copy-file-action@master
|
|
||||||
with:
|
|
||||||
source: "Habitica/google-services.json.example"
|
|
||||||
target: "Habitica/google-services.json"
|
|
||||||
- name: Grant execute permission for gradlew
|
|
||||||
run: chmod +x gradlew
|
|
||||||
- name: Run Ktlint
|
|
||||||
run: ./gradlew ktlint
|
|
||||||
detekt:
|
detekt:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
- name: set up JDK 11
|
- name: set up JDK 11
|
||||||
|
|
@ -109,25 +92,14 @@ jobs:
|
||||||
java-version: '11'
|
java-version: '11'
|
||||||
distribution: 'adopt'
|
distribution: 'adopt'
|
||||||
cache: gradle
|
cache: gradle
|
||||||
- name: copy properties file
|
- name: Prepare
|
||||||
uses: canastro/copy-file-action@master
|
run: ./.github/actions/prepare-run
|
||||||
|
- name: Validate Gradle wrapper
|
||||||
|
uses: gradle/wrapper-validation-action
|
||||||
|
- name: Run with Gradle
|
||||||
|
uses: gradle/gradle-build-action
|
||||||
with:
|
with:
|
||||||
source: "habitica.properties.example"
|
arguments: detekt
|
||||||
target: "habitica.properties"
|
|
||||||
- name: copy resources file
|
|
||||||
uses: canastro/copy-file-action@master
|
|
||||||
with:
|
|
||||||
source: "habitica.resources.example"
|
|
||||||
target: "habitica.resources"
|
|
||||||
- name: copy google services file
|
|
||||||
uses: canastro/copy-file-action@master
|
|
||||||
with:
|
|
||||||
source: "Habitica/google-services.json.example"
|
|
||||||
target: "Habitica/google-services.json"
|
|
||||||
- name: Grant execute permission for gradlew
|
|
||||||
run: chmod +x gradlew
|
|
||||||
- name: Run detekt
|
|
||||||
run: ./gradlew detekt
|
|
||||||
- name: Upload SARIF to Github using the upload-sarif action
|
- name: Upload SARIF to Github using the upload-sarif action
|
||||||
uses: github/codeql-action/upload-sarif@v1
|
uses: github/codeql-action/upload-sarif@v1
|
||||||
if: ${{ always() }}
|
if: ${{ always() }}
|
||||||
|
|
|
||||||
|
|
@ -49,7 +49,6 @@ dependencies {
|
||||||
implementation 'com.google.dagger:dagger:2.40.5'
|
implementation 'com.google.dagger:dagger:2.40.5'
|
||||||
kapt 'com.google.dagger:dagger-compiler:2.40.5'
|
kapt 'com.google.dagger:dagger-compiler:2.40.5'
|
||||||
compileOnly 'javax.annotation:javax.annotation-api:1.3.2'
|
compileOnly 'javax.annotation:javax.annotation-api:1.3.2'
|
||||||
compileOnly 'com.github.pengrad:jdk9-deps:1.0'
|
|
||||||
//App Compatibility and Material Design
|
//App Compatibility and Material Design
|
||||||
implementation 'androidx.appcompat:appcompat:1.4.1'
|
implementation 'androidx.appcompat:appcompat:1.4.1'
|
||||||
implementation 'com.google.android.material:material:1.5.0'
|
implementation 'com.google.android.material:material:1.5.0'
|
||||||
|
|
@ -66,7 +65,7 @@ dependencies {
|
||||||
|
|
||||||
|
|
||||||
// IAP Handling / Verification
|
// IAP Handling / Verification
|
||||||
implementation "com.android.billingclient:billing-ktx:4.0.0"
|
implementation "com.android.billingclient:billing-ktx:4.1.0"
|
||||||
//Facebook
|
//Facebook
|
||||||
implementation('com.facebook.android:facebook-android-sdk:12.2.0') {
|
implementation('com.facebook.android:facebook-android-sdk:12.2.0') {
|
||||||
transitive = true
|
transitive = true
|
||||||
|
|
@ -96,17 +95,18 @@ dependencies {
|
||||||
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
|
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
|
||||||
androidTestImplementation 'androidx.test:runner:1.4.0'
|
androidTestImplementation 'androidx.test:runner:1.4.0'
|
||||||
androidTestImplementation 'androidx.test:rules:1.4.0'
|
androidTestImplementation 'androidx.test:rules:1.4.0'
|
||||||
|
debugImplementation 'androidx.fragment:fragment-testing:1.4.1'
|
||||||
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
|
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
|
||||||
androidTestImplementation "io.mockk:mockk-android:1.12.2"
|
androidTestImplementation "io.mockk:mockk-android:1.12.2"
|
||||||
|
androidTestUtil("androidx.test:orchestrator:1.4.1")
|
||||||
|
|
||||||
implementation 'androidx.activity:activity-compose:1.4.0'
|
implementation 'androidx.activity:activity-compose:1.4.0'
|
||||||
implementation 'androidx.compose.material:material:1.0.5'
|
implementation 'androidx.compose.material:material:1.1.1'
|
||||||
implementation 'androidx.compose.animation:animation:1.0.5'
|
implementation 'androidx.compose.animation:animation:1.1.1'
|
||||||
implementation 'androidx.compose.ui:ui-tooling:1.0.5'
|
implementation 'androidx.compose.ui:ui-tooling:1.1.1'
|
||||||
implementation 'androidx.lifecycle:lifecycle-viewmodel-compose:2.4.1'
|
implementation 'androidx.lifecycle:lifecycle-viewmodel-compose:2.4.1'
|
||||||
implementation "com.google.accompanist:accompanist-appcompat-theme:0.16.0"
|
implementation "com.google.accompanist:accompanist-appcompat-theme:0.16.0"
|
||||||
|
|
||||||
|
|
||||||
//Leak Detection
|
//Leak Detection
|
||||||
debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.8'
|
debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.8'
|
||||||
//Push Notifications
|
//Push Notifications
|
||||||
|
|
@ -125,9 +125,8 @@ dependencies {
|
||||||
implementation "androidx.lifecycle:lifecycle-common-java8:2.4.1"
|
implementation "androidx.lifecycle:lifecycle-common-java8:2.4.1"
|
||||||
implementation 'androidx.navigation:navigation-fragment-ktx:2.4.1'
|
implementation 'androidx.navigation:navigation-fragment-ktx:2.4.1'
|
||||||
implementation 'androidx.navigation:navigation-ui-ktx:2.4.1'
|
implementation 'androidx.navigation:navigation-ui-ktx:2.4.1'
|
||||||
implementation 'com.plattysoft.leonids:LeonidsLib:1.3.2'
|
|
||||||
implementation "androidx.fragment:fragment-ktx:1.4.1"
|
implementation "androidx.fragment:fragment-ktx:1.4.1"
|
||||||
implementation "androidx.paging:paging-runtime-ktx:3.1.0"
|
implementation "androidx.paging:paging-runtime-ktx:3.1.1"
|
||||||
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.0'
|
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.0'
|
||||||
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.0'
|
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.0'
|
||||||
|
|
||||||
|
|
@ -135,7 +134,7 @@ dependencies {
|
||||||
|
|
||||||
implementation project(':shared')
|
implementation project(':shared')
|
||||||
|
|
||||||
ktlint("com.pinterest:ktlint:0.43.2") {
|
ktlint("com.pinterest:ktlint:0.45.0") {
|
||||||
attributes {
|
attributes {
|
||||||
attribute(Bundling.BUNDLING_ATTRIBUTE, getObjects().named(Bundling, Bundling.EXTERNAL))
|
attribute(Bundling.BUNDLING_ATTRIBUTE, getObjects().named(Bundling, Bundling.EXTERNAL))
|
||||||
}
|
}
|
||||||
|
|
@ -165,6 +164,7 @@ android {
|
||||||
targetSdkVersion 32
|
targetSdkVersion 32
|
||||||
|
|
||||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||||
|
testInstrumentationRunnerArguments clearPackageData: 'true'
|
||||||
}
|
}
|
||||||
|
|
||||||
buildFeatures {
|
buildFeatures {
|
||||||
|
|
@ -198,7 +198,6 @@ android {
|
||||||
// Disable fabric build ID generation for debug builds
|
// Disable fabric build ID generation for debug builds
|
||||||
ext.enableCrashlytics = false
|
ext.enableCrashlytics = false
|
||||||
ext.alwaysUpdateBuildId = false
|
ext.alwaysUpdateBuildId = false
|
||||||
testCoverageEnabled = true
|
|
||||||
resValue "string", "content_provider", "com.habitrpg.android.habitica.fileprovider"
|
resValue "string", "content_provider", "com.habitrpg.android.habitica.fileprovider"
|
||||||
resValue "string", "app_name", "Habitica Debug"
|
resValue "string", "app_name", "Habitica Debug"
|
||||||
}
|
}
|
||||||
|
|
@ -251,12 +250,6 @@ android {
|
||||||
res.srcDirs = ['res']
|
res.srcDirs = ['res']
|
||||||
assets.srcDirs = ['assets']
|
assets.srcDirs = ['assets']
|
||||||
}
|
}
|
||||||
/*robolectric {
|
|
||||||
manifest.srcFile 'AndroidManifestTesting.xml'
|
|
||||||
java.srcDir file('src/test/java/')
|
|
||||||
res.srcDirs = ['res']
|
|
||||||
}*/
|
|
||||||
//instrumentTest.setRoot('tests')
|
|
||||||
debugIAP { java.srcDirs = ['src/debug/java'] }
|
debugIAP { java.srcDirs = ['src/debug/java'] }
|
||||||
release { java.srcDirs = ['src/release/java'] }
|
release { java.srcDirs = ['src/release/java'] }
|
||||||
}
|
}
|
||||||
|
|
@ -292,6 +285,9 @@ android.testOptions {
|
||||||
useJUnitPlatform()
|
useJUnitPlatform()
|
||||||
unitTests.returnDefaultValues = true
|
unitTests.returnDefaultValues = true
|
||||||
}
|
}
|
||||||
|
unitTests.returnDefaultValues = true
|
||||||
|
|
||||||
|
execution 'ANDROIDX_TEST_ORCHESTRATOR'
|
||||||
}
|
}
|
||||||
|
|
||||||
Properties props = new Properties()
|
Properties props = new Properties()
|
||||||
|
|
@ -315,7 +311,7 @@ if (propFile.canRead()) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add Habitica Properties to buildConfigField
|
// Add Habitica Properties to buildConfigField
|
||||||
final File HRPG_PROPS_FILE = new File('habitica.properties')
|
final File HRPG_PROPS_FILE = new File(projectDir.absolutePath + '/../habitica.properties')
|
||||||
if (HRPG_PROPS_FILE.canRead()) {
|
if (HRPG_PROPS_FILE.canRead()) {
|
||||||
Properties HRPG_PROPS = new Properties()
|
Properties HRPG_PROPS = new Properties()
|
||||||
HRPG_PROPS.load(new FileInputStream(HRPG_PROPS_FILE))
|
HRPG_PROPS.load(new FileInputStream(HRPG_PROPS_FILE))
|
||||||
|
|
@ -334,7 +330,7 @@ if (HRPG_PROPS_FILE.canRead()) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add Habitica Resources to resources
|
// Add Habitica Resources to resources
|
||||||
final File HRPG_RES_FILE = new File('habitica.resources')
|
final File HRPG_RES_FILE = new File(projectDir.absolutePath + '/../habitica.resources')
|
||||||
if (HRPG_RES_FILE.canRead()) {
|
if (HRPG_RES_FILE.canRead()) {
|
||||||
Properties HRPG_RES = new Properties()
|
Properties HRPG_RES = new Properties()
|
||||||
HRPG_RES.load(new FileInputStream(HRPG_RES_FILE))
|
HRPG_RES.load(new FileInputStream(HRPG_RES_FILE))
|
||||||
|
|
@ -404,6 +400,7 @@ task jacocoTestReport(type: JacocoReport, dependsOn: 'testProdDebugUnitTest') {
|
||||||
task ktlint(type: JavaExec, group: "verification") {
|
task ktlint(type: JavaExec, group: "verification") {
|
||||||
description = "Check Kotlin code style."
|
description = "Check Kotlin code style."
|
||||||
classpath = configurations.ktlint
|
classpath = configurations.ktlint
|
||||||
|
mainClass.set("com.pinterest.ktlint.Main")
|
||||||
args "--disabled_rules=no-wildcard-imports", "--reporter=plain?group_by_file", "src/**/*.kt"
|
args "--disabled_rules=no-wildcard-imports", "--reporter=plain?group_by_file", "src/**/*.kt"
|
||||||
// to generate report in checkstyle format prepend following args:
|
// to generate report in checkstyle format prepend following args:
|
||||||
// "--reporter=plain", "--reporter=checkstyle,output=${buildDir}/ktlint.xml"
|
// "--reporter=plain", "--reporter=checkstyle,output=${buildDir}/ktlint.xml"
|
||||||
|
|
@ -416,5 +413,6 @@ check.dependsOn ktlint
|
||||||
task ktlintFormat(type: JavaExec, group: "formatting") {
|
task ktlintFormat(type: JavaExec, group: "formatting") {
|
||||||
description = "Fix Kotlin code style deviations."
|
description = "Fix Kotlin code style deviations."
|
||||||
classpath = configurations.ktlint
|
classpath = configurations.ktlint
|
||||||
args "--disabled_rules=no-wildcard-imports", "-F", "src/**/*.kt"
|
mainClass.set("com.pinterest.ktlint.Main")
|
||||||
|
args "-F", "src/**/*.kt"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
BIN
Habitica/libs/LeonidsLib-1.3.2.jar
Normal file
BIN
Habitica/libs/LeonidsLib-1.3.2.jar
Normal file
Binary file not shown.
|
|
@ -10,14 +10,14 @@ import org.junit.Rule
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
import org.junit.runner.RunWith
|
import org.junit.runner.RunWith
|
||||||
|
|
||||||
class IntroActivityScreen: Screen<IntroActivityScreen>() {
|
class IntroActivityScreen : Screen<IntroActivityScreen>() {
|
||||||
val skipButton = KButton { withId(R.id.skipButton) }
|
val skipButton = KButton { withId(R.id.skipButton) }
|
||||||
val finishButton = KButton { withId(R.id.finishButton )}
|
val finishButton = KButton { withId(R.id.finishButton) }
|
||||||
}
|
}
|
||||||
|
|
||||||
@LargeTest
|
@LargeTest
|
||||||
@RunWith(AndroidJUnit4::class)
|
@RunWith(AndroidJUnit4::class)
|
||||||
class IntroActivityTest: TestCase() {
|
class IntroActivityTest : TestCase() {
|
||||||
|
|
||||||
@Rule
|
@Rule
|
||||||
@JvmField
|
@JvmField
|
||||||
|
|
|
||||||
|
|
@ -7,10 +7,8 @@ import com.habitrpg.android.habitica.data.SocialRepository
|
||||||
import com.habitrpg.android.habitica.data.TutorialRepository
|
import com.habitrpg.android.habitica.data.TutorialRepository
|
||||||
import com.habitrpg.android.habitica.data.UserRepository
|
import com.habitrpg.android.habitica.data.UserRepository
|
||||||
import com.habitrpg.android.habitica.helpers.AppConfigManager
|
import com.habitrpg.android.habitica.helpers.AppConfigManager
|
||||||
import com.habitrpg.android.habitica.models.Skill
|
|
||||||
import com.habitrpg.android.habitica.models.user.Stats
|
import com.habitrpg.android.habitica.models.user.Stats
|
||||||
import com.habitrpg.android.habitica.models.user.User
|
import com.habitrpg.android.habitica.models.user.User
|
||||||
import com.habitrpg.android.habitica.ui.fragments.social.party.PartyDetailFragment
|
|
||||||
import com.kaspersky.kaspresso.testcases.api.testcase.TestCase
|
import com.kaspersky.kaspresso.testcases.api.testcase.TestCase
|
||||||
import io.github.kakaocup.kakao.screen.Screen
|
import io.github.kakaocup.kakao.screen.Screen
|
||||||
import io.mockk.clearAllMocks
|
import io.mockk.clearAllMocks
|
||||||
|
|
@ -21,7 +19,7 @@ import io.reactivex.rxjava3.core.Flowable
|
||||||
import io.reactivex.rxjava3.subjects.PublishSubject
|
import io.reactivex.rxjava3.subjects.PublishSubject
|
||||||
import org.junit.Before
|
import org.junit.Before
|
||||||
|
|
||||||
abstract class FragmentTestCase<F: BaseFragment<VB>, VB: ViewBinding, S: Screen<S>>: TestCase() {
|
abstract class FragmentTestCase<F : BaseFragment<VB>, VB : ViewBinding, S : Screen<S>> : TestCase() {
|
||||||
|
|
||||||
lateinit var scenario: FragmentScenario<F>
|
lateinit var scenario: FragmentScenario<F>
|
||||||
lateinit var fragment: F
|
lateinit var fragment: F
|
||||||
|
|
@ -50,4 +48,4 @@ abstract class FragmentTestCase<F: BaseFragment<VB>, VB: ViewBinding, S: Screen<
|
||||||
every { userRepository.getUser() } returns userEvents
|
every { userRepository.getUser() } returns userEvents
|
||||||
makeFragment()
|
makeFragment()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ import io.reactivex.rxjava3.core.Flowable
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
import org.junit.runner.RunWith
|
import org.junit.runner.RunWith
|
||||||
|
|
||||||
class PartyDetailScreen: Screen<PartyDetailScreen>() {
|
class PartyDetailScreen : Screen<PartyDetailScreen>() {
|
||||||
val titleView = KTextView { withId(R.id.title_view) }
|
val titleView = KTextView { withId(R.id.title_view) }
|
||||||
val newQuestButton = KButton { withId(R.id.new_quest_button) }
|
val newQuestButton = KButton { withId(R.id.new_quest_button) }
|
||||||
val questDetailButton = KButton { withId(R.id.quest_detail_button) }
|
val questDetailButton = KButton { withId(R.id.quest_detail_button) }
|
||||||
|
|
@ -30,7 +30,7 @@ class PartyDetailScreen: Screen<PartyDetailScreen>() {
|
||||||
|
|
||||||
@LargeTest
|
@LargeTest
|
||||||
@RunWith(AndroidJUnit4::class)
|
@RunWith(AndroidJUnit4::class)
|
||||||
class PartyDetailFragmentTest: FragmentTestCase<PartyDetailFragment, FragmentPartyDetailBinding, PartyDetailScreen>() {
|
class PartyDetailFragmentTest : FragmentTestCase<PartyDetailFragment, FragmentPartyDetailBinding, PartyDetailScreen>() {
|
||||||
private lateinit var viewModel: PartyViewModel
|
private lateinit var viewModel: PartyViewModel
|
||||||
override val screen = PartyDetailScreen()
|
override val screen = PartyDetailScreen()
|
||||||
|
|
||||||
|
|
@ -41,7 +41,7 @@ class PartyDetailFragmentTest: FragmentTestCase<PartyDetailFragment, FragmentPar
|
||||||
viewModel = PartyViewModel(false)
|
viewModel = PartyViewModel(false)
|
||||||
viewModel.socialRepository = socialRepository
|
viewModel.socialRepository = socialRepository
|
||||||
viewModel.userRepository = userRepository
|
viewModel.userRepository = userRepository
|
||||||
viewModel.notificationsManager= mockk(relaxed = true)
|
viewModel.notificationsManager = mockk(relaxed = true)
|
||||||
scenario = launchFragmentInContainer(null, R.style.MainAppTheme) {
|
scenario = launchFragmentInContainer(null, R.style.MainAppTheme) {
|
||||||
fragment = spyk()
|
fragment = spyk()
|
||||||
fragment.shouldInitializeComponent = false
|
fragment.shouldInitializeComponent = false
|
||||||
|
|
@ -61,4 +61,4 @@ class PartyDetailFragmentTest: FragmentTestCase<PartyDetailFragment, FragmentPar
|
||||||
titleView.hasText("Group Name")
|
titleView.hasText("Group Name")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||||
import androidx.test.filters.LargeTest
|
import androidx.test.filters.LargeTest
|
||||||
import com.habitrpg.android.habitica.R
|
import com.habitrpg.android.habitica.R
|
||||||
import com.habitrpg.android.habitica.databinding.FragmentStatsBinding
|
import com.habitrpg.android.habitica.databinding.FragmentStatsBinding
|
||||||
import com.habitrpg.android.habitica.models.user.Stats
|
import com.habitrpg.android.habitica.models.tasks.Attribute
|
||||||
import io.github.kakaocup.kakao.common.views.KView
|
import io.github.kakaocup.kakao.common.views.KView
|
||||||
import io.github.kakaocup.kakao.screen.Screen
|
import io.github.kakaocup.kakao.screen.Screen
|
||||||
import io.github.kakaocup.kakao.text.KButton
|
import io.github.kakaocup.kakao.text.KButton
|
||||||
|
|
@ -15,23 +15,23 @@ import org.junit.Before
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
import org.junit.runner.RunWith
|
import org.junit.runner.RunWith
|
||||||
|
|
||||||
class StatsScreen: Screen<StatsScreen>() {
|
class StatsScreen : Screen<StatsScreen>() {
|
||||||
val strengthStatsView = KView { withId(R.id.strengthStatsView)}
|
val strengthStatsView = KView { withId(R.id.strengthStatsView) }
|
||||||
val strengthAllocateButton = KButton {
|
val strengthAllocateButton = KButton {
|
||||||
withId(R.id.allocateButton)
|
withId(R.id.allocateButton)
|
||||||
isDescendantOfA { withId(R.id.strengthStatsView) }
|
isDescendantOfA { withId(R.id.strengthStatsView) }
|
||||||
}
|
}
|
||||||
val intelligenceStatsView = KView { withId(R.id.intelligenceStatsView)}
|
val intelligenceStatsView = KView { withId(R.id.intelligenceStatsView) }
|
||||||
val intelligenceAllocateButton = KButton {
|
val intelligenceAllocateButton = KButton {
|
||||||
withId(R.id.allocateButton)
|
withId(R.id.allocateButton)
|
||||||
isDescendantOfA { withId(R.id.intelligenceStatsView) }
|
isDescendantOfA { withId(R.id.intelligenceStatsView) }
|
||||||
}
|
}
|
||||||
val constitutionStatsView = KView { withId(R.id.constitutionStatsView)}
|
val constitutionStatsView = KView { withId(R.id.constitutionStatsView) }
|
||||||
val constitutionAllocateButton = KButton {
|
val constitutionAllocateButton = KButton {
|
||||||
withId(R.id.allocateButton)
|
withId(R.id.allocateButton)
|
||||||
isDescendantOfA { withId(R.id.constitutionStatsView) }
|
isDescendantOfA { withId(R.id.constitutionStatsView) }
|
||||||
}
|
}
|
||||||
val perceptionStatsView = KView { withId(R.id.perceptionStatsView)}
|
val perceptionStatsView = KView { withId(R.id.perceptionStatsView) }
|
||||||
val perceptionAllocateButton = KButton {
|
val perceptionAllocateButton = KButton {
|
||||||
withId(R.id.allocateButton)
|
withId(R.id.allocateButton)
|
||||||
isDescendantOfA { withId(R.id.perceptionStatsView) }
|
isDescendantOfA { withId(R.id.perceptionStatsView) }
|
||||||
|
|
@ -41,8 +41,7 @@ class StatsScreen: Screen<StatsScreen>() {
|
||||||
|
|
||||||
@LargeTest
|
@LargeTest
|
||||||
@RunWith(AndroidJUnit4::class)
|
@RunWith(AndroidJUnit4::class)
|
||||||
class StatsFragmentTest: FragmentTestCase<StatsFragment, FragmentStatsBinding, StatsScreen>() {
|
class StatsFragmentTest : FragmentTestCase<StatsFragment, FragmentStatsBinding, StatsScreen>() {
|
||||||
|
|
||||||
|
|
||||||
override val screen = StatsScreen()
|
override val screen = StatsScreen()
|
||||||
|
|
||||||
|
|
@ -92,13 +91,13 @@ class StatsFragmentTest: FragmentTestCase<StatsFragment, FragmentStatsBinding, S
|
||||||
fun allocatesOnClick() {
|
fun allocatesOnClick() {
|
||||||
screen {
|
screen {
|
||||||
strengthAllocateButton.click()
|
strengthAllocateButton.click()
|
||||||
verify { userRepository.allocatePoint(Stats.STRENGTH) }
|
verify { userRepository.allocatePoint(Attribute.STRENGTH) }
|
||||||
intelligenceAllocateButton.click()
|
intelligenceAllocateButton.click()
|
||||||
verify { userRepository.allocatePoint(Stats.INTELLIGENCE) }
|
verify { userRepository.allocatePoint(Attribute.INTELLIGENCE) }
|
||||||
constitutionAllocateButton.click()
|
constitutionAllocateButton.click()
|
||||||
verify { userRepository.allocatePoint(Stats.CONSTITUTION) }
|
verify { userRepository.allocatePoint(Attribute.CONSTITUTION) }
|
||||||
perceptionAllocateButton.click()
|
perceptionAllocateButton.click()
|
||||||
verify { userRepository.allocatePoint(Stats.PERCEPTION) }
|
verify { userRepository.allocatePoint(Attribute.PERCEPTION) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,27 +1,6 @@
|
||||||
package com.habitrpg.android.habitica.ui.fragments.purchases
|
package com.habitrpg.android.habitica.ui.fragments.purchases
|
||||||
|
|
||||||
import androidx.fragment.app.testing.launchFragmentInContainer
|
/*
|
||||||
import androidx.test.ext.junit.runners.AndroidJUnit4
|
|
||||||
import androidx.test.filters.LargeTest
|
|
||||||
import com.habitrpg.android.habitica.R
|
|
||||||
import com.habitrpg.android.habitica.databinding.FragmentGemPurchaseBinding
|
|
||||||
import com.habitrpg.android.habitica.helpers.PurchaseHandler
|
|
||||||
import com.habitrpg.android.habitica.helpers.PurchaseTypes
|
|
||||||
import com.habitrpg.android.habitica.models.user.Purchases
|
|
||||||
import com.habitrpg.android.habitica.models.user.SubscriptionPlan
|
|
||||||
import com.habitrpg.android.habitica.ui.fragments.FragmentTestCase
|
|
||||||
import io.github.kakaocup.kakao.common.views.KView
|
|
||||||
import io.github.kakaocup.kakao.screen.Screen
|
|
||||||
import io.github.kakaocup.kakao.text.KTextView
|
|
||||||
import io.mockk.MockKAdditionalAnswerScope
|
|
||||||
import io.mockk.coEvery
|
|
||||||
import io.mockk.mockk
|
|
||||||
import io.mockk.spyk
|
|
||||||
import io.mockk.verify
|
|
||||||
import org.junit.Test
|
|
||||||
import org.junit.runner.RunWith
|
|
||||||
import org.solovyev.android.checkout.Sku
|
|
||||||
|
|
||||||
class GemPurchaseScreen: Screen<GemPurchaseScreen>() {
|
class GemPurchaseScreen: Screen<GemPurchaseScreen>() {
|
||||||
val gems4View = KView { withId(R.id.gems_4_view) }
|
val gems4View = KView { withId(R.id.gems_4_view) }
|
||||||
val gems4Button = KTextView {
|
val gems4Button = KTextView {
|
||||||
|
|
@ -43,11 +22,6 @@ class GemPurchaseScreen: Screen<GemPurchaseScreen>() {
|
||||||
withId(R.id.purchase_button)
|
withId(R.id.purchase_button)
|
||||||
isDescendantOfA { withId(R.id.gems_84_view) }
|
isDescendantOfA { withId(R.id.gems_84_view) }
|
||||||
}
|
}
|
||||||
|
|
||||||
val subscriptionPromo = KView { withId(R.id.subscription_promo) }
|
|
||||||
val subscriptionPromoButton = KView { withId(R.id.button)
|
|
||||||
isDescendantOfA { withId(R.id.subscription_promo) }
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@LargeTest
|
@LargeTest
|
||||||
|
|
@ -166,4 +140,4 @@ class GemsPurchaseFragmentTest :
|
||||||
subscriptionPromo.isGone()
|
subscriptionPromo.isGone()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}*/
|
||||||
|
|
|
||||||
|
|
@ -1,25 +1,6 @@
|
||||||
package com.habitrpg.android.habitica.ui.fragments.purchases
|
package com.habitrpg.android.habitica.ui.fragments.purchases
|
||||||
|
|
||||||
import androidx.fragment.app.testing.launchFragmentInContainer
|
/*
|
||||||
import androidx.test.ext.junit.runners.AndroidJUnit4
|
|
||||||
import androidx.test.filters.LargeTest
|
|
||||||
import com.habitrpg.android.habitica.R
|
|
||||||
import com.habitrpg.android.habitica.databinding.FragmentGemPurchaseBinding
|
|
||||||
import com.habitrpg.android.habitica.databinding.FragmentSubscriptionBinding
|
|
||||||
import com.habitrpg.android.habitica.helpers.PurchaseHandler
|
|
||||||
import com.habitrpg.android.habitica.helpers.PurchaseTypes
|
|
||||||
import com.habitrpg.android.habitica.ui.fragments.FragmentTestCase
|
|
||||||
import io.github.kakaocup.kakao.common.views.KView
|
|
||||||
import io.github.kakaocup.kakao.screen.Screen
|
|
||||||
import io.mockk.MockKAdditionalAnswerScope
|
|
||||||
import io.mockk.coEvery
|
|
||||||
import io.mockk.every
|
|
||||||
import io.mockk.mockk
|
|
||||||
import io.mockk.spyk
|
|
||||||
import org.junit.Test
|
|
||||||
import org.junit.runner.RunWith
|
|
||||||
import org.solovyev.android.checkout.Inventory
|
|
||||||
import org.solovyev.android.checkout.Sku
|
|
||||||
|
|
||||||
class SubscriptionScreen: Screen<SubscriptionScreen>() {
|
class SubscriptionScreen: Screen<SubscriptionScreen>() {
|
||||||
val sub1MonthView = KView { withId(R.id.subscription1month) }
|
val sub1MonthView = KView { withId(R.id.subscription1month) }
|
||||||
|
|
@ -100,4 +81,4 @@ class SubscriptionFragmentTest :
|
||||||
sub12MonthView.hasDescendant { withText("12 Months") }
|
sub12MonthView.hasDescendant { withText("12 Months") }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}*/
|
||||||
|
|
|
||||||
|
|
@ -115,8 +115,8 @@ abstract class HabiticaBaseApplication : Application(), Application.ActivityLife
|
||||||
val configuration: Configuration = resources.configuration
|
val configuration: Configuration = resources.configuration
|
||||||
val languageHelper = LanguageHelper(sharedPrefs.getString("language", "en"))
|
val languageHelper = LanguageHelper(sharedPrefs.getString("language", "en"))
|
||||||
if (if (SDK_INT >= Build.VERSION_CODES.N) {
|
if (if (SDK_INT >= Build.VERSION_CODES.N) {
|
||||||
configuration.locales.isEmpty || configuration.locales[0] != languageHelper.locale
|
configuration.locales.isEmpty || configuration.locales[0] != languageHelper.locale
|
||||||
} else {
|
} else {
|
||||||
configuration.locale != languageHelper.locale
|
configuration.locale != languageHelper.locale
|
||||||
}
|
}
|
||||||
) {
|
) {
|
||||||
|
|
|
||||||
|
|
@ -1,24 +1,52 @@
|
||||||
package com.habitrpg.android.habitica.api
|
package com.habitrpg.android.habitica.api
|
||||||
|
|
||||||
import com.habitrpg.android.habitica.models.*
|
import com.habitrpg.android.habitica.models.Achievement
|
||||||
|
import com.habitrpg.android.habitica.models.ContentResult
|
||||||
|
import com.habitrpg.android.habitica.models.LeaveChallengeBody
|
||||||
|
import com.habitrpg.android.habitica.models.PurchaseValidationRequest
|
||||||
|
import com.habitrpg.android.habitica.models.PurchaseValidationResult
|
||||||
|
import com.habitrpg.android.habitica.models.SubscriptionValidationRequest
|
||||||
import com.habitrpg.android.habitica.models.Tag
|
import com.habitrpg.android.habitica.models.Tag
|
||||||
|
import com.habitrpg.android.habitica.models.TeamPlan
|
||||||
|
import com.habitrpg.android.habitica.models.WorldState
|
||||||
import com.habitrpg.android.habitica.models.auth.UserAuth
|
import com.habitrpg.android.habitica.models.auth.UserAuth
|
||||||
import com.habitrpg.android.habitica.models.auth.UserAuthResponse
|
import com.habitrpg.android.habitica.models.auth.UserAuthResponse
|
||||||
import com.habitrpg.android.habitica.models.auth.UserAuthSocial
|
import com.habitrpg.android.habitica.models.auth.UserAuthSocial
|
||||||
import com.habitrpg.android.habitica.models.inventory.Equipment
|
import com.habitrpg.android.habitica.models.inventory.Equipment
|
||||||
import com.habitrpg.android.habitica.models.inventory.Quest
|
import com.habitrpg.android.habitica.models.inventory.Quest
|
||||||
import com.habitrpg.android.habitica.models.members.Member
|
import com.habitrpg.android.habitica.models.members.Member
|
||||||
import com.habitrpg.android.habitica.models.responses.*
|
import com.habitrpg.android.habitica.models.responses.BulkTaskScoringData
|
||||||
|
import com.habitrpg.android.habitica.models.responses.BuyResponse
|
||||||
|
import com.habitrpg.android.habitica.models.responses.FeedResponse
|
||||||
|
import com.habitrpg.android.habitica.models.responses.HabitResponse
|
||||||
|
import com.habitrpg.android.habitica.models.responses.PostChatMessageResult
|
||||||
|
import com.habitrpg.android.habitica.models.responses.SkillResponse
|
||||||
|
import com.habitrpg.android.habitica.models.responses.Status
|
||||||
|
import com.habitrpg.android.habitica.models.responses.TaskDirectionData
|
||||||
|
import com.habitrpg.android.habitica.models.responses.UnlockResponse
|
||||||
|
import com.habitrpg.android.habitica.models.responses.VerifyUsernameResponse
|
||||||
import com.habitrpg.android.habitica.models.shops.Shop
|
import com.habitrpg.android.habitica.models.shops.Shop
|
||||||
import com.habitrpg.android.habitica.models.shops.ShopItem
|
import com.habitrpg.android.habitica.models.shops.ShopItem
|
||||||
import com.habitrpg.android.habitica.models.social.*
|
import com.habitrpg.android.habitica.models.social.Challenge
|
||||||
|
import com.habitrpg.android.habitica.models.social.ChatMessage
|
||||||
|
import com.habitrpg.android.habitica.models.social.FindUsernameResult
|
||||||
|
import com.habitrpg.android.habitica.models.social.Group
|
||||||
|
import com.habitrpg.android.habitica.models.social.InboxConversation
|
||||||
import com.habitrpg.android.habitica.models.tasks.Task
|
import com.habitrpg.android.habitica.models.tasks.Task
|
||||||
import com.habitrpg.android.habitica.models.tasks.TaskList
|
import com.habitrpg.android.habitica.models.tasks.TaskList
|
||||||
import com.habitrpg.android.habitica.models.user.Items
|
import com.habitrpg.android.habitica.models.user.Items
|
||||||
import com.habitrpg.android.habitica.models.user.Stats
|
import com.habitrpg.android.habitica.models.user.Stats
|
||||||
import com.habitrpg.android.habitica.models.user.User
|
import com.habitrpg.android.habitica.models.user.User
|
||||||
import io.reactivex.rxjava3.core.Flowable
|
import io.reactivex.rxjava3.core.Flowable
|
||||||
import retrofit2.http.*
|
import retrofit2.http.Body
|
||||||
|
import retrofit2.http.DELETE
|
||||||
|
import retrofit2.http.GET
|
||||||
|
import retrofit2.http.HTTP
|
||||||
|
import retrofit2.http.Header
|
||||||
|
import retrofit2.http.POST
|
||||||
|
import retrofit2.http.PUT
|
||||||
|
import retrofit2.http.Path
|
||||||
|
import retrofit2.http.Query
|
||||||
|
|
||||||
@JvmSuppressWildcards
|
@JvmSuppressWildcards
|
||||||
interface ApiService {
|
interface ApiService {
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
package com.habitrpg.android.habitica.api;
|
package com.habitrpg.android.habitica.api;
|
||||||
|
|
||||||
import com.google.gson.Gson;
|
import com.google.gson.Gson;
|
||||||
import com.google.gson.GsonBuilder;
|
import com.google.gson.GsonBuilder;
|
||||||
import com.google.gson.reflect.TypeToken;
|
import com.google.gson.reflect.TypeToken;
|
||||||
|
|
@ -43,9 +44,9 @@ import com.habitrpg.android.habitica.utils.FeedResponseDeserializer;
|
||||||
import com.habitrpg.android.habitica.utils.FindUsernameResultDeserializer;
|
import com.habitrpg.android.habitica.utils.FindUsernameResultDeserializer;
|
||||||
import com.habitrpg.android.habitica.utils.GroupSerialization;
|
import com.habitrpg.android.habitica.utils.GroupSerialization;
|
||||||
import com.habitrpg.android.habitica.utils.MemberSerialization;
|
import com.habitrpg.android.habitica.utils.MemberSerialization;
|
||||||
|
import com.habitrpg.android.habitica.utils.NotificationDeserializer;
|
||||||
import com.habitrpg.android.habitica.utils.OwnedItemListDeserializer;
|
import com.habitrpg.android.habitica.utils.OwnedItemListDeserializer;
|
||||||
import com.habitrpg.android.habitica.utils.OwnedMountListDeserializer;
|
import com.habitrpg.android.habitica.utils.OwnedMountListDeserializer;
|
||||||
import com.habitrpg.android.habitica.utils.NotificationDeserializer;
|
|
||||||
import com.habitrpg.android.habitica.utils.OwnedPetListDeserializer;
|
import com.habitrpg.android.habitica.utils.OwnedPetListDeserializer;
|
||||||
import com.habitrpg.android.habitica.utils.PurchasedDeserializer;
|
import com.habitrpg.android.habitica.utils.PurchasedDeserializer;
|
||||||
import com.habitrpg.android.habitica.utils.QuestCollectDeserializer;
|
import com.habitrpg.android.habitica.utils.QuestCollectDeserializer;
|
||||||
|
|
|
||||||
|
|
@ -5,10 +5,8 @@ import com.habitrpg.android.habitica.modules.ApiModule;
|
||||||
import com.habitrpg.android.habitica.modules.AppModule;
|
import com.habitrpg.android.habitica.modules.AppModule;
|
||||||
import com.habitrpg.android.habitica.modules.DeveloperModule;
|
import com.habitrpg.android.habitica.modules.DeveloperModule;
|
||||||
import com.habitrpg.android.habitica.modules.RepositoryModule;
|
import com.habitrpg.android.habitica.modules.RepositoryModule;
|
||||||
import com.habitrpg.android.habitica.modules.UserRepositoryModule;
|
|
||||||
import com.habitrpg.android.habitica.modules.UserModule;
|
import com.habitrpg.android.habitica.modules.UserModule;
|
||||||
|
import com.habitrpg.android.habitica.modules.UserRepositoryModule;
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
|
|
||||||
import javax.inject.Singleton;
|
import javax.inject.Singleton;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -76,19 +76,19 @@ import com.habitrpg.android.habitica.ui.fragments.setup.WelcomeFragment;
|
||||||
import com.habitrpg.android.habitica.ui.fragments.skills.SkillTasksRecyclerViewFragment;
|
import com.habitrpg.android.habitica.ui.fragments.skills.SkillTasksRecyclerViewFragment;
|
||||||
import com.habitrpg.android.habitica.ui.fragments.skills.SkillsFragment;
|
import com.habitrpg.android.habitica.ui.fragments.skills.SkillsFragment;
|
||||||
import com.habitrpg.android.habitica.ui.fragments.social.ChatFragment;
|
import com.habitrpg.android.habitica.ui.fragments.social.ChatFragment;
|
||||||
import com.habitrpg.android.habitica.ui.fragments.social.guilds.GuildDetailFragment;
|
|
||||||
import com.habitrpg.android.habitica.ui.fragments.social.guilds.GuildFragment;
|
|
||||||
import com.habitrpg.android.habitica.ui.fragments.social.InboxMessageListFragment;
|
import com.habitrpg.android.habitica.ui.fragments.social.InboxMessageListFragment;
|
||||||
import com.habitrpg.android.habitica.ui.fragments.social.InboxOverviewFragment;
|
import com.habitrpg.android.habitica.ui.fragments.social.InboxOverviewFragment;
|
||||||
import com.habitrpg.android.habitica.ui.fragments.social.party.NoPartyFragmentFragment;
|
|
||||||
import com.habitrpg.android.habitica.ui.fragments.social.guilds.GuildListFragment;
|
|
||||||
import com.habitrpg.android.habitica.ui.fragments.social.QuestDetailFragment;
|
import com.habitrpg.android.habitica.ui.fragments.social.QuestDetailFragment;
|
||||||
import com.habitrpg.android.habitica.ui.fragments.social.TavernDetailFragment;
|
import com.habitrpg.android.habitica.ui.fragments.social.TavernDetailFragment;
|
||||||
import com.habitrpg.android.habitica.ui.fragments.social.TavernFragment;
|
import com.habitrpg.android.habitica.ui.fragments.social.TavernFragment;
|
||||||
import com.habitrpg.android.habitica.ui.fragments.social.challenges.ChallengeDetailFragment;
|
import com.habitrpg.android.habitica.ui.fragments.social.challenges.ChallengeDetailFragment;
|
||||||
import com.habitrpg.android.habitica.ui.fragments.social.challenges.ChallengeListFragment;
|
import com.habitrpg.android.habitica.ui.fragments.social.challenges.ChallengeListFragment;
|
||||||
import com.habitrpg.android.habitica.ui.fragments.social.challenges.ChallengesOverviewFragment;
|
import com.habitrpg.android.habitica.ui.fragments.social.challenges.ChallengesOverviewFragment;
|
||||||
|
import com.habitrpg.android.habitica.ui.fragments.social.guilds.GuildDetailFragment;
|
||||||
|
import com.habitrpg.android.habitica.ui.fragments.social.guilds.GuildFragment;
|
||||||
|
import com.habitrpg.android.habitica.ui.fragments.social.guilds.GuildListFragment;
|
||||||
import com.habitrpg.android.habitica.ui.fragments.social.guilds.GuildOverviewFragment;
|
import com.habitrpg.android.habitica.ui.fragments.social.guilds.GuildOverviewFragment;
|
||||||
|
import com.habitrpg.android.habitica.ui.fragments.social.party.NoPartyFragmentFragment;
|
||||||
import com.habitrpg.android.habitica.ui.fragments.social.party.PartyDetailFragment;
|
import com.habitrpg.android.habitica.ui.fragments.social.party.PartyDetailFragment;
|
||||||
import com.habitrpg.android.habitica.ui.fragments.social.party.PartyFragment;
|
import com.habitrpg.android.habitica.ui.fragments.social.party.PartyFragment;
|
||||||
import com.habitrpg.android.habitica.ui.fragments.social.party.PartyInviteFragment;
|
import com.habitrpg.android.habitica.ui.fragments.social.party.PartyInviteFragment;
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,37 @@
|
||||||
package com.habitrpg.android.habitica.data
|
package com.habitrpg.android.habitica.data
|
||||||
|
|
||||||
import com.habitrpg.android.habitica.api.HostConfig
|
import com.habitrpg.android.habitica.api.HostConfig
|
||||||
import com.habitrpg.android.habitica.models.*
|
import com.habitrpg.android.habitica.models.Achievement
|
||||||
|
import com.habitrpg.android.habitica.models.ContentResult
|
||||||
|
import com.habitrpg.android.habitica.models.LeaveChallengeBody
|
||||||
|
import com.habitrpg.android.habitica.models.PurchaseValidationRequest
|
||||||
|
import com.habitrpg.android.habitica.models.PurchaseValidationResult
|
||||||
|
import com.habitrpg.android.habitica.models.SubscriptionValidationRequest
|
||||||
|
import com.habitrpg.android.habitica.models.Tag
|
||||||
|
import com.habitrpg.android.habitica.models.TeamPlan
|
||||||
|
import com.habitrpg.android.habitica.models.WorldState
|
||||||
import com.habitrpg.android.habitica.models.auth.UserAuthResponse
|
import com.habitrpg.android.habitica.models.auth.UserAuthResponse
|
||||||
import com.habitrpg.android.habitica.models.inventory.Equipment
|
import com.habitrpg.android.habitica.models.inventory.Equipment
|
||||||
import com.habitrpg.android.habitica.models.inventory.Quest
|
import com.habitrpg.android.habitica.models.inventory.Quest
|
||||||
import com.habitrpg.android.habitica.models.members.Member
|
import com.habitrpg.android.habitica.models.members.Member
|
||||||
import com.habitrpg.android.habitica.models.responses.*
|
import com.habitrpg.android.habitica.models.responses.BulkTaskScoringData
|
||||||
|
import com.habitrpg.android.habitica.models.responses.BuyResponse
|
||||||
|
import com.habitrpg.android.habitica.models.responses.ErrorResponse
|
||||||
|
import com.habitrpg.android.habitica.models.responses.FeedResponse
|
||||||
|
import com.habitrpg.android.habitica.models.responses.HabitResponse
|
||||||
|
import com.habitrpg.android.habitica.models.responses.PostChatMessageResult
|
||||||
|
import com.habitrpg.android.habitica.models.responses.SkillResponse
|
||||||
|
import com.habitrpg.android.habitica.models.responses.Status
|
||||||
|
import com.habitrpg.android.habitica.models.responses.TaskDirectionData
|
||||||
|
import com.habitrpg.android.habitica.models.responses.UnlockResponse
|
||||||
|
import com.habitrpg.android.habitica.models.responses.VerifyUsernameResponse
|
||||||
import com.habitrpg.android.habitica.models.shops.Shop
|
import com.habitrpg.android.habitica.models.shops.Shop
|
||||||
import com.habitrpg.android.habitica.models.shops.ShopItem
|
import com.habitrpg.android.habitica.models.shops.ShopItem
|
||||||
import com.habitrpg.android.habitica.models.social.*
|
import com.habitrpg.android.habitica.models.social.Challenge
|
||||||
|
import com.habitrpg.android.habitica.models.social.ChatMessage
|
||||||
|
import com.habitrpg.android.habitica.models.social.FindUsernameResult
|
||||||
|
import com.habitrpg.android.habitica.models.social.Group
|
||||||
|
import com.habitrpg.android.habitica.models.social.InboxConversation
|
||||||
import com.habitrpg.android.habitica.models.tasks.Task
|
import com.habitrpg.android.habitica.models.tasks.Task
|
||||||
import com.habitrpg.android.habitica.models.tasks.TaskList
|
import com.habitrpg.android.habitica.models.tasks.TaskList
|
||||||
import com.habitrpg.android.habitica.models.user.Items
|
import com.habitrpg.android.habitica.models.user.Items
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ import com.habitrpg.android.habitica.models.ContentResult
|
||||||
import com.habitrpg.android.habitica.models.WorldState
|
import com.habitrpg.android.habitica.models.WorldState
|
||||||
import io.reactivex.rxjava3.core.Flowable
|
import io.reactivex.rxjava3.core.Flowable
|
||||||
|
|
||||||
interface ContentRepository: BaseRepository {
|
interface ContentRepository : BaseRepository {
|
||||||
fun retrieveContent(forced: Boolean = false): Flowable<ContentResult>
|
fun retrieveContent(forced: Boolean = false): Flowable<ContentResult>
|
||||||
|
|
||||||
fun retrieveWorldState(): Flowable<WorldState>
|
fun retrieveWorldState(): Flowable<WorldState>
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,23 @@
|
||||||
package com.habitrpg.android.habitica.data
|
package com.habitrpg.android.habitica.data
|
||||||
|
|
||||||
import com.habitrpg.android.habitica.models.inventory.*
|
import com.habitrpg.android.habitica.models.inventory.Egg
|
||||||
|
import com.habitrpg.android.habitica.models.inventory.Equipment
|
||||||
|
import com.habitrpg.android.habitica.models.inventory.Food
|
||||||
|
import com.habitrpg.android.habitica.models.inventory.HatchingPotion
|
||||||
|
import com.habitrpg.android.habitica.models.inventory.Item
|
||||||
|
import com.habitrpg.android.habitica.models.inventory.Mount
|
||||||
|
import com.habitrpg.android.habitica.models.inventory.Pet
|
||||||
|
import com.habitrpg.android.habitica.models.inventory.Quest
|
||||||
|
import com.habitrpg.android.habitica.models.inventory.QuestContent
|
||||||
import com.habitrpg.android.habitica.models.responses.BuyResponse
|
import com.habitrpg.android.habitica.models.responses.BuyResponse
|
||||||
import com.habitrpg.android.habitica.models.responses.FeedResponse
|
import com.habitrpg.android.habitica.models.responses.FeedResponse
|
||||||
import com.habitrpg.android.habitica.models.shops.Shop
|
import com.habitrpg.android.habitica.models.shops.Shop
|
||||||
import com.habitrpg.android.habitica.models.shops.ShopItem
|
import com.habitrpg.android.habitica.models.shops.ShopItem
|
||||||
import com.habitrpg.android.habitica.models.user.*
|
import com.habitrpg.android.habitica.models.user.Items
|
||||||
|
import com.habitrpg.android.habitica.models.user.OwnedItem
|
||||||
|
import com.habitrpg.android.habitica.models.user.OwnedMount
|
||||||
|
import com.habitrpg.android.habitica.models.user.OwnedPet
|
||||||
|
import com.habitrpg.android.habitica.models.user.User
|
||||||
import io.reactivex.rxjava3.core.Flowable
|
import io.reactivex.rxjava3.core.Flowable
|
||||||
|
|
||||||
interface InventoryRepository : BaseRepository {
|
interface InventoryRepository : BaseRepository {
|
||||||
|
|
|
||||||
|
|
@ -4,11 +4,14 @@ import com.habitrpg.android.habitica.models.Achievement
|
||||||
import com.habitrpg.android.habitica.models.inventory.Quest
|
import com.habitrpg.android.habitica.models.inventory.Quest
|
||||||
import com.habitrpg.android.habitica.models.members.Member
|
import com.habitrpg.android.habitica.models.members.Member
|
||||||
import com.habitrpg.android.habitica.models.responses.PostChatMessageResult
|
import com.habitrpg.android.habitica.models.responses.PostChatMessageResult
|
||||||
import com.habitrpg.android.habitica.models.social.*
|
import com.habitrpg.android.habitica.models.social.ChatMessage
|
||||||
|
import com.habitrpg.android.habitica.models.social.FindUsernameResult
|
||||||
|
import com.habitrpg.android.habitica.models.social.Group
|
||||||
|
import com.habitrpg.android.habitica.models.social.GroupMembership
|
||||||
|
import com.habitrpg.android.habitica.models.social.InboxConversation
|
||||||
import com.habitrpg.android.habitica.models.user.User
|
import com.habitrpg.android.habitica.models.user.User
|
||||||
import io.reactivex.rxjava3.core.Flowable
|
import io.reactivex.rxjava3.core.Flowable
|
||||||
import io.reactivex.rxjava3.core.Single
|
import io.reactivex.rxjava3.core.Single
|
||||||
import java.util.*
|
|
||||||
|
|
||||||
interface SocialRepository : BaseRepository {
|
interface SocialRepository : BaseRepository {
|
||||||
fun getPublicGuilds(): Flowable<out List<Group>>
|
fun getPublicGuilds(): Flowable<out List<Group>>
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ import com.habitrpg.android.habitica.models.user.User
|
||||||
import io.reactivex.rxjava3.core.Flowable
|
import io.reactivex.rxjava3.core.Flowable
|
||||||
import io.reactivex.rxjava3.core.Maybe
|
import io.reactivex.rxjava3.core.Maybe
|
||||||
import io.reactivex.rxjava3.core.Single
|
import io.reactivex.rxjava3.core.Single
|
||||||
import java.util.*
|
import java.util.Date
|
||||||
|
|
||||||
interface TaskRepository : BaseRepository {
|
interface TaskRepository : BaseRepository {
|
||||||
fun getTasks(taskType: TaskType, userID: String? = null): Flowable<out List<Task>>
|
fun getTasks(taskType: TaskType, userID: String? = null): Flowable<out List<Task>>
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,15 @@ import com.habitrpg.android.habitica.api.HostConfig
|
||||||
import com.habitrpg.android.habitica.api.Server
|
import com.habitrpg.android.habitica.api.Server
|
||||||
import com.habitrpg.android.habitica.data.ApiClient
|
import com.habitrpg.android.habitica.data.ApiClient
|
||||||
import com.habitrpg.android.habitica.helpers.NotificationsManager
|
import com.habitrpg.android.habitica.helpers.NotificationsManager
|
||||||
import com.habitrpg.android.habitica.models.*
|
import com.habitrpg.android.habitica.models.Achievement
|
||||||
|
import com.habitrpg.android.habitica.models.ContentResult
|
||||||
|
import com.habitrpg.android.habitica.models.LeaveChallengeBody
|
||||||
|
import com.habitrpg.android.habitica.models.PurchaseValidationRequest
|
||||||
|
import com.habitrpg.android.habitica.models.PurchaseValidationResult
|
||||||
|
import com.habitrpg.android.habitica.models.SubscriptionValidationRequest
|
||||||
|
import com.habitrpg.android.habitica.models.Tag
|
||||||
|
import com.habitrpg.android.habitica.models.TeamPlan
|
||||||
|
import com.habitrpg.android.habitica.models.WorldState
|
||||||
import com.habitrpg.android.habitica.models.auth.UserAuth
|
import com.habitrpg.android.habitica.models.auth.UserAuth
|
||||||
import com.habitrpg.android.habitica.models.auth.UserAuthResponse
|
import com.habitrpg.android.habitica.models.auth.UserAuthResponse
|
||||||
import com.habitrpg.android.habitica.models.auth.UserAuthSocial
|
import com.habitrpg.android.habitica.models.auth.UserAuthSocial
|
||||||
|
|
@ -21,10 +29,24 @@ import com.habitrpg.android.habitica.models.auth.UserAuthSocialTokens
|
||||||
import com.habitrpg.android.habitica.models.inventory.Equipment
|
import com.habitrpg.android.habitica.models.inventory.Equipment
|
||||||
import com.habitrpg.android.habitica.models.inventory.Quest
|
import com.habitrpg.android.habitica.models.inventory.Quest
|
||||||
import com.habitrpg.android.habitica.models.members.Member
|
import com.habitrpg.android.habitica.models.members.Member
|
||||||
import com.habitrpg.android.habitica.models.responses.*
|
import com.habitrpg.android.habitica.models.responses.BulkTaskScoringData
|
||||||
|
import com.habitrpg.android.habitica.models.responses.BuyResponse
|
||||||
|
import com.habitrpg.android.habitica.models.responses.ErrorResponse
|
||||||
|
import com.habitrpg.android.habitica.models.responses.FeedResponse
|
||||||
|
import com.habitrpg.android.habitica.models.responses.HabitResponse
|
||||||
|
import com.habitrpg.android.habitica.models.responses.PostChatMessageResult
|
||||||
|
import com.habitrpg.android.habitica.models.responses.SkillResponse
|
||||||
|
import com.habitrpg.android.habitica.models.responses.Status
|
||||||
|
import com.habitrpg.android.habitica.models.responses.TaskDirectionData
|
||||||
|
import com.habitrpg.android.habitica.models.responses.UnlockResponse
|
||||||
|
import com.habitrpg.android.habitica.models.responses.VerifyUsernameResponse
|
||||||
import com.habitrpg.android.habitica.models.shops.Shop
|
import com.habitrpg.android.habitica.models.shops.Shop
|
||||||
import com.habitrpg.android.habitica.models.shops.ShopItem
|
import com.habitrpg.android.habitica.models.shops.ShopItem
|
||||||
import com.habitrpg.android.habitica.models.social.*
|
import com.habitrpg.android.habitica.models.social.Challenge
|
||||||
|
import com.habitrpg.android.habitica.models.social.ChatMessage
|
||||||
|
import com.habitrpg.android.habitica.models.social.FindUsernameResult
|
||||||
|
import com.habitrpg.android.habitica.models.social.Group
|
||||||
|
import com.habitrpg.android.habitica.models.social.InboxConversation
|
||||||
import com.habitrpg.android.habitica.models.tasks.Task
|
import com.habitrpg.android.habitica.models.tasks.Task
|
||||||
import com.habitrpg.android.habitica.models.tasks.TaskList
|
import com.habitrpg.android.habitica.models.tasks.TaskList
|
||||||
import com.habitrpg.android.habitica.models.user.Items
|
import com.habitrpg.android.habitica.models.user.Items
|
||||||
|
|
@ -48,7 +70,7 @@ import java.io.IOException
|
||||||
import java.net.SocketException
|
import java.net.SocketException
|
||||||
import java.net.SocketTimeoutException
|
import java.net.SocketTimeoutException
|
||||||
import java.net.UnknownHostException
|
import java.net.UnknownHostException
|
||||||
import java.util.*
|
import java.util.GregorianCalendar
|
||||||
import java.util.concurrent.TimeUnit
|
import java.util.concurrent.TimeUnit
|
||||||
import javax.net.ssl.SSLException
|
import javax.net.ssl.SSLException
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ import com.habitrpg.android.habitica.models.ContentResult
|
||||||
import com.habitrpg.android.habitica.models.WorldState
|
import com.habitrpg.android.habitica.models.WorldState
|
||||||
import com.habitrpg.android.habitica.models.inventory.SpecialItem
|
import com.habitrpg.android.habitica.models.inventory.SpecialItem
|
||||||
import io.reactivex.rxjava3.core.Flowable
|
import io.reactivex.rxjava3.core.Flowable
|
||||||
import java.util.*
|
import java.util.Date
|
||||||
|
|
||||||
class ContentRepositoryImpl<T : ContentLocalRepository>(localRepository: T, apiClient: ApiClient, context: Context) : BaseRepositoryImpl<T>(localRepository, apiClient), ContentRepository {
|
class ContentRepositoryImpl<T : ContentLocalRepository>(localRepository: T, apiClient: ApiClient, context: Context) : BaseRepositoryImpl<T>(localRepository, apiClient), ContentRepository {
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,12 +4,24 @@ import com.habitrpg.android.habitica.data.ApiClient
|
||||||
import com.habitrpg.android.habitica.data.InventoryRepository
|
import com.habitrpg.android.habitica.data.InventoryRepository
|
||||||
import com.habitrpg.android.habitica.data.local.InventoryLocalRepository
|
import com.habitrpg.android.habitica.data.local.InventoryLocalRepository
|
||||||
import com.habitrpg.android.habitica.helpers.AppConfigManager
|
import com.habitrpg.android.habitica.helpers.AppConfigManager
|
||||||
import com.habitrpg.android.habitica.models.inventory.*
|
import com.habitrpg.android.habitica.models.inventory.Egg
|
||||||
|
import com.habitrpg.android.habitica.models.inventory.Equipment
|
||||||
|
import com.habitrpg.android.habitica.models.inventory.Food
|
||||||
|
import com.habitrpg.android.habitica.models.inventory.HatchingPotion
|
||||||
|
import com.habitrpg.android.habitica.models.inventory.Item
|
||||||
|
import com.habitrpg.android.habitica.models.inventory.Mount
|
||||||
|
import com.habitrpg.android.habitica.models.inventory.Pet
|
||||||
|
import com.habitrpg.android.habitica.models.inventory.Quest
|
||||||
|
import com.habitrpg.android.habitica.models.inventory.QuestContent
|
||||||
import com.habitrpg.android.habitica.models.responses.BuyResponse
|
import com.habitrpg.android.habitica.models.responses.BuyResponse
|
||||||
import com.habitrpg.android.habitica.models.responses.FeedResponse
|
import com.habitrpg.android.habitica.models.responses.FeedResponse
|
||||||
import com.habitrpg.android.habitica.models.shops.Shop
|
import com.habitrpg.android.habitica.models.shops.Shop
|
||||||
import com.habitrpg.android.habitica.models.shops.ShopItem
|
import com.habitrpg.android.habitica.models.shops.ShopItem
|
||||||
import com.habitrpg.android.habitica.models.user.*
|
import com.habitrpg.android.habitica.models.user.Items
|
||||||
|
import com.habitrpg.android.habitica.models.user.OwnedItem
|
||||||
|
import com.habitrpg.android.habitica.models.user.OwnedMount
|
||||||
|
import com.habitrpg.android.habitica.models.user.OwnedPet
|
||||||
|
import com.habitrpg.android.habitica.models.user.User
|
||||||
import io.reactivex.rxjava3.core.Flowable
|
import io.reactivex.rxjava3.core.Flowable
|
||||||
|
|
||||||
class InventoryRepositoryImpl(localRepository: InventoryLocalRepository, apiClient: ApiClient, userID: String, var appConfigManager: AppConfigManager) : BaseRepositoryImpl<InventoryLocalRepository>(localRepository, apiClient, userID), InventoryRepository {
|
class InventoryRepositoryImpl(localRepository: InventoryLocalRepository, apiClient: ApiClient, userID: String, var appConfigManager: AppConfigManager) : BaseRepositoryImpl<InventoryLocalRepository>(localRepository, apiClient, userID), InventoryRepository {
|
||||||
|
|
|
||||||
|
|
@ -9,13 +9,16 @@ import com.habitrpg.android.habitica.models.Achievement
|
||||||
import com.habitrpg.android.habitica.models.inventory.Quest
|
import com.habitrpg.android.habitica.models.inventory.Quest
|
||||||
import com.habitrpg.android.habitica.models.members.Member
|
import com.habitrpg.android.habitica.models.members.Member
|
||||||
import com.habitrpg.android.habitica.models.responses.PostChatMessageResult
|
import com.habitrpg.android.habitica.models.responses.PostChatMessageResult
|
||||||
import com.habitrpg.android.habitica.models.social.*
|
import com.habitrpg.android.habitica.models.social.ChatMessage
|
||||||
|
import com.habitrpg.android.habitica.models.social.FindUsernameResult
|
||||||
|
import com.habitrpg.android.habitica.models.social.Group
|
||||||
|
import com.habitrpg.android.habitica.models.social.GroupMembership
|
||||||
|
import com.habitrpg.android.habitica.models.social.InboxConversation
|
||||||
import com.habitrpg.android.habitica.models.user.User
|
import com.habitrpg.android.habitica.models.user.User
|
||||||
import io.reactivex.rxjava3.core.Flowable
|
import io.reactivex.rxjava3.core.Flowable
|
||||||
import io.reactivex.rxjava3.core.Single
|
import io.reactivex.rxjava3.core.Single
|
||||||
import retrofit2.HttpException
|
import retrofit2.HttpException
|
||||||
import java.util.*
|
import java.util.UUID
|
||||||
import kotlin.collections.HashMap
|
|
||||||
|
|
||||||
class SocialRepositoryImpl(localRepository: SocialLocalRepository, apiClient: ApiClient, userID: String) : BaseRepositoryImpl<SocialLocalRepository>(localRepository, apiClient, userID), SocialRepository {
|
class SocialRepositoryImpl(localRepository: SocialLocalRepository, apiClient: ApiClient, userID: String) : BaseRepositoryImpl<SocialLocalRepository>(localRepository, apiClient, userID), SocialRepository {
|
||||||
override fun transferGroupOwnership(groupID: String, userID: String): Flowable<Group> {
|
override fun transferGroupOwnership(groupID: String, userID: String): Flowable<Group> {
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,11 @@ import com.habitrpg.android.habitica.models.responses.BulkTaskScoringData
|
||||||
import com.habitrpg.android.habitica.models.responses.TaskDirection
|
import com.habitrpg.android.habitica.models.responses.TaskDirection
|
||||||
import com.habitrpg.android.habitica.models.responses.TaskDirectionData
|
import com.habitrpg.android.habitica.models.responses.TaskDirectionData
|
||||||
import com.habitrpg.android.habitica.models.responses.TaskScoringResult
|
import com.habitrpg.android.habitica.models.responses.TaskScoringResult
|
||||||
import com.habitrpg.android.habitica.models.tasks.*
|
import com.habitrpg.android.habitica.models.tasks.ChecklistItem
|
||||||
|
import com.habitrpg.android.habitica.models.tasks.Task
|
||||||
|
import com.habitrpg.android.habitica.models.tasks.TaskList
|
||||||
|
import com.habitrpg.android.habitica.models.tasks.TaskType
|
||||||
|
import com.habitrpg.android.habitica.models.tasks.TasksOrder
|
||||||
import com.habitrpg.android.habitica.models.user.OwnedItem
|
import com.habitrpg.android.habitica.models.user.OwnedItem
|
||||||
import com.habitrpg.android.habitica.models.user.User
|
import com.habitrpg.android.habitica.models.user.User
|
||||||
import com.habitrpg.android.habitica.proxy.AnalyticsManager
|
import com.habitrpg.android.habitica.proxy.AnalyticsManager
|
||||||
|
|
@ -20,7 +24,9 @@ import io.reactivex.rxjava3.core.Flowable
|
||||||
import io.reactivex.rxjava3.core.Maybe
|
import io.reactivex.rxjava3.core.Maybe
|
||||||
import io.reactivex.rxjava3.core.Single
|
import io.reactivex.rxjava3.core.Single
|
||||||
import java.text.SimpleDateFormat
|
import java.text.SimpleDateFormat
|
||||||
import java.util.*
|
import java.util.Date
|
||||||
|
import java.util.Locale
|
||||||
|
import java.util.UUID
|
||||||
|
|
||||||
class TaskRepositoryImpl(localRepository: TaskLocalRepository, apiClient: ApiClient, userID: String, val appConfigManager: AppConfigManager, val analyticsManager: AnalyticsManager) : BaseRepositoryImpl<TaskLocalRepository>(localRepository, apiClient, userID), TaskRepository {
|
class TaskRepositoryImpl(localRepository: TaskLocalRepository, apiClient: ApiClient, userID: String, val appConfigManager: AppConfigManager, val analyticsManager: AnalyticsManager) : BaseRepositoryImpl<TaskLocalRepository>(localRepository, apiClient, userID), TaskRepository {
|
||||||
private var lastTaskAction: Long = 0
|
private var lastTaskAction: Long = 0
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,8 @@ import com.habitrpg.android.habitica.models.user.User
|
||||||
import io.reactivex.rxjava3.core.Flowable
|
import io.reactivex.rxjava3.core.Flowable
|
||||||
import io.reactivex.rxjava3.core.Maybe
|
import io.reactivex.rxjava3.core.Maybe
|
||||||
import io.reactivex.rxjava3.functions.BiFunction
|
import io.reactivex.rxjava3.functions.BiFunction
|
||||||
import java.util.*
|
import java.util.Date
|
||||||
|
import java.util.GregorianCalendar
|
||||||
import java.util.concurrent.TimeUnit
|
import java.util.concurrent.TimeUnit
|
||||||
|
|
||||||
class UserRepositoryImpl(localRepository: UserLocalRepository, apiClient: ApiClient, userID: String, private val taskRepository: TaskRepository, var appConfigManager: AppConfigManager) : BaseRepositoryImpl<UserLocalRepository>(localRepository, apiClient, userID), UserRepository {
|
class UserRepositoryImpl(localRepository: UserLocalRepository, apiClient: ApiClient, userID: String, private val taskRepository: TaskRepository, var appConfigManager: AppConfigManager) : BaseRepositoryImpl<UserLocalRepository>(localRepository, apiClient, userID), UserRepository {
|
||||||
|
|
@ -380,7 +381,8 @@ class UserRepositoryImpl(localRepository: UserLocalRepository, apiClient: ApiCli
|
||||||
|
|
||||||
override fun retrieveTeamPlan(teamID: String): Flowable<Group> {
|
override fun retrieveTeamPlan(teamID: String): Flowable<Group> {
|
||||||
return Flowable.zip(
|
return Flowable.zip(
|
||||||
apiClient.getGroup(teamID), apiClient.getTeamPlanTasks(teamID)) { team, tasks ->
|
apiClient.getGroup(teamID), apiClient.getTeamPlanTasks(teamID)
|
||||||
|
) { team, tasks ->
|
||||||
team.tasks = tasks
|
team.tasks = tasks
|
||||||
team
|
team
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,16 @@
|
||||||
package com.habitrpg.android.habitica.data.local
|
package com.habitrpg.android.habitica.data.local
|
||||||
|
|
||||||
import com.habitrpg.android.habitica.models.inventory.*
|
import com.habitrpg.android.habitica.models.inventory.Equipment
|
||||||
|
import com.habitrpg.android.habitica.models.inventory.Item
|
||||||
|
import com.habitrpg.android.habitica.models.inventory.Mount
|
||||||
|
import com.habitrpg.android.habitica.models.inventory.Pet
|
||||||
|
import com.habitrpg.android.habitica.models.inventory.QuestContent
|
||||||
import com.habitrpg.android.habitica.models.shops.ShopItem
|
import com.habitrpg.android.habitica.models.shops.ShopItem
|
||||||
import com.habitrpg.android.habitica.models.user.*
|
import com.habitrpg.android.habitica.models.user.Items
|
||||||
|
import com.habitrpg.android.habitica.models.user.OwnedItem
|
||||||
|
import com.habitrpg.android.habitica.models.user.OwnedMount
|
||||||
|
import com.habitrpg.android.habitica.models.user.OwnedPet
|
||||||
|
import com.habitrpg.android.habitica.models.user.User
|
||||||
import io.reactivex.rxjava3.core.Flowable
|
import io.reactivex.rxjava3.core.Flowable
|
||||||
|
|
||||||
interface InventoryLocalRepository : ContentLocalRepository {
|
interface InventoryLocalRepository : ContentLocalRepository {
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,10 @@
|
||||||
package com.habitrpg.android.habitica.data.local
|
package com.habitrpg.android.habitica.data.local
|
||||||
|
|
||||||
import com.habitrpg.android.habitica.models.*
|
import com.habitrpg.android.habitica.models.Achievement
|
||||||
|
import com.habitrpg.android.habitica.models.QuestAchievement
|
||||||
|
import com.habitrpg.android.habitica.models.Skill
|
||||||
|
import com.habitrpg.android.habitica.models.TeamPlan
|
||||||
|
import com.habitrpg.android.habitica.models.TutorialStep
|
||||||
import com.habitrpg.android.habitica.models.social.ChatMessage
|
import com.habitrpg.android.habitica.models.social.ChatMessage
|
||||||
import com.habitrpg.android.habitica.models.social.Group
|
import com.habitrpg.android.habitica.models.social.Group
|
||||||
import com.habitrpg.android.habitica.models.user.User
|
import com.habitrpg.android.habitica.models.user.User
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,6 @@ import hu.akarnokd.rxjava3.bridge.RxJavaBridge
|
||||||
import io.reactivex.rxjava3.core.Flowable
|
import io.reactivex.rxjava3.core.Flowable
|
||||||
import io.realm.Realm
|
import io.realm.Realm
|
||||||
import io.realm.Sort
|
import io.realm.Sort
|
||||||
import java.util.*
|
|
||||||
|
|
||||||
class RealmChallengeLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm), ChallengeLocalRepository {
|
class RealmChallengeLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm), ChallengeLocalRepository {
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ import com.habitrpg.android.habitica.models.inventory.Customization
|
||||||
import hu.akarnokd.rxjava3.bridge.RxJavaBridge
|
import hu.akarnokd.rxjava3.bridge.RxJavaBridge
|
||||||
import io.reactivex.rxjava3.core.Flowable
|
import io.reactivex.rxjava3.core.Flowable
|
||||||
import io.realm.Realm
|
import io.realm.Realm
|
||||||
import java.util.*
|
import java.util.Date
|
||||||
|
|
||||||
class RealmCustomizationLocalRepository(realm: Realm) : RealmContentLocalRepository(realm), CustomizationLocalRepository {
|
class RealmCustomizationLocalRepository(realm: Realm) : RealmContentLocalRepository(realm), CustomizationLocalRepository {
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,18 +2,29 @@ package com.habitrpg.android.habitica.data.local.implementation
|
||||||
|
|
||||||
import com.habitrpg.android.habitica.data.local.InventoryLocalRepository
|
import com.habitrpg.android.habitica.data.local.InventoryLocalRepository
|
||||||
import com.habitrpg.android.habitica.helpers.RxErrorHandler
|
import com.habitrpg.android.habitica.helpers.RxErrorHandler
|
||||||
import com.habitrpg.android.habitica.models.inventory.*
|
import com.habitrpg.android.habitica.models.inventory.Egg
|
||||||
|
import com.habitrpg.android.habitica.models.inventory.Equipment
|
||||||
|
import com.habitrpg.android.habitica.models.inventory.Food
|
||||||
|
import com.habitrpg.android.habitica.models.inventory.HatchingPotion
|
||||||
|
import com.habitrpg.android.habitica.models.inventory.Item
|
||||||
|
import com.habitrpg.android.habitica.models.inventory.Mount
|
||||||
|
import com.habitrpg.android.habitica.models.inventory.Pet
|
||||||
|
import com.habitrpg.android.habitica.models.inventory.QuestContent
|
||||||
|
import com.habitrpg.android.habitica.models.inventory.SpecialItem
|
||||||
import com.habitrpg.android.habitica.models.shops.ShopItem
|
import com.habitrpg.android.habitica.models.shops.ShopItem
|
||||||
import com.habitrpg.android.habitica.models.user.*
|
import com.habitrpg.android.habitica.models.user.Items
|
||||||
|
import com.habitrpg.android.habitica.models.user.OwnedItem
|
||||||
|
import com.habitrpg.android.habitica.models.user.OwnedMount
|
||||||
|
import com.habitrpg.android.habitica.models.user.OwnedPet
|
||||||
|
import com.habitrpg.android.habitica.models.user.User
|
||||||
import hu.akarnokd.rxjava3.bridge.RxJavaBridge
|
import hu.akarnokd.rxjava3.bridge.RxJavaBridge
|
||||||
import io.reactivex.rxjava3.core.Flowable
|
import io.reactivex.rxjava3.core.Flowable
|
||||||
import io.realm.Realm
|
import io.realm.Realm
|
||||||
import io.realm.RealmObject
|
import io.realm.RealmObject
|
||||||
import io.realm.Sort
|
import io.realm.Sort
|
||||||
import io.realm.kotlin.isManaged
|
|
||||||
import java.text.SimpleDateFormat
|
import java.text.SimpleDateFormat
|
||||||
import java.util.*
|
import java.util.Date
|
||||||
import kotlin.collections.HashMap
|
import java.util.Locale
|
||||||
|
|
||||||
class RealmInventoryLocalRepository(realm: Realm) : RealmContentLocalRepository(realm), InventoryLocalRepository {
|
class RealmInventoryLocalRepository(realm: Realm) : RealmContentLocalRepository(realm), InventoryLocalRepository {
|
||||||
override fun getQuestContent(keys: List<String>): Flowable<out List<QuestContent>> {
|
override fun getQuestContent(keys: List<String>): Flowable<out List<QuestContent>> {
|
||||||
|
|
|
||||||
|
|
@ -3,13 +3,16 @@ package com.habitrpg.android.habitica.data.local.implementation
|
||||||
import com.habitrpg.android.habitica.data.local.SocialLocalRepository
|
import com.habitrpg.android.habitica.data.local.SocialLocalRepository
|
||||||
import com.habitrpg.android.habitica.models.inventory.Quest
|
import com.habitrpg.android.habitica.models.inventory.Quest
|
||||||
import com.habitrpg.android.habitica.models.members.Member
|
import com.habitrpg.android.habitica.models.members.Member
|
||||||
import com.habitrpg.android.habitica.models.social.*
|
import com.habitrpg.android.habitica.models.social.ChatMessage
|
||||||
|
import com.habitrpg.android.habitica.models.social.ChatMessageLike
|
||||||
|
import com.habitrpg.android.habitica.models.social.Group
|
||||||
|
import com.habitrpg.android.habitica.models.social.GroupMembership
|
||||||
|
import com.habitrpg.android.habitica.models.social.InboxConversation
|
||||||
import com.habitrpg.android.habitica.models.user.User
|
import com.habitrpg.android.habitica.models.user.User
|
||||||
import hu.akarnokd.rxjava3.bridge.RxJavaBridge
|
import hu.akarnokd.rxjava3.bridge.RxJavaBridge
|
||||||
import io.reactivex.rxjava3.core.Flowable
|
import io.reactivex.rxjava3.core.Flowable
|
||||||
import io.realm.Realm
|
import io.realm.Realm
|
||||||
import io.realm.Sort
|
import io.realm.Sort
|
||||||
import java.util.*
|
|
||||||
|
|
||||||
class RealmSocialLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm), SocialLocalRepository {
|
class RealmSocialLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm), SocialLocalRepository {
|
||||||
|
|
||||||
|
|
@ -58,9 +61,9 @@ class RealmSocialLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm)
|
||||||
messages.forEach { it.userID = userID }
|
messages.forEach { it.userID = userID }
|
||||||
for (message in messages) {
|
for (message in messages) {
|
||||||
val existingMessage = realm.where(ChatMessage::class.java)
|
val existingMessage = realm.where(ChatMessage::class.java)
|
||||||
.equalTo("id", message.id)
|
.equalTo("id", message.id)
|
||||||
.findAll()
|
.findAll()
|
||||||
.firstOrNull()
|
.firstOrNull()
|
||||||
message.isSeen = existingMessage != null
|
message.isSeen = existingMessage != null
|
||||||
}
|
}
|
||||||
save(messages)
|
save(messages)
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,12 @@
|
||||||
package com.habitrpg.android.habitica.data.local.implementation
|
package com.habitrpg.android.habitica.data.local.implementation
|
||||||
|
|
||||||
import com.habitrpg.android.habitica.data.local.TaskLocalRepository
|
import com.habitrpg.android.habitica.data.local.TaskLocalRepository
|
||||||
import com.habitrpg.android.habitica.models.tasks.*
|
import com.habitrpg.android.habitica.models.tasks.ChecklistItem
|
||||||
|
import com.habitrpg.android.habitica.models.tasks.RemindersItem
|
||||||
|
import com.habitrpg.android.habitica.models.tasks.Task
|
||||||
|
import com.habitrpg.android.habitica.models.tasks.TaskList
|
||||||
|
import com.habitrpg.android.habitica.models.tasks.TaskType
|
||||||
|
import com.habitrpg.android.habitica.models.tasks.TasksOrder
|
||||||
import com.habitrpg.android.habitica.models.user.User
|
import com.habitrpg.android.habitica.models.user.User
|
||||||
import hu.akarnokd.rxjava3.bridge.RxJavaBridge
|
import hu.akarnokd.rxjava3.bridge.RxJavaBridge
|
||||||
import io.reactivex.rxjava3.core.Flowable
|
import io.reactivex.rxjava3.core.Flowable
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,12 @@ package com.habitrpg.android.habitica.data.local.implementation
|
||||||
|
|
||||||
import com.habitrpg.android.habitica.data.local.UserLocalRepository
|
import com.habitrpg.android.habitica.data.local.UserLocalRepository
|
||||||
import com.habitrpg.android.habitica.data.local.UserQuestStatus
|
import com.habitrpg.android.habitica.data.local.UserQuestStatus
|
||||||
import com.habitrpg.android.habitica.models.*
|
import com.habitrpg.android.habitica.models.Achievement
|
||||||
|
import com.habitrpg.android.habitica.models.QuestAchievement
|
||||||
|
import com.habitrpg.android.habitica.models.Skill
|
||||||
|
import com.habitrpg.android.habitica.models.Tag
|
||||||
|
import com.habitrpg.android.habitica.models.TeamPlan
|
||||||
|
import com.habitrpg.android.habitica.models.TutorialStep
|
||||||
import com.habitrpg.android.habitica.models.social.ChatMessage
|
import com.habitrpg.android.habitica.models.social.ChatMessage
|
||||||
import com.habitrpg.android.habitica.models.social.Group
|
import com.habitrpg.android.habitica.models.social.Group
|
||||||
import com.habitrpg.android.habitica.models.user.User
|
import com.habitrpg.android.habitica.models.user.User
|
||||||
|
|
|
||||||
|
|
@ -3,8 +3,8 @@ package com.habitrpg.android.habitica.executors;
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import javax.inject.Singleton;
|
import javax.inject.Singleton;
|
||||||
|
|
||||||
import io.reactivex.rxjava3.core.Scheduler;
|
|
||||||
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
|
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
|
||||||
|
import io.reactivex.rxjava3.core.Scheduler;
|
||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
public class UIThread implements PostExecutionThread {
|
public class UIThread implements PostExecutionThread {
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ import android.content.Context
|
||||||
import android.content.res.Configuration
|
import android.content.res.Configuration
|
||||||
import android.util.TypedValue
|
import android.util.TypedValue
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import java.util.*
|
import java.util.Locale
|
||||||
|
|
||||||
val Context.layoutInflater: LayoutInflater
|
val Context.layoutInflater: LayoutInflater
|
||||||
get() = this.getSystemService(Service.LAYOUT_INFLATER_SERVICE) as LayoutInflater
|
get() = this.getSystemService(Service.LAYOUT_INFLATER_SERVICE) as LayoutInflater
|
||||||
|
|
|
||||||
|
|
@ -2,9 +2,13 @@ package com.habitrpg.android.habitica.extensions
|
||||||
|
|
||||||
import android.content.res.Resources
|
import android.content.res.Resources
|
||||||
import com.habitrpg.android.habitica.R
|
import com.habitrpg.android.habitica.R
|
||||||
import java.util.*
|
import java.util.Calendar
|
||||||
|
import java.util.Date
|
||||||
import kotlin.math.round
|
import kotlin.math.round
|
||||||
import kotlin.time.*
|
import kotlin.time.Duration
|
||||||
|
import kotlin.time.DurationUnit
|
||||||
|
import kotlin.time.ExperimentalTime
|
||||||
|
import kotlin.time.milliseconds
|
||||||
|
|
||||||
class DateUtils {
|
class DateUtils {
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,6 @@
|
||||||
package com.habitrpg.android.habitica.extensions
|
package com.habitrpg.android.habitica.extensions
|
||||||
|
|
||||||
import android.app.PendingIntent
|
import android.app.PendingIntent
|
||||||
import android.content.Context
|
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
|
|
||||||
fun withImmutableFlag(flags: Int): Int {
|
fun withImmutableFlag(flags: Int): Int {
|
||||||
|
|
@ -18,4 +17,4 @@ fun withMutableFlag(flags: Int): Int {
|
||||||
} else {
|
} else {
|
||||||
flags
|
flags
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,6 @@ import com.amplitude.api.Amplitude
|
||||||
import com.habitrpg.android.habitica.BuildConfig
|
import com.habitrpg.android.habitica.BuildConfig
|
||||||
import org.json.JSONException
|
import org.json.JSONException
|
||||||
import org.json.JSONObject
|
import org.json.JSONObject
|
||||||
import java.util.HashMap
|
|
||||||
|
|
||||||
object AmplitudeManager {
|
object AmplitudeManager {
|
||||||
var EVENT_CATEGORY_BEHAVIOUR = "behaviour"
|
var EVENT_CATEGORY_BEHAVIOUR = "behaviour"
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,6 @@ import com.habitrpg.android.habitica.models.WorldState
|
||||||
import com.habitrpg.android.habitica.models.promotions.HabiticaPromotion
|
import com.habitrpg.android.habitica.models.promotions.HabiticaPromotion
|
||||||
import com.habitrpg.android.habitica.models.promotions.HabiticaWebPromotion
|
import com.habitrpg.android.habitica.models.promotions.HabiticaWebPromotion
|
||||||
import com.habitrpg.android.habitica.models.promotions.getHabiticaPromotionFromKey
|
import com.habitrpg.android.habitica.models.promotions.getHabiticaPromotionFromKey
|
||||||
import java.util.*
|
|
||||||
|
|
||||||
class AppConfigManager(contentRepository: ContentRepository?) {
|
class AppConfigManager(contentRepository: ContentRepository?) {
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
package com.habitrpg.android.habitica.helpers
|
package com.habitrpg.android.habitica.helpers
|
||||||
|
|
||||||
import java.util.*
|
import java.util.Date
|
||||||
|
|
||||||
class AprilFoolsHandler {
|
class AprilFoolsHandler {
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@ import java.io.IOException
|
||||||
import java.io.InputStreamReader
|
import java.io.InputStreamReader
|
||||||
import java.net.HttpURLConnection
|
import java.net.HttpURLConnection
|
||||||
import java.net.URL
|
import java.net.URL
|
||||||
import java.util.*
|
import java.util.Locale
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2017 Jared Rummler
|
* Copyright (C) 2017 Jared Rummler
|
||||||
|
|
@ -434,9 +434,9 @@ object DeviceName {
|
||||||
val info = DeviceInfo(json)
|
val info = DeviceInfo(json)
|
||||||
if (codename.equals(info.codename, ignoreCase = true) && model == null ||
|
if (codename.equals(info.codename, ignoreCase = true) && model == null ||
|
||||||
codename.equals(
|
codename.equals(
|
||||||
info.codename,
|
info.codename,
|
||||||
ignoreCase = true
|
ignoreCase = true
|
||||||
) && model.equals(info.model, ignoreCase = true)
|
) && model.equals(info.model, ignoreCase = true)
|
||||||
) {
|
) {
|
||||||
// Save to SharedPreferences so we don't need to make another request.
|
// Save to SharedPreferences so we don't need to make another request.
|
||||||
val editor = prefs.edit()
|
val editor = prefs.edit()
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@ package com.habitrpg.android.habitica.helpers
|
||||||
|
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import java.text.NumberFormat
|
import java.text.NumberFormat
|
||||||
import java.util.*
|
import java.util.Locale
|
||||||
import kotlin.math.ceil
|
import kotlin.math.ceil
|
||||||
import kotlin.math.floor
|
import kotlin.math.floor
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -13,11 +13,26 @@ import java.io.ByteArrayInputStream
|
||||||
import java.io.ByteArrayOutputStream
|
import java.io.ByteArrayOutputStream
|
||||||
import java.io.IOException
|
import java.io.IOException
|
||||||
import java.io.UnsupportedEncodingException
|
import java.io.UnsupportedEncodingException
|
||||||
import java.lang.IllegalStateException
|
|
||||||
import java.math.BigInteger
|
import java.math.BigInteger
|
||||||
import java.security.*
|
import java.security.GeneralSecurityException
|
||||||
import java.util.*
|
import java.security.InvalidAlgorithmParameterException
|
||||||
import javax.crypto.*
|
import java.security.Key
|
||||||
|
import java.security.KeyPairGenerator
|
||||||
|
import java.security.KeyStore
|
||||||
|
import java.security.KeyStoreException
|
||||||
|
import java.security.NoSuchAlgorithmException
|
||||||
|
import java.security.NoSuchProviderException
|
||||||
|
import java.security.SecureRandom
|
||||||
|
import java.security.UnrecoverableKeyException
|
||||||
|
import java.util.Calendar
|
||||||
|
import javax.crypto.BadPaddingException
|
||||||
|
import javax.crypto.Cipher
|
||||||
|
import javax.crypto.CipherInputStream
|
||||||
|
import javax.crypto.CipherOutputStream
|
||||||
|
import javax.crypto.IllegalBlockSizeException
|
||||||
|
import javax.crypto.KeyGenerator
|
||||||
|
import javax.crypto.NoSuchPaddingException
|
||||||
|
import javax.crypto.SecretKey
|
||||||
import javax.crypto.spec.GCMParameterSpec
|
import javax.crypto.spec.GCMParameterSpec
|
||||||
import javax.crypto.spec.SecretKeySpec
|
import javax.crypto.spec.SecretKeySpec
|
||||||
import javax.security.auth.x500.X500Principal
|
import javax.security.auth.x500.X500Principal
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
package com.habitrpg.android.habitica.helpers
|
package com.habitrpg.android.habitica.helpers
|
||||||
|
|
||||||
import java.util.*
|
import java.util.Locale
|
||||||
|
|
||||||
class LanguageHelper(languageSharedPref: String?) {
|
class LanguageHelper(languageSharedPref: String?) {
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ import androidx.navigation.NavController
|
||||||
import androidx.navigation.NavDeepLinkRequest
|
import androidx.navigation.NavDeepLinkRequest
|
||||||
import androidx.navigation.NavDirections
|
import androidx.navigation.NavDirections
|
||||||
import java.lang.ref.WeakReference
|
import java.lang.ref.WeakReference
|
||||||
import java.util.*
|
import java.util.Date
|
||||||
import kotlin.math.abs
|
import kotlin.math.abs
|
||||||
|
|
||||||
object MainNavigationController {
|
object MainNavigationController {
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ import io.reactivex.rxjava3.core.Flowable
|
||||||
import io.reactivex.rxjava3.subjects.BehaviorSubject
|
import io.reactivex.rxjava3.subjects.BehaviorSubject
|
||||||
import io.reactivex.rxjava3.subjects.PublishSubject
|
import io.reactivex.rxjava3.subjects.PublishSubject
|
||||||
import java.lang.ref.WeakReference
|
import java.lang.ref.WeakReference
|
||||||
import java.util.*
|
import java.util.Date
|
||||||
|
|
||||||
class NotificationsManager {
|
class NotificationsManager {
|
||||||
private val displayNotificationSubject = PublishSubject.create<Notification>()
|
private val displayNotificationSubject = PublishSubject.create<Notification>()
|
||||||
|
|
@ -19,9 +19,9 @@ class NotificationsManager {
|
||||||
private var lastNotificationHandling: Date? = null
|
private var lastNotificationHandling: Date? = null
|
||||||
|
|
||||||
val displayNotificationEvents: Flowable<Notification>
|
val displayNotificationEvents: Flowable<Notification>
|
||||||
get() {
|
get() {
|
||||||
return displayNotificationSubject.toFlowable(BackpressureStrategy.DROP)
|
return displayNotificationSubject.toFlowable(BackpressureStrategy.DROP)
|
||||||
}
|
}
|
||||||
|
|
||||||
init {
|
init {
|
||||||
this.seenNotifications = HashMap()
|
this.seenNotifications = HashMap()
|
||||||
|
|
|
||||||
|
|
@ -1,21 +1,27 @@
|
||||||
package com.habitrpg.android.habitica.helpers
|
package com.habitrpg.android.habitica.helpers
|
||||||
|
|
||||||
import android.app.Activity
|
import android.app.Activity
|
||||||
import android.app.Application
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
import android.os.Bundle
|
|
||||||
import androidx.core.content.edit
|
import androidx.core.content.edit
|
||||||
import androidx.core.os.bundleOf
|
import androidx.core.os.bundleOf
|
||||||
import com.android.billingclient.api.*
|
import com.android.billingclient.api.AcknowledgePurchaseParams
|
||||||
import com.android.billingclient.api.BillingClient.ConnectionState.DISCONNECTED
|
import com.android.billingclient.api.BillingClient
|
||||||
import com.google.api.Billing
|
import com.android.billingclient.api.BillingClientStateListener
|
||||||
import com.google.firebase.analytics.FirebaseAnalytics
|
import com.android.billingclient.api.BillingFlowParams
|
||||||
|
import com.android.billingclient.api.BillingResult
|
||||||
|
import com.android.billingclient.api.ConsumeParams
|
||||||
|
import com.android.billingclient.api.Purchase
|
||||||
|
import com.android.billingclient.api.PurchasesResponseListener
|
||||||
|
import com.android.billingclient.api.PurchasesUpdatedListener
|
||||||
|
import com.android.billingclient.api.SkuDetails
|
||||||
|
import com.android.billingclient.api.SkuDetailsParams
|
||||||
|
import com.android.billingclient.api.queryPurchasesAsync
|
||||||
|
import com.android.billingclient.api.querySkuDetails
|
||||||
import com.google.firebase.crashlytics.FirebaseCrashlytics
|
import com.google.firebase.crashlytics.FirebaseCrashlytics
|
||||||
import com.habitrpg.android.habitica.HabiticaBaseApplication
|
import com.habitrpg.android.habitica.HabiticaBaseApplication
|
||||||
import com.habitrpg.android.habitica.R
|
import com.habitrpg.android.habitica.R
|
||||||
import com.habitrpg.android.habitica.data.ApiClient
|
import com.habitrpg.android.habitica.data.ApiClient
|
||||||
import com.habitrpg.android.habitica.data.UserRepository
|
|
||||||
import com.habitrpg.android.habitica.extensions.addOkButton
|
import com.habitrpg.android.habitica.extensions.addOkButton
|
||||||
import com.habitrpg.android.habitica.extensions.subscribeWithErrorHandler
|
import com.habitrpg.android.habitica.extensions.subscribeWithErrorHandler
|
||||||
import com.habitrpg.android.habitica.models.IAPGift
|
import com.habitrpg.android.habitica.models.IAPGift
|
||||||
|
|
@ -28,12 +34,14 @@ import com.habitrpg.android.habitica.ui.activities.PurchaseActivity
|
||||||
import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel
|
import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel
|
||||||
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
|
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
|
||||||
import io.reactivex.rxjava3.core.Flowable
|
import io.reactivex.rxjava3.core.Flowable
|
||||||
import kotlinx.coroutines.*
|
import kotlinx.coroutines.CoroutineScope
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.delay
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
import kotlinx.coroutines.withContext
|
||||||
import org.json.JSONObject
|
import org.json.JSONObject
|
||||||
import retrofit2.HttpException
|
import retrofit2.HttpException
|
||||||
|
import java.util.Date
|
||||||
import java.util.*
|
|
||||||
|
|
||||||
|
|
||||||
open class PurchaseHandler(
|
open class PurchaseHandler(
|
||||||
private val context: Context,
|
private val context: Context,
|
||||||
|
|
@ -72,7 +80,6 @@ open class PurchaseHandler(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
init {
|
init {
|
||||||
startListening()
|
startListening()
|
||||||
}
|
}
|
||||||
|
|
@ -86,9 +93,9 @@ open class PurchaseHandler(
|
||||||
DISCONNECTED;
|
DISCONNECTED;
|
||||||
|
|
||||||
val canMaybePurchase: Boolean
|
val canMaybePurchase: Boolean
|
||||||
get() {
|
get() {
|
||||||
return this == UNITITIALIZED || this == READY
|
return this == UNITITIALIZED || this == READY
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun startListening() {
|
fun startListening() {
|
||||||
|
|
@ -169,7 +176,6 @@ open class PurchaseHandler(
|
||||||
.setPurchaseToken(purchase.purchaseToken)
|
.setPurchaseToken(purchase.purchaseToken)
|
||||||
.build()
|
.build()
|
||||||
billingClient.consumeAsync(params) { result, message ->
|
billingClient.consumeAsync(params) { result, message ->
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -209,7 +215,8 @@ open class PurchaseHandler(
|
||||||
val plan = userViewModel.user.value?.purchased?.plan
|
val plan = userViewModel.user.value?.purchased?.plan
|
||||||
if (plan?.isActive == true) {
|
if (plan?.isActive == true) {
|
||||||
if (plan.additionalData?.data?.orderId == purchase.orderId &&
|
if (plan.additionalData?.data?.orderId == purchase.orderId &&
|
||||||
(plan.dateTerminated != null == purchase.isAutoRenewing)) {
|
(plan.dateTerminated != null == purchase.isAutoRenewing)
|
||||||
|
) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -291,7 +298,6 @@ open class PurchaseHandler(
|
||||||
.flatMap { userViewModel.userRepository.retrieveUser(false, true) }
|
.flatMap { userViewModel.userRepository.retrieveUser(false, true) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private fun durationString(sku: String): String {
|
private fun durationString(sku: String): String {
|
||||||
return when (sku) {
|
return when (sku) {
|
||||||
PurchaseTypes.Subscription1MonthNoRenew, PurchaseTypes.Subscription1Month -> "1"
|
PurchaseTypes.Subscription1MonthNoRenew, PurchaseTypes.Subscription1Month -> "1"
|
||||||
|
|
@ -383,7 +389,7 @@ open class PurchaseHandler(
|
||||||
suspend fun retryUntil(
|
suspend fun retryUntil(
|
||||||
times: Int = Int.MAX_VALUE,
|
times: Int = Int.MAX_VALUE,
|
||||||
initialDelay: Long = 100, // 0.1 second
|
initialDelay: Long = 100, // 0.1 second
|
||||||
maxDelay: Long = 1000, // 1 second
|
maxDelay: Long = 1000, // 1 second
|
||||||
factor: Double = 2.0,
|
factor: Double = 2.0,
|
||||||
block: suspend () -> Boolean
|
block: suspend () -> Boolean
|
||||||
) {
|
) {
|
||||||
|
|
@ -393,4 +399,4 @@ suspend fun retryUntil(
|
||||||
delay(currentDelay)
|
delay(currentDelay)
|
||||||
currentDelay = (currentDelay * factor).toLong().coerceAtMost(maxDelay)
|
currentDelay = (currentDelay * factor).toLong().coerceAtMost(maxDelay)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ import android.os.Parcel
|
||||||
import android.os.Parcelable
|
import android.os.Parcelable
|
||||||
import androidx.fragment.app.FragmentManager
|
import androidx.fragment.app.FragmentManager
|
||||||
import com.willowtreeapps.signinwithapplebutton.SignInWithAppleConfiguration
|
import com.willowtreeapps.signinwithapplebutton.SignInWithAppleConfiguration
|
||||||
import java.util.*
|
import java.util.UUID
|
||||||
|
|
||||||
class SignInWithAppleService(
|
class SignInWithAppleService(
|
||||||
private val fragmentManager: FragmentManager,
|
private val fragmentManager: FragmentManager,
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,8 @@ import com.habitrpg.android.habitica.receivers.TaskReceiver
|
||||||
import com.habitrpg.shared.habitica.HLogger
|
import com.habitrpg.shared.habitica.HLogger
|
||||||
import com.habitrpg.shared.habitica.LogLevel
|
import com.habitrpg.shared.habitica.LogLevel
|
||||||
import io.reactivex.rxjava3.core.Flowable
|
import io.reactivex.rxjava3.core.Flowable
|
||||||
import java.util.*
|
import java.util.Calendar
|
||||||
|
import java.util.Date
|
||||||
|
|
||||||
class TaskAlarmManager(private var context: Context, private var taskRepository: TaskRepository, private var userId: String) {
|
class TaskAlarmManager(private var context: Context, private var taskRepository: TaskRepository, private var userId: String) {
|
||||||
private val am: AlarmManager? = context.getSystemService(Context.ALARM_SERVICE) as? AlarmManager
|
private val am: AlarmManager? = context.getSystemService(Context.ALARM_SERVICE) as? AlarmManager
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,6 @@ import io.realm.Case
|
||||||
import io.realm.OrderedRealmCollection
|
import io.realm.OrderedRealmCollection
|
||||||
import io.realm.RealmQuery
|
import io.realm.RealmQuery
|
||||||
import io.realm.Sort
|
import io.realm.Sort
|
||||||
import java.util.*
|
|
||||||
|
|
||||||
class TaskFilterHelper {
|
class TaskFilterHelper {
|
||||||
var searchQuery: String? = null
|
var searchQuery: String? = null
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,6 @@ import com.habitrpg.android.habitica.R
|
||||||
import com.habitrpg.android.habitica.models.Avatar
|
import com.habitrpg.android.habitica.models.Avatar
|
||||||
import com.habitrpg.android.habitica.models.inventory.Equipment
|
import com.habitrpg.android.habitica.models.inventory.Equipment
|
||||||
import com.habitrpg.android.habitica.models.user.Stats
|
import com.habitrpg.android.habitica.models.user.Stats
|
||||||
import java.util.*
|
|
||||||
|
|
||||||
class UserStatComputer {
|
class UserStatComputer {
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -11,12 +11,12 @@ import androidx.core.app.Person
|
||||||
import androidx.core.app.RemoteInput
|
import androidx.core.app.RemoteInput
|
||||||
import androidx.core.os.bundleOf
|
import androidx.core.os.bundleOf
|
||||||
import com.habitrpg.android.habitica.R
|
import com.habitrpg.android.habitica.R
|
||||||
import com.habitrpg.android.habitica.extensions.withImmutableFlag
|
|
||||||
import com.habitrpg.android.habitica.extensions.withMutableFlag
|
import com.habitrpg.android.habitica.extensions.withMutableFlag
|
||||||
import com.habitrpg.android.habitica.receivers.LocalNotificationActionReceiver
|
import com.habitrpg.android.habitica.receivers.LocalNotificationActionReceiver
|
||||||
import com.habitrpg.android.habitica.ui.helpers.EmojiParser
|
import com.habitrpg.android.habitica.ui.helpers.EmojiParser
|
||||||
import java.text.SimpleDateFormat
|
import java.text.SimpleDateFormat
|
||||||
import java.util.*
|
import java.util.Date
|
||||||
|
import java.util.Locale
|
||||||
|
|
||||||
class GroupActivityNotification(context: Context, identifier: String?) : HabiticaLocalNotification(context, identifier) {
|
class GroupActivityNotification(context: Context, identifier: String?) : HabiticaLocalNotification(context, identifier) {
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ import androidx.core.app.NotificationManagerCompat
|
||||||
import com.habitrpg.android.habitica.R
|
import com.habitrpg.android.habitica.R
|
||||||
import com.habitrpg.android.habitica.extensions.withImmutableFlag
|
import com.habitrpg.android.habitica.extensions.withImmutableFlag
|
||||||
import com.habitrpg.android.habitica.ui.activities.MainActivity
|
import com.habitrpg.android.habitica.ui.activities.MainActivity
|
||||||
import java.util.*
|
import java.util.Date
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by keithholliday on 6/28/16.
|
* Created by keithholliday on 6/28/16.
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,6 @@ import com.habitrpg.android.habitica.data.ApiClient
|
||||||
import com.habitrpg.android.habitica.helpers.AmplitudeManager
|
import com.habitrpg.android.habitica.helpers.AmplitudeManager
|
||||||
import com.habitrpg.android.habitica.helpers.RxErrorHandler
|
import com.habitrpg.android.habitica.helpers.RxErrorHandler
|
||||||
import com.habitrpg.android.habitica.models.user.User
|
import com.habitrpg.android.habitica.models.user.User
|
||||||
import java.util.*
|
|
||||||
|
|
||||||
class PushNotificationManager(var apiClient: ApiClient, private val sharedPreferences: SharedPreferences, private val context: Context) {
|
class PushNotificationManager(var apiClient: ApiClient, private val sharedPreferences: SharedPreferences, private val context: Context) {
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -80,4 +80,4 @@ constructor(
|
||||||
|
|
||||||
class RequestValues(val pet: Pet, val food: Food, val context: BaseActivity) :
|
class RequestValues(val pet: Pet, val food: Food, val context: BaseActivity) :
|
||||||
UseCase.RequestValues
|
UseCase.RequestValues
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -51,4 +51,4 @@ constructor(private val inventoryRepository: InventoryRepository, postExecutionT
|
||||||
}
|
}
|
||||||
|
|
||||||
class RequestValues(val potion: HatchingPotion, val egg: Egg, val context: BaseActivity) : UseCase.RequestValues
|
class RequestValues(val potion: HatchingPotion, val egg: Egg, val context: BaseActivity) : UseCase.RequestValues
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,6 @@ import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import android.widget.LinearLayout
|
import android.widget.LinearLayout
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import androidx.core.util.Pair
|
import androidx.core.util.Pair
|
||||||
import com.habitrpg.android.habitica.R
|
import com.habitrpg.android.habitica.R
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,6 @@ import com.habitrpg.android.habitica.models.tasks.Task
|
||||||
import com.habitrpg.android.habitica.models.tasks.TaskType
|
import com.habitrpg.android.habitica.models.tasks.TaskType
|
||||||
import com.habitrpg.android.habitica.models.user.Stats
|
import com.habitrpg.android.habitica.models.user.Stats
|
||||||
import com.habitrpg.android.habitica.models.user.User
|
import com.habitrpg.android.habitica.models.user.User
|
||||||
import java.util.*
|
|
||||||
import kotlin.math.min
|
import kotlin.math.min
|
||||||
import kotlin.math.pow
|
import kotlin.math.pow
|
||||||
import kotlin.math.roundToLong
|
import kotlin.math.roundToLong
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,14 @@
|
||||||
package com.habitrpg.android.habitica.models
|
package com.habitrpg.android.habitica.models
|
||||||
|
|
||||||
import com.habitrpg.android.habitica.models.inventory.*
|
import com.habitrpg.android.habitica.models.inventory.Customization
|
||||||
|
import com.habitrpg.android.habitica.models.inventory.Egg
|
||||||
|
import com.habitrpg.android.habitica.models.inventory.Equipment
|
||||||
|
import com.habitrpg.android.habitica.models.inventory.Food
|
||||||
|
import com.habitrpg.android.habitica.models.inventory.HatchingPotion
|
||||||
|
import com.habitrpg.android.habitica.models.inventory.Mount
|
||||||
|
import com.habitrpg.android.habitica.models.inventory.Pet
|
||||||
|
import com.habitrpg.android.habitica.models.inventory.QuestContent
|
||||||
|
import com.habitrpg.android.habitica.models.inventory.SpecialItem
|
||||||
import io.realm.RealmList
|
import io.realm.RealmList
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,19 @@
|
||||||
package com.habitrpg.android.habitica.models
|
package com.habitrpg.android.habitica.models
|
||||||
|
|
||||||
import com.habitrpg.android.habitica.models.notifications.*
|
import com.habitrpg.android.habitica.models.notifications.AchievementData
|
||||||
|
import com.habitrpg.android.habitica.models.notifications.ChallengeWonData
|
||||||
|
import com.habitrpg.android.habitica.models.notifications.FirstDropData
|
||||||
|
import com.habitrpg.android.habitica.models.notifications.GroupTaskApprovedData
|
||||||
|
import com.habitrpg.android.habitica.models.notifications.GroupTaskNeedsWorkData
|
||||||
|
import com.habitrpg.android.habitica.models.notifications.GroupTaskRequiresApprovalData
|
||||||
|
import com.habitrpg.android.habitica.models.notifications.GuildInvitationData
|
||||||
|
import com.habitrpg.android.habitica.models.notifications.LoginIncentiveData
|
||||||
|
import com.habitrpg.android.habitica.models.notifications.NewChatMessageData
|
||||||
|
import com.habitrpg.android.habitica.models.notifications.NewStuffData
|
||||||
|
import com.habitrpg.android.habitica.models.notifications.NotificationData
|
||||||
|
import com.habitrpg.android.habitica.models.notifications.PartyInvitationData
|
||||||
|
import com.habitrpg.android.habitica.models.notifications.QuestInvitationData
|
||||||
|
import com.habitrpg.android.habitica.models.notifications.UnallocatedPointsData
|
||||||
|
|
||||||
class Notification {
|
class Notification {
|
||||||
enum class Type(val type: String) {
|
enum class Type(val type: String) {
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,5 @@
|
||||||
package com.habitrpg.android.habitica.models
|
package com.habitrpg.android.habitica.models
|
||||||
|
|
||||||
import com.habitrpg.android.habitica.models.tasks.Task
|
|
||||||
import io.realm.RealmList
|
|
||||||
import io.realm.RealmObject
|
import io.realm.RealmObject
|
||||||
import io.realm.annotations.PrimaryKey
|
import io.realm.annotations.PrimaryKey
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ package com.habitrpg.android.habitica.models
|
||||||
import io.realm.RealmModel
|
import io.realm.RealmModel
|
||||||
import io.realm.RealmObject
|
import io.realm.RealmObject
|
||||||
import io.realm.annotations.RealmClass
|
import io.realm.annotations.RealmClass
|
||||||
import java.util.*
|
import java.util.Date
|
||||||
|
|
||||||
@RealmClass(embedded = true)
|
@RealmClass(embedded = true)
|
||||||
open class TutorialStep : RealmObject(), BaseMainObject {
|
open class TutorialStep : RealmObject(), BaseMainObject {
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,6 @@ import com.habitrpg.android.habitica.models.inventory.QuestRageStrike
|
||||||
import io.realm.RealmList
|
import io.realm.RealmList
|
||||||
import io.realm.RealmObject
|
import io.realm.RealmObject
|
||||||
import io.realm.annotations.PrimaryKey
|
import io.realm.annotations.PrimaryKey
|
||||||
import java.util.*
|
|
||||||
|
|
||||||
open class WorldState : RealmObject(), BaseObject {
|
open class WorldState : RealmObject(), BaseObject {
|
||||||
@PrimaryKey
|
@PrimaryKey
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ import com.google.gson.annotations.SerializedName
|
||||||
import io.realm.RealmModel
|
import io.realm.RealmModel
|
||||||
import io.realm.RealmObject
|
import io.realm.RealmObject
|
||||||
import io.realm.annotations.RealmClass
|
import io.realm.annotations.RealmClass
|
||||||
import java.util.*
|
import java.util.Date
|
||||||
|
|
||||||
@RealmClass(embedded = true)
|
@RealmClass(embedded = true)
|
||||||
open class WorldStateEvent : RealmObject(), BaseMainObject {
|
open class WorldStateEvent : RealmObject(), BaseMainObject {
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ package com.habitrpg.android.habitica.models.inventory
|
||||||
import com.habitrpg.android.habitica.models.BaseObject
|
import com.habitrpg.android.habitica.models.BaseObject
|
||||||
import io.realm.RealmObject
|
import io.realm.RealmObject
|
||||||
import io.realm.annotations.PrimaryKey
|
import io.realm.annotations.PrimaryKey
|
||||||
import java.util.*
|
import java.util.Date
|
||||||
|
|
||||||
open class Customization : RealmObject(), BaseObject {
|
open class Customization : RealmObject(), BaseObject {
|
||||||
@PrimaryKey
|
@PrimaryKey
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,6 @@ package com.habitrpg.android.habitica.models.inventory
|
||||||
|
|
||||||
import io.realm.RealmObject
|
import io.realm.RealmObject
|
||||||
import io.realm.annotations.PrimaryKey
|
import io.realm.annotations.PrimaryKey
|
||||||
import java.util.*
|
|
||||||
|
|
||||||
open class Egg : RealmObject(), Item {
|
open class Egg : RealmObject(), Item {
|
||||||
@PrimaryKey
|
@PrimaryKey
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,6 @@ package com.habitrpg.android.habitica.models.inventory
|
||||||
|
|
||||||
import com.google.gson.annotations.SerializedName
|
import com.google.gson.annotations.SerializedName
|
||||||
import com.habitrpg.android.habitica.models.BaseMainObject
|
import com.habitrpg.android.habitica.models.BaseMainObject
|
||||||
import com.habitrpg.android.habitica.models.BaseObject
|
|
||||||
import io.realm.RealmModel
|
import io.realm.RealmModel
|
||||||
import io.realm.RealmObject
|
import io.realm.RealmObject
|
||||||
import io.realm.annotations.PrimaryKey
|
import io.realm.annotations.PrimaryKey
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,6 @@ package com.habitrpg.android.habitica.models.inventory
|
||||||
|
|
||||||
import io.realm.RealmObject
|
import io.realm.RealmObject
|
||||||
import io.realm.annotations.PrimaryKey
|
import io.realm.annotations.PrimaryKey
|
||||||
import java.util.*
|
|
||||||
|
|
||||||
open class Food : RealmObject(), Item {
|
open class Food : RealmObject(), Item {
|
||||||
@PrimaryKey
|
@PrimaryKey
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,6 @@ package com.habitrpg.android.habitica.models.inventory
|
||||||
|
|
||||||
import io.realm.RealmObject
|
import io.realm.RealmObject
|
||||||
import io.realm.annotations.PrimaryKey
|
import io.realm.annotations.PrimaryKey
|
||||||
import java.util.*
|
|
||||||
|
|
||||||
open class HatchingPotion : RealmObject(), Item {
|
open class HatchingPotion : RealmObject(), Item {
|
||||||
@PrimaryKey
|
@PrimaryKey
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ package com.habitrpg.android.habitica.models.inventory
|
||||||
import com.habitrpg.android.habitica.models.BaseObject
|
import com.habitrpg.android.habitica.models.BaseObject
|
||||||
import io.realm.RealmModel
|
import io.realm.RealmModel
|
||||||
import io.realm.RealmObject
|
import io.realm.RealmObject
|
||||||
import java.util.*
|
import java.util.Date
|
||||||
|
|
||||||
open class ItemEvent : RealmObject(), BaseObject {
|
open class ItemEvent : RealmObject(), BaseObject {
|
||||||
var start: Date? = null
|
var start: Date? = null
|
||||||
|
|
|
||||||
|
|
@ -3,9 +3,15 @@ package com.habitrpg.android.habitica.models.members
|
||||||
import com.google.gson.annotations.SerializedName
|
import com.google.gson.annotations.SerializedName
|
||||||
import com.habitrpg.android.habitica.models.Avatar
|
import com.habitrpg.android.habitica.models.Avatar
|
||||||
import com.habitrpg.android.habitica.models.BaseMainObject
|
import com.habitrpg.android.habitica.models.BaseMainObject
|
||||||
import com.habitrpg.android.habitica.models.BaseObject
|
|
||||||
import com.habitrpg.android.habitica.models.social.UserParty
|
import com.habitrpg.android.habitica.models.social.UserParty
|
||||||
import com.habitrpg.android.habitica.models.user.*
|
import com.habitrpg.android.habitica.models.user.Authentication
|
||||||
|
import com.habitrpg.android.habitica.models.user.Backer
|
||||||
|
import com.habitrpg.android.habitica.models.user.ContributorInfo
|
||||||
|
import com.habitrpg.android.habitica.models.user.Inbox
|
||||||
|
import com.habitrpg.android.habitica.models.user.Items
|
||||||
|
import com.habitrpg.android.habitica.models.user.Outfit
|
||||||
|
import com.habitrpg.android.habitica.models.user.Profile
|
||||||
|
import com.habitrpg.android.habitica.models.user.Stats
|
||||||
import io.realm.RealmModel
|
import io.realm.RealmModel
|
||||||
import io.realm.RealmObject
|
import io.realm.RealmObject
|
||||||
import io.realm.annotations.PrimaryKey
|
import io.realm.annotations.PrimaryKey
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,6 @@ package com.habitrpg.android.habitica.models.promotions
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.graphics.Color
|
import android.graphics.Color
|
||||||
import android.graphics.drawable.BitmapDrawable
|
|
||||||
import android.graphics.drawable.Drawable
|
import android.graphics.drawable.Drawable
|
||||||
import android.graphics.drawable.ShapeDrawable
|
import android.graphics.drawable.ShapeDrawable
|
||||||
import android.view.View
|
import android.view.View
|
||||||
|
|
@ -14,10 +13,10 @@ import com.habitrpg.android.habitica.databinding.PurchaseGemViewBinding
|
||||||
import com.habitrpg.android.habitica.extensions.DateUtils
|
import com.habitrpg.android.habitica.extensions.DateUtils
|
||||||
import com.habitrpg.android.habitica.helpers.MainNavigationController
|
import com.habitrpg.android.habitica.helpers.MainNavigationController
|
||||||
import com.habitrpg.android.habitica.ui.fragments.PromoInfoFragment
|
import com.habitrpg.android.habitica.ui.fragments.PromoInfoFragment
|
||||||
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
|
|
||||||
import com.habitrpg.android.habitica.ui.views.promo.PromoMenuView
|
import com.habitrpg.android.habitica.ui.views.promo.PromoMenuView
|
||||||
import java.text.SimpleDateFormat
|
import java.text.SimpleDateFormat
|
||||||
import java.util.*
|
import java.util.Date
|
||||||
|
import java.util.Locale
|
||||||
|
|
||||||
class FallExtraGemsHabiticaPromotion(startDate: Date?, endDate: Date?) : HabiticaPromotion() {
|
class FallExtraGemsHabiticaPromotion(startDate: Date?, endDate: Date?) : HabiticaPromotion() {
|
||||||
override val identifier: String
|
override val identifier: String
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,8 @@ import com.habitrpg.android.habitica.ui.fragments.PromoInfoFragment
|
||||||
import com.habitrpg.android.habitica.ui.fragments.purchases.SubscriptionFragment
|
import com.habitrpg.android.habitica.ui.fragments.purchases.SubscriptionFragment
|
||||||
import com.habitrpg.android.habitica.ui.views.promo.PromoMenuView
|
import com.habitrpg.android.habitica.ui.views.promo.PromoMenuView
|
||||||
import java.text.SimpleDateFormat
|
import java.text.SimpleDateFormat
|
||||||
import java.util.*
|
import java.util.Date
|
||||||
|
import java.util.Locale
|
||||||
|
|
||||||
class GiftOneGetOneHabiticaPromotion(startDate: Date?, endDate: Date?) : HabiticaPromotion() {
|
class GiftOneGetOneHabiticaPromotion(startDate: Date?, endDate: Date?) : HabiticaPromotion() {
|
||||||
override val identifier: String
|
override val identifier: String
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ import com.habitrpg.android.habitica.databinding.FragmentSubscriptionBinding
|
||||||
import com.habitrpg.android.habitica.databinding.PurchaseGemViewBinding
|
import com.habitrpg.android.habitica.databinding.PurchaseGemViewBinding
|
||||||
import com.habitrpg.android.habitica.ui.fragments.PromoInfoFragment
|
import com.habitrpg.android.habitica.ui.fragments.PromoInfoFragment
|
||||||
import com.habitrpg.android.habitica.ui.views.promo.PromoMenuView
|
import com.habitrpg.android.habitica.ui.views.promo.PromoMenuView
|
||||||
import java.util.*
|
import java.util.Date
|
||||||
|
|
||||||
enum class PromoType {
|
enum class PromoType {
|
||||||
GEMS_AMOUNT,
|
GEMS_AMOUNT,
|
||||||
|
|
@ -18,10 +18,10 @@ enum class PromoType {
|
||||||
|
|
||||||
abstract class HabiticaPromotion {
|
abstract class HabiticaPromotion {
|
||||||
val isActive: Boolean
|
val isActive: Boolean
|
||||||
get() {
|
get() {
|
||||||
val now = Date()
|
val now = Date()
|
||||||
return startDate.before(now) && endDate.after(now)
|
return startDate.before(now) && endDate.after(now)
|
||||||
}
|
}
|
||||||
abstract val identifier: String
|
abstract val identifier: String
|
||||||
abstract val promoType: PromoType
|
abstract val promoType: PromoType
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,6 @@ package com.habitrpg.android.habitica.models.promotions
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.graphics.Color
|
import android.graphics.Color
|
||||||
import android.graphics.drawable.BitmapDrawable
|
|
||||||
import android.graphics.drawable.Drawable
|
import android.graphics.drawable.Drawable
|
||||||
import android.graphics.drawable.ShapeDrawable
|
import android.graphics.drawable.ShapeDrawable
|
||||||
import android.view.View
|
import android.view.View
|
||||||
|
|
@ -14,10 +13,10 @@ import com.habitrpg.android.habitica.databinding.PurchaseGemViewBinding
|
||||||
import com.habitrpg.android.habitica.extensions.DateUtils
|
import com.habitrpg.android.habitica.extensions.DateUtils
|
||||||
import com.habitrpg.android.habitica.helpers.MainNavigationController
|
import com.habitrpg.android.habitica.helpers.MainNavigationController
|
||||||
import com.habitrpg.android.habitica.ui.fragments.PromoInfoFragment
|
import com.habitrpg.android.habitica.ui.fragments.PromoInfoFragment
|
||||||
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
|
|
||||||
import com.habitrpg.android.habitica.ui.views.promo.PromoMenuView
|
import com.habitrpg.android.habitica.ui.views.promo.PromoMenuView
|
||||||
import java.text.SimpleDateFormat
|
import java.text.SimpleDateFormat
|
||||||
import java.util.*
|
import java.util.Date
|
||||||
|
import java.util.Locale
|
||||||
|
|
||||||
class SpookyExtraGemsHabiticaPromotion(startDate: Date?, endDate: Date?) : HabiticaPromotion() {
|
class SpookyExtraGemsHabiticaPromotion(startDate: Date?, endDate: Date?) : HabiticaPromotion() {
|
||||||
override val identifier: String
|
override val identifier: String
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ import com.habitrpg.android.habitica.helpers.MainNavigationController
|
||||||
import com.habitrpg.android.habitica.ui.fragments.PromoInfoFragment
|
import com.habitrpg.android.habitica.ui.fragments.PromoInfoFragment
|
||||||
import com.habitrpg.android.habitica.ui.fragments.PromoWebFragmentArgs
|
import com.habitrpg.android.habitica.ui.fragments.PromoWebFragmentArgs
|
||||||
import com.habitrpg.android.habitica.ui.views.promo.PromoMenuView
|
import com.habitrpg.android.habitica.ui.views.promo.PromoMenuView
|
||||||
import java.util.*
|
import java.util.Date
|
||||||
|
|
||||||
class Survey2021Promotion : HabiticaPromotion(), HabiticaWebPromotion {
|
class Survey2021Promotion : HabiticaPromotion(), HabiticaWebPromotion {
|
||||||
override val identifier: String
|
override val identifier: String
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,13 @@
|
||||||
package com.habitrpg.android.habitica.models.social
|
package com.habitrpg.android.habitica.models.social
|
||||||
|
|
||||||
import com.habitrpg.android.habitica.models.BaseMainObject
|
import com.habitrpg.android.habitica.models.BaseMainObject
|
||||||
import com.habitrpg.android.habitica.models.BaseObject
|
|
||||||
import com.habitrpg.android.habitica.models.tasks.TasksOrder
|
import com.habitrpg.android.habitica.models.tasks.TasksOrder
|
||||||
import com.habitrpg.android.habitica.models.user.User
|
import com.habitrpg.android.habitica.models.user.User
|
||||||
import io.realm.RealmModel
|
import io.realm.RealmModel
|
||||||
import io.realm.RealmObject
|
import io.realm.RealmObject
|
||||||
import io.realm.annotations.Ignore
|
import io.realm.annotations.Ignore
|
||||||
import io.realm.annotations.PrimaryKey
|
import io.realm.annotations.PrimaryKey
|
||||||
import java.util.*
|
import java.util.Date
|
||||||
|
|
||||||
open class Challenge : RealmObject(), BaseMainObject {
|
open class Challenge : RealmObject(), BaseMainObject {
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ import com.habitrpg.android.habitica.models.BaseObject
|
||||||
import com.habitrpg.android.habitica.models.user.ContributorInfo
|
import com.habitrpg.android.habitica.models.user.ContributorInfo
|
||||||
import io.realm.RealmObject
|
import io.realm.RealmObject
|
||||||
import io.realm.annotations.PrimaryKey
|
import io.realm.annotations.PrimaryKey
|
||||||
import java.util.*
|
import java.util.Date
|
||||||
|
|
||||||
open class InboxConversation : RealmObject(), BaseObject {
|
open class InboxConversation : RealmObject(), BaseObject {
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -9,4 +9,4 @@ enum class Attribute constructor(val value: String) {
|
||||||
companion object {
|
companion object {
|
||||||
fun from(type: String?): Attribute? = values().find { it.value == type }
|
fun from(type: String?): Attribute? = values().find { it.value == type }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@ import com.habitrpg.android.habitica.models.BaseMainObject
|
||||||
import io.realm.RealmModel
|
import io.realm.RealmModel
|
||||||
import io.realm.RealmObject
|
import io.realm.RealmObject
|
||||||
import io.realm.annotations.PrimaryKey
|
import io.realm.annotations.PrimaryKey
|
||||||
import java.util.*
|
import java.util.UUID
|
||||||
|
|
||||||
open class ChecklistItem : RealmObject, BaseMainObject, Parcelable {
|
open class ChecklistItem : RealmObject, BaseMainObject, Parcelable {
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -9,4 +9,4 @@ enum class Frequency constructor(val value: String) {
|
||||||
companion object {
|
companion object {
|
||||||
fun from(type: String?): Frequency? = values().find { it.value == type }
|
fun from(type: String?): Frequency? = values().find { it.value == type }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,6 @@ import io.realm.annotations.Ignore
|
||||||
import io.realm.annotations.PrimaryKey
|
import io.realm.annotations.PrimaryKey
|
||||||
import org.json.JSONArray
|
import org.json.JSONArray
|
||||||
import org.json.JSONException
|
import org.json.JSONException
|
||||||
import java.util.ArrayList
|
|
||||||
import java.util.Calendar
|
import java.util.Calendar
|
||||||
import java.util.Date
|
import java.util.Date
|
||||||
import java.util.GregorianCalendar
|
import java.util.GregorianCalendar
|
||||||
|
|
@ -285,13 +284,10 @@ open class Task : RealmObject, BaseMainObject, Parcelable {
|
||||||
streak != task.streak -> true
|
streak != task.streak -> true
|
||||||
else -> false
|
else -> false
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if (type == TaskType.TODO) {
|
} else if (type == TaskType.TODO) {
|
||||||
return dueDate != task.dueDate
|
return dueDate != task.dueDate
|
||||||
|
|
||||||
} else if (type == TaskType.REWARD) {
|
} else if (type == TaskType.REWARD) {
|
||||||
return value != task.value
|
return value != task.value
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ import com.habitrpg.android.habitica.models.BaseObject
|
||||||
import io.realm.RealmList
|
import io.realm.RealmList
|
||||||
import io.realm.RealmObject
|
import io.realm.RealmObject
|
||||||
import io.realm.annotations.RealmClass
|
import io.realm.annotations.RealmClass
|
||||||
import java.util.*
|
import java.util.Date
|
||||||
|
|
||||||
@RealmClass(embedded = true)
|
@RealmClass(embedded = true)
|
||||||
open class TaskGroupPlan : RealmObject(), BaseObject {
|
open class TaskGroupPlan : RealmObject(), BaseObject {
|
||||||
|
|
|
||||||
|
|
@ -12,4 +12,4 @@ enum class TaskType constructor(val value: String) {
|
||||||
companion object {
|
companion object {
|
||||||
fun from(type: String?): TaskType? = values().find { it.value == type }
|
fun from(type: String?): TaskType? = values().find { it.value == type }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,6 @@ import io.realm.RealmObject
|
||||||
import io.realm.annotations.RealmClass
|
import io.realm.annotations.RealmClass
|
||||||
|
|
||||||
@RealmClass(embedded = true)
|
@RealmClass(embedded = true)
|
||||||
open class AdditionalSubscriptionInfo: RealmObject() {
|
open class AdditionalSubscriptionInfo : RealmObject() {
|
||||||
var data: GoogleSubscriptionData? = null
|
var data: GoogleSubscriptionData? = null
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ import com.google.gson.annotations.SerializedName
|
||||||
import com.habitrpg.android.habitica.models.BaseObject
|
import com.habitrpg.android.habitica.models.BaseObject
|
||||||
import io.realm.RealmObject
|
import io.realm.RealmObject
|
||||||
import io.realm.annotations.RealmClass
|
import io.realm.annotations.RealmClass
|
||||||
import java.util.*
|
import java.util.Date
|
||||||
|
|
||||||
@RealmClass(embedded = true)
|
@RealmClass(embedded = true)
|
||||||
open class AuthenticationTimestamps : RealmObject(), BaseObject {
|
open class AuthenticationTimestamps : RealmObject(), BaseObject {
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ import com.habitrpg.android.habitica.models.BaseObject
|
||||||
import io.realm.RealmList
|
import io.realm.RealmList
|
||||||
import io.realm.RealmObject
|
import io.realm.RealmObject
|
||||||
import io.realm.annotations.RealmClass
|
import io.realm.annotations.RealmClass
|
||||||
import java.util.*
|
import java.util.Date
|
||||||
|
|
||||||
@RealmClass(embedded = true)
|
@RealmClass(embedded = true)
|
||||||
open class Items : RealmObject, BaseObject {
|
open class Items : RealmObject, BaseObject {
|
||||||
|
|
@ -64,10 +64,10 @@ open class Items : RealmObject, BaseObject {
|
||||||
val hasTransformationItems: Boolean
|
val hasTransformationItems: Boolean
|
||||||
get() {
|
get() {
|
||||||
return special?.any { transformationItem ->
|
return special?.any { transformationItem ->
|
||||||
transformationItem.key == ("seafoam") && transformationItem.numberOwned > 0||
|
transformationItem.key == ("seafoam") && transformationItem.numberOwned > 0 ||
|
||||||
transformationItem.key == ("shinySeed") && transformationItem.numberOwned > 0||
|
transformationItem.key == ("shinySeed") && transformationItem.numberOwned > 0 ||
|
||||||
transformationItem.key == ("snowball") && transformationItem.numberOwned > 0||
|
transformationItem.key == ("snowball") && transformationItem.numberOwned > 0 ||
|
||||||
transformationItem.key == ("spookySparkles") && transformationItem.numberOwned > 0
|
transformationItem.key == ("spookySparkles") && transformationItem.numberOwned > 0
|
||||||
} ?: false
|
} ?: false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,6 @@ import com.habitrpg.android.habitica.models.AvatarPreferences
|
||||||
import com.habitrpg.android.habitica.models.BaseObject
|
import com.habitrpg.android.habitica.models.BaseObject
|
||||||
import io.realm.RealmObject
|
import io.realm.RealmObject
|
||||||
import io.realm.annotations.RealmClass
|
import io.realm.annotations.RealmClass
|
||||||
import java.util.*
|
|
||||||
|
|
||||||
@RealmClass(embedded = true)
|
@RealmClass(embedded = true)
|
||||||
open class Preferences : RealmObject(), AvatarPreferences, BaseObject {
|
open class Preferences : RealmObject(), AvatarPreferences, BaseObject {
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ import com.google.gson.annotations.SerializedName
|
||||||
import com.habitrpg.android.habitica.models.BaseObject
|
import com.habitrpg.android.habitica.models.BaseObject
|
||||||
import io.realm.RealmObject
|
import io.realm.RealmObject
|
||||||
import io.realm.annotations.RealmClass
|
import io.realm.annotations.RealmClass
|
||||||
import java.util.*
|
import java.util.Date
|
||||||
|
|
||||||
@RealmClass(embedded = true)
|
@RealmClass(embedded = true)
|
||||||
open class SubscriptionPlan : RealmObject(), BaseObject {
|
open class SubscriptionPlan : RealmObject(), BaseObject {
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,12 @@ package com.habitrpg.android.habitica.models.user
|
||||||
|
|
||||||
import com.google.gson.annotations.SerializedName
|
import com.google.gson.annotations.SerializedName
|
||||||
import com.habitrpg.android.habitica.R
|
import com.habitrpg.android.habitica.R
|
||||||
import com.habitrpg.android.habitica.models.*
|
import com.habitrpg.android.habitica.models.Avatar
|
||||||
|
import com.habitrpg.android.habitica.models.BaseMainObject
|
||||||
|
import com.habitrpg.android.habitica.models.PushDevice
|
||||||
|
import com.habitrpg.android.habitica.models.QuestAchievement
|
||||||
|
import com.habitrpg.android.habitica.models.Tag
|
||||||
|
import com.habitrpg.android.habitica.models.VersionedObject
|
||||||
import com.habitrpg.android.habitica.models.invitations.Invitations
|
import com.habitrpg.android.habitica.models.invitations.Invitations
|
||||||
import com.habitrpg.android.habitica.models.social.ChallengeMembership
|
import com.habitrpg.android.habitica.models.social.ChallengeMembership
|
||||||
import com.habitrpg.android.habitica.models.social.UserParty
|
import com.habitrpg.android.habitica.models.social.UserParty
|
||||||
|
|
@ -12,7 +17,7 @@ import io.realm.RealmList
|
||||||
import io.realm.RealmObject
|
import io.realm.RealmObject
|
||||||
import io.realm.annotations.Ignore
|
import io.realm.annotations.Ignore
|
||||||
import io.realm.annotations.PrimaryKey
|
import io.realm.annotations.PrimaryKey
|
||||||
import java.util.*
|
import java.util.Date
|
||||||
|
|
||||||
open class User : RealmObject(), BaseMainObject, Avatar, VersionedObject {
|
open class User : RealmObject(), BaseMainObject, Avatar, VersionedObject {
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,20 +1,20 @@
|
||||||
package com.habitrpg.android.habitica.modules
|
package com.habitrpg.android.habitica.modules
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import com.habitrpg.android.habitica.data.implementation.ApiClientImpl.Companion.createGsonFactory
|
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
import com.habitrpg.android.habitica.helpers.KeyHelper
|
|
||||||
import com.habitrpg.android.habitica.api.HostConfig
|
import com.habitrpg.android.habitica.api.HostConfig
|
||||||
import retrofit2.converter.gson.GsonConverterFactory
|
import com.habitrpg.android.habitica.api.MaintenanceApiService
|
||||||
|
import com.habitrpg.android.habitica.data.ApiClient
|
||||||
import com.habitrpg.android.habitica.data.implementation.ApiClientImpl
|
import com.habitrpg.android.habitica.data.implementation.ApiClientImpl
|
||||||
|
import com.habitrpg.android.habitica.data.implementation.ApiClientImpl.Companion.createGsonFactory
|
||||||
|
import com.habitrpg.android.habitica.helpers.KeyHelper
|
||||||
import com.habitrpg.android.habitica.helpers.NotificationsManager
|
import com.habitrpg.android.habitica.helpers.NotificationsManager
|
||||||
import com.habitrpg.android.habitica.proxy.AnalyticsManager
|
import com.habitrpg.android.habitica.proxy.AnalyticsManager
|
||||||
import com.habitrpg.android.habitica.data.ApiClient
|
|
||||||
import com.habitrpg.android.habitica.api.MaintenanceApiService
|
|
||||||
import dagger.Module
|
import dagger.Module
|
||||||
import dagger.Provides
|
import dagger.Provides
|
||||||
import retrofit2.Retrofit
|
import retrofit2.Retrofit
|
||||||
import retrofit2.adapter.rxjava3.RxJava3CallAdapterFactory
|
import retrofit2.adapter.rxjava3.RxJava3CallAdapterFactory
|
||||||
|
import retrofit2.converter.gson.GsonConverterFactory
|
||||||
import java.lang.ref.WeakReference
|
import java.lang.ref.WeakReference
|
||||||
import javax.inject.Singleton
|
import javax.inject.Singleton
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,13 +7,15 @@ import android.content.res.Resources
|
||||||
import androidx.preference.PreferenceManager
|
import androidx.preference.PreferenceManager
|
||||||
import com.habitrpg.android.habitica.data.ApiClient
|
import com.habitrpg.android.habitica.data.ApiClient
|
||||||
import com.habitrpg.android.habitica.data.ContentRepository
|
import com.habitrpg.android.habitica.data.ContentRepository
|
||||||
import com.habitrpg.android.habitica.data.UserRepository
|
|
||||||
import com.habitrpg.android.habitica.executors.PostExecutionThread
|
import com.habitrpg.android.habitica.executors.PostExecutionThread
|
||||||
import com.habitrpg.android.habitica.executors.UIThread
|
import com.habitrpg.android.habitica.executors.UIThread
|
||||||
import com.habitrpg.android.habitica.helpers.*
|
import com.habitrpg.android.habitica.helpers.AppConfigManager
|
||||||
|
import com.habitrpg.android.habitica.helpers.KeyHelper
|
||||||
import com.habitrpg.android.habitica.helpers.KeyHelper.Companion.getInstance
|
import com.habitrpg.android.habitica.helpers.KeyHelper.Companion.getInstance
|
||||||
|
import com.habitrpg.android.habitica.helpers.SoundFileLoader
|
||||||
|
import com.habitrpg.android.habitica.helpers.SoundManager
|
||||||
|
import com.habitrpg.android.habitica.helpers.TaskFilterHelper
|
||||||
import com.habitrpg.android.habitica.helpers.notifications.PushNotificationManager
|
import com.habitrpg.android.habitica.helpers.notifications.PushNotificationManager
|
||||||
import com.habitrpg.android.habitica.proxy.AnalyticsManager
|
|
||||||
import com.habitrpg.shared.habitica.HLogger
|
import com.habitrpg.shared.habitica.HLogger
|
||||||
import dagger.Module
|
import dagger.Module
|
||||||
import dagger.Provides
|
import dagger.Provides
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,11 @@
|
||||||
package com.habitrpg.android.habitica.modules
|
package com.habitrpg.android.habitica.modules
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import com.habitrpg.android.habitica.data.local.ContentLocalRepository
|
|
||||||
import com.habitrpg.android.habitica.data.local.implementation.RealmContentLocalRepository
|
|
||||||
import com.habitrpg.android.habitica.data.ApiClient
|
import com.habitrpg.android.habitica.data.ApiClient
|
||||||
import com.habitrpg.android.habitica.data.ContentRepository
|
import com.habitrpg.android.habitica.data.ContentRepository
|
||||||
import com.habitrpg.android.habitica.data.implementation.ContentRepositoryImpl
|
import com.habitrpg.android.habitica.data.implementation.ContentRepositoryImpl
|
||||||
|
import com.habitrpg.android.habitica.data.local.ContentLocalRepository
|
||||||
|
import com.habitrpg.android.habitica.data.local.implementation.RealmContentLocalRepository
|
||||||
import dagger.Module
|
import dagger.Module
|
||||||
import dagger.Provides
|
import dagger.Provides
|
||||||
import io.realm.Realm
|
import io.realm.Realm
|
||||||
|
|
@ -34,4 +34,4 @@ open class RepositoryModule {
|
||||||
context
|
context
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,56 +1,54 @@
|
||||||
package com.habitrpg.android.habitica.modules
|
package com.habitrpg.android.habitica.modules
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import com.habitrpg.android.habitica.data.SetupCustomizationRepository
|
|
||||||
import com.habitrpg.android.habitica.data.implementation.SetupCustomizationRepositoryImpl
|
|
||||||
import com.habitrpg.android.habitica.data.local.TaskLocalRepository
|
|
||||||
import com.habitrpg.android.habitica.data.local.implementation.RealmTaskLocalRepository
|
|
||||||
import com.habitrpg.android.habitica.data.ApiClient
|
import com.habitrpg.android.habitica.data.ApiClient
|
||||||
import com.habitrpg.android.habitica.modules.AppModule
|
|
||||||
import com.habitrpg.android.habitica.helpers.AppConfigManager
|
|
||||||
import com.habitrpg.android.habitica.proxy.AnalyticsManager
|
|
||||||
import com.habitrpg.android.habitica.data.TaskRepository
|
|
||||||
import com.habitrpg.android.habitica.data.implementation.TaskRepositoryImpl
|
|
||||||
import com.habitrpg.android.habitica.data.local.TagLocalRepository
|
|
||||||
import com.habitrpg.android.habitica.data.local.implementation.RealmTagLocalRepository
|
|
||||||
import com.habitrpg.android.habitica.data.TagRepository
|
|
||||||
import com.habitrpg.android.habitica.data.implementation.TagRepositoryImpl
|
|
||||||
import com.habitrpg.android.habitica.data.local.ChallengeLocalRepository
|
|
||||||
import com.habitrpg.android.habitica.data.local.implementation.RealmChallengeLocalRepository
|
|
||||||
import com.habitrpg.android.habitica.data.ChallengeRepository
|
import com.habitrpg.android.habitica.data.ChallengeRepository
|
||||||
import com.habitrpg.android.habitica.data.implementation.ChallengeRepositoryImpl
|
|
||||||
import com.habitrpg.android.habitica.data.local.UserLocalRepository
|
|
||||||
import com.habitrpg.android.habitica.data.local.implementation.RealmUserLocalRepository
|
|
||||||
import com.habitrpg.android.habitica.data.UserRepository
|
|
||||||
import com.habitrpg.android.habitica.data.implementation.UserRepositoryImpl
|
|
||||||
import com.habitrpg.android.habitica.data.local.SocialLocalRepository
|
|
||||||
import com.habitrpg.android.habitica.data.local.implementation.RealmSocialLocalRepository
|
|
||||||
import com.habitrpg.android.habitica.data.SocialRepository
|
|
||||||
import com.habitrpg.android.habitica.data.implementation.SocialRepositoryImpl
|
|
||||||
import com.habitrpg.android.habitica.data.local.InventoryLocalRepository
|
|
||||||
import com.habitrpg.android.habitica.data.local.implementation.RealmInventoryLocalRepository
|
|
||||||
import com.habitrpg.android.habitica.data.InventoryRepository
|
|
||||||
import com.habitrpg.android.habitica.data.implementation.InventoryRepositoryImpl
|
|
||||||
import com.habitrpg.android.habitica.data.local.FAQLocalRepository
|
|
||||||
import com.habitrpg.android.habitica.data.local.implementation.RealmFAQLocalRepository
|
|
||||||
import com.habitrpg.android.habitica.data.FAQRepository
|
|
||||||
import com.habitrpg.android.habitica.data.implementation.FAQRepositoryImpl
|
|
||||||
import com.habitrpg.android.habitica.data.local.TutorialLocalRepository
|
|
||||||
import com.habitrpg.android.habitica.data.local.implementation.RealmTutorialLocalRepository
|
|
||||||
import com.habitrpg.android.habitica.data.TutorialRepository
|
|
||||||
import com.habitrpg.android.habitica.data.implementation.TutorialRepositoryImpl
|
|
||||||
import com.habitrpg.android.habitica.data.local.CustomizationLocalRepository
|
|
||||||
import com.habitrpg.android.habitica.data.local.implementation.RealmCustomizationLocalRepository
|
|
||||||
import com.habitrpg.android.habitica.data.CustomizationRepository
|
import com.habitrpg.android.habitica.data.CustomizationRepository
|
||||||
|
import com.habitrpg.android.habitica.data.FAQRepository
|
||||||
|
import com.habitrpg.android.habitica.data.InventoryRepository
|
||||||
|
import com.habitrpg.android.habitica.data.SetupCustomizationRepository
|
||||||
|
import com.habitrpg.android.habitica.data.SocialRepository
|
||||||
|
import com.habitrpg.android.habitica.data.TagRepository
|
||||||
|
import com.habitrpg.android.habitica.data.TaskRepository
|
||||||
|
import com.habitrpg.android.habitica.data.TutorialRepository
|
||||||
|
import com.habitrpg.android.habitica.data.UserRepository
|
||||||
|
import com.habitrpg.android.habitica.data.implementation.ChallengeRepositoryImpl
|
||||||
import com.habitrpg.android.habitica.data.implementation.CustomizationRepositoryImpl
|
import com.habitrpg.android.habitica.data.implementation.CustomizationRepositoryImpl
|
||||||
|
import com.habitrpg.android.habitica.data.implementation.FAQRepositoryImpl
|
||||||
|
import com.habitrpg.android.habitica.data.implementation.InventoryRepositoryImpl
|
||||||
|
import com.habitrpg.android.habitica.data.implementation.SetupCustomizationRepositoryImpl
|
||||||
|
import com.habitrpg.android.habitica.data.implementation.SocialRepositoryImpl
|
||||||
|
import com.habitrpg.android.habitica.data.implementation.TagRepositoryImpl
|
||||||
|
import com.habitrpg.android.habitica.data.implementation.TaskRepositoryImpl
|
||||||
|
import com.habitrpg.android.habitica.data.implementation.TutorialRepositoryImpl
|
||||||
|
import com.habitrpg.android.habitica.data.implementation.UserRepositoryImpl
|
||||||
|
import com.habitrpg.android.habitica.data.local.ChallengeLocalRepository
|
||||||
|
import com.habitrpg.android.habitica.data.local.CustomizationLocalRepository
|
||||||
|
import com.habitrpg.android.habitica.data.local.FAQLocalRepository
|
||||||
|
import com.habitrpg.android.habitica.data.local.InventoryLocalRepository
|
||||||
|
import com.habitrpg.android.habitica.data.local.SocialLocalRepository
|
||||||
|
import com.habitrpg.android.habitica.data.local.TagLocalRepository
|
||||||
|
import com.habitrpg.android.habitica.data.local.TaskLocalRepository
|
||||||
|
import com.habitrpg.android.habitica.data.local.TutorialLocalRepository
|
||||||
|
import com.habitrpg.android.habitica.data.local.UserLocalRepository
|
||||||
|
import com.habitrpg.android.habitica.data.local.implementation.RealmChallengeLocalRepository
|
||||||
|
import com.habitrpg.android.habitica.data.local.implementation.RealmCustomizationLocalRepository
|
||||||
|
import com.habitrpg.android.habitica.data.local.implementation.RealmFAQLocalRepository
|
||||||
|
import com.habitrpg.android.habitica.data.local.implementation.RealmInventoryLocalRepository
|
||||||
|
import com.habitrpg.android.habitica.data.local.implementation.RealmSocialLocalRepository
|
||||||
|
import com.habitrpg.android.habitica.data.local.implementation.RealmTagLocalRepository
|
||||||
|
import com.habitrpg.android.habitica.data.local.implementation.RealmTaskLocalRepository
|
||||||
|
import com.habitrpg.android.habitica.data.local.implementation.RealmTutorialLocalRepository
|
||||||
|
import com.habitrpg.android.habitica.data.local.implementation.RealmUserLocalRepository
|
||||||
|
import com.habitrpg.android.habitica.helpers.AppConfigManager
|
||||||
import com.habitrpg.android.habitica.helpers.PurchaseHandler
|
import com.habitrpg.android.habitica.helpers.PurchaseHandler
|
||||||
import com.habitrpg.android.habitica.helpers.UserScope
|
import com.habitrpg.android.habitica.helpers.UserScope
|
||||||
|
import com.habitrpg.android.habitica.proxy.AnalyticsManager
|
||||||
import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel
|
import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel
|
||||||
import dagger.Module
|
import dagger.Module
|
||||||
import dagger.Provides
|
import dagger.Provides
|
||||||
import io.realm.Realm
|
import io.realm.Realm
|
||||||
import javax.inject.Named
|
import javax.inject.Named
|
||||||
import javax.inject.Singleton
|
|
||||||
|
|
||||||
@Module
|
@Module
|
||||||
class UserRepositoryModule {
|
class UserRepositoryModule {
|
||||||
|
|
@ -210,4 +208,4 @@ class UserRepositoryModule {
|
||||||
fun providesPurchaseHandler(context: Context, analyticsManager: AnalyticsManager, apiClient: ApiClient, userViewModel: MainUserViewModel): PurchaseHandler {
|
fun providesPurchaseHandler(context: Context, analyticsManager: AnalyticsManager, apiClient: ApiClient, userViewModel: MainUserViewModel): PurchaseHandler {
|
||||||
return PurchaseHandler(context, analyticsManager, apiClient, userViewModel)
|
return PurchaseHandler(context, analyticsManager, apiClient, userViewModel)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,8 @@ import android.content.res.TypedArray
|
||||||
import android.util.AttributeSet
|
import android.util.AttributeSet
|
||||||
import androidx.preference.DialogPreference
|
import androidx.preference.DialogPreference
|
||||||
import java.text.DateFormat
|
import java.text.DateFormat
|
||||||
import java.util.*
|
import java.util.Calendar
|
||||||
|
import java.util.Locale
|
||||||
|
|
||||||
class TimePreference(ctxt: Context, attrs: AttributeSet?) : DialogPreference(ctxt, attrs) {
|
class TimePreference(ctxt: Context, attrs: AttributeSet?) : DialogPreference(ctxt, attrs) {
|
||||||
private var timeval: String? = null
|
private var timeval: String? = null
|
||||||
|
|
@ -54,7 +55,6 @@ class TimePreference(ctxt: Context, attrs: AttributeSet?) : DialogPreference(ctx
|
||||||
|
|
||||||
fun getMinute(timeval: String?): Int {
|
fun getMinute(timeval: String?): Int {
|
||||||
return timeval?.split(":")?.get(1)?.toInt() ?: 0
|
return timeval?.split(":")?.get(1)?.toInt() ?: 0
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -62,4 +62,4 @@ class TimePreference(ctxt: Context, attrs: AttributeSet?) : DialogPreference(ctx
|
||||||
positiveButtonText = "Set"
|
positiveButtonText = "Set"
|
||||||
negativeButtonText = "Cancel"
|
negativeButtonText = "Cancel"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,6 @@ import android.content.BroadcastReceiver
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.text.Spannable
|
import android.text.Spannable
|
||||||
import android.text.SpannableStringBuilder
|
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import androidx.core.app.NotificationManagerCompat
|
import androidx.core.app.NotificationManagerCompat
|
||||||
import androidx.core.app.RemoteInput
|
import androidx.core.app.RemoteInput
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,9 @@ import com.habitrpg.android.habitica.models.tasks.TaskType
|
||||||
import com.habitrpg.android.habitica.models.user.User
|
import com.habitrpg.android.habitica.models.user.User
|
||||||
import com.habitrpg.android.habitica.ui.activities.MainActivity
|
import com.habitrpg.android.habitica.ui.activities.MainActivity
|
||||||
import io.reactivex.rxjava3.functions.BiFunction
|
import io.reactivex.rxjava3.functions.BiFunction
|
||||||
import java.util.*
|
import java.util.Calendar
|
||||||
|
import java.util.Date
|
||||||
|
import java.util.Random
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
@Suppress("DEPRECATION")
|
@Suppress("DEPRECATION")
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,6 @@ import com.habitrpg.android.habitica.ui.activities.MainActivity
|
||||||
import com.habitrpg.shared.habitica.HLogger
|
import com.habitrpg.shared.habitica.HLogger
|
||||||
import com.habitrpg.shared.habitica.LogLevel
|
import com.habitrpg.shared.habitica.LogLevel
|
||||||
import io.reactivex.rxjava3.functions.Consumer
|
import io.reactivex.rxjava3.functions.Consumer
|
||||||
import java.util.*
|
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
class TaskReceiver : BroadcastReceiver() {
|
class TaskReceiver : BroadcastReceiver() {
|
||||||
|
|
@ -69,8 +68,10 @@ class TaskReceiver : BroadcastReceiver() {
|
||||||
var notificationBuilder = NotificationCompat.Builder(context, "default")
|
var notificationBuilder = NotificationCompat.Builder(context, "default")
|
||||||
.setSmallIcon(R.drawable.ic_gryphon_white)
|
.setSmallIcon(R.drawable.ic_gryphon_white)
|
||||||
.setContentTitle(task.text)
|
.setContentTitle(task.text)
|
||||||
.setStyle(NotificationCompat.BigTextStyle()
|
.setStyle(
|
||||||
.bigText(task.notes))
|
NotificationCompat.BigTextStyle()
|
||||||
|
.bigText(task.notes)
|
||||||
|
)
|
||||||
.setPriority(NotificationCompat.PRIORITY_MAX)
|
.setPriority(NotificationCompat.PRIORITY_MAX)
|
||||||
.setSound(soundUri)
|
.setSound(soundUri)
|
||||||
.setAutoCancel(true)
|
.setAutoCancel(true)
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,12 @@
|
||||||
package com.habitrpg.android.habitica.ui
|
package com.habitrpg.android.habitica.ui
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.graphics.*
|
import android.graphics.Bitmap
|
||||||
|
import android.graphics.Canvas
|
||||||
|
import android.graphics.Matrix
|
||||||
|
import android.graphics.PointF
|
||||||
|
import android.graphics.Rect
|
||||||
|
import android.graphics.RectF
|
||||||
import android.graphics.drawable.Drawable
|
import android.graphics.drawable.Drawable
|
||||||
import android.text.TextUtils
|
import android.text.TextUtils
|
||||||
import android.util.AttributeSet
|
import android.util.AttributeSet
|
||||||
|
|
@ -20,7 +25,8 @@ import com.habitrpg.android.habitica.helpers.AppConfigManager
|
||||||
import com.habitrpg.android.habitica.models.Avatar
|
import com.habitrpg.android.habitica.models.Avatar
|
||||||
import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils
|
import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils
|
||||||
import io.reactivex.rxjava3.functions.Consumer
|
import io.reactivex.rxjava3.functions.Consumer
|
||||||
import java.util.*
|
import java.util.Date
|
||||||
|
import java.util.EnumMap
|
||||||
import java.util.concurrent.atomic.AtomicInteger
|
import java.util.concurrent.atomic.AtomicInteger
|
||||||
|
|
||||||
class AvatarView : FrameLayout {
|
class AvatarView : FrameLayout {
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@ import com.habitrpg.android.habitica.models.user.Stats
|
||||||
import com.habitrpg.android.habitica.models.user.User
|
import com.habitrpg.android.habitica.models.user.User
|
||||||
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
|
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
|
||||||
import io.reactivex.rxjava3.disposables.Disposable
|
import io.reactivex.rxjava3.disposables.Disposable
|
||||||
import java.util.*
|
import java.util.Locale
|
||||||
import kotlin.math.floor
|
import kotlin.math.floor
|
||||||
|
|
||||||
class AvatarWithBarsViewModel(private val context: Context, private val binding: AvatarWithBarsBinding, userRepository: UserRepository? = null) {
|
class AvatarWithBarsViewModel(private val context: Context, private val binding: AvatarWithBarsBinding, userRepository: UserRepository? = null) {
|
||||||
|
|
|
||||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue