Skip to content

Commit e9c175e

Browse files
committed
Refactored avatar management
1 parent 6d8c5dc commit e9c175e

File tree

20 files changed

+121
-84
lines changed

20 files changed

+121
-84
lines changed

src/main/kotlin/com/jetpackduba/gitnuro/App.kt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ import androidx.compose.ui.unit.sp
2121
import androidx.compose.ui.window.Window
2222
import androidx.compose.ui.window.application
2323
import androidx.compose.ui.window.rememberWindowState
24+
import com.jetpackduba.gitnuro.avatarproviders.GravatarAvatarProvider
25+
import com.jetpackduba.gitnuro.avatarproviders.NoneAvatarProvider
2426
import com.jetpackduba.gitnuro.di.DaggerAppComponent
2527
import com.jetpackduba.gitnuro.extensions.preferenceValue
2628
import com.jetpackduba.gitnuro.extensions.toWindowPlacement
@@ -33,6 +35,7 @@ import com.jetpackduba.gitnuro.lfs.AppLfsFactory
3335
import com.jetpackduba.gitnuro.logging.printError
3436
import com.jetpackduba.gitnuro.managers.AppStateManager
3537
import com.jetpackduba.gitnuro.managers.TempFilesManager
38+
import com.jetpackduba.gitnuro.preferences.AvatarProviderType
3639
import com.jetpackduba.gitnuro.repositories.AppSettingsRepository
3740
import com.jetpackduba.gitnuro.repositories.ProxySettings
3841
import com.jetpackduba.gitnuro.system.OS
@@ -131,6 +134,7 @@ class App {
131134
val customTheme by appSettingsRepository.customThemeFlow.collectAsState()
132135
val scale by appSettingsRepository.scaleUiFlow.collectAsState()
133136
val linesHeightType by appSettingsRepository.linesHeightTypeState.collectAsState()
137+
val avatarProviderType by appSettingsRepository.avatarProviderTypeFlow.collectAsState()
134138

135139
val windowState = rememberWindowState(
136140
placement = windowPlacement,
@@ -156,6 +160,13 @@ class App {
156160
compositionValues.add(LocalDensity provides Density(scale, 1f))
157161
}
158162

163+
val avatarProvider = when (avatarProviderType) {
164+
AvatarProviderType.NONE -> NoneAvatarProvider()
165+
AvatarProviderType.GRAVATAR -> GravatarAvatarProvider()
166+
}
167+
168+
compositionValues.add(LocalAvatarProvider provides avatarProvider)
169+
159170
CompositionLocalProvider(
160171
values = compositionValues.toTypedArray()
161172
) {

src/main/kotlin/com/jetpackduba/gitnuro/AppConstants.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.jetpackduba.gitnuro
22

3+
import com.jetpackduba.gitnuro.preferences.AvatarProviderType
4+
35
object AppConstants {
46
val openSourceProjects = listOf(
57
Project("Google Dagger", "https://dagger.dev/", apache__2_0),
@@ -44,4 +46,8 @@ object NetworkConstants {
4446
const val ACCEPT_HEADER = "Accept"
4547
const val AUTH_HEADER = "Authorization"
4648
const val CONTENT_LENGTH_HEADER = "Content-Length"
49+
}
50+
51+
object SettingsDefaults {
52+
val defaultAvatarProviderType = AvatarProviderType.GRAVATAR
4753
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.jetpackduba.gitnuro
2+
3+
import androidx.compose.runtime.compositionLocalOf
4+
import androidx.compose.ui.focus.FocusRequester
5+
import com.jetpackduba.gitnuro.avatarproviders.AvatarProvider
6+
import com.jetpackduba.gitnuro.avatarproviders.NoneAvatarProvider
7+
8+
val LocalTabFocusRequester = compositionLocalOf { FocusRequester() }
9+
val LocalAvatarProvider = compositionLocalOf<AvatarProvider> { NoneAvatarProvider() }
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package com.jetpackduba.gitnuro.avatarproviders
2+
3+
interface AvatarProvider {
4+
fun getAvatarUrl(hashedEmail: String): String?
5+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.jetpackduba.gitnuro.avatarproviders
2+
3+
class GravatarAvatarProvider : AvatarProvider {
4+
override fun getAvatarUrl(hashedEmail: String): String {
5+
return "https://www.gravatar.com/avatar/${hashedEmail}?s=60&d=404"
6+
}
7+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package com.jetpackduba.gitnuro.avatarproviders
2+
3+
4+
class NoneAvatarProvider : AvatarProvider {
5+
override fun getAvatarUrl(hashedEmail: String): String? {
6+
return null
7+
}
8+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.jetpackduba.gitnuro.preferences
2+
3+
import com.jetpackduba.gitnuro.SettingsDefaults
4+
5+
enum class AvatarProviderType(val value: Int) {
6+
NONE(0),
7+
GRAVATAR(1);
8+
9+
companion object {
10+
fun getFromValue(value: Int): AvatarProviderType {
11+
return when (value) {
12+
NONE.value -> NONE
13+
GRAVATAR.value -> GRAVATAR
14+
else -> SettingsDefaults.defaultAvatarProviderType
15+
}
16+
}
17+
}
18+
}

src/main/kotlin/com/jetpackduba/gitnuro/repositories/AppSettingsRepository.kt

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package com.jetpackduba.gitnuro.repositories
22

3+
import com.jetpackduba.gitnuro.SettingsDefaults
34
import com.jetpackduba.gitnuro.extensions.defaultWindowPlacement
5+
import com.jetpackduba.gitnuro.preferences.AvatarProviderType
46
import com.jetpackduba.gitnuro.preferences.WindowsPlacementPreference
57
import com.jetpackduba.gitnuro.system.OS
68
import com.jetpackduba.gitnuro.system.currentOs
@@ -10,8 +12,9 @@ import com.jetpackduba.gitnuro.theme.Theme
1012
import com.jetpackduba.gitnuro.ui.dialogs.settings.ProxyType
1113
import com.jetpackduba.gitnuro.viewmodels.TextDiffType
1214
import com.jetpackduba.gitnuro.viewmodels.textDiffTypeFromValue
13-
import kotlinx.coroutines.flow.*
14-
import kotlinx.serialization.decodeFromString
15+
import kotlinx.coroutines.flow.MutableStateFlow
16+
import kotlinx.coroutines.flow.StateFlow
17+
import kotlinx.coroutines.flow.asStateFlow
1518
import kotlinx.serialization.json.Json
1619
import java.io.File
1720
import java.util.prefs.Preferences
@@ -34,7 +37,7 @@ private const val PREF_SWAP_UNCOMMITTED_CHANGES = "inverseUncommittedChanges"
3437
private const val PREF_TERMINAL_PATH = "terminalPath"
3538
private const val PREF_SHOW_CHANGES_AS_TREE = "showChangesAsTree"
3639
private const val PREF_USE_PROXY = "useProxy"
37-
private const val PREF_USE_GRAVATAR = "useGravatar"
40+
private const val PREF_AVATAR_PROVIDER = "avatarProvider"
3841
private const val PREF_PROXY_TYPE = "proxyType"
3942
private const val PREF_PROXY_HOST_NAME = "proxyHostName"
4043
private const val PREF_PROXY_PORT = "proxyPort"
@@ -105,8 +108,8 @@ class AppSettingsRepository @Inject constructor() {
105108
private val _terminalPathFlow = MutableStateFlow(terminalPath)
106109
val terminalPathFlow = _terminalPathFlow.asStateFlow()
107110

108-
private val _useGravatarFlow = MutableStateFlow(useGravatar)
109-
val useGravatarFlow = _useGravatarFlow.asStateFlow()
111+
private val _avatarProviderFlow = MutableStateFlow(avatarProviderType)
112+
val avatarProviderTypeFlow = _avatarProviderFlow.asStateFlow()
110113

111114
private val _proxyFlow = MutableStateFlow(
112115
ProxySettings(
@@ -304,13 +307,16 @@ class AppSettingsRepository @Inject constructor() {
304307
_terminalPathFlow.value = value
305308
}
306309

307-
var useGravatar: Boolean
308-
get() {
309-
return preferences.getBoolean(PREF_USE_GRAVATAR, false)
310-
}
311-
set(value) {
312-
preferences.putBoolean(PREF_USE_GRAVATAR, value)
313-
_useGravatarFlow.value = value
310+
var avatarProviderType: AvatarProviderType
311+
get() = AvatarProviderType.getFromValue(
312+
preferences.getInt(
313+
PREF_AVATAR_PROVIDER,
314+
SettingsDefaults.defaultAvatarProviderType.value,
315+
)
316+
)
317+
set(newValue) {
318+
preferences.putInt(PREF_AVATAR_PROVIDER, newValue.value)
319+
_avatarProviderFlow.value = newValue
314320
}
315321

316322
var useProxy: Boolean

src/main/kotlin/com/jetpackduba/gitnuro/ui/CommitChanges.kt

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import androidx.compose.ui.text.font.FontWeight
2020
import androidx.compose.ui.text.input.TextFieldValue
2121
import androidx.compose.ui.text.style.TextAlign
2222
import androidx.compose.ui.unit.dp
23+
import com.jetpackduba.gitnuro.LocalTabFocusRequester
2324
import com.jetpackduba.gitnuro.extensions.*
2425
import com.jetpackduba.gitnuro.generated.resources.Res
2526
import com.jetpackduba.gitnuro.generated.resources.list
@@ -70,7 +71,6 @@ fun CommitChanges(
7071
val changesListScroll by commitChangesViewModel.changesLazyListState.collectAsState()
7172
val textScroll by commitChangesViewModel.textScroll.collectAsState()
7273
val showAsTree by commitChangesViewModel.showAsTree.collectAsState()
73-
val useGravatar by commitChangesViewModel.useGravatar.collectAsState()
7474

7575
var searchFilter by remember(commitChangesViewModel, showSearch, commitChangesStatus) {
7676
mutableStateOf(commitChangesViewModel.searchFilter.value)
@@ -93,7 +93,6 @@ fun CommitChanges(
9393
textScroll = textScroll,
9494
searchFilter = searchFilter,
9595
onDiffSelected = onDiffSelected,
96-
useGravatar = useGravatar,
9796
onSearchFilterToggled = { visible ->
9897
commitChangesViewModel.onSearchFilterToggled(visible)
9998
},
@@ -120,7 +119,6 @@ private fun CommitChangesView(
120119
showSearch: Boolean,
121120
showAsTree: Boolean,
122121
searchFilter: TextFieldValue,
123-
useGravatar: Boolean,
124122
onBlame: (String) -> Unit,
125123
onHistory: (String) -> Unit,
126124
onDiffSelected: (DiffEntry) -> Unit,
@@ -197,7 +195,6 @@ private fun CommitChangesView(
197195
MessageAuthorFooter(
198196
commit,
199197
textScroll,
200-
useGravatar,
201198
)
202199
}
203200
}
@@ -293,7 +290,6 @@ private fun Header(
293290
private fun MessageAuthorFooter(
294291
commit: RevCommit,
295292
textScroll: ScrollState,
296-
useGravatar: Boolean,
297293
) {
298294
Column(
299295
modifier = Modifier
@@ -318,7 +314,6 @@ private fun MessageAuthorFooter(
318314
shortName = commit.shortName,
319315
name = commit.name,
320316
author = commit.authorIdent,
321-
useGravatar = useGravatar,
322317
)
323318
}
324319
}
@@ -328,7 +323,6 @@ fun Author(
328323
shortName: String,
329324
name: String,
330325
author: PersonIdent,
331-
useGravatar: Boolean,
332326
) {
333327
var copied by remember(name) { mutableStateOf(false) }
334328
val scope = rememberCoroutineScope()
@@ -346,7 +340,6 @@ fun Author(
346340
.padding(horizontal = 16.dp)
347341
.size(40.dp),
348342
personIdent = author,
349-
useGravatar = useGravatar,
350343
)
351344

352345
Column(

src/main/kotlin/com/jetpackduba/gitnuro/ui/FileHistory.kt

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -122,14 +122,12 @@ private fun HistoryContent(
122122
historyState: HistoryState,
123123
onCommitSelected: (RevCommit) -> Unit,
124124
) {
125-
val useGravatar by historyViewModel.useGravatar.collectAsState()
126125
val textScrollState by historyViewModel.lazyListState.collectAsState()
127126
val viewDiffResult by historyViewModel.viewDiffResult.collectAsState()
128127

129128
when (historyState) {
130129
is HistoryState.Loaded -> HistoryContentLoaded(
131130
historyState = historyState,
132-
useGravatar = useGravatar,
133131
viewDiffResult = viewDiffResult,
134132
scrollState = textScrollState,
135133
onCommitSelected = onCommitSelected,
@@ -142,7 +140,6 @@ private fun HistoryContent(
142140
@Composable
143141
fun HistoryContentLoaded(
144142
historyState: HistoryState.Loaded,
145-
useGravatar: Boolean,
146143
viewDiffResult: ViewDiffResult?,
147144
scrollState: LazyListState,
148145
onCommitSelected: (RevCommit) -> Unit,
@@ -159,7 +156,6 @@ fun HistoryContentLoaded(
159156
) {
160157
items(historyState.commits) { commit ->
161158
HistoryCommit(
162-
useGravatar = useGravatar,
163159
commit = commit,
164160
onCommitSelected = { onCommitSelected(commit) }
165161
)
@@ -222,7 +218,6 @@ fun HistoryContentLoaded(
222218

223219
@Composable
224220
fun HistoryCommit(
225-
useGravatar: Boolean,
226221
commit: RevCommit,
227222
onCommitSelected: () -> Unit,
228223
) {
@@ -234,7 +229,6 @@ fun HistoryCommit(
234229
verticalAlignment = Alignment.CenterVertically
235230
) {
236231
AvatarImage(
237-
useGravatar = useGravatar,
238232
modifier = Modifier
239233
.padding(horizontal = 16.dp)
240234
.size(40.dp),

0 commit comments

Comments
 (0)