Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[feature/#835] 🚌 알림 화면 리팩토링 #837

Merged
merged 31 commits into from
Sep 18, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
a75632b
[feat/#835] Add domain/notification module
l2hyunwoo Sep 7, 2024
4379824
[feature/#835] Add data notification module
l2hyunwoo Sep 8, 2024
74fcc33
[feature/#835] Spotless Apply
l2hyunwoo Sep 8, 2024
f7769f8
[feature/#835] Add NotificationRepository impl in data module
l2hyunwoo Sep 8, 2024
dfa774d
[feature/#835] Replace notification module with new impl
l2hyunwoo Sep 8, 2024
b403023
[feature/#835] Remove useless usecases
l2hyunwoo Sep 8, 2024
9e9c827
[feature/#835] Remove useless files
l2hyunwoo Sep 8, 2024
cd656db
[feature/#835] Apply LifecycleAwareFirebaseMessagingService
l2hyunwoo Sep 8, 2024
f02d709
[feature/#835] Spotless Apply
l2hyunwoo Sep 8, 2024
16eb406
[feautre/#835] Add feature notification module
l2hyunwoo Sep 8, 2024
19db89c
[feature/#835] Remove viewmodels
l2hyunwoo Sep 8, 2024
d0d0a4c
[feature/#835] Spotless apply
l2hyunwoo Sep 8, 2024
2dc16c6
[feature/#835] NotificationHistory -> Notification
l2hyunwoo Sep 8, 2024
3712d83
[feature/#835] Add Navigator Intent Provider
l2hyunwoo Sep 8, 2024
b5ea5ba
[feature/#835] Add appContext props && remove useless code
l2hyunwoo Sep 8, 2024
3dd977b
[feature/#835] Refactor deeplink logic
l2hyunwoo Sep 8, 2024
49a7540
[feature/#835] Spotless Apply
l2hyunwoo Sep 8, 2024
094f858
[feature/#835] Fix build issues
l2hyunwoo Sep 8, 2024
dfd81a9
[feature/#835] Reafactor code
l2hyunwoo Sep 8, 2024
3142689
[feature/#835] Fix build issue
l2hyunwoo Sep 8, 2024
c99cfc1
[feature/#835] Convert notification activity to compose
l2hyunwoo Sep 8, 2024
60c2cd6
[feature/#835] Add paging dependency
l2hyunwoo Sep 8, 2024
0602694
[feature/#835] Apply paging3 + compose
l2hyunwoo Sep 8, 2024
49d7728
[feature/#835] Spotless Apply
l2hyunwoo Sep 8, 2024
ec43701
[feature/#835] Remove useless usecases
l2hyunwoo Sep 8, 2024
799ae5f
[feature/#835] Fix viewmodel naming
l2hyunwoo Sep 8, 2024
4d3c0c5
[feature/#835] Refactor NotificationDetailActivity
l2hyunwoo Sep 8, 2024
d3af694
[feature/#835] Fix build issue
l2hyunwoo Sep 8, 2024
6fc26e2
[feature/#835] Refactor with compose
l2hyunwoo Sep 8, 2024
7f173a4
Update app/src/main/java/org/sopt/official/feature/notification/Schem…
l2hyunwoo Sep 9, 2024
a119b3d
Update .editorconfig
l2hyunwoo Sep 13, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,5 @@ root = true

[*]
max_line_length = 140
indent_style = space
indent_size = 4
273 changes: 138 additions & 135 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -26,160 +26,163 @@ import com.google.firebase.appdistribution.gradle.firebaseAppDistribution
import java.util.Properties

plugins {
sopt("application")
sopt("test")
sopt("compose")
alias(libs.plugins.google.services)
alias(libs.plugins.crashlytics)
alias(libs.plugins.ktlint)
alias(libs.plugins.secret)
alias(libs.plugins.app.distribution)
alias(libs.plugins.androidx.baselineprofile)
sopt("application")
sopt("test")
sopt("compose")
alias(libs.plugins.google.services)
alias(libs.plugins.crashlytics)
alias(libs.plugins.ktlint)
alias(libs.plugins.secret)
alias(libs.plugins.app.distribution)
alias(libs.plugins.androidx.baselineprofile)
}

val properties =
Properties().apply {
load(rootProject.file("local.properties").inputStream())
}
android {
namespace = "org.sopt.official"
val properties = Properties().apply {
load(rootProject.file("local.properties").inputStream())
}

defaultConfig {
versionCode = libs.versions.versionCode.get().toInt()
versionName = libs.versions.appVersion.get()
applicationId = "org.sopt.official"
android {
namespace = "org.sopt.official"

if (project.hasProperty("dev")) {
versionNameSuffix = "-Dev"
}
defaultConfig {
versionCode = libs.versions.versionCode.get().toInt()
versionName = libs.versions.appVersion.get()
applicationId = "org.sopt.official"

testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
if (project.hasProperty("dev")) {
versionNameSuffix = "-Dev"
}

signingConfigs {
getByName("debug") {
keyAlias = "androiddebugkey"
keyPassword = "android"
storeFile = File("${project.rootDir.absolutePath}/keystore/debug.keystore")
storePassword = "android"
}
create("release") {
keyAlias = properties.getProperty("keyAlias")
keyPassword = properties.getProperty("keyPassword")
storeFile = File("${project.rootDir.absolutePath}/keystore/releaseKey.jks")
storePassword = "soptandroid"
}
}
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}

buildTypes {
val debug by getting {
applicationIdSuffix = ".debug"
firebaseAppDistribution {
artifactType = "APK"
groups = "app-team"
}
}
val release by getting {
isMinifyEnabled = true
isShrinkResources = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro",
)
signingConfig = signingConfigs.getByName("release")
}
val benchmark by creating {
initWith(release)
matchingFallbacks.add("release")
signingConfig = signingConfigs.getByName("debug")
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
isMinifyEnabled = true
isDebuggable = false
}
signingConfigs {
getByName("debug") {
keyAlias = "androiddebugkey"
keyPassword = "android"
storeFile = File("${project.rootDir.absolutePath}/keystore/debug.keystore")
storePassword = "android"
}
create("release") {
keyAlias = properties.getProperty("keyAlias")
keyPassword = properties.getProperty("keyPassword")
storeFile = File("${project.rootDir.absolutePath}/keystore/releaseKey.jks")
storePassword = "soptandroid"
}
applicationVariants.all {
val variant = this
kotlin {
sourceSets {
getByName(variant.name) {
kotlin.srcDir("build/generated/ksp/${variant.name}/kotlin")
}
}
}

buildTypes {
val debug by getting {
applicationIdSuffix = ".debug"
firebaseAppDistribution {
artifactType = "APK"
groups = "app-team"
}
}
val release by getting {
isMinifyEnabled = true
isShrinkResources = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro",
)
signingConfig = signingConfigs.getByName("release")
}
val benchmark by creating {
initWith(release)
matchingFallbacks.add("release")
signingConfig = signingConfigs.getByName("debug")
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
isMinifyEnabled = true
isDebuggable = false
}
}
applicationVariants.all {
val variant = this
kotlin {
sourceSets {
getByName(variant.name) {
kotlin.srcDir("build/generated/ksp/${variant.name}/kotlin")
}
}
}
}
}

dependencies {
implementation(projects.core.designsystem)
implementation(projects.domain.soptamp)
implementation(projects.domain.mypage)
implementation(projects.domain.poke)
implementation(projects.feature.soptamp)
implementation(projects.data.soptamp)
implementation(projects.data.mypage)
implementation(projects.data.poke)
implementation(projects.core.common)
implementation(projects.core.analytics)
implementation(projects.core.network)
implementation(projects.core.auth)
implementation(projects.core.authimpl)
implementation(projects.core.webview)
implementation(projects.feature.auth)
implementation(projects.feature.mypage)
implementation(projects.feature.poke)
baselineProfile(projects.baselineprofile)

implementation(libs.kotlin.coroutines.google.play)
implementation(platform(libs.compose.bom))
implementation(libs.bundles.compose)
implementation(libs.startup)
implementation(libs.swipe.refresh.layout)

implementation(libs.inappupdate)

implementation(platform(libs.okhttp.bom))
implementation(libs.bundles.okhttp)

implementation(libs.bundles.compose)

implementation(libs.bundles.mavericks)

implementation(platform(libs.firebase))
implementation(libs.bundles.firebase)
implementation(libs.process.phoenix)

implementation(libs.compose.destination.core)
implementation(libs.androidx.lifecycle.process)
implementation(libs.appcompat)
implementation(libs.material)

androidTestImplementation(platform(libs.compose.bom))
androidTestImplementation(libs.bundles.compose.test)
androidTestImplementation(libs.bundles.android.test)
debugImplementation(libs.bundles.compose.android.test)

implementation(libs.coil.core)
implementation(libs.profileinstaller)
implementation(projects.core.designsystem)
implementation(projects.domain.soptamp)
implementation(projects.domain.mypage)
implementation(projects.domain.poke)
implementation(projects.domain.notification)
implementation(projects.feature.soptamp)
implementation(projects.data.soptamp)
implementation(projects.data.mypage)
implementation(projects.data.poke)
implementation(projects.data.notification)
implementation(projects.core.common)
implementation(projects.core.analytics)
implementation(projects.core.network)
implementation(projects.core.auth)
implementation(projects.core.authimpl)
implementation(projects.core.webview)
implementation(projects.feature.auth)
implementation(projects.feature.mypage)
implementation(projects.feature.poke)
implementation(projects.feature.notification)
baselineProfile(projects.baselineprofile)

implementation(libs.kotlin.coroutines.google.play)
implementation(platform(libs.compose.bom))
implementation(libs.bundles.compose)
implementation(libs.startup)
implementation(libs.swipe.refresh.layout)

implementation(libs.inappupdate)

implementation(platform(libs.okhttp.bom))
implementation(libs.bundles.okhttp)

implementation(libs.bundles.compose)

implementation(platform(libs.firebase))
implementation(libs.bundles.firebase)
implementation(libs.process.phoenix)

implementation(libs.compose.destination.core)
implementation(libs.androidx.lifecycle.process)
implementation(libs.appcompat)
implementation(libs.material)
implementation(libs.fragment.ktx)

androidTestImplementation(platform(libs.compose.bom))
androidTestImplementation(libs.bundles.compose.test)
androidTestImplementation(libs.bundles.android.test)
debugImplementation(libs.bundles.compose.android.test)

implementation(libs.coil.core)
implementation(libs.profileinstaller)
implementation(libs.firebase.messaging.lifecycle.ktx)
}

secrets {
defaultPropertiesFileName = "secrets.defaults.properties"
defaultPropertiesFileName = "secrets.defaults.properties"

ignoreList.add("sdk.*")
ignoreList.add("sdk.*")
}

ktlint {
android.set(true)
debug.set(true)
coloredOutput.set(true)
verbose.set(true)
outputToConsole.set(true)
version.set("1.2.1")
filter {
exclude { projectDir.toURI().relativize(it.file.toURI()).path.contains("/generated/") }
exclude { it.file.name.contains("gradle") }
}
android.set(true)
debug.set(true)
coloredOutput.set(true)
verbose.set(true)
outputToConsole.set(true)
version.set("1.2.1")
filter {
exclude { projectDir.toURI().relativize(it.file.toURI()).path.contains("/generated/") }
exclude { it.file.name.contains("gradle") }
}
}
4 changes: 2 additions & 2 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -133,11 +133,11 @@
</intent-filter>
</activity>
<activity
android:name=".feature.notification.NotificationHistoryActivity"
android:name=".feature.notification.all.NotificationActivity"
android:exported="false"
android:launchMode="singleTop" />
<activity
android:name=".feature.notification.NotificationDetailActivity"
android:name=".feature.notification.detail.NotificationDetailActivity"
android:exported="false"
android:launchMode="singleTop" />
<activity
Expand Down
50 changes: 25 additions & 25 deletions app/src/main/java/org/sopt/official/App.kt
Original file line number Diff line number Diff line change
Expand Up @@ -27,45 +27,45 @@ package org.sopt.official
import android.app.Application
import androidx.appcompat.app.AppCompatDelegate
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.ProcessLifecycleOwner
import androidx.lifecycle.coroutineScope
import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.repeatOnLifecycle
import com.airbnb.mvrx.mocking.MockableMavericks
import com.google.firebase.messaging.FirebaseMessaging
import dagger.hilt.android.HiltAndroidApp
import javax.inject.Inject
import kotlinx.coroutines.launch
import kotlinx.coroutines.tasks.await
import org.sopt.official.common.context.appContext
import org.sopt.official.network.FlipperInitializer
import org.sopt.official.network.persistence.SoptDataStore
import timber.log.Timber
import javax.inject.Inject

@HiltAndroidApp
class App : Application() {
@Inject
lateinit var dataStore: SoptDataStore
@Inject
lateinit var dataStore: SoptDataStore
private val lifecycleOwner: LifecycleOwner
get() = ProcessLifecycleOwner.get()

override fun onCreate() {
super.onCreate()
initFlipper()
initMavericks()
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
ProcessLifecycleOwner.get().lifecycle.coroutineScope.launch {
ProcessLifecycleOwner.get().lifecycle.repeatOnLifecycle(Lifecycle.State.STARTED) {
runCatching {
FirebaseMessaging.getInstance().token.await()
}.onSuccess {
dataStore.pushToken = it
}.onFailure(Timber::e)
}
}
}
override fun onCreate() {
super.onCreate()
appContext = this.applicationContext

private fun initMavericks() {
MockableMavericks.initialize(this)
initFlipper()
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
lifecycleOwner.lifecycleScope.launch {
lifecycleOwner.lifecycle.repeatOnLifecycle(Lifecycle.State.STARTED) {
runCatching {
FirebaseMessaging.getInstance().token.await()
}.onSuccess {
dataStore.pushToken = it
}.onFailure(Timber::e)
}
}
}

private fun initFlipper() {
FlipperInitializer.init(this)
}
private fun initFlipper() {
FlipperInitializer.init(this)
}
}
Loading