diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..273e0e8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,33 @@ +# Built application files +*.apk +*.aar +*.ap_ +*.aab + +# Files for the ART/Dalvik VM +*.dex + +# Java class files +*.class + +# Generated files +bin/ +gen/ +out/ +release/ + +# Gradle files +.gradle/ +build/ + +# Local configuration file +local.properties + +# Android Studio +*.iml +.idea/ +.DS_Store + +# Keystore files +*.jks +*.keystore diff --git a/app/build.gradle.kts b/app/build.gradle.kts new file mode 100644 index 0000000..98dffab --- /dev/null +++ b/app/build.gradle.kts @@ -0,0 +1,66 @@ +plugins { + alias(libs.plugins.android.application) + alias(libs.plugins.kotlin.android) + alias(libs.plugins.kotlin.compose) + alias(libs.plugins.ksp) +} + +android { + namespace = "xyz.cottongin.radio247" + compileSdk = 35 + + defaultConfig { + applicationId = "xyz.cottongin.radio247" + minSdk = 28 + targetSdk = 35 + versionCode = 1 + versionName = "1.0" + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + } + + buildTypes { + release { + isMinifyEnabled = false + } + } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 + } + kotlinOptions { + jvmTarget = "17" + } + buildFeatures { + compose = true + } +} + +dependencies { + implementation(platform(libs.compose.bom)) + implementation(libs.compose.material3) + implementation(libs.compose.ui) + implementation(libs.compose.ui.tooling.preview) + implementation(libs.compose.activity) + debugImplementation(libs.compose.ui.tooling) + + implementation(libs.room.runtime) + implementation(libs.room.ktx) + ksp(libs.room.compiler) + + implementation(libs.datastore.preferences) + implementation(libs.okhttp) + implementation(libs.lifecycle.viewmodel.compose) + implementation(libs.lifecycle.runtime.compose) + implementation(libs.lifecycle.service) + implementation(libs.coroutines.core) + implementation(libs.coroutines.android) + implementation(libs.media.session) + implementation(libs.material) + + testImplementation(libs.junit) + testImplementation(libs.mockk) + testImplementation(libs.coroutines.test) + testImplementation(libs.turbine) + testImplementation(libs.okhttp.mockwebserver) + testImplementation(libs.room.testing) +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..874d531 --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/java/xyz/cottongin/radio247/MainActivity.kt b/app/src/main/java/xyz/cottongin/radio247/MainActivity.kt new file mode 100644 index 0000000..b551a5c --- /dev/null +++ b/app/src/main/java/xyz/cottongin/radio247/MainActivity.kt @@ -0,0 +1,28 @@ +package xyz.cottongin.radio247 + +import android.os.Bundle +import androidx.activity.ComponentActivity +import androidx.activity.compose.setContent +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.tooling.preview.Preview + +class MainActivity : ComponentActivity() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContent { + Radio247Placeholder() + } + } +} + +@Composable +private fun Radio247Placeholder() { + Text("24/7 Radio") +} + +@Preview(showBackground = true) +@Composable +private fun Radio247PlaceholderPreview() { + Radio247Placeholder() +} diff --git a/app/src/main/java/xyz/cottongin/radio247/RadioApplication.kt b/app/src/main/java/xyz/cottongin/radio247/RadioApplication.kt new file mode 100644 index 0000000..0a5d5d3 --- /dev/null +++ b/app/src/main/java/xyz/cottongin/radio247/RadioApplication.kt @@ -0,0 +1,5 @@ +package xyz.cottongin.radio247 + +import android.app.Application + +class RadioApplication : Application() diff --git a/app/src/main/java/xyz/cottongin/radio247/service/RadioPlaybackService.kt b/app/src/main/java/xyz/cottongin/radio247/service/RadioPlaybackService.kt new file mode 100644 index 0000000..44549dd --- /dev/null +++ b/app/src/main/java/xyz/cottongin/radio247/service/RadioPlaybackService.kt @@ -0,0 +1,13 @@ +package xyz.cottongin.radio247.service + +import android.app.Service +import android.content.Intent +import android.os.IBinder + +/** + * Stub for the media playback foreground service. + * Will be implemented in a later task. + */ +class RadioPlaybackService : Service() { + override fun onBind(intent: Intent?): IBinder? = null +} diff --git a/app/src/main/res/drawable/ic_radio_placeholder.xml b/app/src/main/res/drawable/ic_radio_placeholder.xml new file mode 100644 index 0000000..664fce0 --- /dev/null +++ b/app/src/main/res/drawable/ic_radio_placeholder.xml @@ -0,0 +1,14 @@ + + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml new file mode 100644 index 0000000..964e98d --- /dev/null +++ b/app/src/main/res/values/strings.xml @@ -0,0 +1,4 @@ + + + 24/7 Radio + diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml new file mode 100644 index 0000000..ccd5797 --- /dev/null +++ b/app/src/main/res/values/themes.xml @@ -0,0 +1,4 @@ + + +