Я создал класс DTO, который будет храниться в SharedPreference при обращении к API. Я хочу изменить значение переменной PromotionBtnClosed на кнопке закрытия onClick, и в следующий раз, когда приложение откроется, этот элемент будет принимать значение из sharedPreference, а не из DTO.
@OnClick(R.id.btnClose)
fun onClickClose() {
getBoolean(MERCHANT_PROMOTION, false)
putBoolean(MERCHANT_PROMOTION, true)
dismiss()
}
@Parcelize
@JsonIgnoreProperties(ignoreUnknown = true)
open class MerchantPromotionDTO(
@JsonProperty("image") var image: ImageUrlsDTO? = null,
@JsonProperty("cta") var cta: CTADTO? = null,
@JsonProperty("probability") var probability: Int? = 0,
@JsonProperty("isDismissible") var isDismissible: Boolean? = true,
@JsonProperty("showImmediate") var showImmediate: Boolean? = false,
@JsonProperty("promotionBtnClosed") var promotionBtnClosed: Boolean = false
) : BaseResponseDTO()
const val MERCHANT_PROMOTION = "merchantPromotion"
private fun editPreference(editorMethod: (SharedPreferences.Editor) -> Unit) {
val editor = App.instance?.getSharedPreferences(App.instance?.packageName, Activity.MODE_PRIVATE)?.edit()
editor?.run {
editorMethod(editor)
editor.apply()
}
}
private fun <T> getPreference(getMethod: (SharedPreferences) -> T?, defaultValue: T?): T? {
val sharedPreferences = App.instance?.getSharedPreferences(App.instance?.packageName, Activity.MODE_PRIVATE)
return sharedPreferences?.run(getMethod) ?: defaultValue
}
fun putBoolean(key: String, value: Boolean) {
editPreference { it.putBoolean(key, value) }
}
fun setPromotionData(promotionData: String) {
putString(MERCHANT_PROMOTION, promotionData)
}
fun getPromotionData(): MerchantPromotionDTO {
return CommonUtils.getClassUsingDeserializer(getString(MERCHANT_PROMOTION, null), MerchantPromotionDTO())
?: MerchantPromotionDTO()
}