FullScreenTextViewerActivity.kt 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. /*
  2. * Nextcloud Talk - Android Client
  3. *
  4. * SPDX-FileCopyrightText: 2023 Ezhil Shanmugham <ezhil56x.contact@gmail.com>
  5. * SPDX-FileCopyrightText: 2021 Marcel Hibbe <dev@mhibbe.de>
  6. * SPDX-FileCopyrightText: 2021 Andy Scherzinger <info@andy-scherzinger.de>
  7. * SPDX-License-Identifier: GPL-3.0-or-later
  8. */
  9. package com.nextcloud.talk.fullscreenfile
  10. import android.content.Intent
  11. import android.os.Bundle
  12. import android.view.Menu
  13. import android.view.MenuItem
  14. import androidx.appcompat.app.AppCompatActivity
  15. import androidx.core.content.FileProvider
  16. import androidx.core.content.res.ResourcesCompat
  17. import androidx.fragment.app.DialogFragment
  18. import autodagger.AutoInjector
  19. import com.nextcloud.talk.BuildConfig
  20. import com.nextcloud.talk.R
  21. import com.nextcloud.talk.application.NextcloudTalkApplication
  22. import com.nextcloud.talk.databinding.ActivityFullScreenTextBinding
  23. import com.nextcloud.talk.ui.dialog.SaveToStorageDialogFragment
  24. import com.nextcloud.talk.ui.theme.ViewThemeUtils
  25. import com.nextcloud.talk.utils.DisplayUtils
  26. import com.nextcloud.talk.utils.Mimetype.TEXT_PREFIX_GENERIC
  27. import io.noties.markwon.Markwon
  28. import java.io.File
  29. import javax.inject.Inject
  30. @AutoInjector(NextcloudTalkApplication::class)
  31. class FullScreenTextViewerActivity : AppCompatActivity() {
  32. lateinit var binding: ActivityFullScreenTextBinding
  33. @Inject
  34. lateinit var viewThemeUtils: ViewThemeUtils
  35. private lateinit var path: String
  36. override fun onCreateOptionsMenu(menu: Menu): Boolean {
  37. menuInflater.inflate(R.menu.menu_preview, menu)
  38. return true
  39. }
  40. override fun onOptionsItemSelected(item: MenuItem): Boolean {
  41. return when (item.itemId) {
  42. android.R.id.home -> {
  43. onBackPressedDispatcher.onBackPressed()
  44. true
  45. }
  46. R.id.share -> {
  47. val shareUri = FileProvider.getUriForFile(
  48. this,
  49. BuildConfig.APPLICATION_ID,
  50. File(path)
  51. )
  52. val shareIntent: Intent = Intent().apply {
  53. action = Intent.ACTION_SEND
  54. putExtra(Intent.EXTRA_STREAM, shareUri)
  55. type = TEXT_PREFIX_GENERIC
  56. addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
  57. }
  58. startActivity(Intent.createChooser(shareIntent, resources.getText(R.string.send_to)))
  59. true
  60. }
  61. R.id.save -> {
  62. val saveFragment: DialogFragment = SaveToStorageDialogFragment.newInstance(
  63. intent.getStringExtra("FILE_NAME").toString()
  64. )
  65. saveFragment.show(
  66. supportFragmentManager,
  67. SaveToStorageDialogFragment.TAG
  68. )
  69. true
  70. }
  71. else -> {
  72. super.onOptionsItemSelected(item)
  73. }
  74. }
  75. }
  76. override fun onCreate(savedInstanceState: Bundle?) {
  77. super.onCreate(savedInstanceState)
  78. NextcloudTalkApplication.sharedApplication!!.componentApplication.inject(this)
  79. binding = ActivityFullScreenTextBinding.inflate(layoutInflater)
  80. setContentView(binding.root)
  81. setSupportActionBar(binding.textviewToolbar)
  82. val fileName = intent.getStringExtra("FILE_NAME")
  83. val isMarkdown = intent.getBooleanExtra("IS_MARKDOWN", false)
  84. path = applicationContext.cacheDir.absolutePath + "/" + fileName
  85. val text = readFile(path)
  86. if (isMarkdown) {
  87. val markwon = Markwon.create(applicationContext)
  88. markwon.setMarkdown(binding.textView, text)
  89. } else {
  90. binding.textView.text = text
  91. }
  92. supportActionBar?.title = fileName
  93. supportActionBar?.setDisplayHomeAsUpEnabled(true)
  94. viewThemeUtils.platform.themeStatusBar(this)
  95. viewThemeUtils.material.themeToolbar(binding.textviewToolbar)
  96. viewThemeUtils.material.colorToolbarOverflowIcon(binding.textviewToolbar)
  97. if (resources != null) {
  98. DisplayUtils.applyColorToNavigationBar(
  99. this.window,
  100. ResourcesCompat.getColor(resources, R.color.bg_default, null)
  101. )
  102. }
  103. }
  104. private fun readFile(fileName: String) = File(fileName).inputStream().readBytes().toString(Charsets.UTF_8)
  105. }