-
Notifications
You must be signed in to change notification settings - Fork 181
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
Add dark theme setting for settings screen #339
Merged
takahirom
merged 11 commits into
DroidKaigi:main
from
yagipy:add-dark-theme-setting-for-settings-screen
Mar 11, 2021
Merged
Changes from all commits
Commits
Show all changes
11 commits
Select commit
Hold shift + click to select a range
d456b6c
Add dark theme setting for settings screen
771e2c9
Merge branch 'main' into add-dark-theme-setting-for-settings-screen
2e423fe
Modify setting screen design
daa335a
Set default theme
140ac95
Delete unnecessary code
96fb03a
Merge branch 'main' into add-dark-theme-setting-for-settings-screen
e54d515
pass CI
d3fe655
Change DroidKaigAppViewModel to AppViewModel
3a660a0
Change Theme Component to ThemeSetting Component
9c51287
Merge branch 'main' into add-dark-theme-setting-for-settings-screen
df0cf66
Pass CI
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
17 changes: 17 additions & 0 deletions
17
.../repository/src/commonMain/kotlin/io/github/droidkaigi/feeder/data/ThemeRepositoryImpl.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
package io.github.droidkaigi.feeder.data | ||
|
||
import io.github.droidkaigi.feeder.Theme | ||
import io.github.droidkaigi.feeder.repository.ThemeRepository | ||
import kotlinx.coroutines.flow.Flow | ||
|
||
open class ThemeRepositoryImpl( | ||
private val dataStore: UserDataStore, | ||
) : ThemeRepository { | ||
override suspend fun changeTheme(theme: Theme) { | ||
dataStore.changeTheme(theme) | ||
} | ||
|
||
override fun theme(): Flow<Theme?> { | ||
return dataStore.theme() | ||
} | ||
} |
11 changes: 11 additions & 0 deletions
11
data/repository/src/main/java/io/github/droidkaigi/feeder/data/DaggerThemeRepositoryImpl.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
package io.github.droidkaigi.feeder.data | ||
|
||
import javax.inject.Inject | ||
import javax.inject.Singleton | ||
|
||
@Singleton | ||
internal class DaggerThemeRepositoryImpl @Inject constructor( | ||
dataDataStore: UserDataStore, | ||
) : ThemeRepositoryImpl( | ||
dataDataStore, | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
7 changes: 7 additions & 0 deletions
7
model/src/commonMain/kotlin/io/github/droidkaigi/feeder/Theme.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
package io.github.droidkaigi.feeder | ||
|
||
enum class Theme { | ||
SYSTEM, | ||
DARK, | ||
LIGHT | ||
} |
10 changes: 10 additions & 0 deletions
10
model/src/commonMain/kotlin/io/github/droidkaigi/feeder/repository/ThemeRepository.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
package io.github.droidkaigi.feeder.repository | ||
|
||
import io.github.droidkaigi.feeder.Theme | ||
import kotlinx.coroutines.flow.Flow | ||
|
||
interface ThemeRepository { | ||
suspend fun changeTheme(theme: Theme) | ||
|
||
fun theme(): Flow<Theme?> | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
12 changes: 12 additions & 0 deletions
12
uicomponent-compose/core/src/main/java/io/github/droidkaigi/feeder/core/theme/ThemeTitle.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
package io.github.droidkaigi.feeder.core.theme | ||
|
||
import android.content.Context | ||
import io.github.droidkaigi.feeder.Theme | ||
import io.github.droidkaigi.feeder.core.R | ||
|
||
fun Theme?.getTitle(context: Context): String = when (this) { | ||
Theme.SYSTEM -> context.getString(R.string.system) | ||
Theme.DARK -> context.getString(R.string.dark) | ||
Theme.LIGHT -> context.getString(R.string.light) | ||
else -> context.getString(R.string.system) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -3,4 +3,7 @@ | |
<string name="error_network">ネットワークエラーが発生しました。もう一度お試しください。</string> | ||
<string name="error_server">サーバーエラーが発生しました。もう一度お試しください。</string> | ||
<string name="error_unknown">予期しないエラーが発生しました。もう一度お試しください。</string> | ||
<string name="system">端末設定に従う</string> | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🇯🇵 |
||
<string name="dark">ダーク</string> | ||
<string name="light">ライト</string> | ||
</resources> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
43 changes: 43 additions & 0 deletions
43
uicomponent-compose/main/src/main/java/io/github/droidkaigi/feeder/AppViewModel.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
package io.github.droidkaigi.feeder | ||
|
||
import androidx.compose.runtime.Composable | ||
import androidx.compose.runtime.CompositionLocalProvider | ||
import androidx.compose.runtime.compositionLocalOf | ||
import io.github.droidkaigi.feeder.core.UnidirectionalViewModel | ||
import kotlinx.coroutines.flow.Flow | ||
import kotlinx.coroutines.flow.StateFlow | ||
|
||
interface AppViewModel : | ||
UnidirectionalViewModel< | ||
AppViewModel.Event, | ||
AppViewModel.Effect, | ||
AppViewModel.State> { | ||
data class State( | ||
val theme: Theme? = Theme.SYSTEM, | ||
) | ||
|
||
sealed class Effect { | ||
data class ErrorMessage(val appError: AppError) : Effect() | ||
} | ||
|
||
sealed class Event | ||
|
||
override val state: StateFlow<State> | ||
override val effect: Flow<Effect> | ||
override fun event(event: Event) | ||
} | ||
|
||
private val LocalAppViewModel = compositionLocalOf<AppViewModel> { | ||
error("not LocalDroidKaigiAppViewModel provided") | ||
} | ||
|
||
@Composable | ||
fun ProvideAppViewModel( | ||
viewModel: AppViewModel, | ||
block: @Composable () -> Unit | ||
) { | ||
CompositionLocalProvider(LocalAppViewModel provides viewModel, content = block) | ||
} | ||
|
||
@Composable | ||
fun appViewModel() = LocalAppViewModel.current |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
33 changes: 33 additions & 0 deletions
33
...nent-compose/main/src/main/java/io/github/droidkaigi/feeder/viewmodel/RealAppViewModel.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
package io.github.droidkaigi.feeder.viewmodel | ||
|
||
import androidx.lifecycle.ViewModel | ||
import androidx.lifecycle.viewModelScope | ||
import dagger.hilt.android.lifecycle.HiltViewModel | ||
import io.github.droidkaigi.feeder.AppViewModel | ||
import io.github.droidkaigi.feeder.repository.ThemeRepository | ||
import javax.inject.Inject | ||
import kotlinx.coroutines.channels.Channel | ||
import kotlinx.coroutines.flow.Flow | ||
import kotlinx.coroutines.flow.SharingStarted | ||
import kotlinx.coroutines.flow.StateFlow | ||
import kotlinx.coroutines.flow.map | ||
import kotlinx.coroutines.flow.receiveAsFlow | ||
import kotlinx.coroutines.flow.stateIn | ||
|
||
@HiltViewModel | ||
class RealAppViewModel @Inject constructor( | ||
private val repository: ThemeRepository, | ||
) : ViewModel(), AppViewModel { | ||
private val effectChannel = Channel<AppViewModel.Effect>(Channel.UNLIMITED) | ||
override val effect: Flow<AppViewModel.Effect> = effectChannel.receiveAsFlow() | ||
|
||
override val state: StateFlow<AppViewModel.State> = | ||
repository.theme().map { AppViewModel.State(theme = it) } | ||
.stateIn( | ||
scope = viewModelScope, | ||
started = SharingStarted.Eagerly, | ||
initialValue = AppViewModel.State() | ||
) | ||
|
||
override fun event(event: AppViewModel.Event) {} | ||
} |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🆒