From fb17088dca6abdb1984bce4c8ea8c2be5c3838d5 Mon Sep 17 00:00:00 2001 From: Caleb Shim Date: Sat, 29 Aug 2026 18:06:00 -0400 Subject: [PATCH 1/5] Fix warnings --- .gitignore | 5 -- app/build.gradle | 48 ++++++++++-------- app/src/main/AndroidManifest.xml | 2 +- .../ui/notification/NotificationModal.kt | 5 +- .../ui/splash/SplashScreenActivity.kt | 7 ++- .../res/{drawable-v24 => drawable}/icon.png | Bin app/src/main/res/values/strings.xml | 2 +- build.gradle | 9 ++-- gradle.properties | 10 ---- 9 files changed, 38 insertions(+), 50 deletions(-) rename app/src/main/res/{drawable-v24 => drawable}/icon.png (100%) diff --git a/.gitignore b/.gitignore index 1d91a10..c3b99dc 100644 --- a/.gitignore +++ b/.gitignore @@ -47,7 +47,6 @@ proguard/ captures/ # IntelliJ -*.iml .idea/workspace.xml .idea/tasks.xml .idea/gradle.xml @@ -66,7 +65,6 @@ captures/ #*.keystore # External native build folder generated in Android Studio 2.2 and later -.externalNativeBuild .cxx/ # Google Services (e.g. APIs or Firebase) @@ -92,8 +90,5 @@ lint/intermediates/ lint/generated/ lint/outputs/ lint/tmp/ -# lint/reports/ -app/google-services.json -.idea/codeStyles/Project.xml .idea/codeStyles/Project.xml app/release/output.json diff --git a/app/build.gradle b/app/build.gradle index 6f0a2d0..dd47571 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,5 +1,6 @@ +import org.jetbrains.kotlin.gradle.dsl.JvmTarget + apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' apply plugin: 'kotlin-parcelize' apply plugin: 'org.jetbrains.kotlin.plugin.serialization' apply plugin: 'com.google.devtools.ksp' @@ -8,25 +9,25 @@ apply plugin: 'com.google.firebase.crashlytics' apply plugin: 'com.google.gms.google-services' android { - compileSdk 37 + compileSdk = 37 defaultConfig { - applicationId "com.cornellappdev.coursegrab" - minSdkVersion 24 - targetSdkVersion 34 - versionCode 10 - versionName "1.2.0" - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + applicationId = "com.cornellappdev.coursegrab" + minSdk = 24 + targetSdk = 34 + versionCode = 10 + versionName = "1.2.0" + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" buildConfigField("String", "BACKEND_URI", "\"coursegrab-backend.cornellappdev.com\"") } buildTypes { debug { manifestPlaceholders = [crashlyticsCollectionEnabled: "false"] - minifyEnabled false + minifyEnabled = false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } release { manifestPlaceholders = [crashlyticsCollectionEnabled: "true"] - minifyEnabled false + minifyEnabled = false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } @@ -34,14 +35,17 @@ android { sourceCompatibility = JavaVersion.VERSION_11 targetCompatibility = JavaVersion.VERSION_11 } - kotlinOptions { - jvmTarget = '11' - } buildFeatures { - viewBinding true - buildConfig true + viewBinding = true + buildConfig = true + } + namespace = 'com.cornellappdev.coursegrab' +} + +kotlin { + compilerOptions { + jvmTarget = JvmTarget.JVM_11 } - namespace 'com.cornellappdev.coursegrab' } dependencies { @@ -57,18 +61,18 @@ dependencies { implementation 'androidx.credentials:credentials-play-services-auth:1.6.0' implementation 'com.google.android.libraries.identity.googleid:googleid:1.2.0' implementation 'com.squareup.okhttp3:okhttp:5.5.0' - implementation "com.squareup.retrofit2:retrofit:$retrofit_version" - implementation "com.squareup.retrofit2:converter-kotlinx-serialization:$retrofit_version" + implementation "com.squareup.retrofit2:retrofit:${rootProject.ext.retrofit_version}" + implementation "com.squareup.retrofit2:converter-kotlinx-serialization:${rootProject.ext.retrofit_version}" implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.11.0' implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.11.0' - implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:$serialization_json_version" + implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:${rootProject.ext.serialization_json_version}" implementation 'androidx.appcompat:appcompat:1.8.0' implementation 'androidx.core:core-ktx:1.19.0' implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.11.0' implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.11.0' - implementation 'androidx.activity:activity-ktx:1.8.0' - implementation "com.google.dagger:hilt-android:$hilt_version" - ksp "com.google.dagger:hilt-compiler:$hilt_version" + implementation 'androidx.activity:activity-ktx:1.13.0' + implementation "com.google.dagger:hilt-android:${rootProject.ext.hilt_version}" + ksp "com.google.dagger:hilt-compiler:${rootProject.ext.hilt_version}" implementation 'androidx.constraintlayout:constraintlayout:2.2.2' implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.2.0' testImplementation 'junit:junit:4.13.2' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ee41f36..d303cd0 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -38,7 +38,7 @@ + android:theme="@style/Theme.AppCompat.Light.NoActionBar" /> diff --git a/app/src/main/java/com/cornellappdev/coursegrab/ui/notification/NotificationModal.kt b/app/src/main/java/com/cornellappdev/coursegrab/ui/notification/NotificationModal.kt index 72827b6..dfaf2a6 100644 --- a/app/src/main/java/com/cornellappdev/coursegrab/ui/notification/NotificationModal.kt +++ b/app/src/main/java/com/cornellappdev/coursegrab/ui/notification/NotificationModal.kt @@ -1,9 +1,10 @@ package com.cornellappdev.coursegrab.ui.notification import android.content.Intent -import android.net.Uri import android.os.Bundle import androidx.appcompat.app.AppCompatActivity +import androidx.core.net.toUri +import com.cornellappdev.coursegrab.R import com.cornellappdev.coursegrab.databinding.ActivityNotificationModalBinding import com.cornellappdev.coursegrab.models.Course import com.cornellappdev.coursegrab.models.CourseNotification @@ -28,7 +29,7 @@ class NotificationModal : AppCompatActivity() { binding.buttonStudentCenter.setOnClickListener { val browserIntent = - Intent(Intent.ACTION_VIEW, Uri.parse("http://studentcenter.cornell.edu")) + Intent(Intent.ACTION_VIEW, "http://studentcenter.cornell.edu".toUri()) startActivity(browserIntent) } diff --git a/app/src/main/java/com/cornellappdev/coursegrab/ui/splash/SplashScreenActivity.kt b/app/src/main/java/com/cornellappdev/coursegrab/ui/splash/SplashScreenActivity.kt index 764209c..7d283a3 100644 --- a/app/src/main/java/com/cornellappdev/coursegrab/ui/splash/SplashScreenActivity.kt +++ b/app/src/main/java/com/cornellappdev/coursegrab/ui/splash/SplashScreenActivity.kt @@ -11,6 +11,7 @@ import android.view.View import android.view.WindowInsets import android.widget.VideoView import androidx.appcompat.app.AppCompatActivity +import androidx.core.net.toUri import com.cornellappdev.coursegrab.R import com.cornellappdev.coursegrab.databinding.ActivitySplashScreenBinding import com.cornellappdev.coursegrab.ui.login.LoginActivity @@ -74,10 +75,8 @@ class SplashScreenActivity : AppCompatActivity() { fullscreenContent = binding.fullscreenContent fullscreenContent.setOnClickListener { toggle() } try { - val video: Uri = Uri.parse( - "android.resource://" + packageName + "/" - + R.raw.splash - ) + val video: Uri = ("android.resource://" + packageName + "/" + + R.raw.splash).toUri() fullscreenContent.visibility = View.VISIBLE fullscreenContent.setVideoURI(video) fullscreenContent.setOnCompletionListener { jump() } diff --git a/app/src/main/res/drawable-v24/icon.png b/app/src/main/res/drawable/icon.png similarity index 100% rename from app/src/main/res/drawable-v24/icon.png rename to app/src/main/res/drawable/icon.png diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 1b971f1..c0d3e10 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -18,7 +18,7 @@ coursegrab_alert Add - Enter a Course ID... + Enter a Course ID… Find Courses diff --git a/build.gradle b/build.gradle index 8e1ab03..3c61c67 100644 --- a/build.gradle +++ b/build.gradle @@ -1,10 +1,9 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { - // Pegged to 2.2.x: Hilt's annotation processor cannot read Kotlin 2.4 metadata. - ext.kotlin_version = '2.2.0' - ext.ksp_version = '2.2.0-2.0.2' - ext.hilt_version = '2.56.2' + ext.kotlin_version = '2.4.10' + ext.ksp_version = '2.3.9' + ext.hilt_version = '2.60.1' ext.serialization_json_version = '1.9.0' ext.retrofit_version = '3.0.0' repositories { @@ -33,5 +32,5 @@ allprojects { } tasks.register('clean', Delete) { - delete rootProject.buildDir + delete rootProject.layout.buildDirectory } diff --git a/gradle.properties b/gradle.properties index f26acd6..a08ba65 100644 --- a/gradle.properties +++ b/gradle.properties @@ -15,20 +15,10 @@ org.gradle.jvmargs=-Xmx1536m # Android operating system, and which are packaged with your app's APK # https://developer.android.com/topic/libraries/support-library/androidx-rn android.useAndroidX=true -# Automatically convert third-party libraries to use AndroidX -android.enableJetifier=true # Kotlin code style for this project: "official" or "obsolete": kotlin.code.style=official android.nonTransitiveRClass=false -android.nonFinalResIds=false -android.defaults.buildfeatures.resvalues=true -android.sdk.defaultTargetSdkToCompileSdkIfUnset=false -android.enableAppCompileTimeRClass=false -android.usesSdkInManifest.disallowed=false android.uniquePackageNames=false android.dependency.useConstraints=true android.r8.strictFullModeForKeepRules=false -android.r8.optimizedResourceShrinking=false -android.builtInKotlin=false -android.newDsl=false android.buildFeatures.buildConfig = true From 7ebf981b114b82d31df740fa65ead4bb1397c741 Mon Sep 17 00:00:00 2001 From: Caleb Shim Date: Sat, 29 Aug 2026 18:11:36 -0400 Subject: [PATCH 2/5] Resolve text warnings --- .../ui/details/CourseDetailsActivity.kt | 12 +++++++-- .../coursegrab/ui/main/MainActivity.kt | 26 +++++++++++++------ .../ui/notification/NotificationModal.kt | 9 +++++-- .../coursegrab/ui/search/SearchActivity.kt | 8 ++++-- app/src/main/res/values/strings.xml | 10 +++++++ 5 files changed, 51 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/com/cornellappdev/coursegrab/ui/details/CourseDetailsActivity.kt b/app/src/main/java/com/cornellappdev/coursegrab/ui/details/CourseDetailsActivity.kt index 00683b8..c78ef9e 100644 --- a/app/src/main/java/com/cornellappdev/coursegrab/ui/details/CourseDetailsActivity.kt +++ b/app/src/main/java/com/cornellappdev/coursegrab/ui/details/CourseDetailsActivity.kt @@ -36,7 +36,11 @@ class CourseDetailsActivity : AppCompatActivity() { val courseDetails: SearchResult = intent.getParcelableExtra("courseDetails") as SearchResult - binding.headerTextView.text = "${courseDetails.subjectCode} ${courseDetails.courseNum}" + binding.headerTextView.text = getString( + R.string.course_header_format, + courseDetails.subjectCode, + courseDetails.courseNum + ) binding.courseTitle.text = courseDetails.title binding.courseDetails.text = @@ -91,7 +95,11 @@ class CourseDetailsActivity : AppCompatActivity() { holder.sectionStatus.setImageResource(if (availableCourses[position].isOpen) R.drawable.ic_status_open else R.drawable.ic_status_closed) //change tracking text - holder.trackText.text = availableCourses[position].numTracking.toString() + " Tracking" + holder.trackText.text = context.resources.getQuantityString( + R.plurals.tracking_count, + availableCourses[position].numTracking, + availableCourses[position].numTracking + ) //Change the track button to remove button holder.removeButton.visibility = diff --git a/app/src/main/java/com/cornellappdev/coursegrab/ui/main/MainActivity.kt b/app/src/main/java/com/cornellappdev/coursegrab/ui/main/MainActivity.kt index 3cf3d2e..32eba97 100644 --- a/app/src/main/java/com/cornellappdev/coursegrab/ui/main/MainActivity.kt +++ b/app/src/main/java/com/cornellappdev/coursegrab/ui/main/MainActivity.kt @@ -140,13 +140,13 @@ class MainActivity : AppCompatActivity() { layoutManager = LinearLayoutManager(this@MainActivity) adapter = AvailableAdapter(state.available, this@MainActivity) } - binding.availableTitle.text = "${state.available.size} Available" + binding.availableTitle.text = getString(R.string.available_count, state.available.size) binding.awaitingList.apply { layoutManager = LinearLayoutManager(this@MainActivity) adapter = AwaitingAdapter(state.awaiting, this@MainActivity) } - binding.awaitingTitle.text = "${state.awaiting.size} Awaiting" + binding.awaitingTitle.text = getString(R.string.awaiting_count, state.awaiting.size) binding.layoutAvailable.visibility = if (state.available.isNotEmpty()) View.VISIBLE else View.GONE @@ -209,10 +209,15 @@ class MainActivity : AppCompatActivity() { } override fun onBindViewHolder(holder: ViewHolder, position: Int) { - holder.courseTitle.text = - "${availableCourses[position].subjectCode} ${availableCourses[position].courseNum}: ${availableCourses[position].title}" + holder.courseTitle.text = context.getString( + R.string.course_title_format, + availableCourses[position].subjectCode, + availableCourses[position].courseNum, + availableCourses[position].title + ) holder.courseTime.text = availableCourses[position].section.uppercase(getDefault()) - holder.coursePin.text = availableCourses[position].catalogNum.toString() + holder.coursePin.text = + context.getString(R.string.course_pin_format, availableCourses[position].catalogNum) holder.courseStatus.setImageResource(if (availableCourses[position].isOpen) R.drawable.ic_status_open else R.drawable.ic_status_closed) holder.removeButton.setOnClickListener { @@ -260,10 +265,15 @@ class MainActivity : AppCompatActivity() { } override fun onBindViewHolder(holder: ViewHolder, position: Int) { - holder.courseTitle.text = - "${awaitingCourses[position].subjectCode} ${awaitingCourses[position].courseNum}: ${awaitingCourses[position].title}" + holder.courseTitle.text = context.getString( + R.string.course_title_format, + awaitingCourses[position].subjectCode, + awaitingCourses[position].courseNum, + awaitingCourses[position].title + ) holder.courseTime.text = awaitingCourses[position].section.uppercase(getDefault()) - holder.coursePin.text = awaitingCourses[position].catalogNum.toString() + holder.coursePin.text = + context.getString(R.string.course_pin_format, awaitingCourses[position].catalogNum) holder.courseStatus.setImageResource(if (awaitingCourses[position].isOpen) R.drawable.ic_status_open else R.drawable.ic_status_closed) holder.removeButton.setOnClickListener { diff --git a/app/src/main/java/com/cornellappdev/coursegrab/ui/notification/NotificationModal.kt b/app/src/main/java/com/cornellappdev/coursegrab/ui/notification/NotificationModal.kt index dfaf2a6..2741bc3 100644 --- a/app/src/main/java/com/cornellappdev/coursegrab/ui/notification/NotificationModal.kt +++ b/app/src/main/java/com/cornellappdev/coursegrab/ui/notification/NotificationModal.kt @@ -23,9 +23,14 @@ class NotificationModal : AppCompatActivity() { val course: Course = (intent.getParcelableExtra("courseDetails") as CourseNotification).section - binding.courseTitle.text = "${course.subjectCode} ${course.courseNum}: ${course.title}" + binding.courseTitle.text = getString( + R.string.course_title_format, + course.subjectCode, + course.courseNum, + course.title + ) binding.courseSection.text = course.section - binding.coursePin.text = course.catalogNum.toString() + binding.coursePin.text = getString(R.string.course_pin_format, course.catalogNum) binding.buttonStudentCenter.setOnClickListener { val browserIntent = diff --git a/app/src/main/java/com/cornellappdev/coursegrab/ui/search/SearchActivity.kt b/app/src/main/java/com/cornellappdev/coursegrab/ui/search/SearchActivity.kt index 95c5b07..724a5e8 100644 --- a/app/src/main/java/com/cornellappdev/coursegrab/ui/search/SearchActivity.kt +++ b/app/src/main/java/com/cornellappdev/coursegrab/ui/search/SearchActivity.kt @@ -139,8 +139,12 @@ class SearchActivity : AppCompatActivity() { } override fun onBindViewHolder(holder: ViewHolder, position: Int) { - holder.courseTitle.text = - "${resultsCourses[position].subjectCode} ${resultsCourses[position].courseNum}: ${resultsCourses[position].title}" + holder.courseTitle.text = context.getString( + R.string.course_title_format, + resultsCourses[position].subjectCode, + resultsCourses[position].courseNum, + resultsCourses[position].title + ) holder.expandButton.setOnClickListener { val intent = Intent(context, CourseDetailsActivity::class.java).apply { diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c0d3e10..646290b 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -43,6 +43,16 @@ Try a different query + + %1$s %2$d: %3$s + %1$s %2$d + %d + %d Available + %d Awaiting + + %d Tracking + %d Tracking + %d Result %d Results From d4d239dcdd820d7e2049dd0026e0a5b641640b84 Mon Sep 17 00:00:00 2001 From: Caleb Shim Date: Sat, 29 Aug 2026 18:23:51 -0400 Subject: [PATCH 3/5] Use tools:text for placeholder text --- .../com/cornellappdev/coursegrab/ui/main/MainActivity.kt | 6 ++---- .../coursegrab/ui/notification/NotificationModal.kt | 2 +- app/src/main/res/layout/activity_course_details.xml | 4 ++-- app/src/main/res/layout/activity_main.xml | 4 ++-- app/src/main/res/layout/activity_notification_modal.xml | 6 +++--- app/src/main/res/layout/activity_search.xml | 2 +- app/src/main/res/layout/course_available_list_item.xml | 7 ++++--- app/src/main/res/layout/course_available_list_item_v2.xml | 6 +++--- app/src/main/res/layout/course_awaiting_list_item.xml | 6 +++--- app/src/main/res/layout/course_awaiting_list_item_v2.xml | 6 +++--- app/src/main/res/layout/course_search_list_item.xml | 3 ++- app/src/main/res/layout/course_section_item.xml | 4 ++-- app/src/main/res/values/strings.xml | 1 - 13 files changed, 28 insertions(+), 29 deletions(-) diff --git a/app/src/main/java/com/cornellappdev/coursegrab/ui/main/MainActivity.kt b/app/src/main/java/com/cornellappdev/coursegrab/ui/main/MainActivity.kt index 32eba97..a4f09e5 100644 --- a/app/src/main/java/com/cornellappdev/coursegrab/ui/main/MainActivity.kt +++ b/app/src/main/java/com/cornellappdev/coursegrab/ui/main/MainActivity.kt @@ -216,8 +216,7 @@ class MainActivity : AppCompatActivity() { availableCourses[position].title ) holder.courseTime.text = availableCourses[position].section.uppercase(getDefault()) - holder.coursePin.text = - context.getString(R.string.course_pin_format, availableCourses[position].catalogNum) + holder.coursePin.text = availableCourses[position].catalogNum.toString() holder.courseStatus.setImageResource(if (availableCourses[position].isOpen) R.drawable.ic_status_open else R.drawable.ic_status_closed) holder.removeButton.setOnClickListener { @@ -272,8 +271,7 @@ class MainActivity : AppCompatActivity() { awaitingCourses[position].title ) holder.courseTime.text = awaitingCourses[position].section.uppercase(getDefault()) - holder.coursePin.text = - context.getString(R.string.course_pin_format, awaitingCourses[position].catalogNum) + holder.coursePin.text = awaitingCourses[position].catalogNum.toString() holder.courseStatus.setImageResource(if (awaitingCourses[position].isOpen) R.drawable.ic_status_open else R.drawable.ic_status_closed) holder.removeButton.setOnClickListener { diff --git a/app/src/main/java/com/cornellappdev/coursegrab/ui/notification/NotificationModal.kt b/app/src/main/java/com/cornellappdev/coursegrab/ui/notification/NotificationModal.kt index 2741bc3..c175efb 100644 --- a/app/src/main/java/com/cornellappdev/coursegrab/ui/notification/NotificationModal.kt +++ b/app/src/main/java/com/cornellappdev/coursegrab/ui/notification/NotificationModal.kt @@ -30,7 +30,7 @@ class NotificationModal : AppCompatActivity() { course.title ) binding.courseSection.text = course.section - binding.coursePin.text = getString(R.string.course_pin_format, course.catalogNum) + binding.coursePin.text = course.catalogNum.toString() binding.buttonStudentCenter.setOnClickListener { val browserIntent = diff --git a/app/src/main/res/layout/activity_course_details.xml b/app/src/main/res/layout/activity_course_details.xml index e89efaf..2529206 100644 --- a/app/src/main/res/layout/activity_course_details.xml +++ b/app/src/main/res/layout/activity_course_details.xml @@ -68,7 +68,7 @@ android:maxLines="2" android:paddingStart="14dp" android:scrollHorizontally="true" - android:text="CS 1998: Intro to Android" + tools:text="CS 1998: Intro to Android" android:textColor="@android:color/black" android:textSize="18sp" /> @@ -82,7 +82,7 @@ android:fontFamily="sans-serif-medium" android:gravity="bottom" android:paddingLeft="14dp" - android:text="LEC 006 / M 7:30PM" + tools:text="LEC 006 / M 7:30PM" android:textSize="16sp" /> diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index a878cb8..53f5083 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -84,7 +84,7 @@ android:paddingStart="16dp" android:paddingTop="16dp" android:paddingBottom="4dp" - android:text="0 Available" + tools:text="0 Available" android:textColor="@color/greenTextColor" android:textSize="20sp" /> @@ -115,7 +115,7 @@ android:paddingStart="16dp" android:paddingTop="16dp" android:paddingBottom="4dp" - android:text="0 Awaiting" + tools:text="0 Awaiting" android:textColor="@android:color/black" android:textSize="20sp" /> diff --git a/app/src/main/res/layout/activity_notification_modal.xml b/app/src/main/res/layout/activity_notification_modal.xml index aab25d9..ef38273 100644 --- a/app/src/main/res/layout/activity_notification_modal.xml +++ b/app/src/main/res/layout/activity_notification_modal.xml @@ -29,7 +29,7 @@ android:layout_marginStart="20dp" android:layout_marginTop="45dp" android:layout_marginEnd="20dp" - android:text="CS 1998: Intro to Android Development" + tools:text="CS 1998: Intro to Android Development" android:textAlignment="center" android:textAllCaps="false" android:textColor="@color/white" @@ -45,7 +45,7 @@ android:layout_height="wrap_content" android:layout_marginStart="20dp" android:layout_marginEnd="20dp" - android:text="10032" + tools:text="10032" android:textAlignment="center" android:textAllCaps="false" android:textColor="@color/white" @@ -64,7 +64,7 @@ android:layout_marginTop="20dp" android:layout_marginEnd="20dp" android:fontFamily="sans-serif-medium" - android:text="lec 001 / TR 1:25pm" + tools:text="lec 001 / TR 1:25pm" android:textAlignment="center" android:textAllCaps="true" android:textColor="@color/white" diff --git a/app/src/main/res/layout/activity_search.xml b/app/src/main/res/layout/activity_search.xml index bef0cf9..091def6 100644 --- a/app/src/main/res/layout/activity_search.xml +++ b/app/src/main/res/layout/activity_search.xml @@ -72,7 +72,7 @@ android:paddingStart="14dp" android:paddingTop="16dp" android:paddingBottom="10dp" - android:text="0 Results" + tools:text="0 Results" android:textColor="@color/black" android:textSize="24sp" /> diff --git a/app/src/main/res/layout/course_available_list_item.xml b/app/src/main/res/layout/course_available_list_item.xml index ffcc08e..ba48926 100644 --- a/app/src/main/res/layout/course_available_list_item.xml +++ b/app/src/main/res/layout/course_available_list_item.xml @@ -1,5 +1,6 @@ @@ -57,7 +58,7 @@ android:fontFamily="sans-serif-medium" android:gravity="bottom" android:paddingStart="14dp" - android:text="LEC 006 / M 7:30PM" + tools:text="LEC 006 / M 7:30PM" android:textSize="16sp" /> diff --git a/app/src/main/res/layout/course_available_list_item_v2.xml b/app/src/main/res/layout/course_available_list_item_v2.xml index 2822791..4de3fa1 100644 --- a/app/src/main/res/layout/course_available_list_item_v2.xml +++ b/app/src/main/res/layout/course_available_list_item_v2.xml @@ -32,7 +32,7 @@ android:gravity="bottom" android:maxLines="2" android:scrollHorizontally="true" - android:text="CS 1998: Intro to Android" + tools:text="CS 1998: Intro to Android" android:textColor="@android:color/black" android:textSize="18sp" app:layout_constraintEnd_toStartOf="@+id/course_status" @@ -58,7 +58,7 @@ android:layout_marginTop="12dp" android:fontFamily="sans-serif-medium" android:gravity="bottom" - android:text="LEC 006 / M 7:30PM" + tools:text="LEC 006 / M 7:30PM" android:textSize="16sp" app:layout_constraintEnd_toStartOf="@+id/course_pin" app:layout_constraintStart_toStartOf="parent" @@ -70,7 +70,7 @@ android:layout_height="wrap_content" android:layout_marginEnd="16dp" android:fontFamily="sans-serif-medium" - android:text="10032" + tools:text="10032" android:textSize="16sp" app:layout_constraintBottom_toBottomOf="@+id/course_time" app:layout_constraintEnd_toEndOf="parent" diff --git a/app/src/main/res/layout/course_awaiting_list_item.xml b/app/src/main/res/layout/course_awaiting_list_item.xml index b9ebf17..806107c 100644 --- a/app/src/main/res/layout/course_awaiting_list_item.xml +++ b/app/src/main/res/layout/course_awaiting_list_item.xml @@ -19,7 +19,7 @@ android:gravity="bottom" android:maxLines="2" android:scrollHorizontally="true" - android:text="CS 1998: Intro to Android" + tools:text="CS 1998: Intro to Android" android:textColor="@android:color/black" android:textSize="18sp" app:layout_constraintEnd_toStartOf="@+id/course_status" @@ -45,7 +45,7 @@ android:layout_marginTop="12dp" android:fontFamily="sans-serif-medium" android:gravity="bottom" - android:text="LEC 006 / M 7:30PM" + tools:text="LEC 006 / M 7:30PM" android:textSize="16sp" app:layout_constraintEnd_toStartOf="@+id/course_pin" app:layout_constraintStart_toStartOf="parent" @@ -57,7 +57,7 @@ android:layout_height="wrap_content" android:layout_marginEnd="16dp" android:fontFamily="sans-serif-medium" - android:text="10032" + tools:text="10032" android:textSize="16sp" app:layout_constraintBottom_toBottomOf="@+id/course_time" app:layout_constraintEnd_toEndOf="parent" diff --git a/app/src/main/res/layout/course_awaiting_list_item_v2.xml b/app/src/main/res/layout/course_awaiting_list_item_v2.xml index c2c58d5..bc0e33a 100644 --- a/app/src/main/res/layout/course_awaiting_list_item_v2.xml +++ b/app/src/main/res/layout/course_awaiting_list_item_v2.xml @@ -35,7 +35,7 @@ android:gravity="bottom" android:maxLines="2" android:scrollHorizontally="true" - android:text="CS 1998: Intro to Android" + tools:text="CS 1998: Intro to Android" android:textColor="@android:color/black" android:textSize="18sp" android:translationZ="2dp" @@ -64,7 +64,7 @@ android:layout_marginTop="12dp" android:fontFamily="sans-serif-medium" android:gravity="bottom" - android:text="LEC 006 / M 7:30PM" + tools:text="LEC 006 / M 7:30PM" android:textSize="16sp" android:translationZ="2dp" app:layout_constraintEnd_toStartOf="@+id/course_pin" @@ -77,7 +77,7 @@ android:layout_height="wrap_content" android:layout_marginEnd="16dp" android:fontFamily="sans-serif-medium" - android:text="10032" + tools:text="10032" android:textSize="16sp" android:translationZ="2dp" app:layout_constraintBottom_toBottomOf="@+id/course_time" diff --git a/app/src/main/res/layout/course_search_list_item.xml b/app/src/main/res/layout/course_search_list_item.xml index 9a9641e..fd472d8 100644 --- a/app/src/main/res/layout/course_search_list_item.xml +++ b/app/src/main/res/layout/course_search_list_item.xml @@ -1,5 +1,6 @@ diff --git a/app/src/main/res/layout/course_section_item.xml b/app/src/main/res/layout/course_section_item.xml index 7d63127..1df930b 100644 --- a/app/src/main/res/layout/course_section_item.xml +++ b/app/src/main/res/layout/course_section_item.xml @@ -44,7 +44,7 @@ android:gravity="bottom" android:maxLines="2" android:scrollHorizontally="true" - android:text="LEC 001 / W 7:30PM" + tools:text="LEC 001 / W 7:30PM" android:textColor="@android:color/black" android:textSize="16sp" app:layout_constraintBottom_toBottomOf="parent" @@ -88,7 +88,7 @@ android:layout_marginStart="4dp" android:layout_marginTop="4dp" android:layout_marginBottom="4dp" - android:text="0 Tracking" + tools:text="0 Tracking" android:textSize="14sp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toEndOf="@+id/trackingLogo" diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 646290b..c93c206 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -46,7 +46,6 @@ %1$s %2$d: %3$s %1$s %2$d - %d %d Available %d Awaiting From 13ab61313c1ce620d567a5fc4650fffce9d72294 Mon Sep 17 00:00:00 2001 From: Caleb Shim Date: Sun, 30 Aug 2026 12:19:19 -0400 Subject: [PATCH 4/5] Add parens --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index dd47571..305e8f4 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -23,12 +23,12 @@ android { debug { manifestPlaceholders = [crashlyticsCollectionEnabled: "false"] minifyEnabled = false - proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + proguardFiles(getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro') } release { manifestPlaceholders = [crashlyticsCollectionEnabled: "true"] minifyEnabled = false - proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + proguardFiles(getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro') } } compileOptions { From ef77614ef5a908d2e78318de916473a3f3a96d4b Mon Sep 17 00:00:00 2001 From: Caleb Shim Date: Sun, 30 Aug 2026 12:20:55 -0400 Subject: [PATCH 5/5] Update JVM target --- app/build.gradle | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 305e8f4..7618e96 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -32,8 +32,8 @@ android { } } compileOptions { - sourceCompatibility = JavaVersion.VERSION_11 - targetCompatibility = JavaVersion.VERSION_11 + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 } buildFeatures { viewBinding = true @@ -44,7 +44,7 @@ android { kotlin { compilerOptions { - jvmTarget = JvmTarget.JVM_11 + jvmTarget = JvmTarget.JVM_17 } }