Sharing of content has followed the basic rules from EkStep Genie, and haven't been updated with time. The goal of this feature will be to update Sharing to make it more powerful, and more likely to share with other users or bring in new users.
Use this section to elaborate on:
This section consists of requirement specifications for specific use cases in the User JTBD. The requirements for each use case are elaborated in detail through sub-sections for:
As a teacher/parent, I would like to share content with people around me - to direct their attention to a particular piece of content, or to share the content I have already downloaded.
Flow 1
Flow 2
Flow 3
As a user, I should be able to share content from one device to another, either as a content link or as downloaded pieces of content that can be imported.
Srl. No. | User Action | Expected Result |
---|---|---|
A user clicks on a content card. | User sees content details page. | |
User clicks Share on content | User sees the share popup, and default selected option is 'Share link'. | |
User clicks on 'Share' for the link. | User sees the Android dialog for app to share with. | |
User selects an app (e.g. WhatsApp) | User sees the WhatsApp app open, and the text displays the following (example): " Try this content on the mobile app: " The thumbnail of the content should be auto-displayed, and the name of the content with the class (similar to when a user shares a YouTube video with other people). | |
Receiving user clicks on: (a) the content link received from WhatsApp (b) the app link received from WhatsApp | (a) User is taken to content on Sunbird website, and if they tap on install link - it uses a utm of 'share' and the content id. (b) User is taken to the play store with the utm of 'share' and the content id. | |
User installs and launches the app | Telemetry event is fired with relevant utm params. |
Srl. No. | User Action | Expected Result |
---|---|---|
A user clicks on a content card which has been downloaded. | User sees content details page. | |
User clicks Share on content | User sees Share popup | |
User clicks on 'Send' within the popup. | User sees a % archiving popup with an option to cancel (E.g. 'Packing x/y') User is shown a bunch of apps to send ecar via. | |
User sends content via one of the sharing apps | (a) Content name is of the format "<SunbirdAppName>_<contentID>". (b) Metadata in the file contains the list of content included within this archive, in the following format: (c) The text in sharing app should be: " Try this content on the mobile app: " After transfer, user is returned to the Sunbird app. | |
Receiving user clicks on the archive file | User is taken to the Sunbird app, and sees the splash screen with a confirmation popup to import content. User is not taken away from splash screen until import is complete / cancelled. | |
User confirms to import content | User sees a progress count of the import status e.g. (Importing 14/50), and an option to cancel. If the import completes, the user is taken to the root content imported. If multiple distinct content/collections were imported, user is taken to the downloads tab. If all content was successfully imported/merged, and if the user had checked the box asking to delete ecar after import, then the archive gets deleted. | |
(Optional) User opts to cancel. | Content is partially imported, and the user is taken to the root content imported. If multiple distinct content/collections were imported, user is taken to the downloads tab. The ecar should NOT be deleted after partial/unsuccessful import. |
Srl. No. | User Action | Expected Result |
---|---|---|
User clicks on 'Save' within the sharing popup for a downloaded content. | User sees a % archiving popup with an option to cancel (E.g. 'Packing x/y') Content is stored in the default Downloads folder directly on the root of the current storage drive (e.g. Internal Storage or SD card). Confirmation toast message is shown to user. |
Srl. No. | User Action | Expected Result |
---|---|---|
User goes to 'Downloads' tab | User sees all content that has been downloaded (including spines). | |
User multi-selects a few content | User sees a contextual popup with Share and Delete | |
User taps on Share | User sees share popup where they can select from (Share, Send, Save):
When app regains context/completes action, the selected content get unselected. | |
User presses back button (on device) or the cancel button on the contextual (share+delete) popup | All selected content gets unselected. |
Srl. No. | User Action | Expected Result |
---|---|---|
User goes to Settings and clicks share on the Sunbird app, and then selects to share as link. | User sees the WhatsApp app open, and the text displays the following (example): " " |
Srl. No. | User Action | Expected Result |
---|---|---|
User goes to Settings and clicks share on the Sunbird app, and then selects to send. | User launches the sharing apps dialog, and sends the apk of the Sunbird app, in the following name format: <SunbirdApp>_<underscored version num>.apk (e.g. DIKSHA_2_2_232.apk). |
Srl. No. | User Action | Expected Result |
---|---|---|
User goes to Settings and clicks share on the Sunbird app, and then selects to save. | User saves the apk of the Sunbird app to the default local storage drive in the 'Downloads' folder: <SunbirdApp>_<underscored version num>.apk (e.g. DIKSHA_2_2_232.apk). |
Describe a list of exception scenarios in the following table and how they are handled. To add or remove rows in the table, use the table functionality from the toolbar.
Srl. No. | Error / Exception | Expected Handling |
---|---|---|
User attempts to share the link to a leaf-node content from inside a textbook/collection | The share link format should have the root textbook/collection identifier as part of it, so that the user opens the content from within the context of THAT book/collection. Standard behaviour of how the spine loads for the textbook/collection applies (just that it's in the background, so the user doesn't necessarily notice it). If the user presses BACK from this details page, it should take the user to the textbook/collection which this content is a part of. Pressing BACK again will take the user to the library page. | |
There isn't enough space on device while trying to export content | User should see the 'Insufficient space on disk' message, with a message to 'Clear some space and try again'. | |
There isn't enough space on device while importing content | If the user confirms to import content on the splash screen, then the user should see the 'insufficient space on disk' message. (The reason for this is that the user can atleast see the size of the content attempted for import). | |
There isn't enough memory for importing/exporting large content (e.g. archive being unzipped into RAM) | (a) Import - Extract content onto disk if there is space, else show the insufficient space message. Then import content by content, after which clear the temp storage space. (b) Export - If insufficient RAM available to create an exportable file, show 'Insufficient phone memory' message, with the body saying 'The content is too big to package'. | |
Content being imported is not of compatible type | Before showing the import content popup, the user should see the 'This content format (versionNum) is incompatible with the current version of <Sunbird app name> (compatible versionNum)'. | |
Content transfer abruptly breaks in between (e.g. user exits the app while attempting to export or import) | If there was a break during: a. Export - When app relaunches, the temp files created for export should be deleted. b. Import - When app relaunches, whatever is imported should have remained imported. Whatever wasn't, isn't. If the user attempts to import same content again, anyway a merge action will take place. IN ALL CASES, BEAR IN MIND THAT SPINES ARE IMPORTED BEFORE LEAF CONTENT so as not to impact visibility of whatever content got imported. |
An optional section that describes functionality that may not be completed within a release
UI Element | Description | Language(s)/ Locales Required |
---|---|---|
Popup content | All generic popup text that is NOT content specific (e.g. body of popups, NOT name of content) | All supported languages |
Event Name | Description | Purpose |
---|---|---|
Tap on share (addn attribs: root-content / root-collection / leaf-content / app) | When user taps on the share icon | To know how many users attempt to share, and what they're trying to share |
Tap on confirm (addn attribs: share/send/save) | When user selects a mode of sharing and confirms | To know the dominant mode in which users share. |
Saw import popup (addn attribs: size of import, count of content) | When user sees the import popup on splash screen | To know how many users attempt to import content. |
Initiated import of content (addn attribs: delete after import = true/false?) | When user initiates the import | To know how many users go ahead with importing content, and how many of those choose to delete the archive after successful import. |
Import successful (addn attribs: count of content) | When user successfully completes import | To know how many users successfully import all content. |
Import failed (addn attribs: import success count, import fail count) | When user is unsuccessful in completion of import | To know how many users fail to import all content. |
App install utm | To know source of install (if coming from share) | To know how many users install the app because of a content share event. |
Launch of app (addn attrib: deeplink) | To know if launch was caused due to deeplink | To know how many users launch the app via a deeplink, vs. their intrinsic motivation. |
Performance / Responsiveness Requirements | Load/Volume Requirements | Security / Privacy Requirements |
---|---|---|
Import of single content should not take more than 5 seconds. | On average, 1 full textbook at a time. On close to max load, assume 50 textbooks in one package (device memory willing). | |
Import of multiple content should not take more than 0.5 second per content. (Imagine 5 books being imported with 250 content each) |
Use this section to capture the impact of this use case on other products, solutions. To add or remove rows in the table, use the table functionality from the toolbar.
Product/Solution Impacted | Impact Description |
---|---|
TPD | Examprep | CBSE (all solutions, in fact) | If content deeplinks are used anywhere else, and the format of parameterized URLs can't be supported, then the deeplinks in other solutions might stop working. If so, parameterization of content deeplinks should be rethought. |
Sunbird Portal | Portal needs to include parsing the app install with UTM params based on the share link |
Use this section to capture the impact of this use case on existing users or data. To add or remove rows in the table, use the table functionality from the toolbar.
User/Data Impacted | Impact Description |
---|---|
Existing users |
|
Specify the key metrics that should be tracked to measure the effectiveness of this use case in the following table. To add or remove rows, use the table functionality from the toolbar
Srl. No. | Metric | Purpose of Metric |
---|---|---|
Content sharing funnel (outgoing) | Helps us understand how many people attempt to share content: Unique devices that ( launched app | shared leaf content (share : send : save) | shared root content (share : send : save) | shared multiple content (share : send : save) ) | |
Content sharing funnel (incoming) | Helps us understand how many people attempt to access shared content: Unique devices that ( launched app | accessed content via link | saw import content popup | completed import successfully ) |