Skip to content

Commit

Permalink
Merge pull request #21275 from wordpress-mobile/issue/self-hosted-use…
Browse files Browse the repository at this point in the history
…r-ui

Self-hosted user UI
  • Loading branch information
nbradbury authored Oct 7, 2024
2 parents 625ee74 + f53dcf6 commit 1281a8b
Show file tree
Hide file tree
Showing 15 changed files with 894 additions and 3 deletions.
5 changes: 5 additions & 0 deletions WordPress/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -702,6 +702,11 @@
android:label="@string/people"
android:launchMode="singleTop"
android:theme="@style/WordPress.NoActionBar"/>
<activity
android:name=".ui.selfhostedusers.SelfHostedUsersActivity"
android:label="@string/users"
android:launchMode="singleTop"
android:theme="@style/WordPress.NoActionBar"/>

<!--Plugins-->
<activity
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,7 @@
import org.wordpress.android.ui.qrcodeauth.QRCodeAuthActivity;
import org.wordpress.android.ui.reader.ReaderActivityLauncher;
import org.wordpress.android.ui.reader.ReaderConstants;
import org.wordpress.android.ui.selfhostedusers.SelfHostedUsersActivity;
import org.wordpress.android.ui.sitecreation.SiteCreationActivity;
import org.wordpress.android.ui.sitecreation.misc.SiteCreationSource;
import org.wordpress.android.ui.stats.StatsConnectJetpackActivity;
Expand Down Expand Up @@ -724,6 +725,13 @@ public static void viewCurrentBlogPeople(Context context, SiteModel site) {
AnalyticsUtils.trackWithSiteDetails(AnalyticsTracker.Stat.OPENED_PEOPLE_MANAGEMENT, site);
}

public static void viewSelfHostedUsers(Context context, SiteModel site) {
// TODO tracks
Intent intent = new Intent(context, SelfHostedUsersActivity.class);
intent.putExtra(WordPress.SITE, site);
context.startActivity(intent);
}

