From d222ef81264f853dbce8db7a8dd29bc1b67d502b Mon Sep 17 00:00:00 2001 From: Atridad Lahiji Date: Sat, 16 Aug 2025 00:48:38 -0600 Subject: [PATCH] 0.3.2 - Optimizations --- .../executionHistory/executionHistory.bin | Bin 8223861 -> 8223861 bytes .../executionHistory/executionHistory.lock | Bin 17 -> 17 bytes .gradle/8.11.1/fileHashes/fileHashes.bin | Bin 432932 -> 433732 bytes .gradle/8.11.1/fileHashes/fileHashes.lock | Bin 17 -> 17 bytes .../8.11.1/fileHashes/resourceHashesCache.bin | Bin 242395 -> 318866 bytes .../buildOutputCleanup.lock | Bin 17 -> 17 bytes .gradle/file-system.probe | Bin 8 -> 8 bytes app/build.gradle.kts | 6 +- .../openclimb/data/model/ClimbSession.kt | 8 +- .../atridad/openclimb/data/model/ClimbType.kt | 2 +- .../openclimb/data/model/DifficultySystem.kt | 20 ++--- .../com/atridad/openclimb/data/model/Gym.kt | 6 +- .../atridad/openclimb/data/model/Problem.kt | 12 +-- .../atridad/openclimb/data/model/Progress.kt | 50 ----------- .../data/repository/ClimbRepository.kt | 21 ++--- .../service/SessionTrackingService.kt | 37 ++++---- .../com/atridad/openclimb/ui/OpenClimbApp.kt | 9 -- .../ui/components/ActiveSessionBanner.kt | 78 +--------------- .../ui/components/FullscreenImageViewer.kt | 2 +- .../openclimb/ui/components/ImageDisplay.kt | 1 - .../openclimb/ui/components/ImagePicker.kt | 4 +- .../openclimb/ui/screens/AddEditScreens.kt | 17 ++-- .../openclimb/ui/screens/DetailScreens.kt | 69 ++------------ .../openclimb/ui/screens/GymsScreen.kt | 6 +- .../openclimb/ui/screens/ProblemsScreen.kt | 12 +-- .../openclimb/ui/screens/SessionsScreen.kt | 85 ++++++++++++++++-- .../openclimb/ui/screens/SettingsScreen.kt | 1 - .../com/atridad/openclimb/ui/theme/Color.kt | 11 +-- .../com/atridad/openclimb/ui/theme/Theme.kt | 4 +- .../com/atridad/openclimb/utils/ImageUtils.kt | 31 ++----- .../openclimb/utils/SessionShareUtils.kt | 48 +++------- .../openclimb/utils/ZipExportImportUtils.kt | 10 +-- 32 files changed, 177 insertions(+), 373 deletions(-) delete mode 100644 app/src/main/java/com/atridad/openclimb/data/model/Progress.kt diff --git a/.gradle/8.11.1/executionHistory/executionHistory.bin b/.gradle/8.11.1/executionHistory/executionHistory.bin index 1c9dc33c322dd333378a30323ce7f9b5ec72db8b..695d30c11bf60bbbd24d92acdf968da3b2f76180 100644 GIT binary patch delta 59712 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 Um%#gdGzHA#i_@% delta 34008 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 delta 2780 zcmYjTX;f5K5~ix32#Naw4-z8a5;1^{3xW%Rf;27>4Js}f+rb485OASUqu_RMZ@gd` za}*;kjVsJkuPAD}qtUqHG`I{p;z?pO9Cs&~%+!N9p6MU;?!9$u`>JkrZ8+ZcZe5Gg zUMl=e>#d$PXe~ZX1hLLb6(_xHV$o+-5!S&Zwsx?JA>MW^*vA`0ny*Ft>1)$Yc8o_6 z*u^B)bunqryD%rLt6jMH8O2}xx@$ZAd_a59tq+I*|9tV>UlpGPtQY44O2mplRU8Ra zwI_k$sD%a9f(Y(u5f^$ov?IM725naeYkCl>YF+wyExIWS{&$a5-kSQ3%4+f z*cIjw8wW;f&BK>~wmV`5h%SR2!Y$G&PDZNYd8ADohziB7r>RvDcBW}Xs8YKYiaXsa z!YQP*R8-os4Q;gcduE)_iPv^C(l^`Doz88?Y)UQWvn@KQD@G4;+rf;uwu+GswPo4f zJDD+UCz|NIzIv^b)Ll&ey^FQPxhdUAb5nw-iH*-9-Pvw|jkVm?R|Zw_pk6AgN-aTE zdlNNx2s9NbYgE^ckDh=Bx{d9_MV@i*pji>5DPKx6&jwS7vDu zm%v#}xMtLjU5f?bd&4gNb;GJ{zsdK{+^W~wRCRz>EnaWkx}tXA-bObb?3b2GgC9`& zC4)s9dM5|y{SO9{804^uUmU9DSzW8p%9{p<_R9m+AUq%0w3*%I;v3F-C9!nG^)?KxX#@iDV82 z56TY)2j%twvuqurUkD0?N|3Gl!9b+M0WgIg4gedKhk;5zhk=z!2Et_W4u=@Z4F{8a z9}Znnh7N{!q>?DUR2>D~)vpH4I?{aA(SD6MeWLy6e?KZrR$}N)vSOD>Ltqn-hY8Fy zHjN{xHi1oq^FqZar!Q1mA$=RqYMmD=s`MMr;gIV@P-W;uxB<@oqnx0qC50xT53NeVED9OM zF3nHoS1@`em;KMf8D+l|jG4Frq2zTVTX{xp?_sDcxQFceq5G`kkNd3G{{fn0VgY04X-18?7_-rdZ3y9>4B4J zf+tRqPd%|EQX4Pykb}KYHPCEtmMr#0s~qNo4D1&j(Mq>Evabo9&>~-U!bFg>yRdyK z_#D@%K~1uThnk*7HF$4uZvEkDq!lYM@>;RNe$Cj)wf}afa$0u!0%swOD^cvUG>{Ex zfn0F5J<4y=V8l&|)OsOTz9E<$PY7n4FM~NacTFh;`7{K%YStf7wxQlX9FqG7BgAbZ z7yU<-`PdEeU~i=d(Bw*k3uELHfj%HJ2cgM8H>1!_dxl`Wyc~^Ob)GS3lQl6M3QZWs zwvG+M-IP5XOQ`P%#%Re1hH%1{I^#>Wk0bFXlsH;Xi0@bEklo_+< z!}Vw^a{YM3V>a!HXN-Nvb9|%6<771hZ_k*xf4*yDg6o@nfaqPQk}WTf$M7c7cQR*4 ze)Lz}rBw+Wx#v{Yd1fkdAL=oKZTcqSKj6dTwl_ZR%`?%VziX@HCtV5DW)`lO{D?E* z{~!r7?4CIXKZYtwS&TvQ@M7KhsvHinFqi#ozJ$s0B@9T^Qf!Tswj6(>xhuFJcCEmR zKwI+I`r4Jc(Ee2n&g)eyd3ZHfRo!YGORu#Y=ZLk8Q{h_Vm+58Yg1K+y!_N8o-*Y}^ zcuPL}xpo5s`fLMB?-$H{Em+xr0?tWPA!eZbk+2VI`xf2RgO~etJiGZxhsK(UaQy&S zaT6tw?y5XCaOv=P!0t8- z1Y7ihpl%l@eaCL@j64w7^)bNIFab!O0AfK_?a@oI^FCC?kZ2<<--i}4FFIOI+Rt@G zg$G!}{R13F^Mja#{;p*{E{a}&&5&qrpm4!zTNmVTd1} z;lmwg^>-h4o@K6_=bQc)xO6HmFxvYraz{B%kXm^XX0ImfoVbIwcsmd9d^3@~ diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock index 4285d3d3f17cd98726053292fc0b6442a12ac541..53dc418fc954e343622f69e9cc2b87aa0eb3c257 100644 GIT binary patch literal 17 VcmZQRcfe?sw8Rc81~8Cf0RS(61F--A literal 17 VcmZQRcfe?sw8Rc81~8EL0RS*?1fu`| diff --git a/.gradle/file-system.probe b/.gradle/file-system.probe index e40efa0bf2c3af341e356ee4d17452b766d38bc7..bd9f81585b022f845e7a8033aaaafa4a7a9e6dde 100644 GIT binary patch literal 8 PcmZQzV4SgWa>6742-O16 literal 8 PcmZQzV4Sg`a@HCE2@wMc diff --git a/app/build.gradle.kts b/app/build.gradle.kts index daf76b1..0682845 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -14,15 +14,15 @@ android { applicationId = "com.atridad.openclimb" minSdk = 31 targetSdk = 35 - versionCode = 4 - versionName = "0.3.1" + versionCode = 5 + versionName = "0.3.2" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } buildTypes { release { - isMinifyEnabled = false + isMinifyEnabled = true proguardFiles( getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro" diff --git a/app/src/main/java/com/atridad/openclimb/data/model/ClimbSession.kt b/app/src/main/java/com/atridad/openclimb/data/model/ClimbSession.kt index 7feb45a..87cbe73 100644 --- a/app/src/main/java/com/atridad/openclimb/data/model/ClimbSession.kt +++ b/app/src/main/java/com/atridad/openclimb/data/model/ClimbSession.kt @@ -31,10 +31,10 @@ data class ClimbSession( @PrimaryKey val id: String, val gymId: String, - val date: String, // ISO date string - val startTime: String? = null, // When session was started - val endTime: String? = null, // When session was completed - val duration: Long? = null, // Duration in minutes (calculated when completed) + val date: String, + val startTime: String? = null, + val endTime: String? = null, + val duration: Long? = null, val status: SessionStatus = SessionStatus.ACTIVE, val notes: String? = null, val createdAt: String, diff --git a/app/src/main/java/com/atridad/openclimb/data/model/ClimbType.kt b/app/src/main/java/com/atridad/openclimb/data/model/ClimbType.kt index cfd991d..8647cee 100644 --- a/app/src/main/java/com/atridad/openclimb/data/model/ClimbType.kt +++ b/app/src/main/java/com/atridad/openclimb/data/model/ClimbType.kt @@ -8,7 +8,7 @@ enum class ClimbType { BOULDER; /** - * Get the display name for the UI + * Get the display name */ fun getDisplayName(): String = when (this) { ROPE -> "Rope" diff --git a/app/src/main/java/com/atridad/openclimb/data/model/DifficultySystem.kt b/app/src/main/java/com/atridad/openclimb/data/model/DifficultySystem.kt index e89b87b..eddc028 100644 --- a/app/src/main/java/com/atridad/openclimb/data/model/DifficultySystem.kt +++ b/app/src/main/java/com/atridad/openclimb/data/model/DifficultySystem.kt @@ -4,14 +4,14 @@ import kotlinx.serialization.Serializable @Serializable enum class DifficultySystem { - // Bouldering systems - V_SCALE, // V-Scale (VB - V17) - FONT, // Fontainebleau (3 - 8C+) + // Bouldering + V_SCALE, // V-Scale (VB - V17) + FONT, // Fontainebleau (3 - 8C+) - // Rope climbing systems - YDS, // Yosemite Decimal System (5.0 - 5.15d) + // Rope + YDS, // Yosemite Decimal System (5.0 - 5.15d) - // Custom system for gyms that use their own colors/naming + // Custom difficulty systems CUSTOM; /** @@ -39,22 +39,22 @@ enum class DifficultySystem { fun isRopeSystem(): Boolean = when (this) { YDS -> true V_SCALE, FONT -> false - CUSTOM -> true // Custom is available for all + CUSTOM -> true } /** - * Get available grades for this difficulty system + * Get available grades for this system */ fun getAvailableGrades(): List = when (this) { V_SCALE -> listOf("VB", "V0", "V1", "V2", "V3", "V4", "V5", "V6", "V7", "V8", "V9", "V10", "V11", "V12", "V13", "V14", "V15", "V16", "V17") FONT -> listOf("3", "4A", "4B", "4C", "5A", "5B", "5C", "6A", "6A+", "6B", "6B+", "6C", "6C+", "7A", "7A+", "7B", "7B+", "7C", "7C+", "8A", "8A+", "8B", "8B+", "8C", "8C+") YDS -> listOf("5.0", "5.1", "5.2", "5.3", "5.4", "5.5", "5.6", "5.7", "5.8", "5.9", "5.10a", "5.10b", "5.10c", "5.10d", "5.11a", "5.11b", "5.11c", "5.11d", "5.12a", "5.12b", "5.12c", "5.12d", "5.13a", "5.13b", "5.13c", "5.13d", "5.14a", "5.14b", "5.14c", "5.14d", "5.15a", "5.15b", "5.15c", "5.15d") - CUSTOM -> emptyList() // Custom allows free text input + CUSTOM -> emptyList() } companion object { /** - * Get all difficulty systems available for a specific climb type + * Get all difficulty systems based on type */ fun getSystemsForClimbType(climbType: ClimbType): List = when (climbType) { ClimbType.BOULDER -> entries.filter { it.isBoulderingSystem() } diff --git a/app/src/main/java/com/atridad/openclimb/data/model/Gym.kt b/app/src/main/java/com/atridad/openclimb/data/model/Gym.kt index e99b601..de81001 100644 --- a/app/src/main/java/com/atridad/openclimb/data/model/Gym.kt +++ b/app/src/main/java/com/atridad/openclimb/data/model/Gym.kt @@ -13,10 +13,10 @@ data class Gym( val name: String, val location: String? = null, val supportedClimbTypes: List, - val difficultySystems: List, // What systems this gym uses - val customDifficultyGrades: List = emptyList(), // For gyms using colors/custom names + val difficultySystems: List, + val customDifficultyGrades: List = emptyList(), val notes: String? = null, - val createdAt: String, // ISO string format for serialization + val createdAt: String, val updatedAt: String ) { companion object { diff --git a/app/src/main/java/com/atridad/openclimb/data/model/Problem.kt b/app/src/main/java/com/atridad/openclimb/data/model/Problem.kt index 1d465dc..80463e9 100644 --- a/app/src/main/java/com/atridad/openclimb/data/model/Problem.kt +++ b/app/src/main/java/com/atridad/openclimb/data/model/Problem.kt @@ -28,12 +28,12 @@ data class Problem( val description: String? = null, val climbType: ClimbType, val difficulty: DifficultyGrade, - val setter: String? = null, // Route setter name - val tags: List = emptyList(), // e.g., "overhang", "slab", "crimpy" - val location: String? = null, // Wall section, area in gym - val imagePaths: List = emptyList(), // Local file paths to photos - val isActive: Boolean = true, // Whether the problem is still up - val dateSet: String? = null, // When the problem was set + val setter: String? = null, + val tags: List = emptyList(), + val location: String? = null, + val imagePaths: List = emptyList(), + val isActive: Boolean = true, + val dateSet: String? = null, val notes: String? = null, val createdAt: String, val updatedAt: String diff --git a/app/src/main/java/com/atridad/openclimb/data/model/Progress.kt b/app/src/main/java/com/atridad/openclimb/data/model/Progress.kt deleted file mode 100644 index ae0e2c5..0000000 --- a/app/src/main/java/com/atridad/openclimb/data/model/Progress.kt +++ /dev/null @@ -1,50 +0,0 @@ -package com.atridad.openclimb.data.model - -import kotlinx.serialization.Serializable -import java.time.LocalDateTime - -@Serializable -data class ProblemProgress( - val problemId: String, - val totalAttempts: Int, - val successfulAttempts: Int, - val firstAttemptDate: String, - val lastAttemptDate: String, - val bestResult: AttemptResult, - val averageAttempts: Double, - val successRate: Double, - val personalBest: String? = null, // Highest hold or completion details - val notes: String? = null -) - -@Serializable -data class SessionSummary( - val sessionId: String, - val date: String, - val totalAttempts: Int, - val successfulAttempts: Int, - val uniqueProblems: Int, - val avgDifficulty: Double, - val maxDifficulty: DifficultyGrade, - val climbTypes: List, - val duration: Long?, // in minutes - val notes: String? = null -) - -@Serializable -data class ClimbingStats( - val totalSessions: Int, - val totalAttempts: Int, - val totalSuccesses: Int, - val overallSuccessRate: Double, - val uniqueProblemsAttempted: Int, - val uniqueProblemsCompleted: Int, - val averageSessionDuration: Double, // in minutes - val favoriteGym: String?, - val mostAttemptedDifficulty: DifficultyGrade?, - val currentStreak: Int, // consecutive sessions - val longestStreak: Int, - val firstClimbDate: String?, - val lastClimbDate: String?, - val improvementTrend: String? = null // "improving", "stable", "declining" -) diff --git a/app/src/main/java/com/atridad/openclimb/data/repository/ClimbRepository.kt b/app/src/main/java/com/atridad/openclimb/data/repository/ClimbRepository.kt index b399086..e24b73c 100644 --- a/app/src/main/java/com/atridad/openclimb/data/repository/ClimbRepository.kt +++ b/app/src/main/java/com/atridad/openclimb/data/repository/ClimbRepository.kt @@ -4,7 +4,6 @@ import android.content.Context import android.os.Environment import com.atridad.openclimb.data.database.OpenClimbDatabase import com.atridad.openclimb.data.model.* -import com.atridad.openclimb.utils.ImageUtils import com.atridad.openclimb.utils.ZipExportImportUtils import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.first @@ -14,7 +13,7 @@ import java.io.File import java.time.LocalDateTime class ClimbRepository( - private val database: OpenClimbDatabase, + database: OpenClimbDatabase, private val context: Context ) { private val gymDao = database.gymDao() @@ -40,7 +39,6 @@ class ClimbRepository( fun getAllProblems(): Flow> = problemDao.getAllProblems() suspend fun getProblemById(id: String): Problem? = problemDao.getProblemById(id) fun getProblemsByGym(gymId: String): Flow> = problemDao.getProblemsByGym(gymId) - fun getActiveProblems(): Flow> = problemDao.getActiveProblems() suspend fun insertProblem(problem: Problem) = problemDao.insertProblem(problem) suspend fun updateProblem(problem: Problem) = problemDao.updateProblem(problem) suspend fun deleteProblem(problem: Problem) = problemDao.deleteProblem(problem) @@ -50,17 +48,14 @@ class ClimbRepository( fun getAllSessions(): Flow> = sessionDao.getAllSessions() suspend fun getSessionById(id: String): ClimbSession? = sessionDao.getSessionById(id) fun getSessionsByGym(gymId: String): Flow> = sessionDao.getSessionsByGym(gymId) - fun getRecentSessions(limit: Int = 10): Flow> = sessionDao.getRecentSessions(limit) suspend fun getActiveSession(): ClimbSession? = sessionDao.getActiveSession() fun getActiveSessionFlow(): Flow = sessionDao.getActiveSessionFlow() - fun getSessionsByStatus(status: SessionStatus): Flow> = sessionDao.getSessionsByStatus(status) suspend fun insertSession(session: ClimbSession) = sessionDao.insertSession(session) suspend fun updateSession(session: ClimbSession) = sessionDao.updateSession(session) suspend fun deleteSession(session: ClimbSession) = sessionDao.deleteSession(session) // Attempt operations fun getAllAttempts(): Flow> = attemptDao.getAllAttempts() - suspend fun getAttemptById(id: String): Attempt? = attemptDao.getAttemptById(id) fun getAttemptsBySession(sessionId: String): Flow> = attemptDao.getAttemptsBySession(sessionId) fun getAttemptsByProblem(problemId: String): Flow> = attemptDao.getAttemptsByProblem(problemId) suspend fun insertAttempt(attempt: Attempt) = attemptDao.insertAttempt(attempt) @@ -69,7 +64,7 @@ class ClimbRepository( - // JSON Export functionality + // JSON Export suspend fun exportAllDataToJson(directory: File? = null): File { val exportDir = directory ?: File(context.getExternalFilesDir(Environment.DIRECTORY_DOCUMENTS), "OpenClimb") if (!exportDir.exists()) { @@ -124,12 +119,12 @@ class ClimbRepository( val jsonContent = file.readText() val importData = json.decodeFromString(jsonContent) - // Import gyms (replace if exists due to primary key constraint) + // Import gyms importData.gyms.forEach { gym -> try { gymDao.insertGym(gym) } catch (e: Exception) { - // If insertion fails due to primary key conflict, update instead + // If insertion fails, update instead gymDao.updateGym(gym) } } @@ -166,7 +161,7 @@ class ClimbRepository( } } - // ZIP Export functionality with images + // ZIP Export with images suspend fun exportAllDataToZip(directory: File? = null): File { val allGyms = gymDao.getAllGyms().first() val allProblems = problemDao.getAllProblems().first() @@ -206,7 +201,7 @@ class ClimbRepository( attempts = attempts ) - // Collect all referenced image paths + // Collect all image paths val referencedImagePaths = problems.flatMap { it.imagePaths }.toSet() ZipExportImportUtils.createExportZipToUri( @@ -228,12 +223,12 @@ class ClimbRepository( importResult.importedImagePaths ) - // Import gyms (replace if exists due to primary key constraint) + // Import gyms importData.gyms.forEach { gym -> try { gymDao.insertGym(gym) } catch (e: Exception) { - // If insertion fails due to primary key conflict, update instead + // If insertion fails update instead gymDao.updateGym(gym) } } diff --git a/app/src/main/java/com/atridad/openclimb/service/SessionTrackingService.kt b/app/src/main/java/com/atridad/openclimb/service/SessionTrackingService.kt index 6db8fa2..67dc080 100644 --- a/app/src/main/java/com/atridad/openclimb/service/SessionTrackingService.kt +++ b/app/src/main/java/com/atridad/openclimb/service/SessionTrackingService.kt @@ -6,7 +6,6 @@ import android.app.PendingIntent import android.app.Service import android.content.Context import android.content.Intent -import android.os.Build import android.os.IBinder import androidx.core.app.NotificationCompat import com.atridad.openclimb.MainActivity @@ -16,7 +15,6 @@ import com.atridad.openclimb.data.repository.ClimbRepository import kotlinx.coroutines.* import kotlinx.coroutines.flow.firstOrNull import java.time.LocalDateTime -import java.time.format.DateTimeFormatter import java.time.temporal.ChronoUnit class SessionTrackingService : Service() { @@ -113,31 +111,32 @@ class SessionTrackingService : Service() { remainingMinutes > 0 -> "${remainingMinutes}m" else -> "< 1m" } - } catch (e: Exception) { + } catch (_: Exception) { "Active" } } ?: "Active" val notification = NotificationCompat.Builder(this, CHANNEL_ID) - .setContentTitle("OpenClimb Session Active") + .setContentTitle("Climbing Session Active") .setContentText("${gym?.name ?: "Gym"} • $duration • ${attempts.size} attempts") - .setSmallIcon(R.drawable.ic_launcher_foreground) + .setSmallIcon(R.drawable.ic_mountains) .setOngoing(true) + .setPriority(NotificationCompat.PRIORITY_LOW) .setContentIntent(createOpenAppIntent()) .addAction( - R.drawable.ic_launcher_foreground, + R.drawable.ic_mountains, "Open Session", createOpenAppIntent() ) .addAction( - R.drawable.ic_launcher_foreground, + android.R.drawable.ic_menu_close_clear_cancel, "End Session", createStopIntent() ) .build() startForeground(NOTIFICATION_ID, notification) - } catch (e: Exception) { + } catch (_: Exception) { // Handle errors gracefully stopSessionTracking() } @@ -166,19 +165,17 @@ class SessionTrackingService : Service() { } private fun createNotificationChannel() { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - val channel = NotificationChannel( - CHANNEL_ID, - "Session Tracking", - NotificationManager.IMPORTANCE_LOW - ).apply { - description = "Shows active climbing session information" - setShowBadge(false) - } - - val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager - notificationManager.createNotificationChannel(channel) + val channel = NotificationChannel( + CHANNEL_ID, + "Session Tracking", + NotificationManager.IMPORTANCE_LOW + ).apply { + description = "Shows active climbing session information" + setShowBadge(false) } + + val notificationManager = getSystemService(NOTIFICATION_SERVICE) as NotificationManager + notificationManager.createNotificationChannel(channel) } override fun onDestroy() { diff --git a/app/src/main/java/com/atridad/openclimb/ui/OpenClimbApp.kt b/app/src/main/java/com/atridad/openclimb/ui/OpenClimbApp.kt index 357d4b6..fccd9b2 100644 --- a/app/src/main/java/com/atridad/openclimb/ui/OpenClimbApp.kt +++ b/app/src/main/java/com/atridad/openclimb/ui/OpenClimbApp.kt @@ -86,9 +86,6 @@ fun OpenClimbApp() { viewModel = viewModel, onNavigateToSessionDetail = { sessionId -> navController.navigate(Screen.SessionDetail(sessionId)) - }, - onNavigateToAddSession = { gymId -> - navController.navigate(Screen.AddEditSession(gymId = gymId)) } ) } @@ -112,9 +109,6 @@ fun OpenClimbApp() { viewModel = viewModel, onNavigateToProblemDetail = { problemId -> navController.navigate(Screen.ProblemDetail(problemId)) - }, - onNavigateToAddProblem = { gymId -> - navController.navigate(Screen.AddEditProblem(gymId = gymId)) } ) } @@ -140,9 +134,6 @@ fun OpenClimbApp() { viewModel = viewModel, onNavigateToGymDetail = { gymId -> navController.navigate(Screen.GymDetail(gymId)) - }, - onNavigateToAddGym = { - navController.navigate(Screen.AddEditGym()) } ) } diff --git a/app/src/main/java/com/atridad/openclimb/ui/components/ActiveSessionBanner.kt b/app/src/main/java/com/atridad/openclimb/ui/components/ActiveSessionBanner.kt index 7f2fb99..47f0bed 100644 --- a/app/src/main/java/com/atridad/openclimb/ui/components/ActiveSessionBanner.kt +++ b/app/src/main/java/com/atridad/openclimb/ui/components/ActiveSessionBanner.kt @@ -5,12 +5,10 @@ import androidx.compose.foundation.layout.* import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Close import androidx.compose.material.icons.filled.PlayArrow -import androidx.compose.material.icons.rounded.Close import androidx.compose.material3.* import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import com.atridad.openclimb.data.model.ClimbSession @@ -95,80 +93,6 @@ fun ActiveSessionBanner( } } -@Composable -fun StartSessionButton( - gyms: List, - onStartSession: (String) -> Unit -) { - var showGymSelection by remember { mutableStateOf(false) } - - if (gyms.isEmpty()) { - Card( - modifier = Modifier.fillMaxWidth(), - colors = CardDefaults.cardColors( - containerColor = MaterialTheme.colorScheme.surfaceVariant - ) - ) { - Column( - modifier = Modifier - .fillMaxWidth() - .padding(16.dp), - horizontalAlignment = Alignment.CenterHorizontally - ) { - Text( - text = "No gyms available", - style = MaterialTheme.typography.titleMedium, - color = MaterialTheme.colorScheme.onSurfaceVariant - ) - Text( - text = "Add a gym first to start a session", - style = MaterialTheme.typography.bodyMedium, - color = MaterialTheme.colorScheme.onSurfaceVariant - ) - } - } - } else { - Button( - onClick = { showGymSelection = true }, - modifier = Modifier.fillMaxWidth() - ) { - Icon(Icons.Default.PlayArrow, contentDescription = null) - Spacer(modifier = Modifier.width(8.dp)) - Text("Start Session") - } - } - - if (showGymSelection) { - AlertDialog( - onDismissRequest = { showGymSelection = false }, - title = { Text("Select Gym") }, - text = { - Column { - gyms.forEach { gym -> - TextButton( - onClick = { - onStartSession(gym.id) - showGymSelection = false - }, - modifier = Modifier.fillMaxWidth() - ) { - Text( - text = gym.name, - modifier = Modifier.fillMaxWidth() - ) - } - } - } - }, - confirmButton = { - TextButton(onClick = { showGymSelection = false }) { - Text("Cancel") - } - } - ) - } -} - private fun calculateDuration(startTimeString: String): String { return try { val startTime = LocalDateTime.parse(startTimeString) @@ -182,7 +106,7 @@ private fun calculateDuration(startTimeString: String): String { remainingMinutes > 0 -> "${remainingMinutes}m" else -> "< 1m" } - } catch (e: Exception) { + } catch (_: Exception) { "Active" } } diff --git a/app/src/main/java/com/atridad/openclimb/ui/components/FullscreenImageViewer.kt b/app/src/main/java/com/atridad/openclimb/ui/components/FullscreenImageViewer.kt index c832536..e4d74ed 100644 --- a/app/src/main/java/com/atridad/openclimb/ui/components/FullscreenImageViewer.kt +++ b/app/src/main/java/com/atridad/openclimb/ui/components/FullscreenImageViewer.kt @@ -50,7 +50,7 @@ fun FullscreenImageViewer( LaunchedEffect(pagerState.currentPage) { thumbnailListState.animateScrollToItem( index = pagerState.currentPage, - scrollOffset = -200 // Center the item + scrollOffset = -200 ) } diff --git a/app/src/main/java/com/atridad/openclimb/ui/components/ImageDisplay.kt b/app/src/main/java/com/atridad/openclimb/ui/components/ImageDisplay.kt index 246b913..61cbb90 100644 --- a/app/src/main/java/com/atridad/openclimb/ui/components/ImageDisplay.kt +++ b/app/src/main/java/com/atridad/openclimb/ui/components/ImageDisplay.kt @@ -7,7 +7,6 @@ import androidx.compose.foundation.lazy.itemsIndexed import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.* import androidx.compose.runtime.* -import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.layout.ContentScale diff --git a/app/src/main/java/com/atridad/openclimb/ui/components/ImagePicker.kt b/app/src/main/java/com/atridad/openclimb/ui/components/ImagePicker.kt index 61b7152..78e34e3 100644 --- a/app/src/main/java/com/atridad/openclimb/ui/components/ImagePicker.kt +++ b/app/src/main/java/com/atridad/openclimb/ui/components/ImagePicker.kt @@ -1,6 +1,5 @@ package com.atridad.openclimb.ui.components -import android.net.Uri import androidx.activity.compose.rememberLauncherForActivityResult import androidx.activity.result.contract.ActivityResultContracts import androidx.compose.foundation.layout.* @@ -20,7 +19,6 @@ import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.unit.dp import coil.compose.AsyncImage import com.atridad.openclimb.utils.ImageUtils -import java.io.File @Composable fun ImagePicker( @@ -41,7 +39,7 @@ fun ImagePicker( val remainingSlots = maxImages - currentCount val urisToProcess = uris.take(remainingSlots) - // Process each selected image + // Process images val newImagePaths = mutableListOf() urisToProcess.forEach { uri -> val imagePath = ImageUtils.saveImageFromUri(context, uri) diff --git a/app/src/main/java/com/atridad/openclimb/ui/screens/AddEditScreens.kt b/app/src/main/java/com/atridad/openclimb/ui/screens/AddEditScreens.kt index 7cf7cb0..37184f6 100644 --- a/app/src/main/java/com/atridad/openclimb/ui/screens/AddEditScreens.kt +++ b/app/src/main/java/com/atridad/openclimb/ui/screens/AddEditScreens.kt @@ -8,6 +8,7 @@ import androidx.compose.foundation.selection.selectable import androidx.compose.foundation.selection.selectableGroup import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.automirrored.filled.ArrowBack import androidx.compose.material.icons.filled.* import androidx.compose.material3.* import androidx.compose.runtime.* @@ -81,7 +82,7 @@ fun AddEditGymScreen( title = { Text(if (isEditing) "Edit Gym" else "Add Gym") }, navigationIcon = { IconButton(onClick = onNavigateBack) { - Icon(Icons.Default.ArrowBack, contentDescription = "Back") + Icon(Icons.AutoMirrored.Filled.ArrowBack, contentDescription = "Back") } }, actions = { @@ -90,7 +91,7 @@ fun AddEditGymScreen( val gym = Gym.create(name, location, selectedClimbTypes.toList(), selectedDifficultySystems.toList(), notes = notes) if (isEditing) { - viewModel.updateGym(gym.copy(id = gymId!!)) + viewModel.updateGym(gym.copy(id = gymId)) } else { viewModel.addGym(gym) } @@ -291,7 +292,7 @@ fun AddEditProblemScreen( val availableClimbTypes = selectedGym?.supportedClimbTypes ?: ClimbType.entries.toList() val availableDifficultySystems = DifficultySystem.getSystemsForClimbType(selectedClimbType).filter { system -> - selectedGym?.difficultySystems?.contains(system) ?: true + selectedGym?.difficultySystems?.contains(system) != false } // Auto-select climb type if there's only one available @@ -329,7 +330,7 @@ fun AddEditProblemScreen( title = { Text(if (isEditing) "Edit Problem" else "Add Problem") }, navigationIcon = { IconButton(onClick = onNavigateBack) { - Icon(Icons.Default.ArrowBack, contentDescription = "Back") + Icon(Icons.AutoMirrored.Filled.ArrowBack, contentDescription = "Back") } }, actions = { @@ -359,7 +360,7 @@ fun AddEditProblemScreen( ) if (isEditing) { - viewModel.updateProblem(problem.copy(id = problemId!!)) + viewModel.updateProblem(problem.copy(id = problemId)) } else { viewModel.addProblem(problem) } @@ -646,7 +647,7 @@ fun AddEditProblemScreen( label = { Text("Tags (Optional)") }, modifier = Modifier.fillMaxWidth(), singleLine = true, - placeholder = { Text("e.g., overhang, crimpy, dynamic (comma-separated)") } + placeholder = { Text("e.g., crimpy, dynamic (comma-separated)") } ) Spacer(modifier = Modifier.height(8.dp)) @@ -736,7 +737,7 @@ fun AddEditSessionScreen( title = { Text(if (isEditing) "Edit Session" else "Add Session") }, navigationIcon = { IconButton(onClick = onNavigateBack) { - Icon(Icons.Default.ArrowBack, contentDescription = "Back") + Icon(Icons.AutoMirrored.Filled.ArrowBack, contentDescription = "Back") } }, actions = { @@ -749,7 +750,7 @@ fun AddEditSessionScreen( ) if (isEditing) { - viewModel.updateSession(session.copy(id = sessionId!!)) + viewModel.updateSession(session.copy(id = sessionId)) } else { viewModel.addSession(session) diff --git a/app/src/main/java/com/atridad/openclimb/ui/screens/DetailScreens.kt b/app/src/main/java/com/atridad/openclimb/ui/screens/DetailScreens.kt index 8dea6fa..eaaf541 100644 --- a/app/src/main/java/com/atridad/openclimb/ui/screens/DetailScreens.kt +++ b/app/src/main/java/com/atridad/openclimb/ui/screens/DetailScreens.kt @@ -8,10 +8,9 @@ import androidx.compose.foundation.lazy.items import androidx.compose.foundation.selection.selectable import androidx.compose.foundation.selection.selectableGroup import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.automirrored.filled.ArrowBack import androidx.compose.material.icons.filled.Add -import androidx.compose.material.icons.filled.ArrowBack import androidx.compose.material.icons.filled.Check import androidx.compose.material.icons.filled.Delete import androidx.compose.material.icons.filled.Edit @@ -87,7 +86,7 @@ fun SessionDetailScreen( title = { Text("Session Details") }, navigationIcon = { IconButton(onClick = onNavigateBack) { - Icon(Icons.Default.ArrowBack, contentDescription = "Back") + Icon(Icons.AutoMirrored.Filled.ArrowBack, contentDescription = "Back") } }, actions = { @@ -403,7 +402,7 @@ fun ProblemDetailScreen( val context = LocalContext.current var showDeleteDialog by remember { mutableStateOf(false) } var showImageViewer by remember { mutableStateOf(false) } - var selectedImageIndex by remember { mutableStateOf(0) } + var selectedImageIndex by remember { mutableIntStateOf(0) } val attempts by viewModel.getAttemptsByProblem(problemId).collectAsState(initial = emptyList()) val sessions by viewModel.sessions.collectAsState() val gyms by viewModel.gyms.collectAsState() @@ -436,7 +435,7 @@ fun ProblemDetailScreen( title = { Text("Problem Details") }, navigationIcon = { IconButton(onClick = onNavigateBack) { - Icon(Icons.Default.ArrowBack, contentDescription = "Back") + Icon(Icons.AutoMirrored.Filled.ArrowBack, contentDescription = "Back") } }, actions = { @@ -770,7 +769,7 @@ fun GymDetailScreen( title = { Text(gym?.name ?: "Gym Details") }, navigationIcon = { IconButton(onClick = onNavigateBack) { - Icon(Icons.Default.ArrowBack, contentDescription = "Back") + Icon(Icons.AutoMirrored.Filled.ArrowBack, contentDescription = "Back") } }, actions = { @@ -1087,7 +1086,7 @@ fun GymDetailScreen( supportingContent = { val dateTime = try { LocalDateTime.parse(session.date) - } catch (e: Exception) { + } catch (_: Exception) { null } val formattedDate = dateTime?.format( @@ -1348,42 +1347,11 @@ private fun formatDate(dateString: String): String { val date = LocalDateTime.parse(dateString, formatter) val displayFormatter = DateTimeFormatter.ofPattern("MMM dd, yyyy") date.format(displayFormatter) - } catch (e: Exception) { + } catch (_: Exception) { dateString.take(10) // Fallback to just the date part } } -private fun formatTime(timeString: String): String { - return try { - val formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME - val time = LocalDateTime.parse(timeString, formatter) - val displayFormatter = DateTimeFormatter.ofPattern("h:mm a") - time.format(displayFormatter) - } catch (e: Exception) { - timeString.take(8) // Fallback to time part - } -} - -private fun calculateSessionDuration(startTime: String, endTime: String): String { - return try { - val formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME - val start = LocalDateTime.parse(startTime, formatter) - val end = LocalDateTime.parse(endTime, formatter) - val duration = java.time.Duration.between(start, end) - - val hours = duration.toHours() - val minutes = duration.toMinutes() % 60 - - when { - hours > 0 -> "${hours}h ${minutes}m" - minutes > 0 -> "${minutes}m" - else -> "< 1m" - } - } catch (e: Exception) { - "Unknown" - } -} - @OptIn(ExperimentalMaterial3Api::class) @Composable fun EnhancedAddAttemptDialog( @@ -1896,28 +1864,5 @@ fun EnhancedAddAttemptDialog( } } } - -@Composable -fun StatisticItem( - label: String, - value: String, - valueColor: androidx.compose.ui.graphics.Color = MaterialTheme.colorScheme.primary -) { - Column( - horizontalAlignment = Alignment.CenterHorizontally - ) { - Text( - text = value, - style = MaterialTheme.typography.headlineSmall, - fontWeight = FontWeight.Bold, - color = valueColor - ) - Text( - text = label, - style = MaterialTheme.typography.bodySmall, - color = MaterialTheme.colorScheme.onSurfaceVariant - ) } } -} -} diff --git a/app/src/main/java/com/atridad/openclimb/ui/screens/GymsScreen.kt b/app/src/main/java/com/atridad/openclimb/ui/screens/GymsScreen.kt index 137c2da..18c36c2 100644 --- a/app/src/main/java/com/atridad/openclimb/ui/screens/GymsScreen.kt +++ b/app/src/main/java/com/atridad/openclimb/ui/screens/GymsScreen.kt @@ -3,15 +3,12 @@ package com.atridad.openclimb.ui.screens import androidx.compose.foundation.layout.* import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.items -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.Add import androidx.compose.material3.* import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.res.painterResource import androidx.compose.ui.text.font.FontWeight -import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import com.atridad.openclimb.R import com.atridad.openclimb.data.model.Gym @@ -21,8 +18,7 @@ import com.atridad.openclimb.ui.viewmodel.ClimbViewModel @Composable fun GymsScreen( viewModel: ClimbViewModel, - onNavigateToGymDetail: (String) -> Unit, - onNavigateToAddGym: () -> Unit + onNavigateToGymDetail: (String) -> Unit ) { val gyms by viewModel.gyms.collectAsState() diff --git a/app/src/main/java/com/atridad/openclimb/ui/screens/ProblemsScreen.kt b/app/src/main/java/com/atridad/openclimb/ui/screens/ProblemsScreen.kt index 7b7d858..80084e1 100644 --- a/app/src/main/java/com/atridad/openclimb/ui/screens/ProblemsScreen.kt +++ b/app/src/main/java/com/atridad/openclimb/ui/screens/ProblemsScreen.kt @@ -4,15 +4,12 @@ import androidx.compose.foundation.layout.* import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyRow import androidx.compose.foundation.lazy.items -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.Add import androidx.compose.material3.* import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.res.painterResource import androidx.compose.ui.text.font.FontWeight -import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import com.atridad.openclimb.R import com.atridad.openclimb.data.model.ClimbType @@ -26,14 +23,13 @@ import com.atridad.openclimb.ui.viewmodel.ClimbViewModel @Composable fun ProblemsScreen( viewModel: ClimbViewModel, - onNavigateToProblemDetail: (String) -> Unit, - onNavigateToAddProblem: (String?) -> Unit + onNavigateToProblemDetail: (String) -> Unit ) { val problems by viewModel.problems.collectAsState() val gyms by viewModel.gyms.collectAsState() var showImageViewer by remember { mutableStateOf(false) } var selectedImagePaths by remember { mutableStateOf>(emptyList()) } - var selectedImageIndex by remember { mutableStateOf(0) } + var selectedImageIndex by remember { mutableIntStateOf(0) } // Filter state var selectedClimbType by remember { mutableStateOf(null) } @@ -41,8 +37,8 @@ fun ProblemsScreen( // Apply filters val filteredProblems = problems.filter { problem -> - val climbTypeMatch = selectedClimbType?.let { it == problem.climbType } ?: true - val gymMatch = selectedGym?.let { it.id == problem.gymId } ?: true + val climbTypeMatch = selectedClimbType?.let { it == problem.climbType } != false + val gymMatch = selectedGym?.let { it.id == problem.gymId } != false climbTypeMatch && gymMatch } diff --git a/app/src/main/java/com/atridad/openclimb/ui/screens/SessionsScreen.kt b/app/src/main/java/com/atridad/openclimb/ui/screens/SessionsScreen.kt index 744e716..22a439e 100644 --- a/app/src/main/java/com/atridad/openclimb/ui/screens/SessionsScreen.kt +++ b/app/src/main/java/com/atridad/openclimb/ui/screens/SessionsScreen.kt @@ -3,8 +3,10 @@ package com.atridad.openclimb.ui.screens import androidx.compose.foundation.layout.* import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.items +import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.Add +import androidx.compose.material.icons.filled.CheckCircle +import androidx.compose.material.icons.filled.Warning import androidx.compose.material3.* import androidx.compose.runtime.* import androidx.compose.ui.Alignment @@ -26,13 +28,13 @@ import java.time.format.DateTimeFormatter @Composable fun SessionsScreen( viewModel: ClimbViewModel, - onNavigateToSessionDetail: (String) -> Unit, - onNavigateToAddSession: (String?) -> Unit + onNavigateToSessionDetail: (String) -> Unit ) { val context = LocalContext.current val sessions by viewModel.sessions.collectAsState() val gyms by viewModel.gyms.collectAsState() val activeSession by viewModel.activeSession.collectAsState() + val uiState by viewModel.uiState.collectAsState() // Filter out active sessions from regular session list val completedSessions = sessions.filter { it.status == SessionStatus.COMPLETED } @@ -103,6 +105,79 @@ fun SessionsScreen( } } } + + // Show UI state messages and errors + uiState.message?.let { message -> + LaunchedEffect(message) { + kotlinx.coroutines.delay(5000) + viewModel.clearMessage() + } + + Card( + modifier = Modifier + .fillMaxWidth() + .padding(16.dp), + colors = CardDefaults.cardColors( + containerColor = MaterialTheme.colorScheme.primaryContainer + ), + shape = RoundedCornerShape(12.dp) + ) { + Row( + modifier = Modifier + .fillMaxWidth() + .padding(16.dp), + verticalAlignment = Alignment.CenterVertically + ) { + Icon( + Icons.Default.CheckCircle, + contentDescription = null, + tint = MaterialTheme.colorScheme.primary + ) + Spacer(modifier = Modifier.width(8.dp)) + Text( + text = message, + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onPrimaryContainer + ) + } + } + } + + uiState.error?.let { error -> + LaunchedEffect(error) { + kotlinx.coroutines.delay(5000) + viewModel.clearError() + } + + Card( + modifier = Modifier + .fillMaxWidth() + .padding(16.dp), + colors = CardDefaults.cardColors( + containerColor = MaterialTheme.colorScheme.errorContainer + ), + shape = RoundedCornerShape(12.dp) + ) { + Row( + modifier = Modifier + .fillMaxWidth() + .padding(16.dp), + verticalAlignment = Alignment.CenterVertically + ) { + Icon( + Icons.Default.Warning, + contentDescription = null, + tint = MaterialTheme.colorScheme.error + ) + Spacer(modifier = Modifier.width(8.dp)) + Text( + text = error, + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onErrorContainer + ) + } + } + } } @OptIn(ExperimentalMaterial3Api::class) @@ -141,7 +216,7 @@ fun SessionCard( session.duration?.let { duration -> Text( - text = "Duration: ${duration} minutes", + text = "Duration: $duration minutes", style = MaterialTheme.typography.bodyMedium ) } @@ -203,7 +278,7 @@ private fun formatDate(dateString: String): String { return try { val date = LocalDateTime.parse(dateString.split("T")[0] + "T00:00:00") date.format(DateTimeFormatter.ofPattern("MMM dd, yyyy")) - } catch (e: Exception) { + } catch (_: Exception) { dateString } } diff --git a/app/src/main/java/com/atridad/openclimb/ui/screens/SettingsScreen.kt b/app/src/main/java/com/atridad/openclimb/ui/screens/SettingsScreen.kt index 82f01a4..f25cff3 100644 --- a/app/src/main/java/com/atridad/openclimb/ui/screens/SettingsScreen.kt +++ b/app/src/main/java/com/atridad/openclimb/ui/screens/SettingsScreen.kt @@ -2,7 +2,6 @@ package com.atridad.openclimb.ui.screens import androidx.activity.compose.rememberLauncherForActivityResult import androidx.activity.result.contract.ActivityResultContracts -import android.os.Environment import androidx.compose.foundation.layout.* import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.shape.RoundedCornerShape diff --git a/app/src/main/java/com/atridad/openclimb/ui/theme/Color.kt b/app/src/main/java/com/atridad/openclimb/ui/theme/Color.kt index aaab909..989ace4 100644 --- a/app/src/main/java/com/atridad/openclimb/ui/theme/Color.kt +++ b/app/src/main/java/com/atridad/openclimb/ui/theme/Color.kt @@ -63,13 +63,4 @@ val ClimbNeutralVariant30 = Color(0xFF484848) val ClimbNeutralVariant50 = Color(0xFF797979) val ClimbNeutralVariant60 = Color(0xFF939393) val ClimbNeutralVariant80 = Color(0xFFC7C7C7) -val ClimbNeutralVariant90 = Color(0xFFE3E3E3) - -// Legacy colors for backward compatibility -val Purple80 = ClimbOrange80 -val PurpleGrey80 = ClimbGrey80 -val Pink80 = ClimbBlue80 - -val Purple40 = ClimbOrange40 -val PurpleGrey40 = ClimbGrey40 -val Pink40 = ClimbBlue40 \ No newline at end of file +val ClimbNeutralVariant90 = Color(0xFFE3E3E3) \ No newline at end of file diff --git a/app/src/main/java/com/atridad/openclimb/ui/theme/Theme.kt b/app/src/main/java/com/atridad/openclimb/ui/theme/Theme.kt index 705e6f0..1a8ecf8 100644 --- a/app/src/main/java/com/atridad/openclimb/ui/theme/Theme.kt +++ b/app/src/main/java/com/atridad/openclimb/ui/theme/Theme.kt @@ -1,7 +1,6 @@ package com.atridad.openclimb.ui.theme import android.app.Activity -import android.os.Build import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.material3.MaterialTheme import androidx.compose.material3.darkColorScheme @@ -10,7 +9,6 @@ import androidx.compose.material3.dynamicLightColorScheme import androidx.compose.material3.lightColorScheme import androidx.compose.runtime.Composable import androidx.compose.runtime.SideEffect -import androidx.compose.ui.graphics.toArgb import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalView import androidx.core.view.WindowCompat @@ -98,7 +96,7 @@ fun OpenClimbTheme( content: @Composable () -> Unit ) { val colorScheme = when { - dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> { + dynamicColor && true -> { val context = LocalContext.current if (darkTheme) dynamicDarkColorScheme(context) else dynamicLightColorScheme(context) } diff --git a/app/src/main/java/com/atridad/openclimb/utils/ImageUtils.kt b/app/src/main/java/com/atridad/openclimb/utils/ImageUtils.kt index 448cf57..4ce87a2 100644 --- a/app/src/main/java/com/atridad/openclimb/utils/ImageUtils.kt +++ b/app/src/main/java/com/atridad/openclimb/utils/ImageUtils.kt @@ -1,13 +1,14 @@ package com.atridad.openclimb.utils +import android.annotation.SuppressLint import android.content.Context import android.graphics.Bitmap import android.graphics.BitmapFactory import android.net.Uri import java.io.File import java.io.FileOutputStream -import java.io.IOException import java.util.UUID +import androidx.core.graphics.scale object ImageUtils { @@ -65,6 +66,7 @@ object ImageUtils { /** * Compresses and resizes an image bitmap */ + @SuppressLint("UseKtx") private fun compressImage(original: Bitmap): Bitmap { val width = original.width val height = original.height @@ -79,7 +81,7 @@ object ImageUtils { return if (scaleFactor < 1f) { val newWidth = (width * scaleFactor).toInt() val newHeight = (height * scaleFactor).toInt() - Bitmap.createScaledBitmap(original, newWidth, newHeight, true) + original.scale(newWidth, newHeight) } else { original } @@ -110,30 +112,7 @@ object ImageUtils { false } } - - /** - * Copies an image file to export directory - * @param context Android context - * @param relativePath The relative path of the image - * @param exportDir The directory to copy to - * @return The filename in the export directory, null if failed - */ - fun copyImageForExport(context: Context, relativePath: String, exportDir: File): String? { - return try { - val sourceFile = getImageFile(context, relativePath) - if (!sourceFile.exists()) return null - - val filename = sourceFile.name - val destFile = File(exportDir, filename) - - sourceFile.copyTo(destFile, overwrite = true) - filename - } catch (e: Exception) { - e.printStackTrace() - null - } - } - + /** * Imports an image file from the import directory * @param context Android context diff --git a/app/src/main/java/com/atridad/openclimb/utils/SessionShareUtils.kt b/app/src/main/java/com/atridad/openclimb/utils/SessionShareUtils.kt index 4ec52b0..6f2b3dc 100644 --- a/app/src/main/java/com/atridad/openclimb/utils/SessionShareUtils.kt +++ b/app/src/main/java/com/atridad/openclimb/utils/SessionShareUtils.kt @@ -11,6 +11,8 @@ import java.io.FileOutputStream import java.time.LocalDateTime import java.time.format.DateTimeFormatter import kotlin.math.roundToInt +import androidx.core.graphics.createBitmap +import androidx.core.graphics.toColorInt object SessionShareUtils { @@ -75,31 +77,7 @@ object SessionShareUtils { topResult = topResult ) } - - private fun calculateDuration(startTime: String?, endTime: String?): String { - return try { - if (startTime != null && endTime != null) { - val formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME - val start = LocalDateTime.parse(startTime, formatter) - val end = LocalDateTime.parse(endTime, formatter) - val duration = java.time.Duration.between(start, end) - - val hours = duration.toHours() - val minutes = duration.toMinutes() % 60 - - when { - hours > 0 -> "${hours}h ${minutes}m" - minutes > 0 -> "${minutes}m" - else -> "< 1m" - } - } else { - "Unknown" - } - } catch (e: Exception) { - "Unknown" - } - } - + fun generateShareCard( context: Context, session: ClimbSession, @@ -110,14 +88,14 @@ object SessionShareUtils { val width = 1080 val height = 1350 - val bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888) + val bitmap = createBitmap(width, height) val canvas = Canvas(bitmap) val gradientDrawable = GradientDrawable( GradientDrawable.Orientation.TOP_BOTTOM, intArrayOf( - Color.parseColor("#667eea"), - Color.parseColor("#764ba2") + "#667eea".toColorInt(), + "#764ba2".toColorInt() ) ) gradientDrawable.setBounds(0, 0, width, height) @@ -133,7 +111,7 @@ object SessionShareUtils { } val subtitlePaint = Paint().apply { - color = Color.parseColor("#E8E8E8") + color = "#E8E8E8".toColorInt() textSize = 48f typeface = Typeface.DEFAULT isAntiAlias = true @@ -141,7 +119,7 @@ object SessionShareUtils { } val statLabelPaint = Paint().apply { - color = Color.parseColor("#B8B8B8") + color = "#B8B8B8".toColorInt() textSize = 36f typeface = Typeface.DEFAULT isAntiAlias = true @@ -157,7 +135,7 @@ object SessionShareUtils { } val cardPaint = Paint().apply { - color = Color.parseColor("#40FFFFFF") + color = "#40FFFFFF".toColorInt() isAntiAlias = true } @@ -211,7 +189,7 @@ object SessionShareUtils { // App branding val brandingPaint = Paint().apply { - color = Color.parseColor("#80FFFFFF") + color = "#80FFFFFF".toColorInt() textSize = 32f typeface = Typeface.DEFAULT isAntiAlias = true @@ -268,7 +246,7 @@ object SessionShareUtils { // Background arc val bgPaint = Paint().apply { - color = Color.parseColor("#40FFFFFF") + color = "#40FFFFFF".toColorInt() style = Paint.Style.STROKE this.strokeWidth = strokeWidth isAntiAlias = true @@ -277,7 +255,7 @@ object SessionShareUtils { // Success arc val successPaint = Paint().apply { - color = Color.parseColor("#4CAF50") + color = "#4CAF50".toColorInt() style = Paint.Style.STROKE this.strokeWidth = strokeWidth isAntiAlias = true @@ -305,7 +283,7 @@ object SessionShareUtils { val date = LocalDateTime.parse(dateString, formatter) val displayFormatter = DateTimeFormatter.ofPattern("MMMM dd, yyyy") date.format(displayFormatter) - } catch (e: Exception) { + } catch (_: Exception) { dateString.take(10) } } diff --git a/app/src/main/java/com/atridad/openclimb/utils/ZipExportImportUtils.kt b/app/src/main/java/com/atridad/openclimb/utils/ZipExportImportUtils.kt index 0438e44..9c1f2eb 100644 --- a/app/src/main/java/com/atridad/openclimb/utils/ZipExportImportUtils.kt +++ b/app/src/main/java/com/atridad/openclimb/utils/ZipExportImportUtils.kt @@ -1,7 +1,6 @@ package com.atridad.openclimb.utils import android.content.Context -import kotlinx.serialization.encodeToString import kotlinx.serialization.json.Json import java.io.File import java.io.FileInputStream @@ -179,14 +178,7 @@ object ZipExportImportUtils { return ImportResult(jsonContent, importedImagePaths) } - - /** - * Utility function to determine if a file is a ZIP file based on extension - */ - fun isZipFile(filename: String): Boolean { - return filename.lowercase().endsWith(".zip") - } - + /** * Updates image paths in a problem list after import * This function maps the old image paths to the new ones after import