diff --git a/app/src/main/java/me/khodak/claudeusage/LoginActivity.kt b/app/src/main/java/me/khodak/claudeusage/LoginActivity.kt index 0fd16ac..d0dc859 100644 --- a/app/src/main/java/me/khodak/claudeusage/LoginActivity.kt +++ b/app/src/main/java/me/khodak/claudeusage/LoginActivity.kt @@ -8,7 +8,7 @@ import android.view.View import android.webkit.* import android.widget.Toast import androidx.appcompat.app.AppCompatActivity -import kotlinx.coroutines.CoroutineScope +import androidx.lifecycle.lifecycleScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import me.khodak.claudeusage.data.PreferencesManager @@ -145,7 +145,7 @@ class LoginActivity : AppCompatActivity() { UsageUpdateWorker.triggerImmediateRefresh(this) UsageUpdateWorker.schedulePeriodicRefresh(this) - CoroutineScope(Dispatchers.IO).launch { + lifecycleScope.launch(Dispatchers.IO) { try { val data = UsageRepository(prefs).fetchUsage() prefs.saveUsageData(data) diff --git a/app/src/main/java/me/khodak/claudeusage/UsageRepository.kt b/app/src/main/java/me/khodak/claudeusage/UsageRepository.kt index f51ab86..cfe2015 100644 --- a/app/src/main/java/me/khodak/claudeusage/UsageRepository.kt +++ b/app/src/main/java/me/khodak/claudeusage/UsageRepository.kt @@ -3,6 +3,7 @@ package me.khodak.claudeusage import android.util.Log import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext +import me.khodak.claudeusage.BuildConfig import me.khodak.claudeusage.data.PreferencesManager import me.khodak.claudeusage.data.UsageData import okhttp3.OkHttpClient @@ -67,13 +68,13 @@ class UsageRepository(private val prefs: PreferencesManager) { val usageUrl = "https://claude.ai/api/organizations/$orgId/usage" val resp = client.newCall(buildRequest(usageUrl, cookies)).execute() val code = resp.code - Log.d(TAG, "GET $usageUrl → $code") + if (BuildConfig.DEBUG) Log.d(TAG, "GET $usageUrl → $code") if (code == 401 || code == 403) { prefs.clearSession() return@withContext UsageData(errorMessage = "Session expired — please sign in again") } val body = resp.body?.string() ?: "" - debugBuf.append("$usageUrl\n→ $code: ${body.take(400)}\n\n") + if (BuildConfig.DEBUG) debugBuf.append("$usageUrl\n→ $code: ${body.take(400)}\n\n") val utilData = tryParseUtilizationBody(body) if (utilData != null) { return@withContext base.copy( @@ -98,7 +99,7 @@ class UsageRepository(private val prefs: PreferencesManager) { val req = buildRequest(url, cookies) val resp = client.newCall(req).execute() val code = resp.code - Log.d(TAG, "GET $url → $code") + if (BuildConfig.DEBUG) Log.d(TAG, "GET $url → $code") if (code == 401 || code == 403) { prefs.clearSession() @@ -107,8 +108,10 @@ class UsageRepository(private val prefs: PreferencesManager) { val rateLimitData = extractRateLimitHeaders(resp.headers) val body = resp.body?.string() ?: "" - debugBuf.append("$url\n→ $code: ${body.take(300)}\n\n") - Log.d(TAG, "Body: ${body.take(300)}") + if (BuildConfig.DEBUG) { + debugBuf.append("$url\n→ $code: ${body.take(300)}\n\n") + Log.d(TAG, "Body: ${body.take(300)}") + } val parsed = tryParseUsageBody(body, rateLimitData) if (parsed.hasRateLimitData) { @@ -121,8 +124,8 @@ class UsageRepository(private val prefs: PreferencesManager) { ) } } catch (e: Exception) { - Log.w(TAG, "Endpoint $url failed: ${e.message}") - debugBuf.append("$url\n→ ERROR: ${e.message}\n\n") + if (BuildConfig.DEBUG) Log.w(TAG, "Endpoint $url failed: ${e.message}") + if (BuildConfig.DEBUG) debugBuf.append("$url\n→ ERROR: ${e.message}\n\n") } } @@ -131,7 +134,7 @@ class UsageRepository(private val prefs: PreferencesManager) { val req = buildRequest("https://claude.ai/api/me", cookies) val resp = client.newCall(req).execute() val body = resp.body?.string() ?: "" - debugBuf.append("https://claude.ai/api/me\n→ ${resp.code}: ${body.take(400)}\n\n") + if (BuildConfig.DEBUG) debugBuf.append("https://claude.ai/api/me\n→ ${resp.code}: ${body.take(400)}\n\n") if (resp.isSuccessful && body.isNotBlank() && !body.startsWith("<")) { val json = JSONObject(body) val parsed = tryParseOrgForUsage(json) @@ -145,7 +148,7 @@ class UsageRepository(private val prefs: PreferencesManager) { } } } catch (e: Exception) { - debugBuf.append("https://claude.ai/api/me → ERROR: ${e.message}\n\n") + if (BuildConfig.DEBUG) debugBuf.append("https://claude.ai/api/me → ERROR: ${e.message}\n\n") } // Step 4: try page HTML for __NEXT_DATA__ @@ -169,7 +172,7 @@ class UsageRepository(private val prefs: PreferencesManager) { val marker = """