Multi-Server Support

In-progress

https://mattermost.atlassian.net/browse/MM-11067

Figma Design

Figma Prototype

Goals

Currently users on the Mobile app have no way to access multiple servers like they do on the Desktop app. This feature would provide users with the following:

  1. Access to different servers

  2. Allow for adding, viewing, editing, removing servers

  3. Easily switch between servers

Team Sidebar previous updates

The design work for multi-server support is dependent on the work done for Team Sidebar.

The Servers List

Above the new Team Sidebar is a new button to access servers (see screens below). Tapping this slides down the main navigation and reveal the server list.

Gestures

  • Tapping on the Server Button will reveal the Server List

  • Once open, swiping up or tapping on the Home content will slide it back up and hide the Server List

Servers Button (top left)

 

 

Servers List

 

 

 

 

Servers List - Scrolling

 

 

 

Servers List Transition

 

 

Note on localization for the Servers List

Use the language from the current active server for this screen.

 

In case of EMM provider prevents the user from having more than one server

 

 

Onboarding Tutorial

When a user launches the server sheet for the first time, he will see instructions that highlight actions that can be done to a server. This will help us to show where the contextual swipe can be used. Tutorial can be dismissed by a tap or any other interaction on a scrimmed surface.

 

 

 

Servers Icon Button

Badges on Servers Icon

Badges on the Servers icon behave similarly to the badges on the current hamburger menu icon in that they display an aggregate of all servers (except the current one). For example, if Server A has 2 mentions, Server B has 3 mentions and Server C has 4 mentions, the total aggregate number shown on the Servers Icon Button is 7.

States

Default

Unreads

Mentions

99+ Mentions

Add Server

Default

Unreads

Mentions

99+ Mentions

Add Server

 

 

 

 

Server List Items

Each Server List Item shows:

  • Display Name (as entered by the user)

    • Fallbacks for Server Names: Since existing users do not have to name their server, a fallback name of “Default Server” will be used. This will also apply to cases where a default serverUrl is set for apps managed by EMM providers (see App configuration docs).

  • Server URL (strips out https://)

  • Mention or unread badges (if applicable)

  • The authentication status: displays an alert icon denoting session expiry or logged out

Server List Item States

Default

 

Active Server

 

Logged Out

Unreads

 

Mentions

 

Mentions (99+)

 

Actions Open

 

 

Server List Item Interactions

  • Tapping on the main area of the item

    • If session is active, select this server and transition to the view for that server

    • If session is logged out, open up a log in modal to authenticate, then once authenticated, close the modal and transition to the channel sidebar view for that server

    • Swiping Left on a Server List Item will also open the actions for that server

 

  • Edit

    • Tapping this option will open up the Server Settings Modal where users can edit the URL and name of the server.

    • If the URL changes, users will have to authenticate again (and we should expire the session of the previous server)

    • If it’s just a simple display name change, no authentication is needed. (Display names must be unique for the server list)

  • Log out

    • A confirmation alert displays to confirm the user wants to logout

    • Once log out completes:

      • The Server Item is indicated as logged out

      • If there are other servers with an active session, switch to the last viewed server

      • If there are other servers, but none have an active session, the authentication modal opens prepopulated with the last viewed server

      • If there are no other servers in the user’s Serve List, bump users to the login screen for this server that was just logged out.

  • Remove

    • A warning alert shows to confirm the removal

    • If confirmed, user is logged out and the server is removed from the list. Also removes associated data.

    • Then the server is removed from the list and the app altogether

    • Once the removal completes:

      • If there are other servers with an active session, switch to the last viewed server

      • If there are other servers, but none have an active session, the authentication modal opens prepopulated with the last viewed server

      • If there are no other servers in the user’s Serve List, bump users to ‘add your first server' screen

Adding Servers

Adding the First Server

If no previous server has been added, the app begins on the Add Server Screen. See this page for more details.

Adding Subsequent Servers

As noted above, at the bottom of the Servers List, an option to “Add a Server” displays as part of the list.

 

Tapping this option will open a modal with the details to add a server. This will behave the same as Adding the First Server, but with some stylistic differences.

Display Name for Existing Users' Servers

For existing users, we will migrate their current server to the Server List with a fallback display name since Display Name is a new field for servers. A fallback name of “Default Server” will be used. This will also apply to cases where a default serverUrl is set for apps managed by EMM providers

Other areas impacted by Multi-Server Support

Hamburger Icon Badge Count

The number shown on the hamburger menu icon should match the added up number of mention badges displayed in the sidebar menu that includes:

  • any channel-specific mentions

  • any mention number displayed on any team sidebar item

  • the number displayed on the servers icon

App Icon Badge Count

The Badge Count on the Homescreen App Icon should be an aggregate total of all mentions on all servers

Recent Emojis

These work across servers and are stored at the device level. (as per current behavior).

User’s Status Across Servers

Similar to how the desktop operates, if you’re in the app, the user’s status is set to online on all servers that have active sessions. Unless you’ve manually chosen a status (other than online) on a particular server, then that status is permanently set and will be respected for that server.

Future consideration: An easy way for users to change status across all servers in one action.

Multi-Server Support for Share Extensions

We will need to update the share extensions to include the server selection in addition to the existing team/channel selection

In-App Notifications

Should be shown from other servers if you’re viewing a different server. These will need to include the server name somehow. Otherewise, these follow the existing behavior.

Push Notifications

To be confirmed whether we include the server name.

Session Expiry Notification: include the url or server name as part of the body of the message.

Need to document this flow…

If you have a permalink to a server that you’re logged in to but not currently view, we should redirect to change your current server on the app.

If you don’t have the server that the link points to, should we add the option to add the server? I think we need to alert the user that they don’t have the server configured - do you want to add it?

Deep Linking

If you’re coming from a deep link in email notification, go to the server in the app if you have it configured. Otherwise prompt the user to add the server (like above).