diff --git a/Habitica/build.gradle b/Habitica/build.gradle
index 93ac09aa7..372b493aa 100644
--- a/Habitica/build.gradle
+++ b/Habitica/build.gradle
@@ -26,7 +26,6 @@ configurations {
}
dependencies {
- implementation fileTree(include: ['*.jar'], dir: 'libs')
//Networking
implementation "com.squareup.okhttp3:okhttp:$okhttp_version"
implementation "com.squareup.okhttp3:logging-interceptor:$okhttp_version"
@@ -215,6 +214,13 @@ android {
dimension "buildType"
buildConfigField "String", "TESTING_LEVEL", "\"staff\""
resValue "string", "app_name", "Habitica Staff"
+ versionCode app_version_code + 8
+ }
+
+ partners {
+ dimension "buildType"
+ buildConfigField "String", "TESTING_LEVEL", "\"partners\""
+ resValue "string", "app_name", "Habitica"
versionCode app_version_code + 6
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/AvatarWithBarsViewModel.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/AvatarWithBarsViewModel.kt
index aeccc8dcb..f94d0cdfb 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/AvatarWithBarsViewModel.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/AvatarWithBarsViewModel.kt
@@ -10,7 +10,7 @@ import androidx.core.os.bundleOf
import androidx.lifecycle.ViewModel
import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.databinding.AvatarWithBarsBinding
-import com.habitrpg.android.habitica.helpers.Animations
+import com.habitrpg.common.habitica.helpers.Animations
import com.habitrpg.android.habitica.helpers.MainNavigationController
import com.habitrpg.android.habitica.models.user.Stats
import com.habitrpg.android.habitica.models.user.User
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ArmoireActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ArmoireActivity.kt
index 9df8bf29a..f98d13c19 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ArmoireActivity.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ArmoireActivity.kt
@@ -18,7 +18,7 @@ import com.habitrpg.common.habitica.extensions.dpToPx
import com.habitrpg.android.habitica.extensions.observeOnce
import com.habitrpg.android.habitica.helpers.AdHandler
import com.habitrpg.android.habitica.helpers.AdType
-import com.habitrpg.android.habitica.helpers.Animations
+import com.habitrpg.common.habitica.helpers.Animations
import com.habitrpg.android.habitica.helpers.AppConfigManager
import com.habitrpg.android.habitica.helpers.RxErrorHandler
import com.habitrpg.common.habitica.extensions.loadImage
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/DeathActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/DeathActivity.kt
index 3f283f8b0..e1487ef8b 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/DeathActivity.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/DeathActivity.kt
@@ -14,7 +14,7 @@ import com.habitrpg.android.habitica.extensions.fromHtml
import com.habitrpg.android.habitica.extensions.observeOnce
import com.habitrpg.android.habitica.helpers.AdHandler
import com.habitrpg.android.habitica.helpers.AdType
-import com.habitrpg.android.habitica.helpers.Animations
+import com.habitrpg.common.habitica.helpers.Animations
import com.habitrpg.android.habitica.helpers.AppConfigManager
import com.habitrpg.android.habitica.helpers.RxErrorHandler
import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/PetDetailRecyclerAdapter.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/PetDetailRecyclerAdapter.kt
index ca6c57903..f06af2b9f 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/PetDetailRecyclerAdapter.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/PetDetailRecyclerAdapter.kt
@@ -5,7 +5,7 @@ import android.view.ViewGroup
import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.databinding.CanHatchItemBinding
import com.habitrpg.android.habitica.extensions.inflate
-import com.habitrpg.android.habitica.helpers.Animations
+import com.habitrpg.common.habitica.helpers.Animations
import com.habitrpg.android.habitica.models.inventory.Animal
import com.habitrpg.android.habitica.models.inventory.Egg
import com.habitrpg.android.habitica.models.inventory.Food
diff --git a/build.gradle b/build.gradle
index 3f48048c6..52878da1e 100644
--- a/build.gradle
+++ b/build.gradle
@@ -10,7 +10,7 @@ buildscript {
kotlin_version = '1.7.0'
core_ktx_version = '1.8.0'
appcompat_version = '1.4.2'
- lifecycle_version = '2.4.1'
+ lifecycle_version = '2.5.0'
coroutines_version = '1.6.1'
okhttp_version = '4.9.3'
retrofit_version = '2.9.0'
diff --git a/common/build.gradle b/common/build.gradle
index 1b1269e5b..c566aea07 100644
--- a/common/build.gradle
+++ b/common/build.gradle
@@ -36,6 +36,7 @@ android {
}
dependencies {
+ implementation fileTree(include: ['*.jar'], dir: '../common/libs')
implementation "androidx.core:core-ktx:$core_ktx_version"
implementation "androidx.appcompat:appcompat:$appcompat_version"
diff --git a/Habitica/libs/LeonidsLib-1.3.2.jar b/common/libs/LeonidsLib-1.3.2.jar
similarity index 100%
rename from Habitica/libs/LeonidsLib-1.3.2.jar
rename to common/libs/LeonidsLib-1.3.2.jar
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/Animations.kt b/common/src/main/java/com/habitrpg/common/habitica/helpers/Animations.kt
similarity index 98%
rename from Habitica/src/main/java/com/habitrpg/android/habitica/helpers/Animations.kt
rename to common/src/main/java/com/habitrpg/common/habitica/helpers/Animations.kt
index 01e62ec96..2c0392f36 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/Animations.kt
+++ b/common/src/main/java/com/habitrpg/common/habitica/helpers/Animations.kt
@@ -1,4 +1,4 @@
-package com.habitrpg.android.habitica.helpers
+package com.habitrpg.common.habitica.helpers
import android.view.View
import android.view.ViewAnimationUtils
diff --git a/common/src/main/res/values/strings.xml b/common/src/main/res/values/strings.xml
index 4739dc3e2..0619d050a 100644
--- a/common/src/main/res/values/strings.xml
+++ b/common/src/main/res/values/strings.xml
@@ -28,6 +28,7 @@
New Task
Avatar
Lvl. %d
+ Level %d
Edit
Cancel
diff --git a/wearos/build.gradle b/wearos/build.gradle
index 331475135..61a77bec1 100644
--- a/wearos/build.gradle
+++ b/wearos/build.gradle
@@ -50,6 +50,13 @@ android {
dimension "buildType"
buildConfigField "String", "TESTING_LEVEL", "\"staff\""
resValue "string", "app_name", "Habitica Staff"
+ versionCode app_version_code + 9
+ }
+
+ partners {
+ dimension "buildType"
+ buildConfigField "String", "TESTING_LEVEL", "\"partners\""
+ resValue "string", "app_name", "Habitica"
versionCode app_version_code + 7
}
@@ -79,6 +86,8 @@ android {
}
dependencies {
+ implementation fileTree(include: ['*.jar'], dir: '../common/libs')
+
implementation "androidx.core:core-ktx:$core_ktx_version"
implementation "com.google.android.gms:play-services-wearable:$play_wearables_version"
implementation "androidx.recyclerview:recyclerview:$recyclerview_version"
diff --git a/wearos/src/main/AndroidManifest.xml b/wearos/src/main/AndroidManifest.xml
index 6e8ac7642..795289991 100644
--- a/wearos/src/main/AndroidManifest.xml
+++ b/wearos/src/main/AndroidManifest.xml
@@ -49,6 +49,7 @@
+
diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/FaintActivity.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/FaintActivity.kt
index 0f1ad2d6b..bc3b2668d 100644
--- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/FaintActivity.kt
+++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/FaintActivity.kt
@@ -4,6 +4,7 @@ import android.os.Bundle
import androidx.activity.viewModels
import androidx.lifecycle.lifecycleScope
import com.habitrpg.android.habitica.databinding.ActivityFaintBinding
+import com.habitrpg.common.habitica.helpers.Animations
import com.habitrpg.wearos.habitica.ui.viewmodels.FaintViewModel
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.CoroutineExceptionHandler
@@ -28,6 +29,7 @@ class FaintActivity: BaseActivity() {
}
}
+ binding.iconView.startAnimation(Animations.bobbingAnimation(4f))
binding.hpBar.setPercentageValues(0f, 50f)
}
diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/LevelupActivity.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/LevelupActivity.kt
new file mode 100644
index 000000000..150424de2
--- /dev/null
+++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/LevelupActivity.kt
@@ -0,0 +1,72 @@
+package com.habitrpg.wearos.habitica.ui.activities
+
+import android.os.Bundle
+import android.view.Gravity
+import android.view.animation.AccelerateInterpolator
+import android.widget.FrameLayout
+import androidx.activity.viewModels
+import androidx.core.content.ContextCompat
+import androidx.lifecycle.lifecycleScope
+import com.habitrpg.android.habitica.R
+import com.habitrpg.android.habitica.databinding.ActivityLevelupBinding
+import com.habitrpg.common.habitica.helpers.Animations
+import com.habitrpg.wearos.habitica.ui.viewmodels.LevelupViewModel
+import com.plattysoft.leonids.ParticleSystem
+import dagger.hilt.android.AndroidEntryPoint
+import kotlinx.coroutines.CoroutineExceptionHandler
+import kotlinx.coroutines.launch
+
+@AndroidEntryPoint
+class LevelupActivity: BaseActivity() {
+ override val viewModel: LevelupViewModel by viewModels()
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ binding = ActivityLevelupBinding.inflate(layoutInflater)
+ super.onCreate(savedInstanceState)
+ binding.continueButton.setOnClickListener {
+ binding.continueButton.isEnabled = false
+ startAnimatingProgress()
+ lifecycleScope.launch(CoroutineExceptionHandler { _, _ ->
+ stopAnimatingProgress()
+ binding.continueButton.isEnabled = true
+ }) {
+ finish()
+ }
+ }
+
+ viewModel.level.observe(this) {
+ binding.titleView.text = getString(R.string.user_level_long, it)
+ }
+
+ binding.iconView.startAnimation(Animations.bobbingAnimation(4f))
+ binding.expBar.setPercentageValues(100f, 100f)
+ val container = binding.confettiAnchor
+ container.postDelayed(
+ {
+ createParticles(container, R.drawable.confetti_blue)
+ createParticles(container, R.drawable.confetti_red)
+ createParticles(container, R.drawable.confetti_yellow)
+ createParticles(container, R.drawable.confetti_purple)
+ }, 500
+ )
+ }
+
+ private fun createParticles(container: FrameLayout, resource: Int) {
+ ParticleSystem(
+ container,
+ 20,
+ ContextCompat.getDrawable(this, resource),
+ 6000
+ )
+ .setRotationSpeed(144f)
+ .setScaleRange(1.0f, 1.6f)
+ .setSpeedByComponentsRange(-0.15f, 0.15f, 0.15f, 0.45f)
+ .setFadeOut(200, AccelerateInterpolator())
+ .emitWithGravity(binding.confettiAnchor, Gravity.TOP, 10, 2000)
+ }
+
+ override fun onResume() {
+ super.onResume()
+ binding.expBar.animateProgress(0f, 2000)
+ }
+}
\ No newline at end of file
diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/TaskResultActivity.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/TaskResultActivity.kt
index 080ab510d..09cb8d823 100644
--- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/TaskResultActivity.kt
+++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/TaskResultActivity.kt
@@ -49,6 +49,13 @@ class TaskResultActivity : BaseActivity()
diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/LevelupViewModel.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/LevelupViewModel.kt
new file mode 100644
index 000000000..bc591ef91
--- /dev/null
+++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/LevelupViewModel.kt
@@ -0,0 +1,22 @@
+package com.habitrpg.wearos.habitica.ui.viewmodels
+
+import androidx.lifecycle.asLiveData
+import com.habitrpg.wearos.habitica.data.repositories.TaskRepository
+import com.habitrpg.wearos.habitica.data.repositories.UserRepository
+import com.habitrpg.wearos.habitica.managers.LoadingManager
+import com.habitrpg.wearos.habitica.util.ExceptionHandlerBuilder
+import dagger.hilt.android.lifecycle.HiltViewModel
+import kotlinx.coroutines.flow.map
+import javax.inject.Inject
+
+@HiltViewModel
+class LevelupViewModel @Inject constructor(
+ userRepository: UserRepository,
+ taskRepository: TaskRepository,
+ exceptionBuilder: ExceptionHandlerBuilder,
+ loadingManager: LoadingManager
+) : BaseViewModel(userRepository, taskRepository, exceptionBuilder, loadingManager) {
+ val level = userRepository.getUser()
+ .map { it.stats?.lvl }
+ .asLiveData()
+}
diff --git a/wearos/src/main/res/drawable-mdpi/experience_large.png b/wearos/src/main/res/drawable-mdpi/experience_large.png
new file mode 100644
index 000000000..2b7465ddf
Binary files /dev/null and b/wearos/src/main/res/drawable-mdpi/experience_large.png differ
diff --git a/wearos/src/main/res/drawable-xhdpi/experience_large.png b/wearos/src/main/res/drawable-xhdpi/experience_large.png
new file mode 100644
index 000000000..9f122296a
Binary files /dev/null and b/wearos/src/main/res/drawable-xhdpi/experience_large.png differ
diff --git a/wearos/src/main/res/drawable-xxhdpi/experience_large.png b/wearos/src/main/res/drawable-xxhdpi/experience_large.png
new file mode 100644
index 000000000..b3e786a90
Binary files /dev/null and b/wearos/src/main/res/drawable-xxhdpi/experience_large.png differ
diff --git a/wearos/src/main/res/drawable/confetti_blue.xml b/wearos/src/main/res/drawable/confetti_blue.xml
new file mode 100644
index 000000000..90c3bf076
--- /dev/null
+++ b/wearos/src/main/res/drawable/confetti_blue.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wearos/src/main/res/drawable/confetti_purple.xml b/wearos/src/main/res/drawable/confetti_purple.xml
new file mode 100644
index 000000000..959d9a18c
--- /dev/null
+++ b/wearos/src/main/res/drawable/confetti_purple.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wearos/src/main/res/drawable/confetti_red.xml b/wearos/src/main/res/drawable/confetti_red.xml
new file mode 100644
index 000000000..417150c8b
--- /dev/null
+++ b/wearos/src/main/res/drawable/confetti_red.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wearos/src/main/res/drawable/confetti_yellow.xml b/wearos/src/main/res/drawable/confetti_yellow.xml
new file mode 100644
index 000000000..8d6f38f9e
--- /dev/null
+++ b/wearos/src/main/res/drawable/confetti_yellow.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wearos/src/main/res/layout/activity_faint.xml b/wearos/src/main/res/layout/activity_faint.xml
index eda15d562..388602f45 100644
--- a/wearos/src/main/res/layout/activity_faint.xml
+++ b/wearos/src/main/res/layout/activity_faint.xml
@@ -16,8 +16,10 @@
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center"
- android:layout_gravity="center">
+ android:layout_gravity="center"
+ android:paddingVertical="@dimen/spacing_medium">
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wearos/src/main/res/layout/activity_rya.xml b/wearos/src/main/res/layout/activity_rya.xml
index 5165ad853..9a996bbaa 100644
--- a/wearos/src/main/res/layout/activity_rya.xml
+++ b/wearos/src/main/res/layout/activity_rya.xml
@@ -12,10 +12,9 @@
android:id="@+id/title_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:textSize="14sp"
android:textColor="@color/watch_purple_200"
android:text="@string/day_start"
- android:fontFamily="sans-serif-medium"
+ style="@style/Text.Body1"
android:gravity="center"
android:layout_marginHorizontal="12dp"
android:layout_marginBottom="10dp"/>
diff --git a/wearos/src/main/res/layout/task_reward_chip.xml b/wearos/src/main/res/layout/task_reward_chip.xml
index aaed9fa64..032739e2e 100644
--- a/wearos/src/main/res/layout/task_reward_chip.xml
+++ b/wearos/src/main/res/layout/task_reward_chip.xml
@@ -9,8 +9,7 @@
android:id="@+id/text_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:fontFamily="sans-serif-medium"
- android:textSize="16sp"
+ style="@style/Text.SubHeader1"
android:textColor="@color/watch_black"/>
diff --git a/wearos/src/main/res/values/strings.xml b/wearos/src/main/res/values/strings.xml
index b35ef0c0f..fdbb2ba62 100644
--- a/wearos/src/main/res/values/strings.xml
+++ b/wearos/src/main/res/values/strings.xml
@@ -36,4 +36,5 @@
a Potion
Some Food
Continue on your phone
+ You leveled up through all your hard work!
\ No newline at end of file
diff --git a/wearos/src/main/res/values/styles.xml b/wearos/src/main/res/values/styles.xml
index 6bdc4a7d2..e551a3830 100644
--- a/wearos/src/main/res/values/styles.xml
+++ b/wearos/src/main/res/values/styles.xml
@@ -2,6 +2,7 @@
+
+
\ No newline at end of file