Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[android] Read only #325

Open
wants to merge 8 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.CompositeDisposable
import io.reactivex.disposables.Disposable
import io.reactivex.schedulers.Schedulers
import lib.toolkit.base.OpenMode
import lib.toolkit.base.managers.utils.ContentResolverUtils
import lib.toolkit.base.managers.utils.FileUtils
import lib.toolkit.base.managers.utils.NetworkUtils
Expand Down Expand Up @@ -1165,7 +1166,7 @@ abstract class DocsBasePresenter<View : DocsBaseView> : MvpPresenter<View>() {
if (itemClicked is CloudFolder) {
openFolder(itemClicked.id, position)
} else if (itemClicked is CloudFile) {
getFileInfo()
getFileInfo(OpenMode.READ)
}
}
}
Expand Down Expand Up @@ -1639,7 +1640,7 @@ abstract class DocsBasePresenter<View : DocsBaseView> : MvpPresenter<View>() {

abstract fun getNextList()

abstract fun getFileInfo()
abstract fun getFileInfo(openMode: OpenMode)

abstract fun createDocs(title: String)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import kotlinx.serialization.json.Json
import lib.toolkit.base.OpenMode
import lib.toolkit.base.managers.tools.LocalContentTools
import lib.toolkit.base.managers.utils.AccountUtils
import lib.toolkit.base.managers.utils.ContentResolverUtils
Expand Down Expand Up @@ -131,7 +132,7 @@ class DocsCloudPresenter(private val account: CloudAccount) : DocsBasePresenter<
if (LocalContentTools.isOpenFormat(itemClicked.clearExt)) {
viewState.onConversionQuestion()
} else {
getFileInfo()
getFileInfo(OpenMode.READ)
}
}
} else {
Expand Down Expand Up @@ -203,7 +204,7 @@ class DocsCloudPresenter(private val account: CloudAccount) : DocsBasePresenter<
viewState.onDialogClose()
checkSdkVersion { result ->
if (result) {
viewState.onOpenDocumentServer(info[0] as CloudFile, info[1] as String, true)
viewState.onOpenDocumentServer(info[0] as CloudFile, info[1] as String, OpenMode.EDIT)
} else {
viewState.onCreateFile(info[0] as CloudFile)
}
Expand All @@ -214,15 +215,15 @@ class DocsCloudPresenter(private val account: CloudAccount) : DocsBasePresenter<
}
}

override fun getFileInfo() {
override fun getFileInfo(openMode: OpenMode) {
val item = itemClicked
if (item != null) {
fileProvider?.let { provider ->
disposable.add(
provider.fileInfo(item)
.doOnSubscribe { showDialogWaiting(TAG_DIALOG_CLEAR_DISPOSABLE) }
.doOnError(::fetchError)
.subscribe(::onFileClickAction)
.subscribe { onFileClickAction(it, openMode) }
)
}
}
Expand Down Expand Up @@ -392,7 +393,8 @@ class DocsCloudPresenter(private val account: CloudAccount) : DocsBasePresenter<
super.openFolder(id, position)
}

fun onEditContextClick() {
fun onContextOpenFile(openMode: OpenMode) {
showDialogWaiting(TAG_DIALOG_CLEAR_DISPOSABLE)
val file = itemClicked
if (file is CloudFile) {
if (LocalContentTools.isOpenFormat(file.clearExt)) {
Expand All @@ -406,7 +408,7 @@ class DocsCloudPresenter(private val account: CloudAccount) : DocsBasePresenter<
file.webUrl = url
}
addRecent(file)
onFileClickAction(file, true)
onFileClickAction(file, openMode)
}
}

Expand Down Expand Up @@ -585,7 +587,7 @@ class DocsCloudPresenter(private val account: CloudAccount) : DocsBasePresenter<
viewState.showMoveCopyDialog(names, action, titleFolder)
}

private fun onFileClickAction(cloudFile: CloudFile, isEdit: Boolean = false) {
private fun onFileClickAction(cloudFile: CloudFile, openMode: OpenMode) {
val extension = cloudFile.fileExst
when (StringUtils.getExtension(extension)) {
StringUtils.Extension.DOC,
Expand All @@ -595,9 +597,9 @@ class DocsCloudPresenter(private val account: CloudAccount) : DocsBasePresenter<
StringUtils.Extension.PDF -> {
checkSdkVersion { result ->
if (result) {
openDocumentServer(cloudFile, isEdit)
openDocumentServer(cloudFile, openMode)
} else {
downloadTempFile(cloudFile, isEdit)
downloadTempFile(cloudFile, openMode)
}
}
}
Expand All @@ -612,39 +614,38 @@ class DocsCloudPresenter(private val account: CloudAccount) : DocsBasePresenter<
FirebaseUtils.addAnalyticsOpenEntity(account.portalUrl, extension)
}

private fun downloadTempFile(cloudFile: CloudFile, edit: Boolean) {
private fun downloadTempFile(cloudFile: CloudFile, openMode: OpenMode) {
disposable.add((fileProvider as CloudFileProvider).getCachedFile(context, cloudFile, account.accountName)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({ file ->
openFileFromPortal(file, edit)
openFileFromPortal(file, openMode)
}) { throwable: Throwable -> fetchError(throwable) })
}

private fun openFileFromPortal(file: File, edit: Boolean) {
private fun openFileFromPortal(file: File, openMode: OpenMode) {
viewState.onDialogClose()
viewState.onOpenLocalFile(CloudFile().apply {
webUrl = Uri.fromFile(file).toString()
fileExst = StringUtils.getExtensionFromPath(file.absolutePath)
title = file.name
viewUrl = file.absolutePath
})
}, openMode)
}

private fun openDocumentServer(cloudFile: CloudFile, isEdit: Boolean) {
private fun openDocumentServer(cloudFile: CloudFile, openMode: OpenMode) {
with(fileProvider as CloudFileProvider) {
val token = AccountUtils.getToken(context, account.accountName)
disposable.add(
openDocument(cloudFile, token).subscribe({ result ->
viewState.onDialogClose()
if (result.isPdf) {
downloadTempFile(cloudFile, false)
} else if (result.info != null) {
viewState.onOpenDocumentServer(cloudFile, result.info, isEdit)
}
}) { error ->
fetchError(error)
}
openDocument(cloudFile, token)
.subscribe({ result ->
viewState.onDialogClose()
if (result.isPdf) {
downloadTempFile(cloudFile, openMode)
} else if (result.info != null) {
viewState.onOpenDocumentServer(cloudFile, result.info, openMode)
}
}, ::fetchError)
)
}
addRecent(itemClicked as CloudFile)
Expand All @@ -666,7 +667,7 @@ class DocsCloudPresenter(private val account: CloudAccount) : DocsBasePresenter<
id = model.file?.id.toString()
}).subscribe({ cloudFile ->
itemClicked = cloudFile
onFileClickAction(cloudFile)
onFileClickAction(cloudFile, OpenMode.READ)
}, { error ->
fetchError(error)
}))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import app.editors.manager.ui.views.custom.PlaceholderViews
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.schedulers.Schedulers
import kotlinx.coroutines.launch
import lib.toolkit.base.OpenMode
import lib.toolkit.base.managers.utils.ContentResolverUtils
import lib.toolkit.base.managers.utils.FileUtils
import lib.toolkit.base.managers.utils.NetworkUtils
Expand Down Expand Up @@ -71,17 +72,17 @@ class DocsOnDevicePresenter : DocsBasePresenter<DocsOnDeviceView>() {
.subscribe({ file: CloudFile ->
addFile(file)
addRecent(file)
openFile(file, true)
openFile(file, OpenMode.EDIT)
}) { viewState.onError(context.getString(R.string.errors_create_local_file)) })
}
}
}

