package com.example.modifier.repo import android.content.Context import android.os.Handler import android.os.Looper import android.util.Log import androidx.lifecycle.MutableLiveData import androidx.lifecycle.Observer import com.example.modifier.enums.RcsConfigureState import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.delay import kotlinx.coroutines.isActive import kotlinx.coroutines.suspendCancellableCoroutine import kotlinx.coroutines.withContext import kotlinx.coroutines.withTimeoutOrNull import org.apache.commons.collections4.queue.CircularFifoQueue import kotlin.coroutines.resume import kotlin.time.Duration class GoogleMessageStateRepository(context: Context) { private val handler = Handler(Looper.getMainLooper()) val logs = MutableLiveData() val rcsConfigureState = MutableLiveData(RcsConfigureState.CONFIGURED) suspend fun startLogging() { try { val logsCache = CircularFifoQueue(128) val p = Runtime.getRuntime().exec("su") p.outputStream.bufferedWriter().use { writer -> writer.write("logcat -c") writer.newLine() writer.flush() writer.write("logcat BugleRcsEngine:D *:S -v time") writer.newLine() writer.flush() } p.inputStream .bufferedReader() .useLines { lines -> lines.forEach { line -> if (line.contains("destState=CheckPreconditionsState")) { rcsConfigureState.postValue(RcsConfigureState.NOT_CONFIGURED) } else if (line.contains("destState=ReadyState")) { rcsConfigureState.postValue(RcsConfigureState.READY) } else if (line.contains("destState=WaitingForOtpState")) { rcsConfigureState.postValue(RcsConfigureState.WAITING_FOR_OTP) } else if (line.contains("destState=VerifyOtpState")) { rcsConfigureState.postValue(RcsConfigureState.VERIFYING_OTP) } else if (line.contains("destState=ConfiguredState")) { rcsConfigureState.postValue(RcsConfigureState.CONFIGURED) } else if (line.contains("destState=WaitingForRcsDefaultOnState")) { rcsConfigureState.postValue(RcsConfigureState.WAITING_FOR_DEFAULT_ON) } else if (line.contains("destState=WaitingForGoogleTosState")) { rcsConfigureState.postValue(RcsConfigureState.WAITING_FOR_TOS) } else if (line.contains("destState=RetryState")) { rcsConfigureState.postValue(RcsConfigureState.RETRY) } else if (line.contains("destState=ReplayRequestState")) { rcsConfigureState.postValue(RcsConfigureState.REPLAY_REQUEST) } Regex("(?