package com.lagradost.cloudstream3.ui.settings import android.content.ClipData import android.content.ClipboardManager import android.content.Context import android.os.Bundle import android.view.View import android.widget.Toast import androidx.appcompat.app.AlertDialog import androidx.navigation.fragment.findNavController import androidx.preference.PreferenceFragmentCompat import com.lagradost.cloudstream3.CommonActivity import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.getPref import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setUpToolbar import com.lagradost.cloudstream3.utils.BackupUtils.backup import com.lagradost.cloudstream3.utils.BackupUtils.restorePrompt import com.lagradost.cloudstream3.utils.InAppUpdater.Companion.runAutoUpdate import com.lagradost.cloudstream3.utils.UIHelper.dismissSafe import com.lagradost.cloudstream3.utils.UIHelper.hideKeyboard import com.lagradost.cloudstream3.utils.VideoDownloadManager import kotlinx.android.synthetic.main.logcat.* import okhttp3.internal.closeQuietly import java.io.BufferedReader import java.io.InputStreamReader import java.io.OutputStream import kotlin.concurrent.thread class SettingsUpdates : PreferenceFragmentCompat() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) setUpToolbar(R.string.category_updates) } override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { hideKeyboard() setPreferencesFromResource(R.xml.settings_updates, rootKey) //val settingsManager = PreferenceManager.getDefaultSharedPreferences(requireContext()) getPref(R.string.backup_key)?.setOnPreferenceClickListener { activity?.backup() return@setOnPreferenceClickListener true } getPref(R.string.redo_setup_key)?.setOnPreferenceClickListener { findNavController().navigate(R.id.navigation_setup_language) return@setOnPreferenceClickListener true } getPref(R.string.restore_key)?.setOnPreferenceClickListener { activity?.restorePrompt() return@setOnPreferenceClickListener true } getPref(R.string.show_logcat_key)?.setOnPreferenceClickListener { pref -> val builder = AlertDialog.Builder(pref.context, R.style.AlertDialogCustom) .setView(R.layout.logcat) val dialog = builder.create() dialog.show() val log = StringBuilder() try { //https://developer.android.com/studio/command-line/logcat val process = Runtime.getRuntime().exec("logcat -d") val bufferedReader = BufferedReader( InputStreamReader(process.inputStream) ) var line: String? while (bufferedReader.readLine().also { line = it } != null) { log.append(line) } } catch (e: Exception) { logError(e) // kinda ironic } val text = log.toString() dialog.text1?.text = text dialog.copy_btt?.setOnClickListener { val serviceClipboard = (activity?.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager?) ?: return@setOnClickListener val clip = ClipData.newPlainText("logcat", text) serviceClipboard.setPrimaryClip(clip) dialog.dismissSafe(activity) } dialog.clear_btt?.setOnClickListener { Runtime.getRuntime().exec("logcat -c") dialog.dismissSafe(activity) } dialog.save_btt?.setOnClickListener { var fileStream: OutputStream? = null try { fileStream = VideoDownloadManager.setupStream( it.context, "logcat", null, "txt", false ).fileStream fileStream?.writer()?.write(text) } catch (e: Exception) { logError(e) } finally { fileStream?.closeQuietly() dialog.dismissSafe(activity) } } dialog.close_btt?.setOnClickListener { dialog.dismissSafe(activity) } return@setOnPreferenceClickListener true } getPref(R.string.manual_check_update_key)?.setOnPreferenceClickListener { thread { if (!requireActivity().runAutoUpdate(false)) { activity?.runOnUiThread { CommonActivity.showToast( activity, R.string.no_update_found, Toast.LENGTH_SHORT ) } } } return@setOnPreferenceClickListener true } } }