diff --git a/app_manager/appmanager/src/main/java/app/editors/manager/mvp/presenters/main/DocsBasePresenter.kt b/app_manager/appmanager/src/main/java/app/editors/manager/mvp/presenters/main/DocsBasePresenter.kt index 27bbe4ff1..51ad4cccc 100644 --- a/app_manager/appmanager/src/main/java/app/editors/manager/mvp/presenters/main/DocsBasePresenter.kt +++ b/app_manager/appmanager/src/main/java/app/editors/manager/mvp/presenters/main/DocsBasePresenter.kt @@ -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 @@ -1165,7 +1166,7 @@ abstract class DocsBasePresenter : MvpPresenter() { if (itemClicked is CloudFolder) { openFolder(itemClicked.id, position) } else if (itemClicked is CloudFile) { - getFileInfo() + getFileInfo(OpenMode.READ) } } } @@ -1639,7 +1640,7 @@ abstract class DocsBasePresenter : MvpPresenter() { abstract fun getNextList() - abstract fun getFileInfo() + abstract fun getFileInfo(openMode: OpenMode) abstract fun createDocs(title: String) diff --git a/app_manager/appmanager/src/main/java/app/editors/manager/mvp/presenters/main/DocsCloudPresenter.kt b/app_manager/appmanager/src/main/java/app/editors/manager/mvp/presenters/main/DocsCloudPresenter.kt index 4dccb8ac8..f5ae042ab 100644 --- a/app_manager/appmanager/src/main/java/app/editors/manager/mvp/presenters/main/DocsCloudPresenter.kt +++ b/app_manager/appmanager/src/main/java/app/editors/manager/mvp/presenters/main/DocsCloudPresenter.kt @@ -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 @@ -131,7 +132,7 @@ class DocsCloudPresenter(private val account: CloudAccount) : DocsBasePresenter< if (LocalContentTools.isOpenFormat(itemClicked.clearExt)) { viewState.onConversionQuestion() } else { - getFileInfo() + getFileInfo(OpenMode.READ) } } } else { @@ -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) } @@ -214,7 +215,7 @@ class DocsCloudPresenter(private val account: CloudAccount) : DocsBasePresenter< } } - override fun getFileInfo() { + override fun getFileInfo(openMode: OpenMode) { val item = itemClicked if (item != null) { fileProvider?.let { provider -> @@ -222,7 +223,7 @@ class DocsCloudPresenter(private val account: CloudAccount) : DocsBasePresenter< provider.fileInfo(item) .doOnSubscribe { showDialogWaiting(TAG_DIALOG_CLEAR_DISPOSABLE) } .doOnError(::fetchError) - .subscribe(::onFileClickAction) + .subscribe { onFileClickAction(it, openMode) } ) } } @@ -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)) { @@ -406,7 +408,7 @@ class DocsCloudPresenter(private val account: CloudAccount) : DocsBasePresenter< file.webUrl = url } addRecent(file) - onFileClickAction(file, true) + onFileClickAction(file, openMode) } } @@ -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, @@ -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) } } } @@ -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) @@ -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) })) diff --git a/app_manager/appmanager/src/main/java/app/editors/manager/mvp/presenters/main/DocsOnDevicePresenter.kt b/app_manager/appmanager/src/main/java/app/editors/manager/mvp/presenters/main/DocsOnDevicePresenter.kt index 72a1c8123..26ac9853c 100644 --- a/app_manager/appmanager/src/main/java/app/editors/manager/mvp/presenters/main/DocsOnDevicePresenter.kt +++ b/app_manager/appmanager/src/main/java/app/editors/manager/mvp/presenters/main/DocsOnDevicePresenter.kt @@ -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 @@ -71,17 +72,17 @@ class DocsOnDevicePresenter : DocsBasePresenter() { .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) } } @@ -265,7 +266,7 @@ class DocsOnDevicePresenter : DocsBasePresenter() { val ext = StringUtils.getExtensionFromPath(fileName.lowercase()) addRecent(uri) - openFile(uri, ext) + openFile(uri, ext, OpenMode.READ) } fun import(uri: Uri) { @@ -298,25 +299,25 @@ class DocsOnDevicePresenter : DocsBasePresenter() { } - 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 @@ -449,12 +450,4 @@ class DocsOnDevicePresenter : DocsBasePresenter() { setFiltering(false) updateViewsState() } - - fun getFileInfo(viewMode: Boolean) { - if (itemClicked != null && itemClicked is CloudFile) { - val file = itemClicked as CloudFile - addRecent(file) - openFile(file, viewMode) - } - } } \ No newline at end of file diff --git a/app_manager/appmanager/src/main/java/app/editors/manager/mvp/presenters/main/DocsRecentPresenter.kt b/app_manager/appmanager/src/main/java/app/editors/manager/mvp/presenters/main/DocsRecentPresenter.kt index 3bbb12d9f..965fa143b 100644 --- a/app_manager/appmanager/src/main/java/app/editors/manager/mvp/presenters/main/DocsRecentPresenter.kt +++ b/app_manager/appmanager/src/main/java/app/editors/manager/mvp/presenters/main/DocsRecentPresenter.kt @@ -31,6 +31,7 @@ import io.reactivex.schedulers.Schedulers import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext +import lib.toolkit.base.OpenMode import lib.toolkit.base.managers.utils.AccountUtils import lib.toolkit.base.managers.utils.ContentResolverUtils.getName import lib.toolkit.base.managers.utils.EditorsType @@ -49,10 +50,10 @@ sealed class RecentState { class RenderList(val recents: List) : RecentState() } -sealed class OpenState(val uri: Uri?, val type: EditorsType?) { - class Docs(uri: Uri) : OpenState(uri, EditorsType.DOCS) - class Cells(uri: Uri) : OpenState(uri, EditorsType.CELLS) - class Slide(uri: Uri) : OpenState(uri, EditorsType.PRESENTATION) +sealed class OpenState(val uri: Uri?, val type: EditorsType?, val openMode: OpenMode = OpenMode.READ) { + class Docs(uri: Uri, openMode: OpenMode) : OpenState(uri, EditorsType.DOCS, openMode) + class Cells(uri: Uri, openMode: OpenMode) : OpenState(uri, EditorsType.CELLS, openMode) + class Slide(uri: Uri, openMode: OpenMode) : OpenState(uri, EditorsType.PRESENTATION, openMode) class Pdf(uri: Uri) : OpenState(uri, EditorsType.PDF) class Media(val explorer: Explorer, val isWebDav: Boolean) : OpenState(null, null) } @@ -135,7 +136,7 @@ class DocsRecentPresenter : DocsBasePresenter() { } } - private suspend fun openFile(recent: Recent) { + private suspend fun openFile(recent: Recent, openMode: OpenMode) { cloudDataSource.getAccount(recent.ownerId ?: "")?.let { account -> AccountUtils.getToken( context, @@ -151,8 +152,9 @@ class DocsRecentPresenter : DocsBasePresenter() { return@zipWith arrayOf(file, info) } }.subscribe({ response -> - checkExt(response[0] as CloudFile, response[1] as String) + checkExt(response[0] as CloudFile, response[1] as String, openMode) }, { throwable -> + viewState.onDialogClose() if (throwable is HttpException) { when (throwable.code()) { ApiContract.HttpCodes.CLIENT_UNAUTHORIZED -> @@ -175,21 +177,21 @@ class DocsRecentPresenter : DocsBasePresenter() { } } - private fun checkExt(file: CloudFile, info: String) { + private fun checkExt(file: CloudFile, info: String, openMode: OpenMode) { if (file.rootFolderType.toInt() != ApiContract.SectionType.CLOUD_TRASH) { when (StringUtils.getExtension(file.fileExst)) { StringUtils.Extension.DOC, StringUtils.Extension.FORM, StringUtils.Extension.SHEET, StringUtils.Extension.PRESENTATION, StringUtils.Extension.IMAGE, StringUtils.Extension.IMAGE_GIF, StringUtils.Extension.VIDEO_SUPPORT -> { checkSdkVersion { isCheck -> if (isCheck) { - viewState.onOpenDocumentServer(file, info, false) + viewState.onOpenDocumentServer(file, info, openMode) } else { - viewState.openFile(file) + viewState.openFile(file, openMode) } } } StringUtils.Extension.PDF -> { - viewState.openFile(file) + viewState.openFile(file, OpenMode.READ) } else -> viewState.onError(context.getString(R.string.error_unsupported_format)) @@ -297,23 +299,24 @@ class DocsRecentPresenter : DocsBasePresenter() { contextPosition = position } - fun fileClick(recent: Recent? = item) { + fun fileClick(recent: Recent? = item, openMode: OpenMode) { + showDialogWaiting(TAG_DIALOG_CLEAR_DISPOSABLE) recent?.let { item = recent } item?.let { recentItem -> if (recentItem.source == null) { recentItem.path.let { path -> Uri.parse(path)?.let { uri -> if (uri.scheme != null) { - openLocalFile(uri) + openLocalFile(uri, openMode) } else { - openLocalFile(Uri.fromFile(File(path))) + openLocalFile(Uri.fromFile(File(path)), openMode) } addRecent(recentItem) } } } else { presenterScope.launch { - if (checkCloudFile(recentItem)) { + if (checkCloudFile(recentItem, openMode)) { addRecent(recentItem) } } @@ -321,7 +324,7 @@ class DocsRecentPresenter : DocsBasePresenter() { } } - private suspend fun checkCloudFile(recent: Recent): Boolean { + private suspend fun checkCloudFile(recent: Recent, openMode: OpenMode): Boolean { recent.ownerId?.let { id -> cloudDataSource.getAccount(id)?.let { recentAccount -> if (recentAccount.id != accountPreferences.onlineAccountId) { @@ -330,11 +333,11 @@ class DocsRecentPresenter : DocsBasePresenter() { } return false } else if (recentAccount.isWebDav) { - openWebDavFile(recent) + openWebDavFile(recent, openMode) } else if (recentAccount.isDropbox || recentAccount.isGoogleDrive || recentAccount.isOneDrive) { - openStorageFile(recent = recent, recentAccount) + openStorageFile(recent = recent, recentAccount, openMode) } else { - openFile(recent) + openFile(recent, openMode) } return true } @@ -342,7 +345,7 @@ class DocsRecentPresenter : DocsBasePresenter() { return false } - private fun openStorageFile(recent: Recent, recentAccount: CloudAccount) { + private fun openStorageFile(recent: Recent, recentAccount: CloudAccount, openMode: OpenMode) { when { recentAccount.isOneDrive -> OneDriveFileProvider(context, OneDriveStorageHelper()) recentAccount.isGoogleDrive -> GoogleDriveFileProvider(context, GoogleDriveStorageHelper()) @@ -363,7 +366,7 @@ class DocsRecentPresenter : DocsBasePresenter() { { file: CloudFile? -> viewState.onDialogClose() file?.let { addRecent(it) } - viewState.onOpenLocalFile(file) + viewState.onOpenLocalFile(file, openMode) } ) { throwable: Throwable -> fetchError(throwable) } } ?: run { @@ -372,19 +375,19 @@ class DocsRecentPresenter : DocsBasePresenter() { } @Suppress("KotlinConstantConditions") - private fun openLocalFile(uri: Uri) { + private fun openLocalFile(uri: Uri, openMode: OpenMode) { val name = getName(context, uri) when (val ext = StringUtils.getExtension(StringUtils.getExtensionFromPath(name.lowercase(Locale.ROOT)))) { StringUtils.Extension.DOC, StringUtils.Extension.FORM -> { if (BuildConfig.APPLICATION_ID != "com.onlyoffice.documents" && ext == StringUtils.Extension.FORM) { viewState.onError(context.getString(R.string.error_unsupported_format)) } else { - viewState.onOpenFile(OpenState.Docs(uri)) + viewState.onOpenFile(OpenState.Docs(uri, openMode)) } } - StringUtils.Extension.SHEET -> viewState.onOpenFile(OpenState.Cells(uri)) - StringUtils.Extension.PRESENTATION -> viewState.onOpenFile(OpenState.Slide(uri)) + StringUtils.Extension.SHEET -> viewState.onOpenFile(OpenState.Cells(uri, openMode)) + StringUtils.Extension.PRESENTATION -> viewState.onOpenFile(OpenState.Slide(uri, openMode)) StringUtils.Extension.PDF -> viewState.onOpenFile(OpenState.Pdf(uri)) StringUtils.Extension.IMAGE, StringUtils.Extension.IMAGE_GIF, StringUtils.Extension.VIDEO_SUPPORT -> { viewState.onOpenFile(OpenState.Media(getImages(uri), false)) @@ -394,7 +397,7 @@ class DocsRecentPresenter : DocsBasePresenter() { } } - private suspend fun openWebDavFile(recent: Recent) { + private suspend fun openWebDavFile(recent: Recent, openMode: OpenMode) { cloudDataSource.getAccount(recent.ownerId ?: "")?.let { val provider = context.webDavFileProvider val cloudFile = CloudFile().apply { @@ -419,7 +422,7 @@ class DocsRecentPresenter : DocsBasePresenter() { .subscribe({ file -> temp = file viewState.onDialogClose() - openLocalFile(Uri.parse(file.webUrl)) + openLocalFile(Uri.parse(file.webUrl), openMode) getRecentFiles(checkFiles = false) }, ::fetchError) ) @@ -442,7 +445,7 @@ class DocsRecentPresenter : DocsBasePresenter() { // stub } - override fun getFileInfo() { + override fun getFileInfo(openMode: OpenMode) { // stub } diff --git a/app_manager/appmanager/src/main/java/app/editors/manager/mvp/presenters/main/DocsWebDavPresenter.kt b/app_manager/appmanager/src/main/java/app/editors/manager/mvp/presenters/main/DocsWebDavPresenter.kt index 27731fa1f..00761e2a4 100644 --- a/app_manager/appmanager/src/main/java/app/editors/manager/mvp/presenters/main/DocsWebDavPresenter.kt +++ b/app_manager/appmanager/src/main/java/app/editors/manager/mvp/presenters/main/DocsWebDavPresenter.kt @@ -26,6 +26,7 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext +import lib.toolkit.base.OpenMode import lib.toolkit.base.managers.receivers.ExportReceiver import lib.toolkit.base.managers.receivers.ExportReceiver.OnExportFile import lib.toolkit.base.managers.utils.ContentResolverUtils.getSize @@ -102,7 +103,7 @@ class DocsWebDavPresenter : DocsBasePresenter() { addFile(file) setPlaceholderType(PlaceholderViews.Type.NONE) viewState.onDialogClose() - viewState.onOpenLocalFile(file) + viewState.onOpenLocalFile(file, OpenMode.EDIT) }, ::fetchError) ) } @@ -110,7 +111,7 @@ class DocsWebDavPresenter : DocsBasePresenter() { } } - override fun getFileInfo() { + override fun getFileInfo(openMode: OpenMode) { if (itemClicked != null && itemClicked is CloudFile) { val file = itemClicked as CloudFile val extension = file.fileExst @@ -129,7 +130,7 @@ class DocsWebDavPresenter : DocsBasePresenter() { { file: CloudFile? -> tempFile = file viewState.onDialogClose() - viewState.onOpenLocalFile(file) + viewState.onOpenLocalFile(file, openMode) } ) { throwable: Throwable -> fetchError(throwable) } } diff --git a/app_manager/appmanager/src/main/java/app/editors/manager/mvp/presenters/storages/BaseStorageDocsPresenter.kt b/app_manager/appmanager/src/main/java/app/editors/manager/mvp/presenters/storages/BaseStorageDocsPresenter.kt index 19c21da4b..17c466f1e 100644 --- a/app_manager/appmanager/src/main/java/app/editors/manager/mvp/presenters/storages/BaseStorageDocsPresenter.kt +++ b/app_manager/appmanager/src/main/java/app/editors/manager/mvp/presenters/storages/BaseStorageDocsPresenter.kt @@ -12,13 +12,14 @@ import app.documents.core.network.manager.models.explorer.Item import app.documents.core.network.manager.models.request.RequestCreate import app.editors.manager.R import app.editors.manager.app.App -import app.editors.manager.app.accountOnline import app.editors.manager.managers.receivers.DownloadReceiver import app.editors.manager.managers.receivers.UploadReceiver +import app.editors.manager.app.accountOnline import app.editors.manager.mvp.presenters.main.DocsBasePresenter import app.editors.manager.mvp.views.base.BaseStorageDocsView import app.editors.manager.ui.views.custom.PlaceholderViews import kotlinx.coroutines.launch +import lib.toolkit.base.OpenMode import lib.toolkit.base.managers.utils.StringUtils import moxy.presenterScope @@ -95,7 +96,7 @@ abstract class BaseStorageDocsPresenter : DocsBasePrese addFile(file) setPlaceholderType(PlaceholderViews.Type.NONE) viewState.onDialogClose() - viewState.onOpenLocalFile(file) + viewState.onOpenLocalFile(file, OpenMode.EDIT) }) { throwable: Throwable -> fetchError(throwable) }) } showDialogWaiting(TAG_DIALOG_CANCEL_SINGLE_OPERATIONS) diff --git a/app_manager/appmanager/src/main/java/app/editors/manager/mvp/presenters/storages/DocsDropboxPresenter.kt b/app_manager/appmanager/src/main/java/app/editors/manager/mvp/presenters/storages/DocsDropboxPresenter.kt index 1e74d2b0f..16dde9121 100644 --- a/app_manager/appmanager/src/main/java/app/editors/manager/mvp/presenters/storages/DocsDropboxPresenter.kt +++ b/app_manager/appmanager/src/main/java/app/editors/manager/mvp/presenters/storages/DocsDropboxPresenter.kt @@ -22,6 +22,8 @@ import app.editors.manager.mvp.views.base.BaseStorageDocsView 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.AccountUtils import lib.toolkit.base.managers.utils.KeyboardUtils import moxy.presenterScope @@ -155,7 +157,7 @@ class DocsDropboxPresenter : BaseStorageDocsPresenter() { } } - override fun getFileInfo() { + override fun getFileInfo(openMode: OpenMode) { showDialogWaiting(TAG_DIALOG_CANCEL_UPLOAD) fileProvider?.let { provider -> downloadDisposable = provider.fileInfo(itemClicked) @@ -166,7 +168,7 @@ class DocsDropboxPresenter : BaseStorageDocsPresenter() { tempFile = file viewState.onDialogClose() file?.let { addRecent(it) } - viewState.onOpenLocalFile(file) + viewState.onOpenLocalFile(file, openMode) } ) { throwable: Throwable -> fetchError(throwable) } } diff --git a/app_manager/appmanager/src/main/java/app/editors/manager/mvp/presenters/storages/DocsGoogleDrivePresenter.kt b/app_manager/appmanager/src/main/java/app/editors/manager/mvp/presenters/storages/DocsGoogleDrivePresenter.kt index 2a053e1d9..ad76922ca 100644 --- a/app_manager/appmanager/src/main/java/app/editors/manager/mvp/presenters/storages/DocsGoogleDrivePresenter.kt +++ b/app_manager/appmanager/src/main/java/app/editors/manager/mvp/presenters/storages/DocsGoogleDrivePresenter.kt @@ -23,9 +23,10 @@ import app.editors.manager.mvp.views.base.DocsGoogleDriveView 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.KeyboardUtils +import kotlinx.coroutines.launch import moxy.presenterScope class DocsGoogleDrivePresenter : BaseStorageDocsPresenter(), @@ -128,7 +129,7 @@ class DocsGoogleDrivePresenter : BaseStorageDocsPresenter() } } - override fun getFileInfo() { + override fun getFileInfo(openMode: OpenMode) { downloadDisposable = fileProvider?.fileInfo(itemClicked) ?.subscribeOn(Schedulers.io()) ?.observeOn(AndroidSchedulers.mainThread()) @@ -137,7 +138,7 @@ class DocsGoogleDrivePresenter : BaseStorageDocsPresenter() tempFile = file viewState.onDialogClose() file?.let { addRecent(it) } - viewState.onOpenLocalFile(file) + viewState.onOpenLocalFile(file, openMode) } ) { throwable: Throwable -> fetchError(throwable) } } diff --git a/app_manager/appmanager/src/main/java/app/editors/manager/mvp/presenters/storages/DocsOneDrivePresenter.kt b/app_manager/appmanager/src/main/java/app/editors/manager/mvp/presenters/storages/DocsOneDrivePresenter.kt index 752d65883..f472f4e38 100644 --- a/app_manager/appmanager/src/main/java/app/editors/manager/mvp/presenters/storages/DocsOneDrivePresenter.kt +++ b/app_manager/appmanager/src/main/java/app/editors/manager/mvp/presenters/storages/DocsOneDrivePresenter.kt @@ -22,6 +22,7 @@ import app.editors.manager.mvp.views.base.BaseStorageDocsView 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.KeyboardUtils import moxy.InjectViewState import moxy.presenterScope @@ -125,7 +126,7 @@ class DocsOneDrivePresenter: BaseStorageDocsPresenter() { } } - override fun getFileInfo() { + override fun getFileInfo(openMode: OpenMode) { showDialogWaiting(TAG_DIALOG_CANCEL_UPLOAD) fileProvider?.let { provider -> downloadDisposable = provider.fileInfo(itemClicked) @@ -135,7 +136,7 @@ class DocsOneDrivePresenter: BaseStorageDocsPresenter() { tempFile = file viewState.onDialogClose() file?.let { addRecent(it) } - viewState.onOpenLocalFile(file) + viewState.onOpenLocalFile(file, openMode) } ) { throwable: Throwable -> fetchError(throwable) } } diff --git a/app_manager/appmanager/src/main/java/app/editors/manager/mvp/views/main/DocsBaseView.java b/app_manager/appmanager/src/main/java/app/editors/manager/mvp/views/main/DocsBaseView.java index 9a54bd696..e7a98d765 100644 --- a/app_manager/appmanager/src/main/java/app/editors/manager/mvp/views/main/DocsBaseView.java +++ b/app_manager/appmanager/src/main/java/app/editors/manager/mvp/views/main/DocsBaseView.java @@ -20,6 +20,7 @@ import app.editors.manager.ui.views.custom.PlaceholderViews; import kotlin.Unit; import kotlin.jvm.functions.Function0; +import lib.toolkit.base.OpenMode; import moxy.viewstate.strategy.OneExecutionStateStrategy; import moxy.viewstate.strategy.StateStrategyType; @@ -136,7 +137,7 @@ public interface DocsBaseView extends BaseViewExt { @StateStrategyType(OneExecutionStateStrategy.class) void onAddUploadsFile(List uploadFiles); @StateStrategyType(OneExecutionStateStrategy.class) - void onOpenLocalFile(CloudFile file); + void onOpenLocalFile(CloudFile file, OpenMode openMode); @StateStrategyType(OneExecutionStateStrategy.class) void onNoProvider(); @@ -156,7 +157,7 @@ public interface DocsBaseView extends BaseViewExt { void onSendCopy(@NonNull File file); @StateStrategyType(OneExecutionStateStrategy.class) - void onOpenDocumentServer(@Nullable CloudFile file, @Nullable String info, @NonNull boolean isEdit); + void onOpenDocumentServer(@Nullable CloudFile file, @Nullable String info, @NonNull OpenMode openMode); @StateStrategyType(OneExecutionStateStrategy.class) void checkNotificationPermission(@NotNull Function0 function); diff --git a/app_manager/appmanager/src/main/java/app/editors/manager/mvp/views/main/DocsOnDeviceView.kt b/app_manager/appmanager/src/main/java/app/editors/manager/mvp/views/main/DocsOnDeviceView.kt index 223645e4c..92ae8dfb7 100644 --- a/app_manager/appmanager/src/main/java/app/editors/manager/mvp/views/main/DocsOnDeviceView.kt +++ b/app_manager/appmanager/src/main/java/app/editors/manager/mvp/views/main/DocsOnDeviceView.kt @@ -3,6 +3,7 @@ package app.editors.manager.mvp.views.main import android.net.Uri import app.documents.core.network.manager.models.explorer.Item import app.editors.manager.mvp.presenters.main.OpenState +import lib.toolkit.base.OpenMode import moxy.viewstate.strategy.OneExecutionStateStrategy import moxy.viewstate.strategy.StateStrategyType @@ -14,8 +15,8 @@ interface DocsOnDeviceView : DocsBaseView { fun onOpenMedia(state: OpenState.Media) //Open file - fun onShowDocs(uri: Uri, isNew: Boolean = false) - fun onShowCells(uri: Uri) - fun onShowSlides(uri: Uri) + fun onShowDocs(uri: Uri, openMode: OpenMode) + fun onShowCells(uri: Uri, openMode: OpenMode) + fun onShowSlides(uri: Uri, openMode: OpenMode) fun onShowPdf(uri: Uri) } \ No newline at end of file diff --git a/app_manager/appmanager/src/main/java/app/editors/manager/mvp/views/main/DocsRecentView.kt b/app_manager/appmanager/src/main/java/app/editors/manager/mvp/views/main/DocsRecentView.kt index 460ca78bf..0b9aa8261 100644 --- a/app_manager/appmanager/src/main/java/app/editors/manager/mvp/views/main/DocsRecentView.kt +++ b/app_manager/appmanager/src/main/java/app/editors/manager/mvp/views/main/DocsRecentView.kt @@ -4,13 +4,14 @@ import app.documents.core.model.cloud.Recent import app.documents.core.network.manager.models.explorer.CloudFile import app.editors.manager.mvp.presenters.main.OpenState import app.editors.manager.mvp.presenters.main.RecentState +import lib.toolkit.base.OpenMode import moxy.viewstate.strategy.OneExecutionStateStrategy import moxy.viewstate.strategy.StateStrategyType @StateStrategyType(OneExecutionStateStrategy::class) interface DocsRecentView : DocsBaseView { fun updateFiles(files: List, sortByUpdated: Boolean) - fun openFile(response: CloudFile) + fun openFile(response: CloudFile, openMode: OpenMode) fun onDeleteItem(position: Int) fun onRender(state: RecentState) fun onOpenFile(state: OpenState) diff --git a/app_manager/appmanager/src/main/java/app/editors/manager/ui/dialogs/explorer/ExplorerContextItem.kt b/app_manager/appmanager/src/main/java/app/editors/manager/ui/dialogs/explorer/ExplorerContextItem.kt index 05e3601e2..5e91ecf7e 100644 --- a/app_manager/appmanager/src/main/java/app/editors/manager/ui/dialogs/explorer/ExplorerContextItem.kt +++ b/app_manager/appmanager/src/main/java/app/editors/manager/ui/dialogs/explorer/ExplorerContextItem.kt @@ -33,6 +33,11 @@ sealed class ExplorerContextItem( } } + object Preview : ExplorerContextItem( + icon = lib.toolkit.base.R.drawable.drawable_ic_visibility, + title = lib.editors.gbase.R.string.settings_draw_settings_preview + ), ExplorerContextBlockOrder.Common + object Share : ExplorerContextItem( icon = lib.toolkit.base.R.drawable.ic_list_context_share, title = R.string.list_context_share diff --git a/app_manager/appmanager/src/main/java/app/editors/manager/ui/dialogs/explorer/ExplorerContextItemVisible.kt b/app_manager/appmanager/src/main/java/app/editors/manager/ui/dialogs/explorer/ExplorerContextItemVisible.kt index 4eee3e5bd..5da05bb42 100644 --- a/app_manager/appmanager/src/main/java/app/editors/manager/ui/dialogs/explorer/ExplorerContextItemVisible.kt +++ b/app_manager/appmanager/src/main/java/app/editors/manager/ui/dialogs/explorer/ExplorerContextItemVisible.kt @@ -9,6 +9,7 @@ interface ExplorerContextItemVisible { fun ExplorerContextState.visible(contextItem: ExplorerContextItem): Boolean { return when (contextItem) { + ExplorerContextItem.Preview -> preview ExplorerContextItem.AddUsers -> addUsers ExplorerContextItem.Archive -> archive ExplorerContextItem.Copy -> copy @@ -32,6 +33,9 @@ interface ExplorerContextItemVisible { } } + private val ExplorerContextState.preview: Boolean + get() = item is CloudFile && StringUtils.isDocument(item.fileExst) + private val ExplorerContextState.addUsers: Boolean get() = section != ApiContract.Section.Room.Archive && item.security.editAccess diff --git a/app_manager/appmanager/src/main/java/app/editors/manager/ui/fragments/base/BaseStorageDocsFragment.kt b/app_manager/appmanager/src/main/java/app/editors/manager/ui/fragments/base/BaseStorageDocsFragment.kt index 81eae2c5c..d6727aaea 100644 --- a/app_manager/appmanager/src/main/java/app/editors/manager/ui/fragments/base/BaseStorageDocsFragment.kt +++ b/app_manager/appmanager/src/main/java/app/editors/manager/ui/fragments/base/BaseStorageDocsFragment.kt @@ -19,6 +19,7 @@ import app.editors.manager.ui.fragments.main.DocsBaseFragment import app.editors.manager.ui.fragments.storages.DocsDropboxFragment import app.editors.manager.ui.popup.MainPopupItem import app.editors.manager.ui.popup.SelectPopupItem +import lib.toolkit.base.OpenMode import lib.toolkit.base.managers.utils.FolderChooser import lib.toolkit.base.managers.utils.PathUtils import lib.toolkit.base.managers.utils.StringUtils @@ -111,7 +112,7 @@ abstract class BaseStorageDocsFragment: DocsBaseFragment(), ActionButtonFragment } } - override fun onOpenLocalFile(file: CloudFile) { + override fun onOpenLocalFile(file: CloudFile, openMode: OpenMode) { val uri = Uri.parse(file.webUrl) when(StringUtils.getExtension(file.fileExst)) { StringUtils.Extension.IMAGE -> { @@ -120,7 +121,7 @@ abstract class BaseStorageDocsFragment: DocsBaseFragment(), ActionButtonFragment // Stub } } - else -> super.onOpenLocalFile(file) + else -> super.onOpenLocalFile(file, openMode) } } diff --git a/app_manager/appmanager/src/main/java/app/editors/manager/ui/fragments/main/DocsBaseFragment.kt b/app_manager/appmanager/src/main/java/app/editors/manager/ui/fragments/main/DocsBaseFragment.kt index b0da9d865..c0ad866ae 100644 --- a/app_manager/appmanager/src/main/java/app/editors/manager/ui/fragments/main/DocsBaseFragment.kt +++ b/app_manager/appmanager/src/main/java/app/editors/manager/ui/fragments/main/DocsBaseFragment.kt @@ -55,6 +55,7 @@ import app.editors.manager.ui.popup.MainPopupItem import app.editors.manager.ui.popup.SelectPopup import app.editors.manager.ui.popup.SelectPopupItem import app.editors.manager.ui.views.custom.PlaceholderViews +import lib.toolkit.base.OpenMode import lib.toolkit.base.managers.utils.ActivitiesUtils import lib.toolkit.base.managers.utils.CameraPicker import lib.toolkit.base.managers.utils.CreateDocument @@ -287,20 +288,21 @@ abstract class DocsBaseFragment : ListFragment(), DocsBaseView, BaseAdapter.OnIt show(requireContext()) } - override fun onOpenLocalFile(file: CloudFile) { + override fun onOpenLocalFile(file: CloudFile, openMode: OpenMode) { val uri = Uri.parse(file.webUrl) + when (getExtension(file.fileExst)) { StringUtils.Extension.DOC, StringUtils.Extension.FORM -> { presenter.addRecent(file) - showEditors(uri, EditorsType.DOCS) + showEditors(uri, EditorsType.DOCS, openMode = openMode) } StringUtils.Extension.SHEET -> { presenter.addRecent(file) - showEditors(uri, EditorsType.CELLS) + showEditors(uri, EditorsType.CELLS, openMode = openMode) } StringUtils.Extension.PRESENTATION -> { presenter.addRecent(file) - showEditors(uri, EditorsType.PRESENTATION) + showEditors(uri, EditorsType.PRESENTATION, openMode = openMode) } StringUtils.Extension.PDF -> { presenter.addRecent(file) @@ -330,6 +332,7 @@ abstract class DocsBaseFragment : ListFragment(), DocsBaseView, BaseAdapter.OnIt override fun onContextButtonClick(contextItem: ExplorerContextItem) { when (contextItem) { + ExplorerContextItem.Preview -> presenter.getFileInfo(OpenMode.READ_ONLY) ExplorerContextItem.Move -> presenter.moveCopyOperation(OperationsState.OperationType.MOVE) ExplorerContextItem.Copy -> presenter.moveCopyOperation(OperationsState.OperationType.COPY) ExplorerContextItem.Send -> presenter.sendCopy() @@ -343,7 +346,7 @@ abstract class DocsBaseFragment : ListFragment(), DocsBaseView, BaseAdapter.OnIt cancelButton = getString(R.string.dialogs_common_cancel_button), suffix = presenter.itemExtension ) - is ExplorerContextItem.Edit -> presenter.getFileInfo() + is ExplorerContextItem.Edit -> presenter.getFileInfo(OpenMode.EDIT) is ExplorerContextItem.Delete -> showDeleteDialog(tag = DocsBasePresenter.TAG_DIALOG_BATCH_DELETE_CONTEXT) else -> {} } @@ -1040,18 +1043,18 @@ abstract class DocsBaseFragment : ListFragment(), DocsBaseView, BaseAdapter.OnIt } } - override fun onOpenDocumentServer(file: CloudFile?, info: String?, isEdit: Boolean) { + override fun onOpenDocumentServer(file: CloudFile?, info: String?, openMode: OpenMode) { when (getExtension(file?.fileExst ?: "")) { StringUtils.Extension.DOC, StringUtils.Extension.FORM -> { - showEditors(null, EditorsType.DOCS, info, viewMode = !isEdit) + showEditors(null, EditorsType.DOCS, info, openMode) } StringUtils.Extension.SHEET -> { - showEditors(null, EditorsType.CELLS, info) + showEditors(null, EditorsType.CELLS, info, openMode) } StringUtils.Extension.PRESENTATION -> { - showEditors(null, EditorsType.PRESENTATION, info) + showEditors(null, EditorsType.PRESENTATION, info, openMode) } StringUtils.Extension.PDF -> { @@ -1073,13 +1076,13 @@ abstract class DocsBaseFragment : ListFragment(), DocsBaseView, BaseAdapter.OnIt } } - protected fun showEditors(uri: Uri?, type: EditorsType, info: String? = null, viewMode: Boolean = true) { + protected fun showEditors(uri: Uri?, type: EditorsType, info: String? = null, openMode: OpenMode = OpenMode.READ) { try { val intent = Intent().apply { data = uri info?.let { putExtra(EditorsContract.KEY_DOC_SERVER, info) } putExtra(EditorsContract.KEY_HELP_URL, getHelpUrl(requireContext())) - putExtra(EditorsContract.KEY_VIEW_MODE, viewMode) + putExtra(EditorsContract.KEY_OPEN_MODE, openMode) action = Intent.ACTION_VIEW addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP) } @@ -1107,11 +1110,11 @@ abstract class DocsBaseFragment : ListFragment(), DocsBaseView, BaseAdapter.OnIt } } - protected fun getEditorsIntent(uri: Uri?, type: EditorsType, viewMode: Boolean = false): Intent { + protected fun getEditorsIntent(uri: Uri?, type: EditorsType, openMode: OpenMode = OpenMode.READ): Intent { val intent = Intent().apply { data = uri putExtra(EditorsContract.KEY_HELP_URL, getHelpUrl(requireContext())) - putExtra(EditorsContract.KEY_VIEW_MODE, viewMode) + putExtra(EditorsContract.KEY_OPEN_MODE, openMode) action = Intent.ACTION_VIEW addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP) } diff --git a/app_manager/appmanager/src/main/java/app/editors/manager/ui/fragments/main/DocsCloudFragment.kt b/app_manager/appmanager/src/main/java/app/editors/manager/ui/fragments/main/DocsCloudFragment.kt index 23943f084..266b4a41a 100644 --- a/app_manager/appmanager/src/main/java/app/editors/manager/ui/fragments/main/DocsCloudFragment.kt +++ b/app_manager/appmanager/src/main/java/app/editors/manager/ui/fragments/main/DocsCloudFragment.kt @@ -43,6 +43,7 @@ import app.editors.manager.ui.popup.MainPopupItem import app.editors.manager.ui.popup.SelectPopupItem import app.editors.manager.ui.views.custom.PlaceholderViews import com.google.android.material.dialog.MaterialAlertDialogBuilder +import lib.toolkit.base.OpenMode import lib.toolkit.base.managers.tools.LocalContentTools import lib.toolkit.base.managers.utils.DialogUtils import lib.toolkit.base.managers.utils.UiUtils.setMenuItemTint @@ -205,6 +206,7 @@ open class DocsCloudFragment : DocsBaseFragment(), DocsCloudView { override fun onContextButtonClick(contextItem: ExplorerContextItem) { when (contextItem) { + ExplorerContextItem.Preview -> cloudPresenter.onContextOpenFile(OpenMode.READ_ONLY) ExplorerContextItem.Share -> showShareActivity(cloudPresenter.itemClicked) ExplorerContextItem.Location -> cloudPresenter.openLocation() ExplorerContextItem.CreateRoom -> cloudPresenter.createRoomFromFolder() @@ -218,7 +220,7 @@ open class DocsCloudFragment : DocsBaseFragment(), DocsCloudView { acceptErrorTint = true ) - is ExplorerContextItem.Edit -> cloudPresenter.onEditContextClick() + is ExplorerContextItem.Edit -> cloudPresenter.onContextOpenFile(OpenMode.EDIT) is ExplorerContextItem.ExternalLink -> cloudPresenter.saveExternalLinkToClipboard() is ExplorerContextItem.Restore -> presenter.moveCopySelected(OperationsState.OperationType.RESTORE) is ExplorerContextItem.Favorites -> cloudPresenter.addToFavorite() @@ -390,7 +392,7 @@ open class DocsCloudFragment : DocsBaseFragment(), DocsCloudView { } .setNegativeButton(R.string.conversion_dialog_open_in_view_mode) { dialog, _ -> dialog.dismiss() - cloudPresenter.getFileInfo() + cloudPresenter.getFileInfo(OpenMode.READ_ONLY) } .create() .apply { diff --git a/app_manager/appmanager/src/main/java/app/editors/manager/ui/fragments/main/DocsOnDeviceFragment.kt b/app_manager/appmanager/src/main/java/app/editors/manager/ui/fragments/main/DocsOnDeviceFragment.kt index 7ad8cfc04..726040376 100644 --- a/app_manager/appmanager/src/main/java/app/editors/manager/ui/fragments/main/DocsOnDeviceFragment.kt +++ b/app_manager/appmanager/src/main/java/app/editors/manager/ui/fragments/main/DocsOnDeviceFragment.kt @@ -32,11 +32,17 @@ import app.editors.manager.ui.dialogs.explorer.ExplorerContextItem import app.editors.manager.ui.popup.MainPopupItem import app.editors.manager.ui.popup.SelectPopupItem import app.editors.manager.ui.views.custom.PlaceholderViews +import lib.toolkit.base.OpenMode import lib.toolkit.base.managers.tools.LocalContentTools -import lib.toolkit.base.managers.utils.* +import lib.toolkit.base.managers.utils.ActivitiesUtils +import lib.toolkit.base.managers.utils.EditorsType +import lib.toolkit.base.managers.utils.FolderChooser +import lib.toolkit.base.managers.utils.RequestPermissions +import lib.toolkit.base.managers.utils.UiUtils +import lib.toolkit.base.managers.utils.launchAfterResume import lib.toolkit.base.ui.dialogs.common.CommonDialog.Dialogs import moxy.presenter.InjectPresenter -import java.util.* +import java.util.Locale class DocsOnDeviceFragment : DocsBaseFragment(), DocsOnDeviceView, ActionButtonFragment { @@ -194,10 +200,11 @@ class DocsOnDeviceFragment : DocsBaseFragment(), DocsOnDeviceView, ActionButtonF override fun onContextButtonClick(contextItem: ExplorerContextItem) { when (contextItem) { + ExplorerContextItem.Preview -> presenter.getFileInfo(OpenMode.READ_ONLY) ExplorerContextItem.Upload -> presenter.upload() ExplorerContextItem.Copy -> showFolderChooser(OperationsState.OperationType.COPY) ExplorerContextItem.Move -> showFolderChooser(OperationsState.OperationType.MOVE) - is ExplorerContextItem.Edit -> presenter.getFileInfo(false) + is ExplorerContextItem.Edit -> presenter.getFileInfo(OpenMode.EDIT) is ExplorerContextItem.Delete -> showDeleteDialog(tag = DocsBasePresenter.TAG_DIALOG_DELETE_CONTEXT) else -> super.onContextButtonClick(contextItem) } @@ -225,16 +232,16 @@ class DocsOnDeviceFragment : DocsBaseFragment(), DocsOnDeviceView, ActionButtonF super.showDeleteDialog(count, false, tag) } - override fun onShowDocs(uri: Uri, isNew: Boolean) { - showEditors(uri, EditorsType.DOCS, viewMode = isNew) + override fun onShowDocs(uri: Uri, openMode: OpenMode) { + showEditors(uri, EditorsType.DOCS, openMode = openMode) } - override fun onShowCells(uri: Uri) { - showEditors(uri, EditorsType.CELLS) + override fun onShowCells(uri: Uri, openMode: OpenMode) { + showEditors(uri, EditorsType.CELLS, openMode = openMode) } - override fun onShowSlides(uri: Uri) { - showEditors(uri, EditorsType.PRESENTATION) + override fun onShowSlides(uri: Uri, openMode: OpenMode) { + showEditors(uri, EditorsType.PRESENTATION, openMode = openMode) } override fun onShowPdf(uri: Uri) { diff --git a/app_manager/appmanager/src/main/java/app/editors/manager/ui/fragments/main/DocsRecentFragment.kt b/app_manager/appmanager/src/main/java/app/editors/manager/ui/fragments/main/DocsRecentFragment.kt index cdd4daaff..071e8e35e 100644 --- a/app_manager/appmanager/src/main/java/app/editors/manager/ui/fragments/main/DocsRecentFragment.kt +++ b/app_manager/appmanager/src/main/java/app/editors/manager/ui/fragments/main/DocsRecentFragment.kt @@ -38,6 +38,7 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.delay import kotlinx.coroutines.launch +import lib.toolkit.base.OpenMode import lib.toolkit.base.managers.utils.LaunchActivityForResult import lib.toolkit.base.managers.utils.RequestPermissions import lib.toolkit.base.managers.utils.StringUtils @@ -57,7 +58,7 @@ class DocsRecentFragment : DocsBaseFragment(), DocsRecentView { private var clearItem: MenuItem? = null private val recentListener: (recent: Recent) -> Unit = { recent -> - Debounce.perform(1000L) { presenter.fileClick(recent) } + Debounce.perform(1000L) { presenter.fileClick(recent, OpenMode.EDIT) } } private val contextListener: (recent: Recent, position: Int) -> Unit = { recent, position -> @@ -214,7 +215,7 @@ class DocsRecentFragment : DocsBaseFragment(), DocsRecentView { } } - override fun openFile(response: CloudFile) { + override fun openFile(response: CloudFile, openMode: OpenMode) { val ext = response.fileExst if (StringUtils.isVideoSupport(ext) || StringUtils.isImage(ext)) { showMediaActivity(getExplorer(response), false) { @@ -242,7 +243,8 @@ class DocsRecentFragment : DocsBaseFragment(), DocsRecentView { override fun onContextButtonClick(contextItem: ExplorerContextItem) { when (contextItem) { - is ExplorerContextItem.Edit -> presenter.fileClick() + is ExplorerContextItem.Edit -> presenter.fileClick(openMode = OpenMode.EDIT) + is ExplorerContextItem.Preview -> presenter.fileClick(openMode = OpenMode.READ_ONLY) is ExplorerContextItem.Delete -> presenter.deleteRecent() else -> super.onContextButtonClick(contextItem) } @@ -276,6 +278,7 @@ class DocsRecentFragment : DocsBaseFragment(), DocsRecentView { } override fun onOpenFile(state: OpenState) { + hideDialog() when (state) { is OpenState.Docs, is OpenState.Cells, is OpenState.Slide, is OpenState.Pdf -> { LaunchActivityForResult( @@ -291,7 +294,11 @@ class DocsRecentFragment : DocsBaseFragment(), DocsRecentView { } } }, - getEditorsIntent(state.uri, checkNotNull(state.type)) + getEditorsIntent( + uri = state.uri, + type = checkNotNull(state.type), + openMode = state.openMode + ) ).show() } is OpenState.Media -> { diff --git a/app_manager/appmanager/src/main/java/app/editors/manager/viewModels/main/ExplorerContextViewModel.kt b/app_manager/appmanager/src/main/java/app/editors/manager/viewModels/main/ExplorerContextViewModel.kt index f23d803ba..1e3f24b0f 100644 --- a/app_manager/appmanager/src/main/java/app/editors/manager/viewModels/main/ExplorerContextViewModel.kt +++ b/app_manager/appmanager/src/main/java/app/editors/manager/viewModels/main/ExplorerContextViewModel.kt @@ -27,6 +27,7 @@ class ExplorerContextViewModel : ViewModel() { state.section == ApiContract.Section.Recent -> listOf( ExplorerContextItem.Header(state), + ExplorerContextItem.Preview, ExplorerContextItem.Edit(state), ExplorerContextItem.Delete(state) ) @@ -46,6 +47,7 @@ class ExplorerContextViewModel : ViewModel() { state.section is ApiContract.Section.Storage -> listOf( ExplorerContextItem.Header(state), + ExplorerContextItem.Preview, ExplorerContextItem.Edit(state), ExplorerContextItem.Send, ExplorerContextItem.Move, @@ -56,6 +58,7 @@ class ExplorerContextViewModel : ViewModel() { state.section is ApiContract.Section.Device -> listOf( ExplorerContextItem.Header(state), + ExplorerContextItem.Preview, ExplorerContextItem.Edit(state), ExplorerContextItem.Send, ExplorerContextItem.Move, @@ -67,6 +70,7 @@ class ExplorerContextViewModel : ViewModel() { else -> listOf( ExplorerContextItem.Header(state), + ExplorerContextItem.Preview, ExplorerContextItem.Edit(state), ExplorerContextItem.Share.takeIf { state.provider != PortalProvider.Cloud.DocSpace }, ExplorerContextItem.CreateRoom.takeIf { state.provider == PortalProvider.Cloud.DocSpace }, diff --git a/toolkit/libtoolkit/src/main/java/lib/toolkit/base/OpenMode.kt b/toolkit/libtoolkit/src/main/java/lib/toolkit/base/OpenMode.kt new file mode 100644 index 000000000..5385540bb --- /dev/null +++ b/toolkit/libtoolkit/src/main/java/lib/toolkit/base/OpenMode.kt @@ -0,0 +1,5 @@ +package lib.toolkit.base + +enum class OpenMode { + EDIT, READ, READ_ONLY +} \ No newline at end of file diff --git a/toolkit/libtoolkit/src/main/java/lib/toolkit/base/managers/utils/EditorsContract.kt b/toolkit/libtoolkit/src/main/java/lib/toolkit/base/managers/utils/EditorsContract.kt index c0a0c8782..904f66056 100644 --- a/toolkit/libtoolkit/src/main/java/lib/toolkit/base/managers/utils/EditorsContract.kt +++ b/toolkit/libtoolkit/src/main/java/lib/toolkit/base/managers/utils/EditorsContract.kt @@ -9,7 +9,7 @@ import androidx.activity.result.contract.ActivityResultContracts object EditorsContract { const val KEY_HELP_URL = "KEY_HELP_URL" - const val KEY_VIEW_MODE = "KEY_VIEW_MODE" + const val KEY_OPEN_MODE = "KEY_OPEN_MODE" const val KEY_DOC_SERVER = "KEY_DOC_SERVER" const val EDITOR_DOCUMENTS = "lib.editors.gdocs.ui.activities.DocsActivity" diff --git a/toolkit/libtoolkit/src/main/java/lib/toolkit/base/ui/dialogs/common/CommonDialog.kt b/toolkit/libtoolkit/src/main/java/lib/toolkit/base/ui/dialogs/common/CommonDialog.kt index 2af7ef1f8..edd5dae13 100644 --- a/toolkit/libtoolkit/src/main/java/lib/toolkit/base/ui/dialogs/common/CommonDialog.kt +++ b/toolkit/libtoolkit/src/main/java/lib/toolkit/base/ui/dialogs/common/CommonDialog.kt @@ -17,6 +17,7 @@ import lib.toolkit.base.ui.dialogs.common.holders.InfoHolder import lib.toolkit.base.ui.dialogs.common.holders.ProgressHolder import lib.toolkit.base.ui.dialogs.common.holders.QuestionHolder import lib.toolkit.base.ui.dialogs.common.holders.WaitingHolder +import java.lang.ref.WeakReference class CommonDialog : BaseDialog() { @@ -71,7 +72,7 @@ class CommonDialog : BaseDialog() { Dialogs.CUSTOM to CustomHolder(this) ) - private var frManager: FragmentManager? = null + private var frManager: WeakReference = WeakReference(null) private var onClickListener: OnClickListener? = null private var dialogType: Dialogs = Dialogs.NONE @@ -87,7 +88,6 @@ class CommonDialog : BaseDialog() { override fun onDestroyView() { super.onDestroyView() onClickListener = null - frManager = null } override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { @@ -166,14 +166,14 @@ class CommonDialog : BaseDialog() { } fun show(type: Dialogs) { - frManager?.let { + frManager.get()?.let { dialogType = type show(it, TAG) } } fun setFragmentManager(fragmentManager: FragmentManager): CommonDialog { - frManager = fragmentManager + frManager = WeakReference(fragmentManager) return this }