Skip to content

Commit a53cad3

Browse files
committed
Merge branch 'dev'
2 parents 1dec186 + 677d537 commit a53cad3

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

56 files changed

+1671
-524
lines changed

app/build.gradle.kts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ android {
1313
applicationId = "org.nsh07.wikireader"
1414
minSdk = 26
1515
targetSdk = 36
16-
versionCode = 38
17-
versionName = "2.2.0"
16+
versionCode = 39
17+
versionName = "2.2.1"
1818

1919
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
2020
vectorDrawables {

app/src/main/java/org/nsh07/wikireader/parser/cleanUpWikitext.kt

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,14 @@ package org.nsh07.wikireader.parser
66
* @param wikitext Source Wikitext to clean up
77
*/
88
fun cleanUpWikitext(wikitext: String): String {
9-
var bodyText = wikitext
9+
return wikitext
1010
.replace(
1111
"<ref[^/]*?>.+?</ref>|<ref.*?/>".toRegex(RegexOption.DOT_MATCHES_ALL),
1212
""
1313
)
14-
bodyText = bodyText.replace("<var>|</var>".toRegex(), "''")
15-
return bodyText
14+
.replace(
15+
"\\{\\{nobility table header.*?\\}\\}"
16+
.toRegex(setOf(RegexOption.IGNORE_CASE, RegexOption.DOT_MATCHES_ALL)),
17+
"{| class=\"wikitable\"\n"
18+
)
1619
}

app/src/main/java/org/nsh07/wikireader/parser/parseWikitable.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ fun parseWikitable(
1515
val rows = mutableListOf<MutableList<AnnotatedString>>()
1616
var caption = AnnotatedString("")
1717
val lines = table.lines().map { it.trim() }.filter { it.isNotEmpty() }
18-
val styling = "class=|align=|scope=|style=|rowspan=|colspan=|width=|nowrap|data-sort".toRegex()
18+
val styling =
19+
"class=|align=|scope=|style=|rowspan=|colspan=|width=|[^{]nowrap|data-sort".toRegex()
1920

2021
var currentRow = mutableListOf<AnnotatedString>()
2122
val rowSpan = mutableMapOf<Int, Int>()

app/src/main/java/org/nsh07/wikireader/parser/wikitextToAnnotatedString.kt

Lines changed: 489 additions & 311 deletions
Large diffs are not rendered by default.

app/src/main/java/org/nsh07/wikireader/ui/AppNavigationDrawer.kt

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,6 @@ import androidx.compose.ui.unit.dp
5151
import androidx.navigation.NavBackStackEntry
5252
import androidx.navigation.NavDestination.Companion.hasRoute
5353
import androidx.window.core.layout.WindowSizeClass
54-
import androidx.window.core.layout.WindowWidthSizeClass
5554
import kotlinx.coroutines.CoroutineScope
5655
import kotlinx.coroutines.launch
5756
import org.nsh07.wikireader.R.drawable
@@ -113,10 +112,9 @@ fun AppNavigationDrawer(
113112
)
114113

115114
val compactScreen =
116-
remember { windowSizeClass.windowWidthSizeClass == WindowWidthSizeClass.COMPACT }
115+
remember { !windowSizeClass.isWidthAtLeastBreakpoint(WindowSizeClass.WIDTH_DP_MEDIUM_LOWER_BOUND) }
117116
val expandedScreen =
118-
remember { windowSizeClass.windowWidthSizeClass == WindowWidthSizeClass.EXPANDED }
119-
117+
remember { windowSizeClass.isWidthAtLeastBreakpoint(WindowSizeClass.WIDTH_DP_EXPANDED_LOWER_BOUND) }
120118

121119
val boxWidth = remember { 360.dp }
122120

app/src/main/java/org/nsh07/wikireader/ui/AppScreen.kt

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -63,15 +63,15 @@ import androidx.compose.ui.platform.LocalDensity
6363
import androidx.compose.ui.res.stringResource
6464
import androidx.compose.ui.unit.dp
6565
import androidx.core.text.parseAsHtml
66+
import androidx.navigation.NavDestination.Companion.hasRoute
6667
import androidx.navigation.NavGraph.Companion.findStartDestination
6768
import androidx.navigation.compose.NavHost
6869
import androidx.navigation.compose.composable
6970
import androidx.navigation.compose.currentBackStackEntryAsState
7071
import androidx.navigation.compose.rememberNavController
7172
import androidx.navigation.navDeepLink
7273
import androidx.navigation.toRoute
73-
import androidx.window.core.layout.WindowHeightSizeClass
74-
import androidx.window.core.layout.WindowWidthSizeClass
74+
import androidx.window.core.layout.WindowSizeClass
7575
import coil3.ImageLoader
7676
import coil3.gif.AnimatedImageDecoder
7777
import coil3.gif.GifDecoder
@@ -160,7 +160,7 @@ fun AppScreen(
160160

161161
val searchBarScrollBehavior =
162162
if (
163-
windowSizeClass.windowHeightSizeClass == WindowHeightSizeClass.COMPACT ||
163+
!windowSizeClass.isHeightAtLeastBreakpoint(WindowSizeClass.HEIGHT_DP_MEDIUM_LOWER_BOUND) ||
164164
preferencesState.immersiveMode
165165
) TopAppBarDefaults.enterAlwaysScrollBehavior()
166166
else TopAppBarDefaults.pinnedScrollBehavior()
@@ -208,12 +208,16 @@ fun AppScreen(
208208
}
209209
},
210210
onHomeClick = {
211-
navController.navigate(Home()) {
212-
popUpTo(navController.graph.findStartDestination().id) {
213-
saveState = true
211+
if (navBackStackEntry?.destination?.hasRoute(Home::class) == true) {
212+
viewModel.loadFeed(true)
213+
} else {
214+
navController.navigate(Home()) {
215+
popUpTo(navController.graph.findStartDestination().id) {
216+
saveState = true
217+
}
218+
launchSingleTop = true
219+
restoreState = true
214220
}
215-
launchSingleTop = true
216-
restoreState = true
217221
}
218222
},
219223
onSavedArticlesClick = {
@@ -236,11 +240,13 @@ fun AppScreen(
236240
},
237241
modifier = modifier.background(MaterialTheme.colorScheme.surface)
238242
) {
243+
val compactWindow =
244+
!windowSizeClass.isWidthAtLeastBreakpoint(WindowSizeClass.WIDTH_DP_MEDIUM_LOWER_BOUND)
239245
NavHost(
240246
navController = navController,
241247
startDestination = Home(),
242248
enterTransition = {
243-
if (windowSizeClass.windowWidthSizeClass == WindowWidthSizeClass.COMPACT)
249+
if (compactWindow)
244250
slideInHorizontally(
245251
initialOffsetX = { it / 4 },
246252
animationSpec = motionScheme.defaultSpatialSpec()
@@ -253,7 +259,7 @@ fun AppScreen(
253259
)
254260
},
255261
exitTransition = {
256-
if (windowSizeClass.windowWidthSizeClass == WindowWidthSizeClass.COMPACT)
262+
if (compactWindow)
257263
slideOutHorizontally(
258264
targetOffsetX = { -it / 4 },
259265
animationSpec = motionScheme.fastSpatialSpec()
@@ -262,7 +268,7 @@ fun AppScreen(
262268
fadeOut(animationSpec = tween(90))
263269
},
264270
popEnterTransition = {
265-
if (windowSizeClass.windowWidthSizeClass == WindowWidthSizeClass.COMPACT)
271+
if (compactWindow)
266272
slideInHorizontally(
267273
initialOffsetX = { -it / 4 },
268274
animationSpec = motionScheme.defaultSpatialSpec()
@@ -275,7 +281,7 @@ fun AppScreen(
275281
)
276282
},
277283
popExitTransition = {
278-
if (windowSizeClass.windowWidthSizeClass == WindowWidthSizeClass.COMPACT)
284+
if (compactWindow)
279285
slideOutHorizontally(
280286
targetOffsetX = { it / 4 },
281287
animationSpec = motionScheme.fastSpatialSpec()
@@ -408,7 +414,7 @@ fun AppScreen(
408414
},
409415
snackbarHost = { SnackbarHost(snackBarHostState) },
410416
contentWindowInsets =
411-
if (windowSizeClass.windowWidthSizeClass != WindowWidthSizeClass.COMPACT)
417+
if (!compactWindow)
412418
ScaffoldDefaults.contentWindowInsets
413419
.only(WindowInsetsSides.Top + WindowInsetsSides.Bottom + WindowInsetsSides.End)
414420
else ScaffoldDefaults.contentWindowInsets,

app/src/main/java/org/nsh07/wikireader/ui/aboutScreen/AboutScreen.kt

Lines changed: 41 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,7 @@ import androidx.compose.material3.ExperimentalMaterial3Api
1717
import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi
1818
import androidx.compose.material3.Icon
1919
import androidx.compose.material3.ListItem
20-
import androidx.compose.material3.ListItemDefaults
2120
import androidx.compose.material3.MaterialTheme.colorScheme
22-
import androidx.compose.material3.MaterialTheme.shapes
2321
import androidx.compose.material3.MaterialTheme.typography
2422
import androidx.compose.material3.Scaffold
2523
import androidx.compose.material3.Text
@@ -44,6 +42,7 @@ import androidx.compose.ui.tooling.preview.Preview
4442
import androidx.compose.ui.unit.dp
4543
import org.nsh07.wikireader.BuildConfig
4644
import org.nsh07.wikireader.R
45+
import org.nsh07.wikireader.ui.theme.CustomTopBarColors.topBarColors
4746
import org.nsh07.wikireader.ui.theme.ExpressiveListItemShapes.bottomListItemShape
4847
import org.nsh07.wikireader.ui.theme.ExpressiveListItemShapes.middleListItemShape
4948
import org.nsh07.wikireader.ui.theme.ExpressiveListItemShapes.topListItemShape
@@ -59,27 +58,28 @@ fun AboutScreen(
5958
val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior()
6059
val isAlpha = remember { BuildConfig.VERSION_NAME.contains('a') }
6160

62-
val listColors = ListItemDefaults.colors(containerColor = colorScheme.surfaceContainer)
63-
6461
Scaffold(
65-
topBar = { AboutTopAppBar(scrollBehavior = scrollBehavior, onBack = onBack) },
62+
topBar = {
63+
AboutTopAppBar(scrollBehavior = scrollBehavior, onBack = onBack)
64+
},
6665
modifier = modifier
6766
.fillMaxSize()
6867
.nestedScroll(scrollBehavior.nestedScrollConnection)
6968
) { insets ->
7069
LazyColumn(
7170
verticalArrangement = Arrangement.spacedBy(2.dp),
72-
contentPadding = insets
71+
contentPadding = insets,
72+
modifier = Modifier.background(topBarColors.containerColor)
7373
) {
74-
item { Spacer(Modifier.height(24.dp)) }
74+
item { Spacer(Modifier.height(8.dp)) }
7575
item {
7676
Column(
7777
horizontalAlignment = Alignment.CenterHorizontally,
7878
modifier = Modifier
7979
.padding(horizontal = 16.dp)
8080
.clip(topListItemShape)
8181
.fillMaxWidth()
82-
.background(colorScheme.surfaceContainer)
82+
.background(colorScheme.surface)
8383
) {
8484
Row(verticalAlignment = Alignment.CenterVertically) {
8585
Icon(painterResource(R.drawable.ic_launcher_foreground), null)
@@ -110,7 +110,6 @@ fun AboutScreen(
110110
item {
111111
Column(verticalArrangement = Arrangement.spacedBy(2.dp)) {
112112
ListItem(
113-
colors = listColors,
114113
leadingContent = {
115114
Icon(Icons.Outlined.Info, null)
116115
},
@@ -121,7 +120,6 @@ fun AboutScreen(
121120
.clip(middleListItemShape)
122121
)
123122
ListItem(
124-
colors = listColors,
125123
leadingContent = {
126124
Icon(painterResource(R.drawable.code), null)
127125
},
@@ -137,7 +135,6 @@ fun AboutScreen(
137135
)
138136
)
139137
ListItem(
140-
colors = listColors,
141138
leadingContent = {
142139
Icon(painterResource(R.drawable.gavel), null)
143140
},
@@ -153,7 +150,6 @@ fun AboutScreen(
153150
)
154151
)
155152
ListItem(
156-
colors = listColors,
157153
leadingContent = {
158154
Icon(painterResource(R.drawable.update), null)
159155
},
@@ -169,7 +165,6 @@ fun AboutScreen(
169165
)
170166
)
171167
ListItem(
172-
colors = listColors,
173168
leadingContent = {
174169
Icon(painterResource(R.drawable.translate), null)
175170
},
@@ -189,44 +184,40 @@ fun AboutScreen(
189184
item {
190185
Column(verticalArrangement = Arrangement.spacedBy(2.dp)) {
191186
Text(
192-
stringResource(R.string.wikipedia),
187+
stringResource(R.string.author),
193188
style = typography.labelLarge,
194189
color = colorScheme.primary,
195190
modifier = Modifier.padding(horizontal = 24.dp, vertical = 16.dp)
196191
)
197192
ListItem(
198-
colors = listColors,
199193
leadingContent = {
200194
Icon(
201-
painterResource(R.drawable.wikipedia_s_w), null
195+
painterResource(R.drawable.github), null
202196
)
203197
},
204-
headlineContent = { Text(stringResource(R.string.wikipedia)) },
205-
supportingContent = { Text(stringResource(R.string.wikipediaWebsiteDesc)) },
198+
headlineContent = { Text("Nishant Mishra") },
199+
supportingContent = { Text(stringResource(R.string.otherProjectsDesc)) },
206200
modifier = Modifier
207201
.padding(horizontal = 16.dp)
208202
.clip(topListItemShape)
209203
.clickable(
210204
onClick = {
211-
uriHandler.openUri("https://wikipedia.org")
205+
uriHandler.openUri("https://github.com/nsh07")
212206
}
213207
)
214208
)
215209
ListItem(
216-
colors = listColors,
217210
leadingContent = {
218-
Icon(
219-
painterResource(R.drawable.wikimedia_logo_black), null
220-
)
211+
Icon(painterResource(R.drawable.heart), null)
221212
},
222-
headlineContent = { Text(stringResource(R.string.supportWikipedia)) },
223-
supportingContent = { Text(stringResource(R.string.donateToWikipedia)) },
213+
headlineContent = { Text(stringResource(R.string.donate)) },
214+
supportingContent = { Text(stringResource(R.string.supportMyWork)) },
224215
modifier = Modifier
225216
.padding(horizontal = 16.dp)
226217
.clip(bottomListItemShape)
227218
.clickable(
228219
onClick = {
229-
uriHandler.openUri("https://wikimediafoundation.org/support/")
220+
uriHandler.openUri("https://github.com/sponsors/nsh07")
230221
}
231222
)
232223
)
@@ -235,31 +226,48 @@ fun AboutScreen(
235226
item {
236227
Column(verticalArrangement = Arrangement.spacedBy(2.dp)) {
237228
Text(
238-
stringResource(R.string.author),
229+
stringResource(R.string.wikipedia),
239230
style = typography.labelLarge,
240231
color = colorScheme.primary,
241232
modifier = Modifier.padding(horizontal = 24.dp, vertical = 16.dp)
242233
)
243234
ListItem(
244-
colors = listColors,
245235
leadingContent = {
246236
Icon(
247-
painterResource(R.drawable.github), null
237+
painterResource(R.drawable.wikipedia_s_w), null
248238
)
249239
},
250-
headlineContent = { Text("Nishant Mishra") },
251-
supportingContent = { Text(stringResource(R.string.otherProjectsDesc)) },
240+
headlineContent = { Text(stringResource(R.string.wikipedia)) },
241+
supportingContent = { Text(stringResource(R.string.wikipediaWebsiteDesc)) },
252242
modifier = Modifier
253243
.padding(horizontal = 16.dp)
254-
.clip(shapes.large)
244+
.clip(topListItemShape)
255245
.clickable(
256246
onClick = {
257-
uriHandler.openUri("https://github.com/nsh07")
247+
uriHandler.openUri("https://wikipedia.org")
248+
}
249+
)
250+
)
251+
ListItem(
252+
leadingContent = {
253+
Icon(
254+
painterResource(R.drawable.wikimedia_logo_black), null
255+
)
256+
},
257+
headlineContent = { Text(stringResource(R.string.supportWikipedia)) },
258+
supportingContent = { Text(stringResource(R.string.donateToWikipedia)) },
259+
modifier = Modifier
260+
.padding(horizontal = 16.dp)
261+
.clip(bottomListItemShape)
262+
.clickable(
263+
onClick = {
264+
uriHandler.openUri("https://wikimediafoundation.org/support/")
258265
}
259266
)
260267
)
261268
}
262269
}
270+
item { Spacer(Modifier.height(16.dp)) }
263271
}
264272
}
265273
}

app/src/main/java/org/nsh07/wikireader/ui/aboutScreen/AboutTopAppBar.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import androidx.compose.material3.TopAppBarScrollBehavior
1313
import androidx.compose.runtime.Composable
1414
import androidx.compose.ui.res.stringResource
1515
import org.nsh07.wikireader.R
16+
import org.nsh07.wikireader.ui.theme.CustomTopBarColors.topBarColors
1617

1718
@Composable
1819
@OptIn(ExperimentalMaterial3Api::class, ExperimentalMaterial3ExpressiveApi::class)
@@ -31,6 +32,7 @@ fun AboutTopAppBar(scrollBehavior: TopAppBarScrollBehavior, onBack: () -> Unit)
3132
)
3233
}
3334
},
35+
colors = topBarColors,
3436
scrollBehavior = scrollBehavior
3537
)
3638
}

0 commit comments

Comments
 (0)