Challenge Overview
Challenge Objectives
- Android app targeting Android 10 / Q
- Specifically targetting dual SIM devices and capturing diagnostics and events about how data is routed between the SIM cards
NOTE -- Reviewers should have access to a dual SIM device to properly review this challenge
Project Background
- This app will be used by the client to look at how data is routed on dual SIM devices and will help them plan their infrastructure and devices to make better use of the capabilities of a device with 2 SIM chips in it.
- The device will have 2 SIM cards and will have one that's preferred for voice and one that's preferred for data.
Technology Stack
- This should be a native Android app targeting Android Q and the latest SDK
- Please use the available system APIs and don't require a rooted device
- The UI is at the discretion of the competitor, but please make it easy to see the events
- We are only targeting phones for this challenge, not tablets.
Individual requirements
App
The submission should be an Android Studio project for an Android app (targeting Android Q) that can be installed on a dual SIM Android phone.Global requirements
- All data/events need to be time stamped to millisecond resolution (if possible) (major requirement)
- The data collection should continue even when a VPN is running.
- App should restart when device reboots (if possible)
Library
The code to extract the events should be encapsulated into a module / library. We will expand on this and likely take it into other apps in the future, so it's important that the event collection code is relatively portable. Eventually these events will be published to an external service, like AWS analytics.
UI
There are no UI requirements for this challenge, but please ensure that reviewers and the client can easily see the events as they are captured in the app in some sort of list. The user should be able to click on a specific event to see all information for that logged item.Diagnostic events
Below is the list of events we want to capture in the app, along with some suggestions on how this could be captured. Note that the APIs are just recommended. If you think you have a better way of calculating a specific item, that's fine, but please make sure the requirements are met appropriately.Ensure your validation documentation covers how to generate each event!
Data path is switched between data/voice preferred networks including the new IP address
Potential APIs:
- https://developer.android.com/reference/android/net/ConnectivityManager
- https://developer.android.com/reference/java/net/NetworkInterface
1. Get switch event by ConnectivityManager
2. Get new ip from interface
Gap in data traffic when the network switches between data preferred and voice preferred networks.
Potential API
One potential way is to use TelephonyManager and register for events like data disconnected/suspended/unknown etc and then the data connected event in correlation to an IP address change.
Screen on/off status for each network transition between data/voice preferred networks
Potential APIs
- https://developer.android.com/reference/android/net/ConnectivityManager
- https://developer.android.com/reference/java/net/NetworkInterface
1. Get switch event by ConnectivityManager
2. Get new ip from interface
RSRP, RSRQ, CQI values 30sec before and after the network switch on data and voice preferred networks
Potential API:
TelephonyManager.getSignalStrength()
Number of transitions to the data preferred network in a X(10?)min interval
Potential API:
https://developer.android.com/reference/android/net/ConnectivityManager
Number of transitions out of the data preferred network in a X(10?)min interval
Potential API:
https://developer.android.com/reference/android/net/ConnectivityManager
Duration on data preferred network in a X(10?)min interval
Potential API:
https://developer.android.com/reference/android/telephony/SubscriptionManager
Description:
Use getDefaultDataSubscriptionId to calculating duration
Duration on voice preferred network in a X(10?)min interval
Potential API:
https://developer.android.com/reference/android/telephony/SubscriptionManager
Description:
Use getDefaultDataSubscriptionId to calculating duration
Amount of data used on data preferred network in a X(10?)min interval
Potential API:
getMobileRxBytes https://developer.android.com/reference/android/net/TrafficStats.html
Description:
use getDefaultDataSubscriptionId and getMobileRxBytes, then calculating the amount of bytes in time range
Amount of data used on voice preferred network in a X(10?)min interval
Potential API:
getMobileRxBytes https://developer.android.com/reference/android/net/TrafficStats.html
Description:
use getDefaultDataSubscriptionId and getMobileRxBytes, then calculating the amount of bytes in time range
The data collection interval X is configurable by admin(not user accessible)
This has to be configurable in the app itself, as part of the build
Duration when there is no Cellular network connectivity including location info
Potential APIs:
- https://developer.android.com/reference/android/location/LocationListener
- https://developer.android.com/reference/android/net/ConnectivityManager
Duration when there is data preferred but no voice preferred network including location info
Potential API
This one could be tough. Its possible that the SignalStrength might provide the values for both the SIMs
Duration when there is no data preferred network but only voice preferred network including location info
Potential API
This one could be tough. Its possible that the SignalStrength might provide the values for both the SIMs
Duration when both data and voice preferred networks are available
Potential API
This one could be tough. Its possible that the SignalStrength might provide the values for both the SIMs
Number of failed voice call attempts(MO,MT) in Xmin.
Potential API
content://call_log/calls
Number of total voice call attempts(MO,MT) in Xmin.
Potential API
content://call_log/calls
Number of failed SMS/MMS attempts(MO,MT) in Xmin.
Potential API
content://sms/failed
content://mms/failed
Number of total SMS/MMS attempts(MO,MT) in Xmin.
Potential API
content://sms/failed
content://mms/failed
Number of multiple attempts for the same SMS/MMS (MO,MT) in Xmin.
Potential API
content://sms/failed
content://mms/failed
Number of times Apps are unresponsive in Xmin
No suggestions on API, but we're hoping to be able to do this system wide. If not, just having it be for the diagnostic app is fine.
Number of App(Any) crashes in Xmin
No suggestions on API, but we're hoping to be able to do this system wide. If not, just having it be for the diagnostic app is fine.
Export
The app should allow a user to export the logged data that's available in a portable format, like CSV, for comparison and validation.UI Requirements:
No UI is provided. Members should do their best to define a standard Android material UI that makes it easy to see events come in, click on one, and see the full details for a given event.Deployment guide and validation document
You must provide:A README.md that covers:
- How to build and install the app on a device with dual SIMs
- The configuration values, the defaults, and how they can be changed
- How to install any required dependencies
- How to configure a dual SIM device properly for testing
A Validation.md that covers:
- How to validate the event data of all the events listed above.
What To Submit
- The code package containing the Android Studio project for the required items above
- A README.md
- A Validation.md