@@ -2,12 +2,14 @@ package me.rosuh.easywatermark.ui
22
33import android.animation.ObjectAnimator
44import android.annotation.SuppressLint
5+ import android.content.ClipData
6+ import android.content.ClipboardManager
57import android.content.Context
68import android.content.Intent
79import android.content.Intent.ACTION_SEND
10+ import android.content.Intent.ACTION_VIEW
811import android.content.pm.PackageManager
912import android.content.res.ColorStateList
10- import android.content.res.Configuration
1113import android.graphics.Color
1214import android.graphics.drawable.ColorDrawable
1315import android.net.Uri
@@ -16,18 +18,26 @@ import android.os.Bundle
1618import android.util.Log
1719import android.view.*
1820import android.view.View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
21+ import android.widget.Button
22+ import android.widget.TextView
1923import android.widget.Toast
2024import androidx.activity.result.ActivityResultLauncher
2125import androidx.activity.viewModels
2226import androidx.appcompat.app.AppCompatActivity
2327import androidx.core.content.ContextCompat
2428import androidx.core.content.edit
25- import androidx.core.view.*
29+ import androidx.core.view.WindowCompat
30+ import androidx.core.view.WindowInsetsCompat
31+ import androidx.core.view.WindowInsetsControllerCompat
32+ import androidx.core.view.forEach
2633import androidx.fragment.app.commit
34+ import androidx.lifecycle.lifecycleScope
2735import androidx.recyclerview.widget.RecyclerView
2836import com.google.android.material.dialog.MaterialAlertDialogBuilder
2937import com.google.android.material.tabs.TabLayout
3038import dagger.hilt.android.AndroidEntryPoint
39+ import kotlinx.coroutines.delay
40+ import kotlinx.coroutines.launch
3141import me.rosuh.easywatermark.MyApp
3242import me.rosuh.easywatermark.R
3343import me.rosuh.easywatermark.data.model.FuncTitleModel
@@ -37,14 +47,18 @@ import me.rosuh.easywatermark.data.repo.WaterMarkRepository
3747import me.rosuh.easywatermark.ui.about.AboutActivity
3848import me.rosuh.easywatermark.ui.adapter.FuncPanelAdapter
3949import me.rosuh.easywatermark.ui.adapter.PhotoListPreviewAdapter
40- import me.rosuh.easywatermark.ui.dialog.*
50+ import me.rosuh.easywatermark.ui.dialog.CompressImageDialogFragment
51+ import me.rosuh.easywatermark.ui.dialog.EditTextBSDialogFragment
52+ import me.rosuh.easywatermark.ui.dialog.GalleryFragment
53+ import me.rosuh.easywatermark.ui.dialog.SaveImageBSDialogFragment
4154import me.rosuh.easywatermark.ui.panel.*
4255import me.rosuh.easywatermark.ui.widget.CenterLayoutManager
4356import me.rosuh.easywatermark.ui.widget.LaunchView
44- import me.rosuh.easywatermark.utils.*
57+ import me.rosuh.easywatermark.utils.FileUtils
58+ import me.rosuh.easywatermark.utils.PickImageContract
59+ import me.rosuh.easywatermark.utils.VibrateHelper
4560import me.rosuh.easywatermark.utils.ktx.*
46- import java.util.*
47- import kotlin.collections.ArrayList
61+ import me.rosuh.easywatermark.utils.onItemClick
4862
4963
5064@AndroidEntryPoint
@@ -129,6 +143,11 @@ class MainActivity : AppCompatActivity() {
129143
130144 override fun onCreate (savedInstanceState : Bundle ? ) {
131145 super .onCreate(savedInstanceState)
146+ if (MyApp .recoveryMode) {
147+ setContentView(R .layout.activity_recovery)
148+ initRecoveryView()
149+ return
150+ }
132151 launchView = LaunchView (this )
133152 setContentView(launchView)
134153 if (savedInstanceState == null ) {
@@ -144,8 +163,67 @@ class MainActivity : AppCompatActivity() {
144163 SaveImageBSDialogFragment .safetyHide(this @MainActivity.supportFragmentManager)
145164 }
146165
166+ private fun initRecoveryView () {
167+ val tvCrashInfo = findViewById<TextView >(R .id.tv_crash_info).apply {
168+ with (getSharedPreferences(MyApp .SP_NAME , MODE_PRIVATE )) {
169+ val crashInfo = getString(MyApp .KEY_STACK_TRACE , " " )
170+ text = crashInfo
171+ }
172+ }
173+ val btnCopy = findViewById<Button >(R .id.btn_copy).apply {
174+ setOnClickListener {
175+ try {
176+ val clipboard = getSystemService(Context .CLIPBOARD_SERVICE ) as ClipboardManager
177+ val clip = ClipData .newPlainText(tvCrashInfo.text, tvCrashInfo.text)
178+ clipboard.setPrimaryClip(clip)
179+ Toast .makeText(this @MainActivity, R .string.copy_success, Toast .LENGTH_SHORT )
180+ .show()
181+ } catch (e: Exception ) {
182+ Toast .makeText(this @MainActivity, R .string.copy_failed, Toast .LENGTH_SHORT )
183+ .show()
184+ }
185+ }
186+ }
187+ val btnSendEmail = findViewById<Button >(R .id.btn_email).apply {
188+ setOnClickListener {
189+ viewModel.extraCrashInfo(this @MainActivity, tvCrashInfo.text.toString())
190+ }
191+ }
192+ val btnTelegram = findViewById<Button >(R .id.btn_telegram).apply {
193+ setOnClickListener {
194+ openLink(" https://t.me/rosuh" )
195+ }
196+ }
197+ val btnStore = findViewById<Button >(R .id.btn_store).apply {
198+ setOnClickListener {
199+ try {
200+ startActivity(
201+ Intent (
202+ Intent .ACTION_VIEW ,
203+ Uri .parse(" market://details?id=me.rosuh.easywatermark" )
204+ )
205+ )
206+ } catch (e: Exception ) {
207+ Toast .makeText(this @MainActivity, R .string.store_not_found, Toast .LENGTH_SHORT )
208+ .show()
209+ }
210+ }
211+ }
212+
213+ findViewById<Button >(R .id.btn_close_recovery_mode).apply {
214+ setOnClickListener {
215+ (MyApp .instance as MyApp ).launchSuccess()
216+ Toast .makeText(this @MainActivity, R .string.recovery_mode_closed, Toast .LENGTH_SHORT )
217+ .show()
218+ }
219+ }
220+ }
221+
147222 override fun onWindowFocusChanged (hasFocus : Boolean ) {
148223 super .onWindowFocusChanged(hasFocus)
224+ if (MyApp .recoveryMode) {
225+ return
226+ }
149227 if (hasFocus) {
150228 hideSystemUI()
151229 }
@@ -196,6 +274,20 @@ class MainActivity : AppCompatActivity() {
196274 }
197275 }
198276
277+ override fun onResume () {
278+ super .onResume()
279+ if (MyApp .recoveryMode) {
280+ return
281+ }
282+ lifecycleScope.launch {
283+ delay(1000 )
284+ if (this @MainActivity.isFinishing) {
285+ return @launch
286+ }
287+ (MyApp .instance as ? MyApp ? )?.launchSuccess()
288+ }
289+ }
290+
199291 override fun onDestroy () {
200292 bgTransformAnimator?.cancel()
201293 super .onDestroy()
@@ -541,8 +633,10 @@ class MainActivity : AppCompatActivity() {
541633 } else {
542634 0
543635 }
544- window.insetsController?.setSystemBarsAppearance(systemUiAppearance,
545- WindowInsetsController .APPEARANCE_LIGHT_STATUS_BARS )
636+ window.insetsController?.setSystemBarsAppearance(
637+ systemUiAppearance,
638+ WindowInsetsController .APPEARANCE_LIGHT_STATUS_BARS
639+ )
546640 } else {
547641 val systemUiVisibilityFlags = if (! isInEditMode && ! this .isNight()) {
548642 window.decorView.systemUiVisibility or SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
@@ -720,7 +814,7 @@ class MainActivity : AppCompatActivity() {
720814 hideDetailPanel()
721815 }
722816
723- private fun setActivityBackground (color : Int ){
817+ private fun setActivityBackground (color : Int ) {
724818 (launchView.parent as ? View ? )?.setBackgroundColor(color)
725819 }
726820
0 commit comments