All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.mle.android.ui.dialogs.BasicDialog.scala Maven / Gradle / Ivy

The newest version!
package com.mle.android.ui.dialogs

import android.support.v4.app.DialogFragment
import android.os.Bundle
import android.app.Dialog
import play.api.libs.json.{Format, Json}

/**
 *
 * @tparam T type of state
 */
trait BasicDialog[T] extends DialogFragment {
  def saveState(state: Bundle): Unit

  def restoreState(stateOpt: Option[Bundle]): Option[T]

  def onCreateDialog2(stateOpt: Option[Bundle], restoredState: Option[T]): Dialog

  override def onSaveInstanceState(outState: Bundle): Unit = {
    super.onSaveInstanceState(outState)
    saveState(outState)
  }

  override def onCreateDialog(savedInstanceState: Bundle): Dialog = {
    val state = Option(savedInstanceState)
    val restored = restoreState(state)
    onCreateDialog2(state, restored)
  }
}

abstract class JsonDialog[T](item: T, stateKey: String)(implicit tjs: Format[T]) extends BasicDialog[T] {
  override def restoreState(stateOpt: Option[Bundle]): Option[T] =
    for {
      state <- stateOpt
      json <- Option(state getString stateKey)
      restored <- Json.parse(json).asOpt[T]
    } yield restored

  override def saveState(state: Bundle): Unit =
    state putString(stateKey, Json.stringify(Json.toJson(item)))
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy