blob: 9b9577fce1cfdf5ab1789f9845766fe7c3bfafbd [file] [log] [blame]
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2018 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License"" />
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<roles>
<permission-set name="phone">
<permission name="android.permission.READ_PHONE_STATE" />
<permission name="android.permission.CALL_PHONE" />
<permission name="android.permission.READ_CALL_LOG" />
<permission name="android.permission.WRITE_CALL_LOG" />
<permission name="com.android.voicemail.permission.ADD_VOICEMAIL" />
<permission name="android.permission.USE_SIP" />
<permission name="android.permission.PROCESS_OUTGOING_CALLS" />
</permission-set>
<permission-set name="contacts">
<permission name="android.permission.READ_CONTACTS" />
<permission name="android.permission.WRITE_CONTACTS" />
<permission name="android.permission.GET_ACCOUNTS" />
</permission-set>
<permission-set name="location">
<permission name="android.permission.ACCESS_FINE_LOCATION" />
<permission name="android.permission.ACCESS_COARSE_LOCATION" />
</permission-set>
<permission-set name="coarse_location">
<permission name="android.permission.ACCESS_COARSE_LOCATION" />
</permission-set>
<permission-set name="calendar">
<permission name="android.permission.READ_CALENDAR" />
<permission name="android.permission.WRITE_CALENDAR" />
</permission-set>
<permission-set name="sms">
<permission name="android.permission.SEND_SMS" />
<permission name="android.permission.RECEIVE_SMS" />
<permission name="android.permission.READ_SMS" />
<permission name="android.permission.RECEIVE_WAP_PUSH" />
<permission name="android.permission.RECEIVE_MMS" />
<permission name="android.permission.READ_CELL_BROADCASTS" />
</permission-set>
<permission-set name="microphone">
<permission name="android.permission.RECORD_AUDIO" />
</permission-set>
<permission-set name="camera">
<permission name="android.permission.CAMERA" />
</permission-set>
<permission-set name="sensors">
<permission name="android.permission.BODY_SENSORS" />
</permission-set>
<permission-set name="media_aural">
<permission name="android.permission.READ_MEDIA_AUDIO" />
</permission-set>
<permission-set name="media_visual">
<permission name="android.permission.READ_MEDIA_VIDEO" />
<permission name="android.permission.READ_MEDIA_IMAGES" />
</permission-set>
<!---
~ @see com.android.settings.applications.defaultapps.DefaultBrowserPreferenceController
~ @see com.android.settings.applications.defaultapps.DefaultBrowserPicker
~ @see com.android.server.pm.PackageManagerService.resolveAllBrowserApps(int)
~ @see com.android.server.pm.PackageManagerService.setDefaultBrowserPackageName(String, int)
~ @see com.android.server.pm.permission.DefaultPermissionGrantPolicy.grantDefaultPermissionsToDefaultBrowser(String, int)
-->
<role name="android.app.role.BROWSER" exclusive="true" label="@string/role_label_browser">
<!--
~ Required components matching is handled in BrowserRoleBehavior because it needs the
~ PackageManager.MATCH_ALL flag and other manual filtering, which cannot fit in our
~ current mechanism easily.
-->
<!--
<required-components>
<activity>
<intent-filter>
<action name="android.intent.action.VIEW" />
<category name="android.intent.category.BROWSABLE" />
<data scheme="http" />
</intent-filter>
</activity>
</required-components>
-->
<!--
~ Not need to set preferred activity because PackageManager handles browser intents
~ specially.
-->
</role>
<!--
~ @see com.android.settings.applications.defaultapps.DefaultPhonePreferenceController
~ @see com.android.settings.applications.defaultapps.DefaultPhonePicker
~ @see android.telecom.DefaultDialerManager
~ @see com.android.server.pm.permission.DefaultPermissionGrantPolicy.grantDefaultPermissionsToDefaultDialerApp(String, int)
~ @see com.android.server.pm.Settings.setDefaultDialerPackageNameLPw(String, int)
-->
<role
name="android.app.role.DIALER"
behavior="DialerRoleBehavior"
exclusive="true"
label="@string/role_label_dialer">
<required-components>
<activity>
<intent-filter>
<action name="android.intent.action.DIAL" />
</intent-filter>
</activity>
<activity>
<intent-filter>
<action name="android.intent.action.DIAL" />
<data scheme="tel" />
</intent-filter>
</activity>
<service permission="android.permission.BIND_INCALL_SERVICE">
<meta-data name="android.telecom.IN_CALL_SERVICE_UI" value="true" />
<meta-data
name="android.telecom.IN_CALL_SERVICE_CAR_MODE_UI"
value="false"
optional="true" />
<intent-filter>
<action name="android.telecom.InCallService" />
</intent-filter>
</service>
</required-components>
<permissions>
<permission-set name="phone" />
<permission-set name="contacts" />
<permission-set name="sms" />
<permission-set name="microphone" />
<permission-set name="camera" />
</permissions>
<app-ops>
<!--
~ @see com.android.settings.applications.defaultapps.DefaultPhonePicker#setDefaultKey(String)
~ @see com.android.settings.fuelgauge.BatteryUtils#setForceAppStandby(int, String, int)
-->
<app-op name="android:run_in_background" maxTargetSdkVersion="25" mode="allowed" />
<app-op name="android:run_any_in_background" mode="allowed" />
</app-ops>
<preferred-activities>
<preferred-activity>
<activity>
<intent-filter>
<action name="android.intent.action.DIAL" />
<data scheme="tel" />
</intent-filter>
</activity>
<!-- TODO: STOPSHIP: Set preferred? -->
<intent-filter>
<action name="android.intent.action.DIAL" />
<data scheme="tel" />
</intent-filter>
</preferred-activity>
</preferred-activities>
</role>
<!--
~ @see com.android.settings.applications.defaultapps.DefaultSmsPreferenceController
~ @see com.android.settings.applications.defaultapps.DefaultSmsPicker
~ @see com.android.internal.telephony.SmsApplication
~ @see com.android.server.pm.permission.DefaultPermissionGrantPolicy.grantDefaultPermissionsToDefaultSmsApp(String, int)
-->
<role
name="android.app.role.SMS"
behavior="SmsRoleBehavior"
exclusive="true"
label="@string/role_label_sms">
<required-components>
<receiver permission="android.permission.BROADCAST_SMS">
<intent-filter>
<action name="android.provider.Telephony.SMS_DELIVER" />
</intent-filter>
</receiver>
<receiver permission="android.permission.BROADCAST_WAP_PUSH">
<intent-filter>
<action name="android.provider.Telephony.WAP_PUSH_DELIVER" />
<data mimeType="application/vnd.wap.mms-message" />
</intent-filter>
</receiver>
<service permission="android.permission.SEND_RESPOND_VIA_MESSAGE">
<intent-filter>
<action name="android.intent.action.RESPOND_VIA_MESSAGE" />
<data scheme="smsto" />
</intent-filter>
</service>
<activity>
<intent-filter>
<action name="android.intent.action.SENDTO" />
<data scheme="smsto" />
</intent-filter>
</activity>
</required-components>
<permissions>
<permission-set name="phone" />
<permission-set name="contacts" />
<permission-set name="sms" />
<permission-set name="media_aural" />
<permission-set name="media_visual" />
<permission-set name="microphone" />
<permission-set name="camera" />
</permissions>
<app-ops>
<app-op name="android:write_sms" mode="allowed" />
<!--
~ @see com.android.settings.applications.defaultapps.DefaultSmsPicker#setDefaultKey(String)
~ @see com.android.settings.fuelgauge.BatteryUtils#setForceAppStandby(int, String, int)
-->
<app-op name="android:run_in_background" maxTargetSdkVersion="25" mode="allowed" />
<app-op name="android:run_any_in_background" mode="allowed" />
</app-ops>
<preferred-activities>
<preferred-activity>
<activity>
<intent-filter>
<action name="android.intent.action.SENDTO" />
<data scheme="smsto" />
</intent-filter>
</activity>
<intent-filter>
<action name="android.intent.action.SENDTO" />
<data scheme="sms" />
</intent-filter>
<intent-filter>
<action name="android.intent.action.SENDTO" />
<data scheme="smsto" />
</intent-filter>
<intent-filter>
<action name="android.intent.action.SENDTO" />
<data scheme="mms" />
</intent-filter>
<intent-filter>
<action name="android.intent.action.SENDTO" />
<data scheme="mmsto" />
</intent-filter>
</preferred-activity>
</preferred-activities>
</role>
<!-- TODO: STOPSHIP: Add availability and confirmation message in role behavior. -->
<!-- TODO: STOPSHIP: Intent action sometimes changing dynamically in com.android.phone.EmergencyAssistanceHelper.getIntentAction -->
<!-- TODO: STOPSHIP: Make this non-configurable at least by default. -->
<!-- TODO: STOPSHIP: Make sure we initialize an emergency app for user. -->
<!---
~ @see com.android.settings.applications.defaultapps.DefaultEmergencyPreferenceController
~ @see com.android.settings.applications.defaultapps.DefaultEmergencyPicker
~ @see com.android.phone.EmergencyAssistanceHelper
-->
<role
name="android.app.role.EMERGENCY"
exclusive="true"
label="@string/role_label_emergency"
systemOnly="true">
<required-components>
<activity>
<intent-filter>
<action name="android.telephony.action.EMERGENCY_ASSISTANCE" />
</intent-filter>
</activity>
</required-components>
</role>
<!-- TODO: STOPSHIP: Add availability in role behavior. -->
<!-- TODO: STOPSHIP: Filter qualifiying apps according to work profile support as in com.android.settings.applications.defaultapps.DefaultHomePicker.getCandidates() -->
<!---
~ @see com.android.settings.applications.defaultapps.DefaultHomePreferenceController
~ @see com.android.settings.applications.defaultapps.DefaultHomePicker
~ @see com.android.server.pm.PackageManagerService#setHomeActivity(ComponentName, int)
-->
<role name="android.app.role.HOME" exclusive="true" label="@string/role_label_home">
<required-components>
<activity>
<intent-filter>
<action name="android.intent.action.MAIN" />
<category name="android.intent.category.HOME" />
</intent-filter>
</activity>
</required-components>
<preferred-activities>
<preferred-activity>
<activity>
<intent-filter>
<action name="android.intent.action.MAIN" />
<category name="android.intent.category.HOME" />
</intent-filter>
</activity>
<intent-filter>
<action name="android.intent.action.MAIN" />
<category name="android.intent.category.HOME" />
</intent-filter>
</preferred-activity>
</preferred-activities>
</role>
<role name="android.app.role.MUSIC" exclusive="true" label="@string/role_label_music">
<required-components>
<activity>
<intent-filter>
<action name="android.intent.action.MAIN" />
<category name="android.intent.category.APP_MUSIC" />
</intent-filter>
</activity>
</required-components>
<permissions>
<permission-set name="media_aural" />
</permissions>
<app-ops>
<app-op name="android:write_media_audio" mode="allowed" />
</app-ops>
<preferred-activities>
<preferred-activity>
<activity>
<intent-filter>
<action name="android.intent.action.MAIN" />
<category name="android.intent.category.APP_MUSIC" />
</intent-filter>
</activity>
<intent-filter>
<action name="android.intent.action.MAIN" />
<category name="android.intent.category.APP_MUSIC" />
</intent-filter>
</preferred-activity>
</preferred-activities>
</role>
<role name="android.app.role.GALLERY" exclusive="true" label="@string/role_label_gallery">
<required-components>
<activity>
<intent-filter>
<action name="android.intent.action.MAIN" />
<category name="android.intent.category.APP_GALLERY" />
</intent-filter>
</activity>
</required-components>
<permissions>
<permission-set name="media_visual" />
</permissions>
<app-ops>
<app-op name="android:write_media_video" mode="allowed" />
<app-op name="android:write_media_images" mode="allowed" />
</app-ops>
<preferred-activities>
<preferred-activity>
<activity>
<intent-filter>
<action name="android.intent.action.MAIN" />
<category name="android.intent.category.APP_GALLERY" />
</intent-filter>
</activity>
<intent-filter>
<action name="android.intent.action.MAIN" />
<category name="android.intent.category.APP_GALLERY" />
</intent-filter>
</preferred-activity>
</preferred-activities>
</role>
<!--- @see android.telecom.InCallService -->
<role
name="android.app.role.CAR_MODE_DIALER_APP"
exclusive="true"
label="@string/role_label_car_mode_dialer">
<required-components>
<service permission="android.permission.BIND_INCALL_SERVICE">
<meta-data
name="android.telecom.IN_CALL_SERVICE_UI"
value="false"
optional="true" />
<meta-data name="android.telecom.IN_CALL_SERVICE_CAR_MODE_UI" value="true" />
<intent-filter>
<action name="android.telecom.InCallService" />
</intent-filter>
</service>
</required-components>
</role>
<!--- @see android.telecom.CallRedirectionService -->
<role
name="android.app.role.PROXY_CALLING_APP"
exclusive="true"
label="@string/role_label_proxy_calling">
<required-components>
<service permission="android.permission.BIND_CALL_REDIRECTION_SERVICE">
<intent-filter>
<action name="android.telecom.CallRedirectionService" />
</intent-filter>
</service>
</required-components>
</role>
<!--- @see android.telecom.CallScreeningService -->
<role
name="android.app.role.CALL_SCREENING_APP"
exclusive="true"
label="@string/role_label_call_screening">
<required-components>
<service permission="android.permission.BIND_SCREENING_SERVICE">
<intent-filter>
<action name="android.telecom.CallScreeningService" />
</intent-filter>
</service>
</required-components>
</role>
<!--- @see android.telecom.InCallService -->
<role
name="android.app.role.CALL_COMPANION_APP"
exclusive="false"
label="@string/role_label_call_companion">
<required-components>
<service permission="android.permission.BIND_INCALL_SERVICE">
<meta-data
name="android.telecom.IN_CALL_SERVICE_UI"
value="false"
optional="true" />
<meta-data
name="android.telecom.IN_CALL_SERVICE_CAR_MODE_UI"
value="false"
optional="true" />
<intent-filter>
<action name="android.telecom.InCallService" />
</intent-filter>
</service>
</required-components>
</role>
<role
name="android.app.role.ASSISTANT"
behavior="AssistantRoleBehavior"
exclusive="true"
showNone="true"
label="@string/role_label_assistant">
<required-components>
<!-- Qualified components are determined int AssistantRoleBehavior. This comment here is
ignored and represents just a rough description
<any-of>
<service permission="android.permission.BIND_VOICE_INTERACTION"
supportsAssist="true">
<intent-filter>
<action name="android.service.voice.VoiceInteractionService" />
</intent-filter>
<meta-data name="android.voice_interaction"
optional="false">
required tag in metadata xml: sessionService
required tag in metadata xml: recognitionService
required tag in metadata xml: supportsAssist = true
</meta-data>
</service>
<activity>
<intent-filter>
<action name="android.intent.action.ASSIST" />
</intent-filter>
</activity>
</ any-of>
-->
</required-components>
<permissions>
<!-- STOPSHIP: Allow to only enable permissions, but not grant them -->
<permission-set name="sms" />
<permission name="android.permission.READ_CALL_LOG" />
</permissions>
</role>
<!-- STOPSHIP: Allow any app to access SMS -->
<role
name="android.app.role.TEMPORARY_SMS_ACCESS"
behavior="TemporarySmsAccessRoleBehavior"
exclusive="false"
label="@string/role_label_temporary_sms_access">
<permissions>
<permission-set name="sms" />
</permissions>
</role>
</roles>