Loading api/system-current.txt +1 −0 Original line number Diff line number Diff line Loading @@ -79,6 +79,7 @@ package android { field public static final String DEVICE_POWER = "android.permission.DEVICE_POWER"; field public static final String DISPATCH_PROVISIONING_MESSAGE = "android.permission.DISPATCH_PROVISIONING_MESSAGE"; field public static final String ENTER_CAR_MODE_PRIORITIZED = "android.permission.ENTER_CAR_MODE_PRIORITIZED"; field public static final String EXEMPT_FROM_AUDIO_RECORD_RESTRICTIONS = "android.permission.EXEMPT_FROM_AUDIO_RECORD_RESTRICTIONS"; field public static final String FORCE_BACK = "android.permission.FORCE_BACK"; field public static final String FORCE_STOP_PACKAGES = "android.permission.FORCE_STOP_PACKAGES"; field public static final String GET_APP_OPS_STATS = "android.permission.GET_APP_OPS_STATS"; Loading core/java/android/app/AppOpsManager.java +128 −105 Original line number Diff line number Diff line Loading @@ -1988,108 +1988,108 @@ public class AppOpsManager { }; /** * This specifies whether each option should allow the system * (and system ui) to bypass the user restriction when active. * In which cases should an app be allowed to bypass the {@link #setUserRestriction user * restriction} for a certain app-op. */ private static boolean[] sOpAllowSystemRestrictionBypass = new boolean[] { true, //COARSE_LOCATION true, //FINE_LOCATION false, //GPS false, //VIBRATE false, //READ_CONTACTS false, //WRITE_CONTACTS false, //READ_CALL_LOG false, //WRITE_CALL_LOG false, //READ_CALENDAR false, //WRITE_CALENDAR true, //WIFI_SCAN false, //POST_NOTIFICATION false, //NEIGHBORING_CELLS false, //CALL_PHONE false, //READ_SMS false, //WRITE_SMS false, //RECEIVE_SMS false, //RECEIVE_EMERGECY_SMS false, //RECEIVE_MMS false, //RECEIVE_WAP_PUSH false, //SEND_SMS false, //READ_ICC_SMS false, //WRITE_ICC_SMS false, //WRITE_SETTINGS true, //SYSTEM_ALERT_WINDOW false, //ACCESS_NOTIFICATIONS false, //CAMERA false, //RECORD_AUDIO false, //PLAY_AUDIO false, //READ_CLIPBOARD false, //WRITE_CLIPBOARD false, //TAKE_MEDIA_BUTTONS false, //TAKE_AUDIO_FOCUS false, //AUDIO_MASTER_VOLUME false, //AUDIO_VOICE_VOLUME false, //AUDIO_RING_VOLUME false, //AUDIO_MEDIA_VOLUME false, //AUDIO_ALARM_VOLUME false, //AUDIO_NOTIFICATION_VOLUME false, //AUDIO_BLUETOOTH_VOLUME false, //WAKE_LOCK false, //MONITOR_LOCATION false, //MONITOR_HIGH_POWER_LOCATION false, //GET_USAGE_STATS false, //MUTE_MICROPHONE true, //TOAST_WINDOW false, //PROJECT_MEDIA false, //ACTIVATE_VPN false, //WALLPAPER false, //ASSIST_STRUCTURE false, //ASSIST_SCREENSHOT false, //READ_PHONE_STATE false, //ADD_VOICEMAIL false, // USE_SIP false, // PROCESS_OUTGOING_CALLS false, // USE_FINGERPRINT false, // BODY_SENSORS false, // READ_CELL_BROADCASTS false, // MOCK_LOCATION false, // READ_EXTERNAL_STORAGE false, // WRITE_EXTERNAL_STORAGE false, // TURN_ON_SCREEN false, // GET_ACCOUNTS false, // RUN_IN_BACKGROUND false, // AUDIO_ACCESSIBILITY_VOLUME false, // READ_PHONE_NUMBERS false, // REQUEST_INSTALL_PACKAGES false, // ENTER_PICTURE_IN_PICTURE_ON_HIDE false, // INSTANT_APP_START_FOREGROUND false, // ANSWER_PHONE_CALLS false, // OP_RUN_ANY_IN_BACKGROUND false, // OP_CHANGE_WIFI_STATE false, // OP_REQUEST_DELETE_PACKAGES false, // OP_BIND_ACCESSIBILITY_SERVICE false, // ACCEPT_HANDOVER false, // MANAGE_IPSEC_HANDOVERS false, // START_FOREGROUND true, // BLUETOOTH_SCAN false, // USE_BIOMETRIC false, // ACTIVITY_RECOGNITION false, // SMS_FINANCIAL_TRANSACTIONS false, // READ_MEDIA_AUDIO false, // WRITE_MEDIA_AUDIO false, // READ_MEDIA_VIDEO false, // WRITE_MEDIA_VIDEO false, // READ_MEDIA_IMAGES false, // WRITE_MEDIA_IMAGES false, // LEGACY_STORAGE false, // ACCESS_ACCESSIBILITY false, // READ_DEVICE_IDENTIFIERS false, // ACCESS_MEDIA_LOCATION false, // QUERY_ALL_PACKAGES false, // MANAGE_EXTERNAL_STORAGE false, // INTERACT_ACROSS_PROFILES false, // ACTIVATE_PLATFORM_VPN false, // LOADER_USAGE_STATS false, // ACCESS_CALL_AUDIO false, // AUTO_REVOKE_PERMISSIONS_IF_UNUSED private static RestrictionBypass[] sOpAllowSystemRestrictionBypass = new RestrictionBypass[] { new RestrictionBypass(true, false), //COARSE_LOCATION new RestrictionBypass(true, false), //FINE_LOCATION null, //GPS null, //VIBRATE null, //READ_CONTACTS null, //WRITE_CONTACTS null, //READ_CALL_LOG null, //WRITE_CALL_LOG null, //READ_CALENDAR null, //WRITE_CALENDAR new RestrictionBypass(true, false), //WIFI_SCAN null, //POST_NOTIFICATION null, //NEIGHBORING_CELLS null, //CALL_PHONE null, //READ_SMS null, //WRITE_SMS null, //RECEIVE_SMS null, //RECEIVE_EMERGECY_SMS null, //RECEIVE_MMS null, //RECEIVE_WAP_PUSH null, //SEND_SMS null, //READ_ICC_SMS null, //WRITE_ICC_SMS null, //WRITE_SETTINGS new RestrictionBypass(true, false), //SYSTEM_ALERT_WINDOW null, //ACCESS_NOTIFICATIONS null, //CAMERA new RestrictionBypass(false, true), //RECORD_AUDIO null, //PLAY_AUDIO null, //READ_CLIPBOARD null, //WRITE_CLIPBOARD null, //TAKE_MEDIA_BUTTONS null, //TAKE_AUDIO_FOCUS null, //AUDIO_MASTER_VOLUME null, //AUDIO_VOICE_VOLUME null, //AUDIO_RING_VOLUME null, //AUDIO_MEDIA_VOLUME null, //AUDIO_ALARM_VOLUME null, //AUDIO_NOTIFICATION_VOLUME null, //AUDIO_BLUETOOTH_VOLUME null, //WAKE_LOCK null, //MONITOR_LOCATION null, //MONITOR_HIGH_POWER_LOCATION null, //GET_USAGE_STATS null, //MUTE_MICROPHONE new RestrictionBypass(true, false), //TOAST_WINDOW null, //PROJECT_MEDIA null, //ACTIVATE_VPN null, //WALLPAPER null, //ASSIST_STRUCTURE null, //ASSIST_SCREENSHOT null, //READ_PHONE_STATE null, //ADD_VOICEMAIL null, // USE_SIP null, // PROCESS_OUTGOING_CALLS null, // USE_FINGERPRINT null, // BODY_SENSORS null, // READ_CELL_BROADCASTS null, // MOCK_LOCATION null, // READ_EXTERNAL_STORAGE null, // WRITE_EXTERNAL_STORAGE null, // TURN_ON_SCREEN null, // GET_ACCOUNTS null, // RUN_IN_BACKGROUND null, // AUDIO_ACCESSIBILITY_VOLUME null, // READ_PHONE_NUMBERS null, // REQUEST_INSTALL_PACKAGES null, // ENTER_PICTURE_IN_PICTURE_ON_HIDE null, // INSTANT_APP_START_FOREGROUND null, // ANSWER_PHONE_CALLS null, // OP_RUN_ANY_IN_BACKGROUND null, // OP_CHANGE_WIFI_STATE null, // OP_REQUEST_DELETE_PACKAGES null, // OP_BIND_ACCESSIBILITY_SERVICE null, // ACCEPT_HANDOVER null, // MANAGE_IPSEC_HANDOVERS null, // START_FOREGROUND new RestrictionBypass(true, false), // BLUETOOTH_SCAN null, // USE_BIOMETRIC null, // ACTIVITY_RECOGNITION null, // SMS_FINANCIAL_TRANSACTIONS null, // READ_MEDIA_AUDIO null, // WRITE_MEDIA_AUDIO null, // READ_MEDIA_VIDEO null, // WRITE_MEDIA_VIDEO null, // READ_MEDIA_IMAGES null, // WRITE_MEDIA_IMAGES null, // LEGACY_STORAGE null, // ACCESS_ACCESSIBILITY null, // READ_DEVICE_IDENTIFIERS null, // ACCESS_MEDIA_LOCATION null, // QUERY_ALL_PACKAGES null, // MANAGE_EXTERNAL_STORAGE null, // INTERACT_ACROSS_PROFILES null, // ACTIVATE_PLATFORM_VPN null, // LOADER_USAGE_STATS null, // ACCESS_CALL_AUDIO null, // AUTO_REVOKE_PERMISSIONS_IF_UNUSED }; /** Loading Loading @@ -2485,11 +2485,11 @@ public class AppOpsManager { } /** * Retrieve whether the op allows the system (and system ui) to * bypass the user restriction. * Retrieve whether the op allows to bypass the user restriction. * * @hide */ public static boolean opAllowSystemBypassRestriction(int op) { public static RestrictionBypass opAllowSystemBypassRestriction(int op) { return sOpAllowSystemRestrictionBypass[op]; } Loading Loading @@ -2535,6 +2535,29 @@ public class AppOpsManager { return !sOpDisableReset[op]; } /** * When to not enforce {@link #setUserRestriction restrictions}. * * @hide */ public static class RestrictionBypass { /** Does the app need to be privileged to bypass the restriction */ public boolean isPrivileged; /** * Does the app need to have the EXEMPT_FROM_AUDIO_RESTRICTIONS permission to bypass the * restriction */ public boolean isRecordAudioRestrictionExcept; public RestrictionBypass(boolean isPrivileged, boolean isRecordAudioRestrictionExcept) { this.isPrivileged = isPrivileged; this.isRecordAudioRestrictionExcept = isRecordAudioRestrictionExcept; } public static RestrictionBypass UNRESTRICTED = new RestrictionBypass(true, true); } /** * Class holding all of the operation information associated with an app. * @hide Loading core/res/AndroidManifest.xml +10 −0 Original line number Diff line number Diff line Loading @@ -1187,6 +1187,16 @@ android:description="@string/permdesc_callCompanionApp" android:protectionLevel="normal" /> <!-- Exempt this uid from restrictions to background audio recoding <p>Protection level: signature|privileged @hide @SystemApi --> <permission android:name="android.permission.EXEMPT_FROM_AUDIO_RECORD_RESTRICTIONS" android:label="@string/permlab_exemptFromAudioRecordRestrictions" android:description="@string/permdesc_exemptFromAudioRecordRestrictions" android:protectionLevel="signature|privileged" /> <!-- Allows a calling app to continue a call which was started in another app. An example is a video calling app that wants to continue a voice call on the user's mobile network.<p> When the handover of a call from one app to another takes place, there are two devices Loading core/res/res/values/strings.xml +8 −0 Original line number Diff line number Diff line Loading @@ -1217,6 +1217,14 @@ device. This includes information such as call numbers for calls and the state of the calls.</string> <!-- Title of an application permission. When granted the app is exempt from audio record restrictions. [CHAR LIMIT=NONE]--> <string name="permlab_exemptFromAudioRecordRestrictions">exempt from audio record restrictions</string> <!-- Description of an application permission. When granted the app is exempt from audio record restrictions. [CHAR LIMIT=NONE]--> <string name="permdesc_exemptFromAudioRecordRestrictions">Exempt the app from restrictions to record audio.</string> <!-- Title of an application permission. When granted the user is giving access to a third party app to continue a call which originated in another app. For example, the user could be in a voice call over their carrier's mobile network, and a third party video Loading Loading
api/system-current.txt +1 −0 Original line number Diff line number Diff line Loading @@ -79,6 +79,7 @@ package android { field public static final String DEVICE_POWER = "android.permission.DEVICE_POWER"; field public static final String DISPATCH_PROVISIONING_MESSAGE = "android.permission.DISPATCH_PROVISIONING_MESSAGE"; field public static final String ENTER_CAR_MODE_PRIORITIZED = "android.permission.ENTER_CAR_MODE_PRIORITIZED"; field public static final String EXEMPT_FROM_AUDIO_RECORD_RESTRICTIONS = "android.permission.EXEMPT_FROM_AUDIO_RECORD_RESTRICTIONS"; field public static final String FORCE_BACK = "android.permission.FORCE_BACK"; field public static final String FORCE_STOP_PACKAGES = "android.permission.FORCE_STOP_PACKAGES"; field public static final String GET_APP_OPS_STATS = "android.permission.GET_APP_OPS_STATS"; Loading
core/java/android/app/AppOpsManager.java +128 −105 Original line number Diff line number Diff line Loading @@ -1988,108 +1988,108 @@ public class AppOpsManager { }; /** * This specifies whether each option should allow the system * (and system ui) to bypass the user restriction when active. * In which cases should an app be allowed to bypass the {@link #setUserRestriction user * restriction} for a certain app-op. */ private static boolean[] sOpAllowSystemRestrictionBypass = new boolean[] { true, //COARSE_LOCATION true, //FINE_LOCATION false, //GPS false, //VIBRATE false, //READ_CONTACTS false, //WRITE_CONTACTS false, //READ_CALL_LOG false, //WRITE_CALL_LOG false, //READ_CALENDAR false, //WRITE_CALENDAR true, //WIFI_SCAN false, //POST_NOTIFICATION false, //NEIGHBORING_CELLS false, //CALL_PHONE false, //READ_SMS false, //WRITE_SMS false, //RECEIVE_SMS false, //RECEIVE_EMERGECY_SMS false, //RECEIVE_MMS false, //RECEIVE_WAP_PUSH false, //SEND_SMS false, //READ_ICC_SMS false, //WRITE_ICC_SMS false, //WRITE_SETTINGS true, //SYSTEM_ALERT_WINDOW false, //ACCESS_NOTIFICATIONS false, //CAMERA false, //RECORD_AUDIO false, //PLAY_AUDIO false, //READ_CLIPBOARD false, //WRITE_CLIPBOARD false, //TAKE_MEDIA_BUTTONS false, //TAKE_AUDIO_FOCUS false, //AUDIO_MASTER_VOLUME false, //AUDIO_VOICE_VOLUME false, //AUDIO_RING_VOLUME false, //AUDIO_MEDIA_VOLUME false, //AUDIO_ALARM_VOLUME false, //AUDIO_NOTIFICATION_VOLUME false, //AUDIO_BLUETOOTH_VOLUME false, //WAKE_LOCK false, //MONITOR_LOCATION false, //MONITOR_HIGH_POWER_LOCATION false, //GET_USAGE_STATS false, //MUTE_MICROPHONE true, //TOAST_WINDOW false, //PROJECT_MEDIA false, //ACTIVATE_VPN false, //WALLPAPER false, //ASSIST_STRUCTURE false, //ASSIST_SCREENSHOT false, //READ_PHONE_STATE false, //ADD_VOICEMAIL false, // USE_SIP false, // PROCESS_OUTGOING_CALLS false, // USE_FINGERPRINT false, // BODY_SENSORS false, // READ_CELL_BROADCASTS false, // MOCK_LOCATION false, // READ_EXTERNAL_STORAGE false, // WRITE_EXTERNAL_STORAGE false, // TURN_ON_SCREEN false, // GET_ACCOUNTS false, // RUN_IN_BACKGROUND false, // AUDIO_ACCESSIBILITY_VOLUME false, // READ_PHONE_NUMBERS false, // REQUEST_INSTALL_PACKAGES false, // ENTER_PICTURE_IN_PICTURE_ON_HIDE false, // INSTANT_APP_START_FOREGROUND false, // ANSWER_PHONE_CALLS false, // OP_RUN_ANY_IN_BACKGROUND false, // OP_CHANGE_WIFI_STATE false, // OP_REQUEST_DELETE_PACKAGES false, // OP_BIND_ACCESSIBILITY_SERVICE false, // ACCEPT_HANDOVER false, // MANAGE_IPSEC_HANDOVERS false, // START_FOREGROUND true, // BLUETOOTH_SCAN false, // USE_BIOMETRIC false, // ACTIVITY_RECOGNITION false, // SMS_FINANCIAL_TRANSACTIONS false, // READ_MEDIA_AUDIO false, // WRITE_MEDIA_AUDIO false, // READ_MEDIA_VIDEO false, // WRITE_MEDIA_VIDEO false, // READ_MEDIA_IMAGES false, // WRITE_MEDIA_IMAGES false, // LEGACY_STORAGE false, // ACCESS_ACCESSIBILITY false, // READ_DEVICE_IDENTIFIERS false, // ACCESS_MEDIA_LOCATION false, // QUERY_ALL_PACKAGES false, // MANAGE_EXTERNAL_STORAGE false, // INTERACT_ACROSS_PROFILES false, // ACTIVATE_PLATFORM_VPN false, // LOADER_USAGE_STATS false, // ACCESS_CALL_AUDIO false, // AUTO_REVOKE_PERMISSIONS_IF_UNUSED private static RestrictionBypass[] sOpAllowSystemRestrictionBypass = new RestrictionBypass[] { new RestrictionBypass(true, false), //COARSE_LOCATION new RestrictionBypass(true, false), //FINE_LOCATION null, //GPS null, //VIBRATE null, //READ_CONTACTS null, //WRITE_CONTACTS null, //READ_CALL_LOG null, //WRITE_CALL_LOG null, //READ_CALENDAR null, //WRITE_CALENDAR new RestrictionBypass(true, false), //WIFI_SCAN null, //POST_NOTIFICATION null, //NEIGHBORING_CELLS null, //CALL_PHONE null, //READ_SMS null, //WRITE_SMS null, //RECEIVE_SMS null, //RECEIVE_EMERGECY_SMS null, //RECEIVE_MMS null, //RECEIVE_WAP_PUSH null, //SEND_SMS null, //READ_ICC_SMS null, //WRITE_ICC_SMS null, //WRITE_SETTINGS new RestrictionBypass(true, false), //SYSTEM_ALERT_WINDOW null, //ACCESS_NOTIFICATIONS null, //CAMERA new RestrictionBypass(false, true), //RECORD_AUDIO null, //PLAY_AUDIO null, //READ_CLIPBOARD null, //WRITE_CLIPBOARD null, //TAKE_MEDIA_BUTTONS null, //TAKE_AUDIO_FOCUS null, //AUDIO_MASTER_VOLUME null, //AUDIO_VOICE_VOLUME null, //AUDIO_RING_VOLUME null, //AUDIO_MEDIA_VOLUME null, //AUDIO_ALARM_VOLUME null, //AUDIO_NOTIFICATION_VOLUME null, //AUDIO_BLUETOOTH_VOLUME null, //WAKE_LOCK null, //MONITOR_LOCATION null, //MONITOR_HIGH_POWER_LOCATION null, //GET_USAGE_STATS null, //MUTE_MICROPHONE new RestrictionBypass(true, false), //TOAST_WINDOW null, //PROJECT_MEDIA null, //ACTIVATE_VPN null, //WALLPAPER null, //ASSIST_STRUCTURE null, //ASSIST_SCREENSHOT null, //READ_PHONE_STATE null, //ADD_VOICEMAIL null, // USE_SIP null, // PROCESS_OUTGOING_CALLS null, // USE_FINGERPRINT null, // BODY_SENSORS null, // READ_CELL_BROADCASTS null, // MOCK_LOCATION null, // READ_EXTERNAL_STORAGE null, // WRITE_EXTERNAL_STORAGE null, // TURN_ON_SCREEN null, // GET_ACCOUNTS null, // RUN_IN_BACKGROUND null, // AUDIO_ACCESSIBILITY_VOLUME null, // READ_PHONE_NUMBERS null, // REQUEST_INSTALL_PACKAGES null, // ENTER_PICTURE_IN_PICTURE_ON_HIDE null, // INSTANT_APP_START_FOREGROUND null, // ANSWER_PHONE_CALLS null, // OP_RUN_ANY_IN_BACKGROUND null, // OP_CHANGE_WIFI_STATE null, // OP_REQUEST_DELETE_PACKAGES null, // OP_BIND_ACCESSIBILITY_SERVICE null, // ACCEPT_HANDOVER null, // MANAGE_IPSEC_HANDOVERS null, // START_FOREGROUND new RestrictionBypass(true, false), // BLUETOOTH_SCAN null, // USE_BIOMETRIC null, // ACTIVITY_RECOGNITION null, // SMS_FINANCIAL_TRANSACTIONS null, // READ_MEDIA_AUDIO null, // WRITE_MEDIA_AUDIO null, // READ_MEDIA_VIDEO null, // WRITE_MEDIA_VIDEO null, // READ_MEDIA_IMAGES null, // WRITE_MEDIA_IMAGES null, // LEGACY_STORAGE null, // ACCESS_ACCESSIBILITY null, // READ_DEVICE_IDENTIFIERS null, // ACCESS_MEDIA_LOCATION null, // QUERY_ALL_PACKAGES null, // MANAGE_EXTERNAL_STORAGE null, // INTERACT_ACROSS_PROFILES null, // ACTIVATE_PLATFORM_VPN null, // LOADER_USAGE_STATS null, // ACCESS_CALL_AUDIO null, // AUTO_REVOKE_PERMISSIONS_IF_UNUSED }; /** Loading Loading @@ -2485,11 +2485,11 @@ public class AppOpsManager { } /** * Retrieve whether the op allows the system (and system ui) to * bypass the user restriction. * Retrieve whether the op allows to bypass the user restriction. * * @hide */ public static boolean opAllowSystemBypassRestriction(int op) { public static RestrictionBypass opAllowSystemBypassRestriction(int op) { return sOpAllowSystemRestrictionBypass[op]; } Loading Loading @@ -2535,6 +2535,29 @@ public class AppOpsManager { return !sOpDisableReset[op]; } /** * When to not enforce {@link #setUserRestriction restrictions}. * * @hide */ public static class RestrictionBypass { /** Does the app need to be privileged to bypass the restriction */ public boolean isPrivileged; /** * Does the app need to have the EXEMPT_FROM_AUDIO_RESTRICTIONS permission to bypass the * restriction */ public boolean isRecordAudioRestrictionExcept; public RestrictionBypass(boolean isPrivileged, boolean isRecordAudioRestrictionExcept) { this.isPrivileged = isPrivileged; this.isRecordAudioRestrictionExcept = isRecordAudioRestrictionExcept; } public static RestrictionBypass UNRESTRICTED = new RestrictionBypass(true, true); } /** * Class holding all of the operation information associated with an app. * @hide Loading
core/res/AndroidManifest.xml +10 −0 Original line number Diff line number Diff line Loading @@ -1187,6 +1187,16 @@ android:description="@string/permdesc_callCompanionApp" android:protectionLevel="normal" /> <!-- Exempt this uid from restrictions to background audio recoding <p>Protection level: signature|privileged @hide @SystemApi --> <permission android:name="android.permission.EXEMPT_FROM_AUDIO_RECORD_RESTRICTIONS" android:label="@string/permlab_exemptFromAudioRecordRestrictions" android:description="@string/permdesc_exemptFromAudioRecordRestrictions" android:protectionLevel="signature|privileged" /> <!-- Allows a calling app to continue a call which was started in another app. An example is a video calling app that wants to continue a voice call on the user's mobile network.<p> When the handover of a call from one app to another takes place, there are two devices Loading
core/res/res/values/strings.xml +8 −0 Original line number Diff line number Diff line Loading @@ -1217,6 +1217,14 @@ device. This includes information such as call numbers for calls and the state of the calls.</string> <!-- Title of an application permission. When granted the app is exempt from audio record restrictions. [CHAR LIMIT=NONE]--> <string name="permlab_exemptFromAudioRecordRestrictions">exempt from audio record restrictions</string> <!-- Description of an application permission. When granted the app is exempt from audio record restrictions. [CHAR LIMIT=NONE]--> <string name="permdesc_exemptFromAudioRecordRestrictions">Exempt the app from restrictions to record audio.</string> <!-- Title of an application permission. When granted the user is giving access to a third party app to continue a call which originated in another app. For example, the user could be in a voice call over their carrier's mobile network, and a third party video Loading