Register
Submit a solution
The challenge is finished.

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
    Description of flow:

    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     Description of flow:

    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:
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


Final Submission Guidelines

Please see above

ELIGIBLE EVENTS:

2020 Topcoder(R) Open

Review style

Final Review

Community Review Board

Approval

User Sign-Off

ID: 30114263