diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/MainActivity.kt index 177e36ffe..18ac3e88f 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/MainActivity.kt @@ -1,6 +1,7 @@ package com.simplemobiletools.calendar.pro.activities import android.annotation.SuppressLint +import android.app.Activity import android.app.SearchManager import android.content.Context import android.content.Intent @@ -54,6 +55,8 @@ import java.util.* import kotlin.collections.ArrayList class MainActivity : SimpleActivity(), RefreshRecyclerViewListener { + private val PICK_EXPORT_FILE_INTENT = 2 + private var showCalDAVRefreshToast = false private var mShouldFilterBeVisible = false private var mIsSearchOpen = false @@ -62,6 +65,7 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener { private var shouldGoToTodayBeVisible = false private var goToTodayButton: MenuItem? = null private var currentFragments = ArrayList() + private var eventTypesToExport = ArrayList() private var mStoredTextColor = 0 private var mStoredBackgroundColor = 0 @@ -228,6 +232,14 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener { checkIsViewIntent() } + override fun onActivityResult(requestCode: Int, resultCode: Int, resultData: Intent?) { + super.onActivityResult(requestCode, resultCode, resultData) + if (requestCode == PICK_EXPORT_FILE_INTENT && resultCode == Activity.RESULT_OK && resultData != null && resultData.data != null) { + val outputStream = contentResolver.openOutputStream(resultData.data!!) + exportEventsTo(eventTypesToExport, outputStream) + } + } + private fun storeStateVariables() { config.apply { mStoredIsSundayFirst = isSundayFirst @@ -782,11 +794,25 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener { } private fun tryExportEvents() { - handlePermission(PERMISSION_WRITE_STORAGE) { - if (it) { - ExportEventsDialog(this, config.lastExportPath, false) { file, eventTypes -> - getFileOutputStream(file.toFileDirItem(this), true) { - exportEventsTo(eventTypes, it) + if (isQPlus()) { + ExportEventsDialog(this, config.lastExportPath, true) { file, eventTypes -> + eventTypesToExport = eventTypes + + Intent(Intent.ACTION_CREATE_DOCUMENT).apply { + type = "text/calendar" + putExtra(Intent.EXTRA_TITLE, file.name) + addCategory(Intent.CATEGORY_OPENABLE) + + startActivityForResult(this, PICK_EXPORT_FILE_INTENT) + } + } + } else { + handlePermission(PERMISSION_WRITE_STORAGE) { + if (it) { + ExportEventsDialog(this, config.lastExportPath, false) { file, eventTypes -> + getFileOutputStream(file.toFileDirItem(this), true) { + exportEventsTo(eventTypes, it) + } } } } @@ -794,16 +820,18 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener { } private fun exportEventsTo(eventTypes: ArrayList, outputStream: OutputStream?) { - val events = eventsHelper.getEventsToExport(eventTypes) - if (events.isEmpty()) { - toast(R.string.no_entries_for_exporting) - } else { - IcsExporter().exportEvents(this, outputStream, events, true) { - toast(when (it) { - IcsExporter.ExportResult.EXPORT_OK -> R.string.exporting_successful - IcsExporter.ExportResult.EXPORT_PARTIAL -> R.string.exporting_some_entries_failed - else -> R.string.exporting_failed - }) + ensureBackgroundThread { + val events = eventsHelper.getEventsToExport(eventTypes) + if (events.isEmpty()) { + toast(R.string.no_entries_for_exporting) + } else { + IcsExporter().exportEvents(this, outputStream, events, true) { + toast(when (it) { + IcsExporter.ExportResult.EXPORT_OK -> R.string.exporting_successful + IcsExporter.ExportResult.EXPORT_PARTIAL -> R.string.exporting_some_entries_failed + else -> R.string.exporting_failed + }) + } } } }