Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
90 commits
Select commit Hold shift + click to select a range
4569485
Add preferences.
dbrant Jul 23, 2025
e14c60c
Basic scaffolding for activity fragment.
dbrant Jul 25, 2025
9c9720e
Feature-flag for pre-beta only.
dbrant Jul 25, 2025
19ca00a
Merge branch 'main' into activityTab_design
dbrant Jul 25, 2025
69330fc
Lint.
dbrant Jul 25, 2025
0018b81
Merge branch 'main' into activityTab_design
dbrant Aug 1, 2025
b63b7e6
Make it ready for building.
dbrant Aug 1, 2025
88bd8bc
Merge branch 'main' into activityTab_design
Williamrai Aug 6, 2025
0b26355
Merge branch 'main' into activityTab_design
Williamrai Aug 7, 2025
a74a908
Merge branch 'main' into activityTab_design
Williamrai Aug 11, 2025
d1477bd
Merge branch 'main' into activityTab_design
Williamrai Aug 11, 2025
85b094b
Merge branch 'main' into activityTab_design
cooltey Aug 12, 2025
f3f8cf7
Merge branch 'main' into activityTab_design
Williamrai Aug 12, 2025
e29acea
Merge branch 'main' into activityTab_design
dbrant Aug 13, 2025
156d1e1
Knock out time spent reading.
dbrant Aug 13, 2025
344db85
Correct username.
dbrant Aug 13, 2025
847810f
Add preview.
dbrant Aug 14, 2025
bb6d797
- code changes (#5838)
Williamrai Aug 14, 2025
3e7f15a
Merge branch 'activityTab_design' of github.com:wikimedia/apps-androi…
dbrant Aug 14, 2025
0e58868
Clean up a bit.
dbrant Aug 14, 2025
1f4917f
Fill things out a bit...
dbrant Aug 14, 2025
c0d4924
Stay on target...
dbrant Aug 14, 2025
075a5ea
Tiny bar chart.
dbrant Aug 14, 2025
ad268a6
Activity tab categories module design (#5833)
Williamrai Aug 14, 2025
7047550
Merge branch 'activityTab_design' of github.com:wikimedia/apps-androi…
dbrant Aug 14, 2025
036a106
Wire it up.
dbrant Aug 14, 2025
1da2676
Merge branch 'main' into activityTab_design
cooltey Aug 15, 2025
b89e7c4
Activity Tab: Donation Module (#5834)
cooltey Aug 15, 2025
96d53fb
Keep tightening.
dbrant Aug 15, 2025
d49edcc
Refactor a bit, and add swipe-to-refresh.
dbrant Aug 15, 2025
026db9c
Merge branch 'main' into activityTab_design
dbrant Aug 15, 2025
cceb390
Make queries distinct.
dbrant Aug 15, 2025
af3cf95
Add loadDonationResults() back.
cooltey Aug 15, 2025
d6521a2
Create logged-out screen.
dbrant Aug 18, 2025
5d1df9e
Hook into event bus for detecting login/logout.
dbrant Aug 18, 2025
a886d50
Merge branch 'main' into activityTab_design
cooltey Aug 18, 2025
19d512d
Merge branch 'main' into activityTab_design
dbrant Aug 18, 2025
46e2a40
[Activity Tab] Create separate activity for Suggested Edits (#5824)
cooltey Aug 18, 2025
c126c8c
Add chevron icon to the donation module
cooltey Aug 18, 2025
b5e47fe
Activity Tab Customization Screen (#5847)
Williamrai Aug 19, 2025
044126e
Activity Tab: Game Module (#5848)
cooltey Aug 19, 2025
0ad216f
Tidy things up.
dbrant Aug 19, 2025
5225da5
A bit more cleanup.
dbrant Aug 19, 2025
8fceebd
Beginnings of impact module.
dbrant Aug 18, 2025
fb2343e
Merge branch 'main' into activityTab_design
dbrant Aug 19, 2025
31c9681
Add Highlights title.
dbrant Aug 19, 2025
b883e20
Add WikiErrorView for wikiErrorClickEvents in Activity Tab modules (#…
cooltey Aug 20, 2025
0242551
- adds description view to customize screen (#5859)
Williamrai Aug 20, 2025
2a7778a
Update copy and style of Explore Wikipedia button.
dbrant Aug 20, 2025
d8d1f84
Go to Reading Lists, not Explore feed.
dbrant Aug 20, 2025
62f8173
Add explicit button to unknown state of donation card.
dbrant Aug 20, 2025
543dc7a
Update granularity of customization based on updated design.
dbrant Aug 20, 2025
5b477f4
Merge branch 'main' into activityTab_design
dbrant Aug 20, 2025
2485161
Merge branch 'main' into activityTab_design
dbrant Aug 20, 2025
f6e3b22
Add/remove menu provider symmetrically.
dbrant Aug 20, 2025
5dc03be
use lowercase() instead of toLowercase()
cooltey Aug 21, 2025
2a85b8d
Merge branch 'main' into activityTab_design
cooltey Aug 21, 2025
ba17a01
Design review fixes
cooltey Aug 23, 2025
e5ecc9b
Fix padding for donation button
cooltey Aug 23, 2025
b2bf6b7
Merge branch 'main' into activityTab_design
cooltey Aug 25, 2025
c5f217e
A bit of design feedback.
dbrant Aug 25, 2025
21f12bc
Merge branch 'main' into activityTab_design
dbrant Aug 25, 2025
1c40eeb
Adjust the WikiGames entry card paddings
cooltey Aug 25, 2025
214eb33
Merge branch 'activityTab_design' of github.com:wikimedia/apps-androi…
cooltey Aug 25, 2025
4ff0360
Add proper paddings for the top categories card in Activity Tab (#5866)
cooltey Aug 26, 2025
a926d98
Merge branch 'main' into activityTab_design
cooltey Aug 26, 2025
1817733
Whoops, correctly calculate minutes.
dbrant Aug 26, 2025
8c4cf63
Activity Tab: Display statistics from Growth impact module (#5856)
cooltey Aug 26, 2025
7a32431
Reset cached impact response when logging out.
dbrant Aug 26, 2025
3c14696
Tidy up strings.
dbrant Aug 26, 2025
41a6eb6
Hide the Donation module if no donation data in the app in Acitivty T…
cooltey Aug 27, 2025
1479edb
Renames it (#5872)
cooltey Aug 27, 2025
98d7879
Hide Impact title in the correct cases.
dbrant Aug 27, 2025
9795519
Add overflow menu item for clearing history.
dbrant Aug 27, 2025
4b57f2c
Merge branch 'main' into activityTab_design
cooltey Aug 27, 2025
dc34f01
Merge branch 'main' into activityTab_design
cooltey Aug 28, 2025
b92b0f0
Update to use onClick for wikiCard
cooltey Aug 28, 2025
8d0cb5f
Use WikiCard for ReadingHistoryModule cards and consolidate layouts (…
cooltey Aug 29, 2025
d3e1e4f
Merge branch 'main' into activityTab_design
Williamrai Aug 29, 2025
b3190e4
Merge branch 'main' into activityTab_design
cooltey Aug 30, 2025
974cfd5
Consolidate ActivityTabModules and ModuleType classes (#5886)
cooltey Sep 2, 2025
f5056a0
Show a retry button for the WikiErrorView for generic error messages …
cooltey Sep 2, 2025
dfb6e7c
Merge branch 'main' into activityTab_design
Williamrai Sep 2, 2025
5c7fcde
Merge branch 'main' into activityTab_design
cooltey Sep 2, 2025
dc9142f
Activity tab: update design and logic for suggested edits card (#5891)
cooltey Sep 3, 2025
d9cb45c
Activity Tab: empty state for no modules enabled (#5890)
cooltey Sep 3, 2025
297471c
Clean up module enable/visibility logic.
dbrant Sep 3, 2025
f28a478
Merge branch 'main' into activityTab_design
dbrant Sep 3, 2025
e613c1d
Merge branch 'main' into activityTab_design
dbrant Sep 3, 2025
a0d2961
Update suggested edit verbiage.
dbrant Sep 3, 2025
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
7 changes: 7 additions & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,10 @@
android:name=".suggestededits.SuggestionsActivity"
android:launchMode="singleTask"
android:windowSoftInputMode="adjustPan" />
<activity
android:name=".suggestededits.SuggestedEditsTasksActivity"
android:theme="@style/AppTheme.ActionBar"
android:label="@string/suggested_edits_activity_title" />
<activity
android:name=".edit.EditSectionActivity"
android:windowSoftInputMode="adjustResize|stateVisible"
Expand Down Expand Up @@ -376,6 +380,9 @@
android:name=".readinglist.recommended.RecommendedReadingListSettingsActivity"
android:windowSoftInputMode="adjustResize" />

<activity
android:name=".activitytab.ActivityTabCustomizationActivity" />

<activity
android:name=".donate.donationreminder.DonationReminderActivity"
android:windowSoftInputMode="adjustResize"/>
Expand Down
3 changes: 2 additions & 1 deletion app/src/main/java/org/wikipedia/Constants.kt
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,8 @@ object Constants {
USER_CONTRIB_ACTIVITY("userContribActivity"),
EDIT_ADD_IMAGE("editAddImage"),
SUGGESTED_EDITS_RECENT_EDITS("suggestedEditsRecentEdits"),
ON_THIS_DAY_GAME_ACTIVITY("onThisDayGame")
ON_THIS_DAY_GAME_ACTIVITY("onThisDayGame"),
ACTIVITY_TAB("activityTab")
}

enum class ImageEditType(name: String) {
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/java/org/wikipedia/WikipediaApp.kt
Original file line number Diff line number Diff line change
Expand Up @@ -257,6 +257,8 @@ class WikipediaApp : Application() {
Prefs.tempAccountWelcomeShown = false
Prefs.tempAccountCreateDay = 0L
Prefs.tempAccountDialogShown = false
Prefs.impactLastQueryTime = 0
Prefs.impactLastResponseBody = emptyMap()
SharedPreferenceCookieManager.instance.clearAllCookies()
MainScope().launch {
AppDatabase.instance.notificationDao().deleteAll()
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package org.wikipedia.activitytab

import org.wikipedia.analytics.ABTest
import org.wikipedia.util.ReleaseUtil

class ActivityTabABTest : ABTest("activityTab", GROUP_SIZE_2) {
fun isInTestGroup(): Boolean {
return group == GROUP_2 &&
ReleaseUtil.isPreBetaRelease // TODO: remove before releasing
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,168 @@
package org.wikipedia.activitytab

import android.content.Context
import android.content.Intent
import android.os.Bundle
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.safeDrawingPadding
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.itemsIndexed
import androidx.compose.material3.HorizontalDivider
import androidx.compose.material3.ListItem
import androidx.compose.material3.ListItemDefaults
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Switch
import androidx.compose.material3.SwitchDefaults
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import org.wikipedia.R
import org.wikipedia.activity.BaseActivity
import org.wikipedia.compose.components.WikiTopAppBar
import org.wikipedia.compose.theme.BaseTheme
import org.wikipedia.compose.theme.WikipediaTheme
import org.wikipedia.settings.Prefs
import org.wikipedia.theme.Theme
import org.wikipedia.util.DeviceUtil

class ActivityTabCustomizationActivity : BaseActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
DeviceUtil.setEdgeToEdge(this)
setContent {
BaseTheme {
CustomizationScreen(
onBackButtonClick = {
finish()
},
modules = Prefs.activityTabModules,
haveAtLeastOneDonation = Prefs.donationResults.isNotEmpty()
)
}
}
}

companion object {
fun newIntent(context: Context): Intent {
return Intent(context, ActivityTabCustomizationActivity::class.java)
}
}
}

@Composable
fun CustomizationScreen(
modifier: Modifier = Modifier,
onBackButtonClick: () -> Unit,
modules: ActivityTabModules,
haveAtLeastOneDonation: Boolean = false
) {
var currentModules by remember { mutableStateOf(modules) }

Scaffold(
modifier = modifier
.safeDrawingPadding(),
topBar = {
WikiTopAppBar(
title = stringResource(R.string.activity_tab_menu_customize),
onNavigationClick = onBackButtonClick
)
},
containerColor = WikipediaTheme.colors.backgroundColor,
content = { paddingValues ->
LazyColumn(
modifier = Modifier
.padding(paddingValues)
.padding(vertical = 16.dp),
) {
item {
Text(
modifier = Modifier
.padding(horizontal = 16.dp)
.padding(bottom = 16.dp),
text = stringResource(R.string.activity_tab_menu_customize_description),
style = MaterialTheme.typography.bodySmall,
color = WikipediaTheme.colors.secondaryColor
)
}
itemsIndexed(ModuleType.entries) { index, moduleType ->
if (moduleType == ModuleType.DONATIONS && !haveAtLeastOneDonation) {
return@itemsIndexed
}
CustomizationScreenSwitch(
isChecked = currentModules.isModuleEnabled(moduleType),
title = stringResource(moduleType.displayName),
onCheckedChange = { isChecked ->
currentModules = currentModules.setModuleEnabled(moduleType, isChecked)
Prefs.activityTabModules = currentModules
}
)
if (index < ModuleType.entries.size - 1) {
HorizontalDivider(
color = WikipediaTheme.colors.borderColor
)
}
}
}
}
)
}

@Composable
private fun CustomizationScreenSwitch(
isChecked: Boolean,
title: String,
onCheckedChange: ((Boolean) -> Unit),
modifier: Modifier = Modifier
) {
ListItem(
modifier = modifier,
colors = ListItemDefaults.colors(
containerColor = WikipediaTheme.colors.paperColor
),
headlineContent = {
Text(
text = title,
style = MaterialTheme.typography.bodyLarge,
color = WikipediaTheme.colors.primaryColor
)
},
trailingContent = {
Switch(
checked = isChecked,
onCheckedChange = {
onCheckedChange(it)
},
colors = SwitchDefaults.colors(
uncheckedTrackColor = WikipediaTheme.colors.paperColor,
uncheckedThumbColor = MaterialTheme.colorScheme.outline,
uncheckedBorderColor = MaterialTheme.colorScheme.outline,
checkedTrackColor = WikipediaTheme.colors.progressiveColor,
checkedThumbColor = WikipediaTheme.colors.paperColor
)
)
}
)
}

@Preview
@Composable
private fun CustomizationScreenPreview() {
BaseTheme(
currentTheme = Theme.LIGHT
) {
CustomizationScreen(
onBackButtonClick = {},
modules = ActivityTabModules()
)
}
}
Loading
Loading