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")
+}