123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- package com.kdanmobile.reader
- import android.annotation.SuppressLint
- import android.arch.lifecycle.ViewModel
- import android.os.Handler
- import android.os.Message
- import android.util.Log
- import com.kdanmobile.kmpdfkit.manager.KMPDFFactory
- import com.kdanmobile.kmpdfkit.manager.controller.KMPDFDocumentController
- import java.util.*
- object ReaderModel {
- private const val TAG = "ReaderModel"
- private var filename: String? = null
- var password: String = ""
- private set
- var kmpdfFactory: KMPDFFactory? = null
- private set
- @SuppressLint("StaticFieldLeak")
- var kmpdfDocumentController: KMPDFDocumentController? = null
- private set
- private var shouldDestroy = false
- @SuppressLint("HandlerLeak")
- private val handler = object : Handler() {
- override fun handleMessage(msg: Message) {
- super.handleMessage(msg)
- when (msg.what) {
- 10 -> if (shouldDestroy && set.isEmpty()) {
- destroy()
- }
- }
- }
- }
- private val set = HashSet<String>()
- var onPdfChangedListener: OnPdfChangedListener? = null
- @Synchronized
- fun initKMPDFFactory(kmpdfFactory: KMPDFFactory?, filename: String?, password: String = "") {
- Log.d(TAG, "initKMPDFFactory $filename $password")
- if (this.filename != filename || this.password != password) {
- val items = set.toList()
- destroy()
- set.addAll(items)
- }
- if (null == this.kmpdfFactory) {
- shouldDestroy = false
- this.kmpdfFactory = kmpdfFactory
- this.filename = filename
- this.password = password
- }
- }
- fun initKMPDFDocumentController() {
- Log.d(TAG, "initKMPDFDocumentController")
- kmpdfDocumentController = kmpdfFactory?.getController(KMPDFFactory.ControllerType.DOCUMENT) as KMPDFDocumentController
- }
- @Synchronized
- fun destroy() {
- Log.d(TAG, "destroy")
- filename = null
- password = ""
- kmpdfFactory?.destroy()
- kmpdfFactory = null
- kmpdfDocumentController = null
- shouldDestroy = false
- set.clear()
- }
- fun onViewModelCreate(viewModel: ViewModel) {
- Log.d(TAG, "onViewModelCreate ($viewModel)")
- set.add(viewModel.toString())
- printSet()
- }
- fun onViewModelCleared(viewModel: ViewModel) {
- Log.d(TAG, "onViewModelCleared ($viewModel)")
- set.remove(viewModel.toString())
- if (set.isEmpty()) {
- shouldDestroy = true
- handler.sendEmptyMessageDelayed(10, 2000)
- }
- printSet()
- }
- private fun printSet() {
- Log.d(TAG, "======================================================================")
- var count = 0
- set.forEach {
- Log.d(TAG, " [${count++}] $it")
- }
- }
- }
|