override fun getFileInfo() {
override fun getFileInfo(openMode: OpenMode) {
if (itemClicked != null && itemClicked is CloudFile) {
val file = itemClicked as CloudFile
addRecent(file)
openFile(file)
openFile(file, openMode)
}
}

Expand Down Expand Up @@ -265,7 +266,7 @@ class DocsOnDevicePresenter : DocsBasePresenter<DocsOnDeviceView>() {
val ext = StringUtils.getExtensionFromPath(fileName.lowercase())

addRecent(uri)
openFile(uri, ext)
openFile(uri, ext, OpenMode.READ)
}

fun import(uri: Uri) {
Expand Down Expand Up @@ -298,25 +299,25 @@ class DocsOnDevicePresenter : DocsBasePresenter<DocsOnDeviceView>() {

}

private fun openFile(file: CloudFile, viewMode: Boolean = true) {
private fun openFile(file: CloudFile, openMode: OpenMode) {
val path = file.id
val uri = Uri.fromFile(File(path))
val ext = StringUtils.getExtensionFromPath(file.id.lowercase())
openFile(uri, ext, viewMode)
openFile(uri, ext, openMode)
}

@Suppress("KotlinConstantConditions")
private fun openFile(uri: Uri, ext: String, viewMode: Boolean = true) {
private fun openFile(uri: Uri, ext: String, openMode: OpenMode) {
when (val enumExt = StringUtils.getExtension(ext)) {
StringUtils.Extension.DOC, StringUtils.Extension.HTML, StringUtils.Extension.EBOOK, StringUtils.Extension.FORM -> {
if (BuildConfig.APPLICATION_ID != "com.onlyoffice.documents" && enumExt == StringUtils.Extension.FORM) {
viewState.onError(context.getString(R.string.error_unsupported_format))
} else {
viewState.onShowDocs(uri, viewMode)
viewState.onShowDocs(uri, openMode)
}
}
StringUtils.Extension.SHEET -> viewState.onShowCells(uri)
StringUtils.Extension.PRESENTATION -> viewState.onShowSlides(uri)
StringUtils.Extension.SHEET -> viewState.onShowCells(uri, openMode)
StringUtils.Extension.PRESENTATION -> viewState.onShowSlides(uri, openMode)
StringUtils.Extension.PDF -> viewState.onShowPdf(uri)
StringUtils.Extension.IMAGE, StringUtils.Extension.IMAGE_GIF, StringUtils.Extension.VIDEO_SUPPORT -> showMedia(
uri
Expand Down Expand Up @@ -449,12 +450,4 @@ class DocsOnDevicePresenter : DocsBasePresenter<DocsOnDeviceView>() {
setFiltering(false)
updateViewsState()
}

fun getFileInfo(viewMode: Boolean) {
if (itemClicked != null && itemClicked is CloudFile) {
val file = itemClicked as CloudFile
addRecent(file)
openFile(file, viewMode)
}
}
}
Loading