Selaa lähdekoodia

Add Uri to ReaderViewModel constructor

cooperku_kdanmobile 5 vuotta sitten
vanhempi
commit
69e0f7ce8b

+ 9 - 6
src/main/java/com/kdanmobile/reader/KoinModule.kt

@@ -3,6 +3,7 @@ package com.kdanmobile.reader
 import android.content.Context
 import com.kdanmobile.reader.copyfile.CopyFileViewModel
 import com.kdanmobile.reader.copyfile.CopyFileInfo
+import android.net.Uri
 import com.kdanmobile.reader.thumb.PdfThumbViewModel
 import org.koin.android.viewmodel.ext.koin.viewModel
 import org.koin.dsl.module.module
@@ -13,11 +14,13 @@ object KoinModule {
         viewModel { (applicationContext: Context, info: CopyFileInfo) ->
             CopyFileViewModel(applicationContext, info)
         }
-        viewModel { ReaderViewModel(
-                get(),
-                Config.PDF_SDK_LICENSE,
-                Config.PDF_SDK_RSA_MSG
-        ) }
-        viewModel { (readerModel : ReaderModel) -> PdfThumbViewModel(readerModel) }
+        viewModel { (uri: Uri) ->
+            ReaderViewModel(
+                    get(),
+                    uri,
+                    Config.PDF_SDK_LICENSE,
+                    Config.PDF_SDK_RSA_MSG
+            ) }
+        viewModel { (readerModel: ReaderModel) -> PdfThumbViewModel(readerModel) }
     }
 }

+ 12 - 12
src/main/java/com/kdanmobile/reader/ReaderActivity.kt

@@ -46,6 +46,7 @@ import com.kdanmobile.reader.view.AnnotationAttributeView
 import com.kdanmobile.reader.view.AnnotationAttributeWindow
 import kotlinx.android.synthetic.main.activity_reader.*
 import org.koin.android.viewmodel.ext.android.viewModel
+import org.koin.core.parameter.parametersOf
 import java.io.File
 import java.util.*
 import kotlin.properties.Delegates
@@ -111,7 +112,14 @@ abstract class ReaderActivity : KdanBaseActivity(), ReaderSettingListener, PdfTh
             return viewModel.readerModel
         }
 
-    private val viewModel: ReaderViewModel by viewModel()
+    private val viewModel: ReaderViewModel by viewModel {
+        filePath = intent.getStringExtra(KEY_FILE_ABSOLUTE)
+        if (!filePath.isNullOrEmpty()) {
+            insertToRecentDocumentList(filePath as String)
+        }
+        val uri = if (!filePath.isNullOrEmpty()) Uri.parse(Uri.encode(filePath)) else null
+        parametersOf(uri ?: Uri.EMPTY)
+    }
     private var isShowPasswordActivity = false
 
     // For hide/show toolbars
@@ -176,17 +184,9 @@ abstract class ReaderActivity : KdanBaseActivity(), ReaderSettingListener, PdfTh
         viewModel.isOpenedFileLiveData.value?.also { isOpened ->
             if (isShowPasswordActivity) return@also
             if (isOpened) return@also
-            val hasOpened = null != viewModel.uri
-            if (!hasOpened) {
-                if (!filePath.isNullOrEmpty()) {
-                    insertToRecentDocumentList(filePath as String)
-                }
-            }
-
-            val uri = if (!filePath.isNullOrEmpty()) Uri.parse(Uri.encode(filePath)) else null
-            viewModel.init(uri ?: Uri.EMPTY)
 
-            if (null == uri) {
+            val uri = viewModel.uri
+            if (Uri.EMPTY == uri) {
                 showFileCannotOpenDialog(getString(R.string.cannot_open_buffer))
                 onFilePathOrUriError(filePath)
             } else {
@@ -1170,7 +1170,7 @@ abstract class ReaderActivity : KdanBaseActivity(), ReaderSettingListener, PdfTh
                     } else {
                         val isOpened = viewModel.isOpenedFileLiveData.value ?: return
                         if (isOpened) return
-                        val uri = viewModel.uri ?: return
+                        val uri = viewModel.uri
                         val result = viewModel.openPdfFile(
                                 this@ReaderActivity,
                                 uri,

+ 3 - 7
src/main/java/com/kdanmobile/reader/ReaderViewModel.kt

@@ -32,7 +32,7 @@ import java.io.File
 import java.util.*
 import kotlin.collections.ArrayList
 
-class ReaderViewModel(private val readerModelManager: ReaderModelManager, private val pdfSdkLicense: String, private val pdfSdkRsaMsg: String) : ViewModel() {
+class ReaderViewModel(private val readerModelManager: ReaderModelManager, val uri: Uri, private val pdfSdkLicense: String, private val pdfSdkRsaMsg: String) : ViewModel() {
 
     enum class ViewDirection(val mode: Config.PDFViewMode) {
         VERTICAL_SINGLE_PAGE_CONTINUES(Config.PDFViewMode.VERTICAL_SINGLE_PAGE_CONTINUES),
@@ -127,8 +127,6 @@ class ReaderViewModel(private val readerModelManager: ReaderModelManager, privat
     var inkAttributeLiveData = MutableLiveData<InkAttribute>().apply { value = DEFAULT_INK_ATTR }
 
     private var isVerified = false
-    var uri: Uri? = null // Used to get ReaderModel from ReaderModelManager
-        private set
     lateinit var readerModel: ReaderModel
     private val kmpdfFactory: KMPDFFactory?
         get() = readerModel.kmpdfFactory
@@ -175,9 +173,7 @@ class ReaderViewModel(private val readerModelManager: ReaderModelManager, privat
         SUCCESS, FAILED, PASSWORD_PROTECTED
     }
 
-    fun init(uri: Uri) {
-        if (this.uri != null) return
-        this.uri = uri
+    init {
         readerModel = readerModelManager.get(uri)
     }
 
@@ -215,7 +211,7 @@ class ReaderViewModel(private val readerModelManager: ReaderModelManager, privat
     }
 
     override fun onCleared() {
-        uri?.also { readerModelManager.release(it) }
+        readerModelManager.release(uri)
         super.onCleared()
     }