From d2c769eada8569c4abe13029c711cc7f8e19fffd Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Wed, 18 Sep 2024 15:41:09 +0200 Subject: [PATCH] finish 4.4.2 --- Habitica/res/layout-w600dp/activity_main.xml | 49 ++++++++------- Habitica/res/layout/activity_gem_purchase.xml | 9 +-- Habitica/res/layout/activity_main.xml | 12 ++-- .../social/party/NoPartyFragmentFragment.kt | 12 ++-- .../shared/habitica/Platform.android.kt | 6 ++ .../shared/habitica/Platform.apple.kt | 7 +++ .../com/habitrpg/shared/habitica/Platform.kt | 16 +++++ .../models/responses/TaskDirectionDataTemp.kt | 15 +++++ .../models/responses/TaskScoringResult.kt | 28 +++++++++ .../habitrpg/shared/habitica/Platform.ios.kt | 46 +++++++++++++- .../habitrpg/shared/habitica/Platform.js.kt | 63 ++++++++++++++++++- 11 files changed, 219 insertions(+), 44 deletions(-) create mode 100644 shared/src/appleMain/kotlin/com/habitrpg/shared/habitica/Platform.apple.kt diff --git a/Habitica/res/layout-w600dp/activity_main.xml b/Habitica/res/layout-w600dp/activity_main.xml index 632ab85cf..abdebf86e 100644 --- a/Habitica/res/layout-w600dp/activity_main.xml +++ b/Habitica/res/layout-w600dp/activity_main.xml @@ -1,23 +1,30 @@ - - + + + + android:id="@+id/navigation_drawer" + class="com.habitrpg.android.habitica.ui.fragments.NavigationDrawerFragment" + android:layout_width="@dimen/drawer_width" + android:layout_height="match_parent" + android:layout_gravity="start" + tools:layout="@layout/drawer_main" /> + - - + android:layout_width="1dp" + android:layout_height="match_parent" + android:background="?attr/colorWindowBackground" /> + + + + diff --git a/Habitica/res/layout/activity_gem_purchase.xml b/Habitica/res/layout/activity_gem_purchase.xml index 3136ba6e7..4f50cc2c8 100644 --- a/Habitica/res/layout/activity_gem_purchase.xml +++ b/Habitica/res/layout/activity_gem_purchase.xml @@ -5,12 +5,6 @@ android:layout_height="match_parent" tools:context=".ui.activities.MainActivity" android:id="@+id/overlayFrameLayout"> - - - - \ No newline at end of file + diff --git a/Habitica/res/layout/activity_main.xml b/Habitica/res/layout/activity_main.xml index 82647bb17..309589716 100644 --- a/Habitica/res/layout/activity_main.xml +++ b/Habitica/res/layout/activity_main.xml @@ -1,8 +1,10 @@ - + - + diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/NoPartyFragmentFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/NoPartyFragmentFragment.kt index 35b04b338..eee2860c7 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/NoPartyFragmentFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/NoPartyFragmentFragment.kt @@ -70,7 +70,7 @@ class NoPartyFragmentFragment : BaseMainFragment() { refresh() binding?.invitationsView?.acceptCall = { - lifecycleScope.launch(ExceptionHandler.coroutine()) { + lifecycleScope.launchCatching { socialRepository.joinGroup(it) userRepository.retrieveUser(false, true) parentFragmentManager.popBackStack() @@ -152,7 +152,7 @@ class NoPartyFragmentFragment : BaseMainFragment() { if (it.resultCode == Activity.RESULT_OK) { val bundle = it.data?.extras if (bundle?.getString("groupType") == "party") { - lifecycleScope.launch(ExceptionHandler.coroutine()) { + lifecycleScope.launchCatching { val group = socialRepository.createGroup( bundle.getString("name"), @@ -176,14 +176,12 @@ class NoPartyFragmentFragment : BaseMainFragment() { } private fun refresh() { - lifecycleScope.launch(ExceptionHandler.coroutine()) { + lifecycleScope.launchCatching { val user = userRepository.retrieveUser(false, true) binding?.refreshLayout?.isRefreshing = false if (user?.hasParty == true) { - lifecycleScope.launch(ExceptionHandler.coroutine()) { - val group = socialRepository.retrieveGroup("party") - socialRepository.retrievePartyMembers(group?.id ?: "", true) - } + val group = socialRepository.retrieveGroup("party") + socialRepository.retrievePartyMembers(group?.id ?: "", true) } } } diff --git a/shared/src/androidMain/kotlin/com/habitrpg/shared/habitica/Platform.android.kt b/shared/src/androidMain/kotlin/com/habitrpg/shared/habitica/Platform.android.kt index ee26c8b00..7d07c5dcb 100644 --- a/shared/src/androidMain/kotlin/com/habitrpg/shared/habitica/Platform.android.kt +++ b/shared/src/androidMain/kotlin/com/habitrpg/shared/habitica/Platform.android.kt @@ -1,5 +1,11 @@ package com.habitrpg.shared.habitica import android.os.Parcel +import kotlin.reflect.KClass actual typealias HParcel = Parcel +actual typealias HClassLoader = ClassLoader + +actual fun getClassLoader(obj: KClass?): HClassLoader? { + return obj?.java?.classLoader +} diff --git a/shared/src/appleMain/kotlin/com/habitrpg/shared/habitica/Platform.apple.kt b/shared/src/appleMain/kotlin/com/habitrpg/shared/habitica/Platform.apple.kt new file mode 100644 index 000000000..5eb30855a --- /dev/null +++ b/shared/src/appleMain/kotlin/com/habitrpg/shared/habitica/Platform.apple.kt @@ -0,0 +1,7 @@ +package com.habitrpg.shared.habitica + +import kotlin.reflect.KClass + +actual fun getClassLoader(obj: KClass?): HClassLoader? { + TODO("Not yet implemented") +} diff --git a/shared/src/commonMain/kotlin/com/habitrpg/shared/habitica/Platform.kt b/shared/src/commonMain/kotlin/com/habitrpg/shared/habitica/Platform.kt index 353ba8012..1b083f32a 100644 --- a/shared/src/commonMain/kotlin/com/habitrpg/shared/habitica/Platform.kt +++ b/shared/src/commonMain/kotlin/com/habitrpg/shared/habitica/Platform.kt @@ -1,6 +1,8 @@ package com.habitrpg.shared.habitica import com.habitrpg.shared.habitica.models.responses.TaskDirectionDataDrop +import com.habitrpg.shared.habitica.models.responses.TaskScoringResult +import kotlin.reflect.KClass expect class Platform() { val platform: String @@ -10,6 +12,10 @@ expect class Platform() { expect interface HParcelable { fun writeToParcel(dest: HParcel, flags: Int) fun describeContents(): Int + interface Creator { + fun createFromParcel(source: HParcel): T + fun newArray(size: Int): Array + } } @Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING") @@ -19,6 +25,8 @@ expect interface HParcelable { @Retention(AnnotationRetention.BINARY) expect annotation class HParcelize() +expect abstract class HClassLoader + expect class HParcel { fun writeByte(byte: Byte) fun writeParcelable(drop: HParcelable?, flags: Int) @@ -26,4 +34,12 @@ expect class HParcel { fun writeInt(level: Int) fun writeValue(questDamage: Any?) fun writeString(it: String?) + fun readByte(): Byte + fun readParcelable(creator: HClassLoader?): T? + fun readDouble(): Double + fun readInt(): Int + fun readValue(classLoader: HClassLoader?): Any? + fun readString(): String? } + +expect fun getClassLoader(obj: KClass?): HClassLoader? diff --git a/shared/src/commonMain/kotlin/com/habitrpg/shared/habitica/models/responses/TaskDirectionDataTemp.kt b/shared/src/commonMain/kotlin/com/habitrpg/shared/habitica/models/responses/TaskDirectionDataTemp.kt index 9b1a44ef7..e22fc00ed 100644 --- a/shared/src/commonMain/kotlin/com/habitrpg/shared/habitica/models/responses/TaskDirectionDataTemp.kt +++ b/shared/src/commonMain/kotlin/com/habitrpg/shared/habitica/models/responses/TaskDirectionDataTemp.kt @@ -31,4 +31,19 @@ data class TaskDirectionDataDrop( override fun describeContents(): Int { return 0 } + + companion object CREATOR : HParcelable.Creator { + override fun createFromParcel(source: HParcel): TaskDirectionDataDrop { + return TaskDirectionDataDrop( + value = source.readInt(), + key = source.readString(), + type = source.readString(), + dialog = source.readString() + ) + } + + override fun newArray(size: Int): Array { + return arrayOfNulls(size) + } + } } diff --git a/shared/src/commonMain/kotlin/com/habitrpg/shared/habitica/models/responses/TaskScoringResult.kt b/shared/src/commonMain/kotlin/com/habitrpg/shared/habitica/models/responses/TaskScoringResult.kt index 2c4a9e070..0cbb553d2 100644 --- a/shared/src/commonMain/kotlin/com/habitrpg/shared/habitica/models/responses/TaskScoringResult.kt +++ b/shared/src/commonMain/kotlin/com/habitrpg/shared/habitica/models/responses/TaskScoringResult.kt @@ -3,7 +3,9 @@ package com.habitrpg.shared.habitica.models.responses import com.habitrpg.shared.habitica.HParcel import com.habitrpg.shared.habitica.HParcelable import com.habitrpg.shared.habitica.HParcelize +import com.habitrpg.shared.habitica.getClassLoader import com.habitrpg.shared.habitica.models.AvatarStats +import kotlin.jvm.JvmField data class TaskScoringResult( var hasDied: Boolean = false, @@ -34,6 +36,19 @@ data class TaskScoringResult( data._tmp?.quest?.collection, ) + constructor(source: HParcel) : this( + hasDied = source.readByte() != 0.toByte(), + drop = source.readParcelable(getClassLoader(TaskDirectionDataDrop.CREATOR::class)), + experienceDelta = source.readDouble(), + healthDelta = source.readDouble(), + goldDelta = source.readDouble(), + manaDelta = source.readDouble(), + hasLeveledUp = source.readByte() != 0.toByte(), + level = source.readInt(), + questDamage = source.readValue(getClassLoader(Double::class)) as? Double, + questItemsFound = source.readValue(getClassLoader(Int::class)) as? Int, + ) + override fun writeToParcel(dest: HParcel, flags: Int) { dest.writeByte(if (hasDied) 1.toByte() else 0.toByte()) dest.writeParcelable(drop, flags) @@ -50,4 +65,17 @@ data class TaskScoringResult( override fun describeContents(): Int { return 0 } + + companion object { + @JvmField + final val CREATOR: HParcelable.Creator = object : HParcelable.Creator { + override fun createFromParcel(source: HParcel): TaskScoringResult { + return TaskScoringResult(source) + } + + override fun newArray(size: Int): Array { + return arrayOfNulls(size) + } + } + } } diff --git a/shared/src/iosMain/kotlin/com/habitrpg/shared/habitica/Platform.ios.kt b/shared/src/iosMain/kotlin/com/habitrpg/shared/habitica/Platform.ios.kt index 4dbe70171..42de922d2 100644 --- a/shared/src/iosMain/kotlin/com/habitrpg/shared/habitica/Platform.ios.kt +++ b/shared/src/iosMain/kotlin/com/habitrpg/shared/habitica/Platform.ios.kt @@ -1,3 +1,47 @@ package com.habitrpg.shared.habitica -actual class HParcel +actual class HParcel { + actual fun writeByte(byte: Byte) { + } + + actual fun writeParcelable(drop: HParcelable?, flags: Int) { + } + + actual fun writeDouble(experienceDelta: Double) { + } + + actual fun writeInt(level: Int) { + } + + actual fun writeValue(questDamage: Any?) { + } + + actual fun writeString(it: String?) { + } + + actual fun readByte(): Byte { + TODO("Not yet implemented") + } + + actual fun readParcelable(creator: HClassLoader?): T? { + TODO("Not yet implemented") + } + + actual fun readDouble(): Double { + TODO("Not yet implemented") + } + + actual fun readInt(): Int { + TODO("Not yet implemented") + } + + actual fun readValue(classLoader: HClassLoader?): Any? { + TODO("Not yet implemented") + } + + actual fun readString(): String? { + TODO("Not yet implemented") + } +} + +actual abstract class HClassLoader diff --git a/shared/src/jsMain/kotlin/com/habitrpg/shared/habitica/Platform.js.kt b/shared/src/jsMain/kotlin/com/habitrpg/shared/habitica/Platform.js.kt index 963527e78..001331ec8 100644 --- a/shared/src/jsMain/kotlin/com/habitrpg/shared/habitica/Platform.js.kt +++ b/shared/src/jsMain/kotlin/com/habitrpg/shared/habitica/Platform.js.kt @@ -1,9 +1,68 @@ package com.habitrpg.shared.habitica +import com.habitrpg.shared.habitica.models.responses.TaskScoringResult +import kotlin.reflect.KClass + actual class Platform actual constructor() { actual val platform: String get() = "JS!" } -actual interface HParcelable -actual class HParcel +actual interface HParcelable { + actual fun writeToParcel(dest: HParcel, flags: Int) + actual fun describeContents(): Int + actual interface Creator { + actual fun createFromParcel(source: HParcel): T + actual fun newArray(size: Int): Array + } +} + +actual class HParcel { + actual fun writeByte(byte: Byte) { + } + + actual fun writeParcelable(drop: HParcelable?, flags: Int) { + } + + actual fun writeDouble(experienceDelta: Double) { + } + + actual fun writeInt(level: Int) { + } + + actual fun writeValue(questDamage: Any?) { + } + + actual fun writeString(it: String?) { + } + + actual fun readByte(): Byte { + TODO("Not yet implemented") + } + + actual fun readParcelable(creator: HClassLoader?): T? { + TODO("Not yet implemented") + } + + actual fun readDouble(): Double { + TODO("Not yet implemented") + } + + actual fun readInt(): Int { + TODO("Not yet implemented") + } + + actual fun readValue(classLoader: HClassLoader?): Any? { + TODO("Not yet implemented") + } + + actual fun readString(): String? { + TODO("Not yet implemented") + } +} + +actual abstract class HClassLoader + +actual fun getClassLoader(obj: KClass?): HClassLoader? { + TODO("Not yet implemented") +}