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