Skip to content

Commit e06dafb

Browse files
authored
Merge pull request #165 from ptkNktq/fix/dialog_to_composable
DialogのComposable化
2 parents 1784709 + 8474d20 commit e06dafb

File tree

18 files changed

+329
-240
lines changed

18 files changed

+329
-240
lines changed

AndroidApp/app/src/main/AndroidManifest.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
android:theme="@style/AppTheme.SplashScreen">
1818

1919
<activity
20-
android:name="me.nya_n.notificationnotifier.ui.screen.MainActivity"
20+
android:name="me.nya_n.notificationnotifier.ui.MainActivity"
2121
android:exported="true">
2222
<intent-filter>
2323
<action android:name="android.intent.action.MAIN" />

AndroidApp/app/src/main/kotlin/me/nya_n/notificationnotifier/App.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ import me.nya_n.notificationnotifier.domain.usecase.impl.PackageVisibilityGrante
3434
import me.nya_n.notificationnotifier.domain.usecase.impl.SaveAddressUseCaseImpl
3535
import me.nya_n.notificationnotifier.domain.usecase.impl.SaveFilterConditionUseCaseImpl
3636
import me.nya_n.notificationnotifier.domain.util.SharedPreferenceProvider
37+
import me.nya_n.notificationnotifier.ui.screen.app.AppViewModel
3738
import me.nya_n.notificationnotifier.ui.screen.detail.DetailViewModel
3839
import me.nya_n.notificationnotifier.ui.screen.selection.SelectionViewModel
3940
import me.nya_n.notificationnotifier.ui.screen.settings.SettingsViewModel
@@ -71,6 +72,7 @@ class App : Application() {
7172
single<AppRepository> { AppRepositoryImpl(get(), get()) }
7273

7374
// ViewModel
75+
viewModel { AppViewModel(get(), packageName, get(), get()) }
7476
viewModel { SelectionViewModel(get(), get(), get()) }
7577
viewModel { params -> DetailViewModel(get(), get(), get(), params.get()) }
7678
viewModel { TargetViewModel(get(), get()) }
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package me.nya_n.notificationnotifier.ui
2+
3+
import android.os.Bundle
4+
import androidx.activity.SystemBarStyle
5+
import androidx.activity.compose.setContent
6+
import androidx.activity.enableEdgeToEdge
7+
import androidx.appcompat.app.AppCompatActivity
8+
import androidx.compose.ui.graphics.toArgb
9+
import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
10+
import androidx.lifecycle.lifecycleScope
11+
import kotlinx.coroutines.delay
12+
import kotlinx.coroutines.flow.MutableStateFlow
13+
import kotlinx.coroutines.flow.update
14+
import kotlinx.coroutines.launch
15+
import me.nya_n.notificationnotifier.ui.screen.app.AppScreen
16+
import me.nya_n.notificationnotifier.ui.theme.AppColors
17+
18+
class MainActivity : AppCompatActivity() {
19+
private val isReady = MutableStateFlow(false)
20+
21+
override fun onCreate(savedInstanceState: Bundle?) {
22+
installSplashScreen().setKeepOnScreenCondition { !isReady.value }
23+
super.onCreate(savedInstanceState)
24+
setContent {
25+
enableEdgeToEdge(
26+
statusBarStyle = SystemBarStyle.dark(
27+
AppColors.Primary.toArgb(),
28+
),
29+
navigationBarStyle = SystemBarStyle.dark(
30+
AppColors.Primary.toArgb()
31+
)
32+
)
33+
AppScreen()
34+
}
35+
lifecycleScope.launch {
36+
delay(500)
37+
isReady.update { true }
38+
}
39+
}
40+
}
Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
package me.nya_n.notificationnotifier.ui.common
2+
3+
import androidx.compose.material3.AlertDialog
4+
import androidx.compose.material3.Text
5+
import androidx.compose.material3.TextButton
6+
import androidx.compose.runtime.Composable
7+
import androidx.compose.ui.graphics.Color
8+
import androidx.compose.ui.res.stringResource
9+
import androidx.compose.ui.text.TextStyle
10+
import androidx.compose.ui.tooling.preview.Preview
11+
import me.nya_n.notificationnotifier.ui.R
12+
import me.nya_n.notificationnotifier.ui.theme.AppTheme
13+
14+
@Composable
15+
fun CommonDialog(
16+
message: String,
17+
positiveButtonText: String,
18+
negativeButtonText: String,
19+
onPositiveDismissRequest: () -> Unit,
20+
onNegativeDismissRequest: () -> Unit,
21+
) {
22+
AlertDialog(
23+
text = { Text(text = message) },
24+
onDismissRequest = { /* noop */ },
25+
confirmButton = {
26+
TextButton(
27+
onClick = onPositiveDismissRequest
28+
) {
29+
Text(
30+
text = positiveButtonText,
31+
style = TextStyle(
32+
color = Color.White
33+
)
34+
)
35+
}
36+
},
37+
dismissButton = {
38+
TextButton(
39+
onClick = onNegativeDismissRequest
40+
) {
41+
Text(
42+
text = negativeButtonText,
43+
style = TextStyle(
44+
color = Color.White
45+
)
46+
)
47+
}
48+
}
49+
)
50+
}
51+
52+
@Composable
53+
fun RequireNotificationPermissionDialog(
54+
onDismissRequest: (isGranted: Boolean) -> Unit
55+
) {
56+
CommonDialog(
57+
message = stringResource(id = R.string.require_permission),
58+
positiveButtonText = stringResource(id = R.string.next),
59+
negativeButtonText = stringResource(id = R.string.ng),
60+
onPositiveDismissRequest = { onDismissRequest(true) },
61+
onNegativeDismissRequest = { onDismissRequest(false) }
62+
)
63+
}
64+
65+
@Composable
66+
fun RequirePackageVisibilityDialog(
67+
onDismissRequest: (isGranted: Boolean) -> Unit
68+
) {
69+
CommonDialog(
70+
message = stringResource(id = R.string.require_package_visibility),
71+
positiveButtonText = stringResource(id = R.string.approval),
72+
negativeButtonText = stringResource(id = R.string.ng),
73+
onPositiveDismissRequest = { onDismissRequest(true) },
74+
onNegativeDismissRequest = { onDismissRequest(false) }
75+
)
76+
}
77+
78+
@Preview
79+
@Composable
80+
fun CommonDialogPreview() {
81+
AppTheme {
82+
CommonDialog(
83+
message = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.",
84+
positiveButtonText = "YES",
85+
negativeButtonText = "NO",
86+
onPositiveDismissRequest = { },
87+
onNegativeDismissRequest = { }
88+
)
89+
}
90+
}
91+
92+
@Preview
93+
@Composable
94+
fun RequireNotificationPermissionDialogPreview() {
95+
AppTheme {
96+
RequireNotificationPermissionDialog(
97+
onDismissRequest = { }
98+
)
99+
}
100+
}
101+
102+
@Preview
103+
@Composable
104+
fun RequirePackageVisibilityDialogPreview() {
105+
AppTheme {
106+
RequirePackageVisibilityDialog(
107+
onDismissRequest = { }
108+
)
109+
}
110+
}

AndroidApp/ui/src/main/kotlin/me/nya_n/notificationnotifier/ui/dialogs/NotificationAccessPermissionDialog.kt

Lines changed: 0 additions & 40 deletions
This file was deleted.

AndroidApp/ui/src/main/kotlin/me/nya_n/notificationnotifier/ui/dialogs/PackageVisibilityDialog.kt

Lines changed: 0 additions & 40 deletions
This file was deleted.

AndroidApp/ui/src/main/kotlin/me/nya_n/notificationnotifier/ui/screen/AppScreen.kt

Lines changed: 0 additions & 63 deletions
This file was deleted.

AndroidApp/ui/src/main/kotlin/me/nya_n/notificationnotifier/ui/screen/AppUiEvent.kt renamed to AndroidApp/ui/src/main/kotlin/me/nya_n/notificationnotifier/ui/screen/BaseUiEvent.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package me.nya_n.notificationnotifier.ui.screen
22

33
// UiEvent消化時にオブジェクトを比較したいのでdata classやobjectではなくclassを使う
44
// classじゃないと同じイベントを消してしまうことがある
5-
abstract class AppUiEvent {
5+
abstract class BaseUiEvent {
66
override fun equals(other: Any?): Boolean {
77
return this === other
88
}

AndroidApp/ui/src/main/kotlin/me/nya_n/notificationnotifier/ui/screen/AppViewModel.kt renamed to AndroidApp/ui/src/main/kotlin/me/nya_n/notificationnotifier/ui/screen/BaseViewModel.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import kotlinx.coroutines.flow.StateFlow
66
import kotlinx.coroutines.flow.asStateFlow
77
import kotlinx.coroutines.flow.update
88

9-
abstract class AppViewModel<UiEvent : AppUiEvent> : ViewModel() {
9+
abstract class BaseViewModel<UiEvent : BaseUiEvent> : ViewModel() {
1010
/** 単発のイベント
1111
* - イベント消化後はAppViewModel#consumeEventを呼ぶ
1212
*/

0 commit comments

Comments
 (0)