ParcelableExt.kt (905B) - raw


      1 package me.rhunk.snapenhance.common.util
      2 
      3 import android.os.Parcelable
      4 import kotlinx.parcelize.parcelableCreator
      5 import kotlin.io.encoding.Base64
      6 import kotlin.io.encoding.ExperimentalEncodingApi
      7 
      8 @OptIn(ExperimentalEncodingApi::class)
      9 fun Parcelable.toSerialized(): String? {
     10     val parcel = android.os.Parcel.obtain()
     11     return try {
     12         writeToParcel(parcel, 0)
     13         parcel.marshall()?.let {
     14             Base64.encode(it)
     15         }
     16     } finally {
     17         parcel.recycle()
     18     }
     19 }
     20 
     21 @OptIn(ExperimentalEncodingApi::class)
     22 inline fun <reified T : Parcelable> toParcelable(serialized: String): T? {
     23     val parcel = android.os.Parcel.obtain()
     24     return try {
     25         Base64.decode(serialized).let {
     26             parcel.unmarshall(it, 0, it.size)
     27         }
     28         parcel.setDataPosition(0)
     29         parcelableCreator<T>().createFromParcel(parcel)
     30     } finally {
     31         parcel.recycle()
     32     }
     33 }