public static void viewPluginBrowser(Context context, SiteModel site) {
if (PluginUtils.isPluginFeatureAvailable(site)) {
AnalyticsUtils.trackWithSiteDetails(AnalyticsTracker.Stat.OPENED_PLUGIN_DIRECTORY, site);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -597,7 +597,12 @@ class MySiteFragment : Fragment(R.layout.my_site_fragment),
action.isNewSite
)
is SiteNavigationAction.OpenAdmin -> ActivityLauncher.viewBlogAdmin(activity, action.site)
is SiteNavigationAction.OpenPeople -> ActivityLauncher.viewCurrentBlogPeople(activity, action.site)
is SiteNavigationAction.OpenPeople -> {
ActivityLauncher.viewCurrentBlogPeople(activity, action.site)
}
is SiteNavigationAction.OpenSelfHostedUsers -> {
ActivityLauncher.viewSelfHostedUsers(activity, action.site)
}
is SiteNavigationAction.OpenSharing -> ActivityLauncher.viewBlogSharing(activity, action.site)
is SiteNavigationAction.OpenSiteSettings -> ActivityLauncher.viewBlogSettingsForResult(activity, action.site)
is SiteNavigationAction.OpenThemes -> ActivityLauncher.viewCurrentBlogThemes(activity, action.site)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ sealed class SiteNavigationAction {

data class OpenAdmin(val site: SiteModel) : SiteNavigationAction()
data class OpenPeople(val site: SiteModel) : SiteNavigationAction()
data class OpenSelfHostedUsers(val site: SiteModel) : SiteNavigationAction()
data class OpenSharing(val site: SiteModel) : SiteNavigationAction()
data class OpenDomains(val site: SiteModel) : SiteNavigationAction()
data class OpenSiteSettings(val site: SiteModel) : SiteNavigationAction()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ class ListItemActionHandler @Inject constructor(
ListItemAction.PAGES -> SiteNavigationAction.OpenPages(selectedSite)
ListItemAction.ADMIN -> SiteNavigationAction.OpenAdmin(selectedSite)
ListItemAction.PEOPLE -> SiteNavigationAction.OpenPeople(selectedSite)
ListItemAction.SELF_HOSTED_USERS -> SiteNavigationAction.OpenSelfHostedUsers(selectedSite)
ListItemAction.SHARING -> SiteNavigationAction.OpenSharing(selectedSite)
ListItemAction.DOMAINS -> SiteNavigationAction.OpenDomains(selectedSite)
ListItemAction.ME -> SiteNavigationAction.OpenMeScreen
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ enum class ListItemAction (val trackingLabel: String) {
PAGES("pages"),
ADMIN("admin"),
PEOPLE("people"),
SELF_HOSTED_USERS("self_hosted_users"),
SHARING("sharing"),
DOMAINS("domains"),
SITE_SETTINGS("site_settings"),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,7 @@ class SiteItemsBuilder @Inject constructor(
return if (!jetpackFeatureRemovalOverlayUtil.shouldHideJetpackFeatures()) {
listOfNotNull(
siteListItemBuilder.buildPeopleItemIfAvailable(params.site, params.onClick),
siteListItemBuilder.buildSelfHostedUserListItemIfAvailable(params.site, params.onClick),
siteListItemBuilder.buildPluginItemIfAvailable(params.site, params.onClick),
siteListItemBuilder.buildShareItemIfAvailable(
params.site,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import org.wordpress.android.ui.mysite.items.listitem.ListItemAction.PEOPLE
import org.wordpress.android.ui.mysite.items.listitem.ListItemAction.PLAN
import org.wordpress.android.ui.mysite.items.listitem.ListItemAction.PLUGINS
import org.wordpress.android.ui.mysite.items.listitem.ListItemAction.SCAN
import org.wordpress.android.ui.mysite.items.listitem.ListItemAction.SELF_HOSTED_USERS
import org.wordpress.android.ui.mysite.items.listitem.ListItemAction.SHARING
import org.wordpress.android.ui.mysite.items.listitem.ListItemAction.SITE_SETTINGS
import org.wordpress.android.ui.mysite.items.listitem.ListItemAction.THEMES
Expand All @@ -29,6 +30,7 @@ import org.wordpress.android.ui.utils.UiString.UiStringText
import org.wordpress.android.util.BuildConfigWrapper
import org.wordpress.android.util.DateTimeUtils
import org.wordpress.android.util.SiteUtilsWrapper
import org.wordpress.android.util.config.SelfHostedUsersFeatureConfig
import org.wordpress.android.util.config.SiteMonitoringFeatureConfig
import java.util.GregorianCalendar
import java.util.TimeZone
Expand All @@ -41,7 +43,8 @@ class SiteListItemBuilder @Inject constructor(
private val buildConfigWrapper: BuildConfigWrapper,
private val themeBrowserUtils: ThemeBrowserUtils,
private val jetpackFeatureRemovalPhaseHelper: JetpackFeatureRemovalPhaseHelper,
private val siteMonitoringFeatureConfig: SiteMonitoringFeatureConfig
private val siteMonitoringFeatureConfig: SiteMonitoringFeatureConfig,
private val selfHostedUsersFeatureConfig: SelfHostedUsersFeatureConfig,
) {
fun buildActivityLogItemIfAvailable(site: SiteModel, onClick: (ListItemAction) -> Unit): ListItem? {
val isWpComOrJetpack = siteUtilsWrapper.isAccessedViaWPComRest(
Expand Down Expand Up @@ -138,6 +141,20 @@ class SiteListItemBuilder @Inject constructor(
onClick = ListItemInteraction.create(PEOPLE, onClick),
listItemAction = PEOPLE
)
} else {
null
}
}

fun buildSelfHostedUserListItemIfAvailable(site: SiteModel, onClick: (ListItemAction) -> Unit): ListItem? {
// TODO Should this excluded JetPack users?
return if (selfHostedUsersFeatureConfig.isEnabled() && site.selfHostedSiteId > 0) {
ListItem(
R.drawable.ic_user_white_24dp,
UiStringRes(R.string.users),
onClick = ListItemInteraction.create(SELF_HOSTED_USERS, onClick),
listItemAction = SELF_HOSTED_USERS
)
} else null
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
package org.wordpress.android.ui.selfhostedusers

import uniffi.wp_api.UserWithEditContext

/**
* This is a temporary object to supply a list of users for the self-hosted user list.
* It will be removed once the network request to retrieve users is implemented.
*/
@Suppress("MaxLineLength")
object SampleUsers {
private val sampleUserList = ArrayList<UserWithEditContext>()

private val sampleUser1 = UserWithEditContext(
id = 1,
username = "@sampleUser",
avatarUrls = emptyMap(),
capabilities = emptyMap(),
email = "[email protected]",
extraCapabilities = emptyMap(),
firstName = "Sample",
lastName = "User",
link = "example.com",
locale = "en-US",
name = "Sample User",
nickname = "User nickname",
registeredDate = "2023-01-01",
roles = listOf("admin"),
slug = "sample-user",
url = "example.com",
description = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam non quam viverra, viverra est vel, interdum felis. Pellentesque interdum libero quis metus pharetra ullamcorper. Morbi nec libero ligula. Quisque consectetur, purus sit amet lobortis porttitor, ligula ex imperdiet massa, in ullamcorper augue odio sit amet metus. In sollicitudin mauris et risus mollis commodo. Aliquam vel vehicula ante, nec blandit erat. Aenean non turpis porttitor orci fringilla fringilla nec ac nunc. Nulla ultrices urna ut ipsum posuere blandit. Phasellus mauris nulla, tincidunt at leo at, auctor interdum felis. Sed pharetra risus a ullamcorper dictum. Suspendisse pharetra justo molestie risus lobortis facilisis.",
)

private val sampleUser2 = UserWithEditContext(
id = 2,
username = "@sampleUserWithALongUserName",
avatarUrls = emptyMap(),
capabilities = emptyMap(),
description = "User description",
email = "[email protected]",
extraCapabilities = emptyMap(),
firstName = "Sample",
lastName = "User",
link = "example.com",
locale = "en-US",
name = "Sample User",
nickname = "User nickname",
registeredDate = "2023-01-01",
roles = listOf("contributor"),
slug = "sample-user",
url = "example.com",
)

private val sampleUser3 = UserWithEditContext(
id = 3,
username = "@sampleUser",
avatarUrls = emptyMap(),
capabilities = emptyMap(),
description = "User description",
email = "[email protected]",
extraCapabilities = emptyMap(),
firstName = "Sample",
lastName = "User",
link = "example.com",
locale = "en-US",
name = "Sample User",
nickname = "User nickname",
registeredDate = "2023-01-01",
roles = listOf("contributor", "editor", "subscriber"),
slug = "sample-user",
url = "example.com",
)

@Suppress("MagicNumber")
fun getSampleUsers(): ArrayList<UserWithEditContext> {
fun addWithId(user: UserWithEditContext) {
sampleUserList.add(
user.copy(id = sampleUserList.size)
)
}
if (sampleUserList.isEmpty()) {
repeat(25) {
addWithId(sampleUser1)
addWithId(sampleUser2)
addWithId(sampleUser3)
}
}
return sampleUserList
}
}
Loading

0 comments on commit 1281a8b

Please sign in to comment.