|
@@ -24,10 +24,8 @@
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
*/
|
|
|
|
|
|
-package com.nextcloud.talk.activities
|
|
|
|
|
|
+package com.nextcloud.talk.fullscreenfile
|
|
|
|
|
|
-import android.annotation.SuppressLint
|
|
|
|
-import android.content.DialogInterface
|
|
|
|
import android.content.Intent
|
|
import android.content.Intent
|
|
import android.os.Bundle
|
|
import android.os.Bundle
|
|
import android.util.Log
|
|
import android.util.Log
|
|
@@ -35,7 +33,6 @@ import android.view.Menu
|
|
import android.view.MenuItem
|
|
import android.view.MenuItem
|
|
import android.view.View
|
|
import android.view.View
|
|
import android.view.ViewGroup.MarginLayoutParams
|
|
import android.view.ViewGroup.MarginLayoutParams
|
|
-import androidx.appcompat.app.AlertDialog
|
|
|
|
import androidx.appcompat.app.AppCompatActivity
|
|
import androidx.appcompat.app.AppCompatActivity
|
|
import androidx.core.content.FileProvider
|
|
import androidx.core.content.FileProvider
|
|
import androidx.core.view.ViewCompat
|
|
import androidx.core.view.ViewCompat
|
|
@@ -44,28 +41,25 @@ import androidx.core.view.WindowInsetsCompat
|
|
import androidx.core.view.WindowInsetsControllerCompat
|
|
import androidx.core.view.WindowInsetsControllerCompat
|
|
import androidx.core.view.updateLayoutParams
|
|
import androidx.core.view.updateLayoutParams
|
|
import androidx.core.view.updatePadding
|
|
import androidx.core.view.updatePadding
|
|
-import androidx.work.Data
|
|
|
|
-import androidx.work.OneTimeWorkRequest
|
|
|
|
-import androidx.work.WorkInfo
|
|
|
|
-import androidx.work.WorkManager
|
|
|
|
|
|
+import androidx.fragment.app.DialogFragment
|
|
|
|
+import autodagger.AutoInjector
|
|
import com.google.android.material.snackbar.Snackbar
|
|
import com.google.android.material.snackbar.Snackbar
|
|
import com.nextcloud.talk.BuildConfig
|
|
import com.nextcloud.talk.BuildConfig
|
|
import com.nextcloud.talk.R
|
|
import com.nextcloud.talk.R
|
|
|
|
+import com.nextcloud.talk.application.NextcloudTalkApplication
|
|
import com.nextcloud.talk.databinding.ActivityFullScreenImageBinding
|
|
import com.nextcloud.talk.databinding.ActivityFullScreenImageBinding
|
|
-import com.nextcloud.talk.jobs.SaveFileToStorageWorker
|
|
|
|
-import com.nextcloud.talk.ui.theme.ViewThemeUtils
|
|
|
|
|
|
+import com.nextcloud.talk.ui.dialog.SaveToStorageDialogFragment
|
|
import com.nextcloud.talk.utils.BitmapShrinker
|
|
import com.nextcloud.talk.utils.BitmapShrinker
|
|
import com.nextcloud.talk.utils.Mimetype.IMAGE_PREFIX_GENERIC
|
|
import com.nextcloud.talk.utils.Mimetype.IMAGE_PREFIX_GENERIC
|
|
import pl.droidsonroids.gif.GifDrawable
|
|
import pl.droidsonroids.gif.GifDrawable
|
|
import java.io.File
|
|
import java.io.File
|
|
-import java.util.concurrent.ExecutionException
|
|
|
|
|
|
|
|
|
|
+@AutoInjector(NextcloudTalkApplication::class)
|
|
class FullScreenImageActivity : AppCompatActivity() {
|
|
class FullScreenImageActivity : AppCompatActivity() {
|
|
lateinit var binding: ActivityFullScreenImageBinding
|
|
lateinit var binding: ActivityFullScreenImageBinding
|
|
private lateinit var windowInsetsController: WindowInsetsControllerCompat
|
|
private lateinit var windowInsetsController: WindowInsetsControllerCompat
|
|
private lateinit var path: String
|
|
private lateinit var path: String
|
|
private var showFullscreen = false
|
|
private var showFullscreen = false
|
|
- lateinit var viewThemeUtils: ViewThemeUtils
|
|
|
|
|
|
|
|
override fun onCreateOptionsMenu(menu: Menu): Boolean {
|
|
override fun onCreateOptionsMenu(menu: Menu): Boolean {
|
|
menuInflater.inflate(R.menu.menu_preview, menu)
|
|
menuInflater.inflate(R.menu.menu_preview, menu)
|
|
@@ -98,7 +92,13 @@ class FullScreenImageActivity : AppCompatActivity() {
|
|
}
|
|
}
|
|
|
|
|
|
R.id.save -> {
|
|
R.id.save -> {
|
|
- showWarningDialog()
|
|
|
|
|
|
+ val saveFragment: DialogFragment = SaveToStorageDialogFragment.newInstance(
|
|
|
|
+ intent.getStringExtra("FILE_NAME").toString()
|
|
|
|
+ )
|
|
|
|
+ saveFragment.show(
|
|
|
|
+ supportFragmentManager,
|
|
|
|
+ SaveToStorageDialogFragment.TAG
|
|
|
|
+ )
|
|
true
|
|
true
|
|
}
|
|
}
|
|
|
|
|
|
@@ -108,24 +108,9 @@ class FullScreenImageActivity : AppCompatActivity() {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- private fun showWarningDialog() {
|
|
|
|
- val builder = AlertDialog.Builder(this)
|
|
|
|
- builder.setTitle(R.string.nc_dialog_save_to_storage_title)
|
|
|
|
- builder.setMessage(R.string.nc_dialog_save_to_storage_content)
|
|
|
|
- builder.setPositiveButton(R.string.nc_dialog_save_to_storage_yes) { dialog: DialogInterface, which: Int ->
|
|
|
|
- val fileName = intent.getStringExtra("FILE_NAME").toString()
|
|
|
|
- saveImageToStorage(fileName)
|
|
|
|
- dialog.dismiss()
|
|
|
|
- }
|
|
|
|
- builder.setNegativeButton(R.string.nc_dialog_save_to_storage_no) { dialog: DialogInterface, which: Int ->
|
|
|
|
- dialog.dismiss()
|
|
|
|
- }
|
|
|
|
- val dialog = builder.create()
|
|
|
|
- dialog.show()
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
override fun onCreate(savedInstanceState: Bundle?) {
|
|
override fun onCreate(savedInstanceState: Bundle?) {
|
|
super.onCreate(savedInstanceState)
|
|
super.onCreate(savedInstanceState)
|
|
|
|
+ NextcloudTalkApplication.sharedApplication!!.componentApplication.inject(this)
|
|
|
|
|
|
binding = ActivityFullScreenImageBinding.inflate(layoutInflater)
|
|
binding = ActivityFullScreenImageBinding.inflate(layoutInflater)
|
|
setContentView(binding.root)
|
|
setContentView(binding.root)
|
|
@@ -222,38 +207,6 @@ class FullScreenImageActivity : AppCompatActivity() {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- @SuppressLint("LongLogTag")
|
|
|
|
- private fun saveImageToStorage(
|
|
|
|
- fileName: String
|
|
|
|
- ) {
|
|
|
|
- val sourceFilePath = applicationContext.cacheDir.path
|
|
|
|
-
|
|
|
|
- val workers = WorkManager.getInstance(this).getWorkInfosByTag(fileName)
|
|
|
|
- try {
|
|
|
|
- for (workInfo in workers.get()) {
|
|
|
|
- if (workInfo.state == WorkInfo.State.RUNNING || workInfo.state == WorkInfo.State.ENQUEUED) {
|
|
|
|
- return
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- } catch (e: ExecutionException) {
|
|
|
|
- Log.e(TAG, "Error when checking if worker already exists", e)
|
|
|
|
- } catch (e: InterruptedException) {
|
|
|
|
- Log.e(TAG, "Error when checking if worker already exists", e)
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- val data: Data = Data.Builder()
|
|
|
|
- .putString(SaveFileToStorageWorker.KEY_FILE_NAME, fileName)
|
|
|
|
- .putString(SaveFileToStorageWorker.KEY_SOURCE_FILE_PATH, "$sourceFilePath/$fileName")
|
|
|
|
- .build()
|
|
|
|
-
|
|
|
|
- val saveWorker: OneTimeWorkRequest = OneTimeWorkRequest.Builder(SaveFileToStorageWorker::class.java)
|
|
|
|
- .setInputData(data)
|
|
|
|
- .addTag(fileName)
|
|
|
|
- .build()
|
|
|
|
-
|
|
|
|
- WorkManager.getInstance().enqueue(saveWorker)
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
companion object {
|
|
companion object {
|
|
private const val TAG = "FullScreenImageActivity"
|
|
private const val TAG = "FullScreenImageActivity"
|
|
private const val HUNDRED_MB = 100 * 1024 * 1024
|
|
private const val HUNDRED_MB = 100 * 1024 * 1024
|