| <?xml version="1.0" encoding="utf-8"?> |
| <!-- Copyright 2015 The Chromium Authors. All rights reserved. |
| Use of this source code is governed by a BSD-style license that can be |
| found in the LICENSE file. --> |
| |
| <!-- |
| Note: This is a jinja2 template, processed at build time into the final manifest. |
| |
| Blocks denoted with { % block some_name % }foo{ % endblock % } can be overridden |
| by a child template that "extends" this file. |
| --> |
| |
| <manifest xmlns:android="http://schemas.android.com/apk/res/android" |
| xmlns:tools="http://schemas.android.com/tools" |
| package="{{ manifest_package }}" |
| {% set definitions_in_split = definitions_in_split|default(0) == 'true' %} |
| {% set enable_isolated_splits = enable_isolated_splits|default(0) == 'true' %} |
| {% if enable_isolated_splits %} |
| android:isolatedSplits="true" |
| {% endif %} |
| tools:ignore="MissingVersion"> |
| <!-- android:versionCode and android:versionName is set through gyp. See build/common.gypi --> |
| |
| <uses-feature android:glEsVersion="0x00020000" /> |
| |
| <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> |
| <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> |
| <uses-permission-sdk-23 android:name="android.permission.ACCESS_WIFI_STATE" /> |
| <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> |
| |
| <!-- |
| Enable runtime permissions as uses-permission in tip of tree builds |
| only for ease of development on Android L and earlier. For consumer |
| channels use "runtime permission" uses-permission-sdk-23 which provides |
| permission on Android M and later without a prompt. |
| --> |
| {% if channel in ['default'] %} |
| <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/> |
| {% endif %} |
| <uses-permission-sdk-23 android:name="android.permission.BLUETOOTH"/> |
| <uses-permission-sdk-23 android:name="android.permission.BLUETOOTH_ADMIN"/> |
| <uses-permission-sdk-23 android:name="android.permission.READ_CONTACTS"/> |
| <uses-permission-sdk-23 android:name="android.permission.REORDER_TASKS"/> |
| <uses-permission-sdk-23 android:name="android.permission.REQUEST_INSTALL_PACKAGES"/> |
| |
| <uses-permission android:name="android.permission.CAMERA" /> |
| <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> |
| <uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION" /> |
| <uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> |
| <uses-permission android:name="android.permission.GET_ACCOUNTS"/> |
| <uses-permission android:name="android.permission.INTERNET"/> |
| <uses-permission android:name="android.permission.MANAGE_ACCOUNTS"/> |
| <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/> |
| <uses-permission android:name="android.permission.NFC"/> |
| <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" /> |
| <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> |
| <uses-permission android:name="android.permission.READ_SYNC_SETTINGS"/> |
| <uses-permission android:name="android.permission.READ_SYNC_STATS"/> |
| <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> |
| <uses-permission android:name="android.permission.RECORD_AUDIO"/> |
| <uses-permission android:name="android.permission.USE_CREDENTIALS"/> |
| <uses-permission-sdk-23 android:name="android.permission.USE_BIOMETRIC"/> |
| <uses-permission-sdk-23 android:name="android.permission.USE_FINGERPRINT"/> |
| <uses-permission android:name="android.permission.VIBRATE"/> |
| <uses-permission android:name="android.permission.WAKE_LOCK"/> |
| <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> |
| <uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS"/> |
| {% set enable_vr = enable_vr|default(0) %} |
| {% if enable_vr == "true" %} |
| <!-- Indicates use of Android's VR-mode, available only on Android N+. --> |
| <uses-feature android:name="android.software.vr.mode" android:required="false"/> |
| <!-- Indicates use of VR features that are available only on Daydream-ready devices. --> |
| <uses-feature android:name="android.hardware.vr.high_performance" android:required="false"/> |
| <!-- |
| Indicates that we don't need Chrome to be available on devices that only support landscape |
| orientation. This is needed because we have VR specific activities that declare the |
| android:orientation attribute. |
| --> |
| <uses-feature android:name="android.hardware.screen.landscape" android:required="false"/> |
| <!-- Indicates that head tracking should be done in 6DoF, if available --> |
| <uses-feature android:name="android.hardware.vr.headtracking" android:version="1" android:required="false"/> |
| <!-- Feature declarations required to support conditional install for VR DFM --> |
| <uses-feature android:name="android.hardware.sensor.gyroscope" android:required="false"/> |
| <uses-feature android:name="android.hardware.sensor.accelerometer" android:required="false"/> |
| {% endif %} |
| |
| <permission android:name="{{ manifest_package }}.permission.CHILD_SERVICE" android:protectionLevel="signature" /> |
| <permission android:name="{{ manifest_package }}.permission.READ_WRITE_BOOKMARK_FOLDERS" android:protectionLevel="signatureOrSystem" /> |
| <permission android:name="{{ manifest_package }}.TOS_ACKED" android:protectionLevel="signatureOrSystem" /> |
| <!-- Only chrome can receive the messages and registration result --> |
| <permission android:name="{{ manifest_package }}.permission.C2D_MESSAGE" |
| android:protectionLevel="signature" /> |
| <permission android:name="{{ manifest_package }}.permission.DEBUG" |
| android:label="Debug web pages" |
| android:protectionLevel="signature" /> |
| <permission android:name="{{ manifest_package }}.permission.TRANSLATE" |
| android:protectionLevel="signature" /> |
| |
| <uses-permission android:name="{{ manifest_package }}.permission.C2D_MESSAGE" /> |
| <uses-permission android:name="{{ manifest_package }}.permission.READ_WRITE_BOOKMARK_FOLDERS" /> |
| <uses-permission android:name="{{ manifest_package }}.TOS_ACKED" /> |
| |
| <uses-permission android:name="com.chrome.permission.DEVICE_EXTRAS" /> |
| <uses-permission android:name="com.android.browser.permission.READ_HISTORY_BOOKMARKS"/> |
| <uses-permission android:name="com.android.browser.permission.WRITE_HISTORY_BOOKMARKS"/> |
| <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> |
| <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/> |
| |
| <uses-permission android:name="com.google.android.apps.now.CURRENT_ACCOUNT_ACCESS" /> |
| |
| {% block extra_uses_permissions %} |
| {% endblock %} |
| |
| <!-- We may use GPS but it's not required --> |
| <uses-feature android:name="android.hardware.location.gps" android:required="false" /> |
| <uses-feature android:name="android.hardware.camera" android:required="false" /> |
| |
| <!-- |
| android.permission.RECORD_AUDIO makes this implied, however we don't |
| require a microphone. |
| --> |
| <uses-feature android:name="android.hardware.microphone" android:required="false" /> |
| <!-- |
| The app is usable with keyboard/mouse. This feature is implicitly true for |
| all applications and needs to be disabled manually. |
| --> |
| <uses-feature android:name="android.hardware.touchscreen" android:required="false" /> |
| |
| {% block extra_keyset_definitions %} |
| {% endblock %} |
| |
| {% if channel in ['default'] %} |
| <!-- |
| Android 11 (R) restricts querying for installed packages. WebXR uses |
| ARCore and/or GVR, and needs to be able to check their installation |
| status so that it can show install/update infobars if necessary. |
| Official builds (stable, beta, dev, canary) handle this differently, |
| this setting is for locally deployed ToT builds only. |
| |
| TODO(https://crbug.com/1122210): remove if this is replaced by an |
| alternate mechanism. |
| --> |
| <queries> |
| {% if include_arcore_manifest_flag == 'true' %} |
| <package android:name="com.google.ar.core" /> |
| {% endif %} |
| {% if enable_vr == "true" %} |
| <package android:name="com.google.vr.vrcore" /> |
| {% endif %} |
| </queries> |
| {% endif %} |
| |
| <!-- Set android:largeHeap to "true" to allow more than the default |
| Java heap limit (32Mb on Nexus S, 48Mb on Xoom). --> |
| <application android:name="{% block application_name %} |
| {%- if enable_isolated_splits -%} |
| org.chromium.chrome.browser.base.SplitChromeApplication |
| {%- else -%} |
| org.chromium.chrome.browser.ChromeApplication |
| {%- endif -%} |
| {% endblock %}" |
| android:icon="@drawable/ic_launcher" |
| android:roundIcon="@drawable/ic_launcher_round" |
| android:label="{% block application_label %}@string/app_name{% endblock %}" |
| android:largeHeap="false" |
| android:manageSpaceActivity="@string/manage_space_activity" |
| android:supportsRtl="true" |
| android:zygotePreloadName="org.chromium.content.app.ZygotePreload" |
| {% if backup_key is defined %} |
| android:allowBackup="true" |
| android:backupAgent="org.chromium.chrome.browser.ChromeBackupAgent" |
| android:fullBackupOnly="false" |
| android:restoreAnyVersion="true" |
| {% else %} |
| android:allowBackup="false" |
| {% endif %} |
| android:networkSecurityConfig="@xml/network_security_config" |
| android:allowAudioPlaybackCapture="false" |
| {% if enable_isolated_splits %} |
| android:appComponentFactory="org.chromium.chrome.browser.base.SplitCompatAppComponentFactory" |
| {% endif %} |
| {% block extra_application_attributes %}{% endblock %}> |
| |
| {% macro application_definitions() %} |
| <!-- Note: All activities directly or indirectly derived from ChromeActivity |
| must specify android:hardwareAccelerated="false". |
| |
| Since this activity (shown in the launcher) and the application |
| (shown in Android's Settings/Apps list) share the same label, we |
| do not specify one here to allow it to inherit from the app. --> |
| <activity android:name="org.chromium.chrome.browser.document.ChromeLauncherActivity" |
| android:theme="@style/LauncherTheme" |
| android:relinquishTaskIdentity="true" |
| android:taskAffinity="" |
| android:excludeFromRecents="true" |
| android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize|uiMode|density"> |
| </activity> |
| <activity-alias android:name="com.google.android.apps.chrome.IntentDispatcher" |
| android:targetActivity="org.chromium.chrome.browser.document.ChromeLauncherActivity" |
| android:exported="true"> |
| <intent-filter> |
| <action android:name="android.intent.action.MAIN" /> |
| <category android:name="android.intent.category.NOTIFICATION_PREFERENCES" /> |
| </intent-filter> |
| <!-- Matches the common case of intents with no MIME type. |
| Make sure to keep in sync with the next filter. --> |
| <intent-filter> |
| {% block common_view_intent_shared_filter_body %} |
| <action android:name="android.intent.action.VIEW" /> |
| <category android:name="android.intent.category.DEFAULT" /> |
| {% if channel in ['stable', 'default'] %}<data android:scheme="googlechrome" />{% endif %} |
| <data android:scheme="http" /> |
| <data android:scheme="https" /> |
| <data android:scheme="about" /> |
| <data android:scheme="javascript" /> |
| {% endblock %} |
| <category android:name="android.intent.category.BROWSABLE" /> |
| </intent-filter> |
| <!-- Same filter as above but with MIME types. Intents that |
| do not specify a MIME type won't match. --> |
| <intent-filter tools:ignore="AppLinkUrlError"> |
| {{ self.common_view_intent_shared_filter_body() }} |
| <data android:scheme="content" /> |
| <data android:mimeType="text/html"/> |
| <data android:mimeType="text/plain"/> |
| <data android:mimeType="application/xhtml+xml"/> |
| </intent-filter> |
| <!-- MHTML support, used for snapshots --> |
| <intent-filter> |
| <action android:name="android.intent.action.VIEW" /> |
| <category android:name="android.intent.category.DEFAULT" /> |
| <category android:name="android.intent.category.BROWSABLE" /> |
| <data android:scheme="file"/> |
| <data android:mimeType="multipart/related"/> |
| </intent-filter> |
| <intent-filter> |
| <action android:name="android.intent.action.VIEW" /> |
| <category android:name="android.intent.category.DEFAULT" /> |
| <data android:scheme="content"/> |
| <data android:mimeType="multipart/related"/> |
| </intent-filter> |
| <intent-filter> |
| <action android:name="android.intent.action.VIEW" /> |
| <category android:name="android.intent.category.DEFAULT" /> |
| <data android:scheme="file"/> |
| <data android:scheme="content"/> |
| <data android:mimeType="message/rfc822"/> |
| </intent-filter> |
| <intent-filter> |
| {% block mhtml_view_intent_shared_filter_body %} |
| <action android:name="android.intent.action.VIEW" /> |
| <category android:name="android.intent.category.DEFAULT" /> |
| <category android:name="android.intent.category.BROWSABLE" /> |
| <data android:scheme="file"/> |
| <data android:host="*" /> |
| {% for i in range(10) %} |
| <data android:pathPattern="/.*{{ '\\\\..*' * i }}\\.mhtml" /> |
| <data android:pathPattern="/.*{{ '\\\\..*' * i }}\\.mht" /> |
| {% endfor %} |
| {% endblock %} |
| </intent-filter> |
| <!-- Same filter as above but with mimeType="*/*". Used for |
| handling intent send by ShareIt. --> |
| <intent-filter> |
| {{ self.mhtml_view_intent_shared_filter_body() }} |
| <data android:mimeType="*/*"/> |
| </intent-filter> |
| <!-- Web Bundles (.wbn) support --> |
| {% if channel in ['dev', 'canary', 'default'] %} |
| <intent-filter> |
| {% block wbn_view_intent_shared_filter_body %} |
| <action android:name="android.intent.action.VIEW" /> |
| <category android:name="android.intent.category.DEFAULT" /> |
| <category android:name="android.intent.category.BROWSABLE" /> |
| <data android:scheme="file" /> |
| <data android:host="*" /> |
| {% for i in range(10) %} |
| <data android:pathPattern="/.*{{ '\\\\..*' * i }}\\.wbn" /> |
| {% endfor %} |
| {% endblock %} |
| </intent-filter> |
| <intent-filter> |
| {{ self.wbn_view_intent_shared_filter_body() }} |
| <data android:mimeType="*/*"/> |
| </intent-filter> |
| <intent-filter tools:ignore="AppLinkUrlError"> |
| <action android:name="android.intent.action.VIEW" /> |
| <category android:name="android.intent.category.DEFAULT" /> |
| <data android:scheme="content" /> |
| <data android:mimeType="application/webbundle" /> |
| </intent-filter> |
| {% endif %} |
| <intent-filter> |
| <action android:name="android.intent.action.MEDIA_SEARCH" /> |
| <category android:name="android.intent.category.DEFAULT" /> |
| </intent-filter> |
| <intent-filter> |
| <action android:name="android.speech.action.VOICE_SEARCH_RESULTS" /> |
| <category android:name="android.intent.category.DEFAULT" /> |
| </intent-filter> |
| <intent-filter> |
| <action android:name="android.nfc.action.NDEF_DISCOVERED" /> |
| <category android:name="android.intent.category.DEFAULT" /> |
| <data android:scheme="http" /> |
| <data android:scheme="https" /> |
| </intent-filter> |
| <intent-filter> |
| <action android:name="android.intent.action.SEARCH" /> |
| </intent-filter> |
| <intent-filter> |
| <action android:name="com.sec.android.airview.HOVER" /> |
| </intent-filter> |
| <meta-data android:name="android.app.searchable" |
| android:resource="@xml/searchable" /> |
| </activity-alias> |
| <activity-alias android:name="com.google.android.apps.chrome.TranslateDispatcher" |
| android:targetActivity="org.chromium.chrome.browser.document.ChromeLauncherActivity" |
| android:exported="true" |
| {% if channel == 'stable' %} |
| android:permission="{{ manifest_package }}.permission.TRANSLATE" |
| {% endif %} > |
| <intent-filter> |
| <action android:name="org.chromium.chrome.browser.translate.TRANSLATE_TAB" /> |
| <category android:name="android.intent.category.DEFAULT" /> |
| </intent-filter> |
| </activity-alias> |
| |
| <activity android:name="org.chromium.chrome.browser.media.MediaLauncherActivity" |
| android:theme="@android:style/Theme.NoDisplay" |
| android:excludeFromRecents="true" |
| android:exported="true" |
| android:enabled="false"><!-- This will be selectively enabled at runtime. --> |
| <intent-filter tools:ignore="AppLinkUrlError"> |
| <action android:name="android.intent.action.VIEW" /> |
| <category android:name="android.intent.category.DEFAULT" /> |
| <!-- TODO(https://crbug.com/800875): Limit these to supported MIME types. --> |
| <data android:mimeType="image/*" /> |
| <data android:mimeType="video/*" /> |
| <data android:scheme="file" /> |
| <data android:scheme="content" /> |
| </intent-filter> |
| </activity> |
| |
| <activity android:name="org.chromium.chrome.browser.media.PictureInPictureActivity" |
| android:exported="false" |
| android:noHistory="true" |
| android:theme="@style/Theme.Chromium.Activity" |
| android:excludeFromRecents="true" |
| android:configChanges= |
| "screenSize|smallestScreenSize|screenLayout|orientation" |
| {{ self.supports_video_persistence() }}> |
| </activity> |
| |
| <!-- We have a separate activity-alias for audio so that we can disable audio handling |
| without disabling video and image handling. We need this because there are memory |
| restrictions for music players on Android Go, so we want to only handle video and |
| images in that case. --> |
| <activity-alias android:name="org.chromium.chrome.browser.media.AudioLauncherActivity" |
| android:targetActivity="org.chromium.chrome.browser.media.MediaLauncherActivity" |
| android:theme="@android:style/Theme.NoDisplay" |
| android:excludeFromRecents="true" |
| android:exported="true" |
| android:enabled="false"><!-- This will be selectively enabled at runtime. --> |
| <intent-filter tools:ignore="AppLinkUrlError"> |
| <action android:name="android.intent.action.VIEW" /> |
| <category android:name="android.intent.category.DEFAULT" /> |
| <!-- TODO(https://crbug.com/800875): Limit these to supported MIME types. --> |
| <data android:mimeType="audio/*" /> |
| <data android:scheme="file" /> |
| <data android:scheme="content" /> |
| </intent-filter> |
| </activity-alias> |
| |
| <activity android:name="org.chromium.chrome.browser.LauncherShortcutActivity" |
| android:theme="@android:style/Theme.NoDisplay" |
| android:taskAffinity="" |
| android:excludeFromRecents="true" |
| android:exported="false" /> |
| |
| <activity android:name="org.chromium.chrome.browser.incognito.IncognitoTabLauncher" |
| android:theme="@android:style/Theme.NoDisplay" |
| android:taskAffinity="" |
| android:enabled="false" |
| android:excludeFromRecents="true" |
| android:exported="true"> |
| <intent-filter> |
| <action android:name="org.chromium.chrome.browser.incognito.OPEN_PRIVATE_TAB" /> |
| <category android:name="android.intent.category.DEFAULT" /> |
| </intent-filter> |
| </activity> |
| |
| <activity android:name="org.chromium.chrome.browser.app.reengagement.ReengagementActivity" |
| android:theme="@android:style/Theme.Translucent" |
| android:taskAffinity="" |
| android:excludeFromRecents="true" |
| android:exported="false" /> |
| |
| <receiver android:name="org.chromium.chrome.browser.sharing.click_to_call.ClickToCallMessageHandler$PhoneUnlockedReceiver" android:exported="true"> |
| <intent-filter> |
| <action android:name="android.intent.action.USER_PRESENT" /> |
| </intent-filter> |
| </receiver> |
| |
| <!-- Upgrade related --> |
| <receiver android:name="org.chromium.chrome.browser.upgrade.PackageReplacedBroadcastReceiver" |
| android:exported="false"> |
| <intent-filter> |
| <action android:name="android.intent.action.MY_PACKAGE_REPLACED" /> |
| </intent-filter> |
| </receiver> |
| |
| <!-- Locale related --> |
| <receiver android:name="org.chromium.chrome.browser.locale.LocaleChangedBroadcastReceiver" |
| android:exported="false"> |
| <intent-filter> |
| <action android:name="android.intent.action.LOCALE_CHANGED" /> |
| </intent-filter> |
| </receiver> |
| |
| <!-- Custom Tabs --> |
| <activity android:name="org.chromium.chrome.browser.customtabs.CustomTabActivity" |
| android:theme="@style/Theme.Chromium.Activity" |
| android:exported="false" |
| {{ self.chrome_activity_common() }} |
| {{ self.supports_video_persistence() }} |
| > |
| {{ self.supports_vr() }} |
| {{ self.extra_web_rendering_activity_definitions() }} |
| </activity> |
| <activity android:name="org.chromium.chrome.browser.customtabs.TranslucentCustomTabActivity" |
| android:theme="@style/Theme.Chromium.Activity.FakeTranslucent" |
| android:exported="false" |
| {{ self.chrome_activity_common() }} |
| {{ self.supports_video_persistence() }} |
| > |
| {{ self.supports_vr() }} |
| {{ self.extra_web_rendering_activity_definitions() }} |
| </activity> |
| <!-- ChromeTabbedActivity related --> |
| <activity android:name="org.chromium.chrome.browser.ChromeTabbedActivity" |
| android:theme="@style/Theme.Chromium.TabbedMode" |
| android:exported="true" |
| android:launchMode="singleTask" |
| {# We can only use blocks once in Jinja, for future substitutions we use |
| self.supports_video_persistence(). #} |
| {% block supports_video_persistence %} |
| android:supportsPictureInPicture="true" |
| android:resizeableActivity="true" |
| {% endblock %} |
| {% block chrome_activity_common %} |
| android:windowSoftInputMode="adjustResize" |
| android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize|uiMode|density" |
| android:hardwareAccelerated="false" |
| {% endblock %} |
| > |
| <!-- |
| Daydream api categorizes an activity to three categories: Cardboard only, hybrid |
| or Daydream. It does so by testing if intents can be resolved by the activity |
| that requests it. |
| --> |
| {% block supports_vr %} |
| <intent-filter> |
| <action android:name="org.chromium.chrome.browser.dummy.action" /> |
| <category android:name="com.google.intent.category.DAYDREAM" /> |
| <category android:name="com.google.intent.category.CARDBOARD" /> |
| </intent-filter> |
| {% endblock %} |
| |
| {% block extra_web_rendering_activity_definitions %} |
| {% endblock %} |
| </activity> |
| <!-- TODO(crbug.com/780674): retarget .Main back to CTA for non-modern APK --> |
| <activity-alias android:name="com.google.android.apps.chrome.Main" |
| {% if min_sdk_version|int < 21 %} |
| android:targetActivity="org.chromium.chrome.browser.document.ChromeLauncherActivity" |
| {% else %} |
| android:targetActivity="org.chromium.chrome.browser.ChromeTabbedActivity" |
| {% endif %} |
| android:exported="true"> |
| <intent-filter> |
| <action android:name="android.intent.action.MAIN" /> |
| <category android:name="android.intent.category.DEFAULT" /> |
| <category android:name="android.intent.category.LAUNCHER" /> |
| <category android:name="android.intent.category.BROWSABLE" /> |
| <category android:name="android.intent.category.APP_BROWSER" /> |
| {% if channel in ['dev', 'canary', 'default'] %} |
| <category android:name="android.intent.category.MULTIWINDOW_LAUNCHER" /> |
| {% endif %} |
| </intent-filter> |
| <meta-data android:name="android.app.shortcuts" |
| android:resource="@xml/launchershortcuts" /> |
| {{ self.supports_vr() }} |
| {% if min_sdk_version|int >= 21 %} |
| {{ self.extra_web_rendering_activity_definitions() }} |
| {% endif %} |
| </activity-alias> |
| <activity android:name="org.chromium.chrome.browser.ChromeTabbedActivity2" |
| android:theme="@style/Theme.Chromium.TabbedMode" |
| android:exported="false" |
| android:taskAffinity="{{ manifest_package }}.ChromeTabbedActivity2" |
| android:launchMode="singleTask" |
| {{ self.chrome_activity_common() }} |
| {{ self.supports_video_persistence() }} |
| > |
| {{ self.supports_vr() }} |
| {{ self.extra_web_rendering_activity_definitions() }} |
| </activity> |
| <activity android:name="org.chromium.chrome.browser.multiwindow.MultiInstanceChromeTabbedActivity" |
| android:theme="@style/Theme.Chromium.TabbedMode" |
| android:exported="false" |
| {{ self.chrome_activity_common() }}> |
| {{ self.extra_web_rendering_activity_definitions() }} |
| </activity> |
| |
| <!-- |
| TODO(crbug.com/1093292): investigate why |
| @android:style/Theme.NoDisplay can't be used here. |
| --> |
| <activity android:name="org.chromium.chrome.browser.sync.ui.TrustedVaultKeyRetrievalProxyActivity" |
| android:theme="@style/Theme.AppCompat" |
| android:excludeFromRecents="true" |
| android:exported="false"> |
| </activity> |
| <activity android:name="org.chromium.chrome.browser.sync.ui.PassphraseActivity" |
| android:theme="@style/Theme.Chromium.Activity" |
| android:autoRemoveFromRecents="true"> |
| </activity> |
| <activity android:name="org.chromium.chrome.browser.firstrun.LightweightFirstRunActivity" |
| android:theme="@style/Theme.Chromium.AlertDialog.NoActionBar" |
| {{ self.first_run_activity_common() }}> |
| </activity> |
| <activity android:name="org.chromium.chrome.browser.firstrun.FirstRunActivity" |
| android:theme="@style/Theme.Chromium.DialogWhenLarge" |
| {% block first_run_activity_common %} |
| android:label="@string/fre_activity_label" |
| android:launchMode="singleInstance" |
| android:excludeFromRecents="true" |
| android:autoRemoveFromRecents="true" |
| android:windowSoftInputMode="stateHidden|adjustPan" |
| android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize" |
| {% endblock %}> |
| </activity> |
| <activity android:name="org.chromium.chrome.browser.firstrun.TabbedModeFirstRunActivity" |
| android:theme="@style/Theme.Chromium.TabbedMode" |
| {{ self.first_run_activity_common() }}> |
| </activity> |
| {% if enable_vr == "true" %} |
| <activity android:name="org.chromium.chrome.browser.vr.VrFirstRunActivity" |
| android:exported="false" |
| android:launchMode="singleInstance" |
| android:theme="@style/VrActivityTheme" |
| android:excludeFromRecents="true" |
| android:enableVrMode="@string/gvr_vr_mode_component" |
| android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize|uiMode"> |
| {{ self.supports_vr() }} |
| </activity> |
| {% endif %} |
| <activity android:name="org.chromium.chrome.browser.signin.SigninActivity" |
| android:theme="@style/Theme.Chromium.DialogWhenLarge" |
| android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize" |
| android:exported="false"> |
| </activity> |
| <activity android:name="org.chromium.chrome.browser.settings.SettingsActivity" |
| android:theme="@style/Theme.Chromium.Settings" |
| android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize" |
| android:label="@string/settings" |
| android:exported="false"> |
| </activity> |
| <activity android:name="org.chromium.chrome.browser.site_settings.ManageSpaceActivity" |
| android:theme="@style/Theme.Chromium.Settings.ManageSpace" |
| android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize" |
| android:label="@string/storage_management_activity_label" |
| android:exported="false"> |
| </activity> |
| <activity android:name="org.chromium.chrome.browser.bookmarks.BookmarkActivity" |
| android:theme="@style/Theme.Chromium.Activity.Fullscreen" |
| android:exported="false" |
| android:windowSoftInputMode="stateAlwaysHidden|adjustResize" |
| android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize"> |
| </activity> |
| <activity android:name="org.chromium.chrome.browser.bookmarks.BookmarkAddActivity" |
| android:theme="@android:style/Theme.NoDisplay" |
| android:excludeFromRecents="true" |
| android:windowSoftInputMode="stateHidden" |
| android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize" |
| android:exported="true"> |
| <intent-filter> |
| <action android:name="{{ manifest_package }}.ADDBOOKMARK" /> |
| <category android:name="android.intent.category.DEFAULT" /> |
| </intent-filter> |
| </activity> |
| <activity android:name="org.chromium.chrome.browser.bookmarks.BookmarkEditActivity" |
| android:theme="@style/Theme.Chromium.DialogWhenLarge" |
| android:windowSoftInputMode="stateHidden" |
| android:exported="false" |
| android:label="@string/edit_bookmark" |
| android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize"> |
| </activity> |
| <activity android:name="org.chromium.chrome.browser.bookmarks.BookmarkAddEditFolderActivity" |
| android:theme="@style/Theme.Chromium.DialogWhenLarge" |
| android:exported="false" |
| android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize"> |
| </activity> |
| <activity android:name="org.chromium.chrome.browser.bookmarks.BookmarkFolderSelectActivity" |
| android:theme="@style/Theme.Chromium.DialogWhenLarge" |
| android:windowSoftInputMode="stateAlwaysHidden" |
| android:label="@string/bookmark_choose_folder" |
| android:exported="false" |
| android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize"> |
| </activity> |
| |
| <!-- Activities for video tutorials. --> |
| <activity android:name="org.chromium.chrome.browser.app.video_tutorials.VideoTutorialListActivity" |
| android:theme="@style/Theme.Chromium.Activity.Fullscreen" |
| android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize" |
| android:exported="false"> |
| </activity> |
| |
| <!-- Activities for downloads. --> |
| <activity android:name="org.chromium.chrome.browser.download.DownloadActivity" |
| android:theme="@style/Theme.Chromium.Activity.Fullscreen" |
| android:windowSoftInputMode="stateAlwaysHidden|adjustResize" |
| android:exported="false" |
| android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize"> |
| </activity> |
| |
| <!-- Activities for video tutorials. --> |
| <activity android:name="org.chromium.chrome.browser.app.video_tutorials.VideoPlayerActivity" |
| android:theme="@style/Theme.Chromium.Activity.Fullscreen" |
| android:screenOrientation="portrait" |
| android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize" |
| android:exported="false" |
| tools:ignore="LockedOrientationActivity"> |
| <!-- We want to explicitly disallow landscape UI for video tutorials. --> |
| </activity> |
| |
| <!-- Activities for history. --> |
| <activity android:name="org.chromium.chrome.browser.history.HistoryActivity" |
| android:theme="@style/Theme.Chromium.Activity.Fullscreen" |
| android:windowSoftInputMode="stateAlwaysHidden|adjustResize" |
| android:exported="false" |
| android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize"> |
| </activity> |
| |
| <!-- |
| Activities for webapps. |
| TODO(dfalcantara): Remove the aliases for the WebappActivities once we're pretty sure |
| that users don't have any instances of the original Activity still |
| running. |
| --> |
| <activity android:name="org.chromium.chrome.browser.webapps.WebappLauncherActivity" |
| android:theme="@android:style/Theme.NoDisplay" |
| android:taskAffinity="" |
| android:excludeFromRecents="true" |
| android:exported="true"> |
| <intent-filter> |
| <action android:name="com.google.android.apps.chrome.webapps.WebappManager.ACTION_START_WEBAPP" /> |
| <category android:name="android.intent.category.DEFAULT" /> |
| </intent-filter> |
| <intent-filter> |
| <action android:name="org.webapk.ACTION_START_WEBAPK" /> |
| <category android:name="android.intent.category.DEFAULT" /> |
| </intent-filter> |
| </activity> |
| <!-- Non-exported alias that only Chrome can launch to verify shortcut intent comes from |
| Chrome (ShortcutManager on O+ launches under the shortcut creator's uid). --> |
| <activity-alias android:name="org.chromium.chrome.browser.webapps.SecureWebAppLauncher" |
| android:targetActivity="org.chromium.chrome.browser.webapps.WebappLauncherActivity" |
| android:exported="false"> |
| <intent-filter> |
| <action android:name="org.chromium.chrome.browser.webapps.WebappManager.ACTION_START_SECURE_WEBAPP" /> |
| <category android:name="android.intent.category.DEFAULT" /> |
| </intent-filter> |
| </activity-alias> |
| <activity-alias android:name="com.google.android.apps.chrome.webapps.WebappManager" |
| android:targetActivity="org.chromium.chrome.browser.webapps.WebappLauncherActivity"> |
| </activity-alias> |
| <activity android:name="org.chromium.chrome.browser.webapps.WebappActivity" |
| android:theme="@style/Theme.Chromium.Webapp" |
| android:label="@string/webapp_activity_title" |
| android:launchMode="singleTop" |
| android:documentLaunchMode="intoExisting" |
| android:exported="false" |
| android:persistableMode="persistNever" |
| {{ self.supports_video_persistence() }} |
| {{ self.chrome_activity_common() }} |
| > |
| {{ self.supports_vr() }} |
| {{ self.extra_web_rendering_activity_definitions() }} |
| </activity> |
| <activity-alias android:name="com.google.android.apps.chrome.webapps.WebappActivity" |
| android:targetActivity="org.chromium.chrome.browser.webapps.WebappActivity" |
| android:label="@string/webapp_activity_title" |
| {{ self.supports_video_persistence() }} > |
| </activity-alias> |
| <!-- Activities for WebAPKs. --> |
| <activity android:name="org.chromium.chrome.browser.webapps.SameTaskWebApkActivity" |
| android:theme="@style/Theme.Chromium.Webapp.Translucent" |
| android:label="@string/webapp_activity_title" |
| android:exported="false" |
| android:persistableMode="persistNever" |
| {{ self.supports_video_persistence() }} |
| {{ self.chrome_activity_common() }} |
| > |
| {{ self.supports_vr() }} |
| {{ self.extra_web_rendering_activity_definitions() }} |
| </activity> |
| |
| <activity android:name="org.chromium.chrome.browser.webapps.ActivateWebApkActivity" |
| android:theme="@android:style/Theme.NoDisplay" |
| android:exported="true"> |
| <intent-filter> |
| <action android:name="org.chromium.chrome.browser.webapps.ActivateWebApkActivity.ACTIVATE" /> |
| <category android:name="android.intent.category.DEFAULT" /> |
| </intent-filter> |
| </activity> |
| |
| <activity android:name="org.chromium.components.media_router.caf.remoting.CafExpandedControllerActivity" |
| android:theme="@style/Theme.Chromium.Activity" |
| android:label="Chrome.CafExpandedControllerActivity" |
| android:hardwareAccelerated="true" |
| android:launchMode="singleTask" |
| android:noHistory="true" |
| android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize" |
| android:excludeFromRecents="true"> |
| </activity> |
| |
| <!-- This activity is used to restart the main Chrome process. Should never be exported. --> |
| <activity android:name="org.chromium.chrome.browser.BrowserRestartActivity" |
| android:launchMode="singleInstance" |
| android:exported="false" |
| android:theme="@android:style/Theme.Translucent.NoTitleBar" |
| android:excludeFromRecents="true" |
| android:process=":browser_restart_process"> |
| </activity> |
| |
| <!-- This activity is to expose the print option via the generic Android share action. --> |
| <activity |
| android:name="org.chromium.chrome.browser.printing.PrintShareActivity" |
| android:icon="@drawable/sharing_print" |
| android:label="@string/print_share_activity_title" |
| android:enabled="false" |
| android:excludeFromRecents="true" |
| android:exported="true" |
| android:noHistory="true" |
| android:theme="@android:style/Theme.NoDisplay" |
| android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize" > |
| <intent-filter> |
| <action android:name="android.intent.action.SEND" /> |
| <category android:name="android.intent.category.DEFAULT" /> |
| <data android:mimeType="text/plain" /> |
| <data android:mimeType="multipart/related" /> |
| <data android:mimeType="message/rfc822" /> |
| </intent-filter> |
| </activity> |
| |
| <activity |
| android:name="org.chromium.chrome.browser.send_tab_to_self.SendTabToSelfShareActivity" |
| android:icon="@drawable/ic_launcher" |
| android:label="@string/send_tab_to_self_share_activity_title" |
| android:enabled="false" |
| android:excludeFromRecents="true" |
| android:exported="true" |
| android:noHistory="true" |
| android:theme="@android:style/Theme.NoDisplay" |
| android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize" > |
| <intent-filter> |
| <action android:name="android.intent.action.SEND" /> |
| <category android:name="android.intent.category.DEFAULT" /> |
| <data android:mimeType="text/plain" /> |
| </intent-filter> |
| </activity> |
| |
| <activity |
| android:name="org.chromium.chrome.browser.sharing.shared_clipboard.SharedClipboardShareActivity" |
| android:icon="@drawable/ic_devices_48dp" |
| android:label="@string/shared_clipboard_share_activity_title" |
| android:enabled="false" |
| android:excludeFromRecents="true" |
| android:exported="true" |
| android:noHistory="true" |
| android:theme="@style/Theme.Chromium.Activity.TranslucentNoAnimations" |
| android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize" > |
| <intent-filter> |
| <action android:name="android.intent.action.SEND" /> |
| <category android:name="android.intent.category.DEFAULT" /> |
| <data android:mimeType="text/plain" /> |
| </intent-filter> |
| </activity> |
| |
| <!-- Activity for dispatching intents to Instant Apps. --> |
| <activity |
| android:name="org.chromium.chrome.browser.instantapps.AuthenticatedProxyActivity" |
| android:exported="false" |
| android:theme="@android:style/Theme.NoDisplay" |
| android:noHistory="true" |
| android:excludeFromRecents="true"> |
| </activity> |
| |
| <activity |
| android:name="org.chromium.chrome.browser.vr.VrCancelAnimationActivity" |
| android:exported="false" |
| android:theme="@android:style/Theme.NoDisplay" |
| android:noHistory="true" |
| android:excludeFromRecents="true" |
| {% if enable_vr == "true" %} |
| android:enableVrMode="@string/gvr_vr_mode_component" |
| {% endif %} |
| > |
| {{ self.supports_vr() }} |
| </activity> |
| |
| <!-- Components for Trusted Web Activities --> |
| <receiver android:name="org.chromium.chrome.browser.browserservices.ClientAppBroadcastReceiver" |
| android:exported="true"> |
| <intent-filter> |
| <data android:scheme="package" /> |
| <action android:name="android.intent.action.PACKAGE_FULLY_REMOVED" /> |
| <action android:name="android.intent.action.PACKAGE_DATA_CLEARED" /> |
| </intent-filter> |
| {% if channel in ['default'] %} |
| <intent-filter> |
| <action android:name="org.chromium.chrome.browser.browserservices.ClientAppBroadcastReceiver.DEBUG" /> |
| </intent-filter> |
| {% endif %} |
| </receiver> |
| |
| <activity android:name="org.chromium.chrome.browser.browserservices.ClearDataDialogActivity" |
| android:theme="@style/Theme.Chromium.ClearDataDialogActivity" |
| android:exported="false"/> |
| |
| <activity |
| android:name="org.chromium.chrome.browser.browserservices.ManageTrustedWebActivityDataActivity" |
| android:theme="@style/Theme.Chromium.Activity.Fullscreen.Transparent" |
| android:exported="true"> |
| <intent-filter> |
| <action android:name="android.support.customtabs.action.ACTION_MANAGE_TRUSTED_WEB_ACTIVITY_DATA" /> |
| <category android:name="android.intent.category.DEFAULT" /> |
| </intent-filter> |
| <!-- Legacy filter. We no longer need data, but must accept intents that provide data. --> |
| <intent-filter> |
| <action android:name="android.support.customtabs.action.ACTION_MANAGE_TRUSTED_WEB_ACTIVITY_DATA" /> |
| <category android:name="android.intent.category.DEFAULT" /> |
| <data android:scheme="https"/> |
| </intent-filter> |
| </activity> |
| |
| <activity android:name="org.chromium.chrome.browser.webauth.authenticator.CableAuthenticatorActivity" |
| android:theme="@style/Theme.Chromium.Activity.Fullscreen" |
| android:label="@string/cablev2_activity_title" |
| android:permission="com.google.android.gms.auth.cryptauth.permission.CABLEV2_SERVER_LINK" |
| android:exported="true"> |
| <!-- This activity can be started by GMSCore, and is thus exported |
| with a permission set, or can be started by the Android system in |
| the case that a USB device is attached. --> |
| <intent-filter> |
| <action android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED" /> |
| </intent-filter> |
| <meta-data android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED" |
| android:resource="@xml/phone_as_a_security_key_accessory_filter" /> |
| </activity> |
| |
| <receiver |
| android:name="org.chromium.chrome.browser.browserservices.ui.trustedwebactivity.DisclosureAcceptanceBroadcastReceiver" |
| android:exported="false" /> |
| |
| <!-- Service for decoding images in a sandboxed process. --> |
| <service |
| android:description="@string/decoder_description" |
| android:name="org.chromium.chrome.browser.photo_picker.DecoderService" |
| android:exported="false" |
| android:isolatedProcess="true" |
| android:process=":decoder_service" /> |
| |
| <!-- Broadcast receiver that will be notified of account changes --> |
| <receiver android:name="org.chromium.chrome.browser.services.AccountsChangedReceiver" |
| android:exported="true"> |
| <intent-filter> |
| <action android:name="android.accounts.LOGIN_ACCOUNTS_CHANGED" /> |
| </intent-filter> |
| </receiver> |
| |
| <!-- Download foreground service --> |
| <service android:name="org.chromium.chrome.browser.download.DownloadForegroundService" |
| android:exported="false"> |
| </service> |
| |
| <!-- Download broadcast manager service --> |
| <service android:name="org.chromium.chrome.browser.download.DownloadBroadcastManager" |
| android:exported="false"> |
| </service> |
| |
| <!-- Bookmarks widget --> |
| <receiver android:name="com.google.android.apps.chrome.appwidget.bookmarks.BookmarkThumbnailWidgetProvider" |
| android:label="@string/bookmark_widget_title" |
| android:exported="true"> |
| <intent-filter> |
| <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> |
| <action android:name=".BOOKMARK_APPWIDGET_UPDATE" /> |
| </intent-filter> |
| <meta-data |
| android:name="android.appwidget.provider" |
| android:resource="@xml/bookmark_widget_info" /> |
| </receiver> |
| <service android:name="org.chromium.chrome.browser.bookmarkswidget.BookmarkWidgetService" |
| android:permission="android.permission.BIND_REMOTEVIEWS" |
| android:exported="false" /> |
| <receiver android:name="org.chromium.chrome.browser.bookmarkswidget.BookmarkWidgetProxy" |
| android:exported="false" /> |
| |
| <!-- Search widget --> |
| <receiver |
| android:name="org.chromium.chrome.browser.searchwidget.SearchWidgetProvider" |
| android:label="@string/search_widget_title" |
| android:exported="true"> |
| <intent-filter> |
| <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> |
| </intent-filter> |
| <intent-filter> |
| <action android:name="org.chromium.chrome.browser.searchwidget.START_TEXT_QUERY" /> |
| </intent-filter> |
| <intent-filter> |
| <action android:name="org.chromium.chrome.browser.searchwidget.START_VOICE_QUERY" /> |
| </intent-filter> |
| <intent-filter> |
| <action android:name="org.chromium.chrome.browser.searchwidget.UPDATE_ALL_WIDGETS" /> |
| </intent-filter> |
| <meta-data |
| android:name="android.appwidget.provider" |
| android:resource="@xml/search_widget_info" /> |
| </receiver> |
| |
| <!-- Search Activity --> |
| <activity android:name="org.chromium.chrome.browser.searchwidget.SearchActivity" |
| android:theme="@style/Theme.Chromium.SearchActivity" |
| android:label="Search" |
| android:exported="false" |
| android:launchMode="singleTask" |
| android:taskAffinity="" |
| android:clearTaskOnLaunch="true" |
| android:excludeFromRecents="true" |
| android:windowSoftInputMode="adjustResize" |
| android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize" |
| android:hardwareAccelerated="false" /> |
| |
| <!-- Receiver for GCM messages. --> |
| <receiver android:name="com.google.android.gms.gcm.GcmReceiver" |
| android:exported="true" |
| android:permission="com.google.android.c2dm.permission.SEND"> |
| <intent-filter> |
| <action android:name="com.google.android.c2dm.intent.RECEIVE" /> |
| <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> |
| <category android:name="{{ manifest_package }}"/> |
| </intent-filter> |
| </receiver> |
| <!-- GcmTaskService for registration for Invalidations. Not actually implemented anymore. --> |
| <service android:name="com.google.ipc.invalidation.ticl.android2.channel.GcmRegistrationTaskService" |
| android:exported="true" |
| android:permission="com.google.android.gms.permission.BIND_NETWORK_TASK_SERVICE" > |
| <intent-filter> |
| <action android:name="com.google.android.gms.gcm.ACTION_TASK_READY"/> |
| </intent-filter> |
| </service> |
| <!-- GcmListenerService for messages from GCM. --> |
| <service android:name="org.chromium.chrome.browser.services.gcm.ChromeGcmListenerService" |
| android:exported="false" > |
| <intent-filter> |
| <action android:name="com.google.android.c2dm.intent.RECEIVE" /> |
| </intent-filter> |
| </service> |
| <service android:name="org.chromium.chrome.browser.services.gcm.GCMBackgroundService" |
| android:exported="false"/> |
| <service android:name="org.chromium.chrome.browser.services.gcm.InvalidationGcmUpstreamSender" |
| android:exported="false"/> |
| |
| <!-- Android Notification service listener --> |
| <service android:name="org.chromium.chrome.browser.notifications.NotificationService" |
| android:exported="false"/> |
| <receiver android:name="org.chromium.chrome.browser.notifications.NotificationService$Receiver" |
| android:exported="false"/> |
| <receiver android:name="org.chromium.chrome.browser.notifications.NotificationServiceImpl$Receiver" |
| android:exported="false"> |
| <intent-filter> |
| <action android:name="org.chromium.chrome.browser.notifications.CLICK_NOTIFICATION" /> |
| <action android:name="org.chromium.chrome.browser.notifications.CLOSE_NOTIFICATION" /> |
| </intent-filter> |
| </receiver> |
| |
| <!-- Android Notification job service --> |
| <service android:name="org.chromium.chrome.browser.notifications.NotificationJobService" |
| android:exported="false" |
| android:permission="android.permission.BIND_JOB_SERVICE"/> |
| |
| <!-- Background Task Scheduler job service --> |
| <service android:name="org.chromium.components.background_task_scheduler.internal.BackgroundTaskJobService" |
| android:exported="false" |
| android:permission="android.permission.BIND_JOB_SERVICE"/> |
| |
| <!-- Background Task Scheduler GCM task service --> |
| <service android:name="org.chromium.components.background_task_scheduler.internal.BackgroundTaskGcmTaskService" |
| android:permission="com.google.android.gms.permission.BIND_NETWORK_TASK_SERVICE" |
| android:exported="true"> |
| <intent-filter> |
| <action android:name="com.google.android.gms.gcm.ACTION_TASK_READY" /> |
| </intent-filter> |
| </service> |
| |
| <!-- Background Task Scheduler alarm receiver --> |
| <receiver android:name="org.chromium.components.background_task_scheduler.internal.BackgroundTaskBroadcastReceiver" |
| android:exported="false" /> |
| |
| <!-- GcmTaskService implementation to wake Chrome on scheduled events --> |
| <service android:name="org.chromium.chrome.browser.ChromeBackgroundService" |
| android:permission="com.google.android.gms.permission.BIND_NETWORK_TASK_SERVICE" |
| android:exported="true"> |
| <intent-filter> |
| <action android:name="com.google.android.gms.gcm.ACTION_TASK_READY" /> |
| </intent-filter> |
| </service> |
| |
| <service android:name="org.chromium.chrome.browser.prerender.ChromePrerenderService" |
| android:exported="true" |
| tools:ignore="ExportedService" /> |
| <service android:name="org.chromium.chrome.browser.customtabs.CustomTabsConnectionService" |
| android:exported="true" |
| tools:ignore="ExportedService"> |
| <intent-filter> |
| <action android:name="android.support.customtabs.action.CustomTabsService" /> |
| <category android:name="androidx.browser.customtabs.category.ColorSchemeCustomization"/> |
| <category android:name="androidx.browser.customtabs.category.NavBarColorCustomization"/> |
| <category android:name="androidx.browser.trusted.category.ImmersiveMode"/> |
| <category android:name="androidx.browser.trusted.category.LaunchSiteSettings" /> |
| <category android:name="androidx.browser.trusted.category.LaunchWebApkSiteSettings"/> |
| <category android:name="androidx.browser.trusted.category.TrustedWebActivities"/> |
| <category android:name="androidx.browser.trusted.category.TrustedWebActivitySplashScreensV1"/> |
| <category android:name="androidx.browser.trusted.category.WebShareTargetV2"/> |
| </intent-filter> |
| </service> |
| <service android:name="androidx.browser.customtabs.PostMessageService" /> |
| |
| <!-- Crash reporting services. --> |
| <service android:name="org.chromium.chrome.browser.crash.ChromeMinidumpUploadJobService" |
| android:permission="android.permission.BIND_JOB_SERVICE" |
| android:exported="false"/> |
| <service android:name="org.chromium.chrome.browser.crash.MinidumpUploadService" |
| android:exported="false"/> |
| |
| <service android:name="org.chromium.chrome.browser.omaha.OmahaClient" |
| android:exported="false"/> |
| <service android:name="org.chromium.chrome.browser.incognito.IncognitoNotificationService" |
| android:exported="false"/> |
| |
| <!-- service used by payment apps to notify the browser about changes in user selected |
| payment method, shipping address, or shipping option --> |
| <service |
| android:name="org.chromium.components.payments.PaymentDetailsUpdateService" |
| android:exported="true" |
| tools:ignore="ExportedService"/> |
| |
| <receiver android:name="org.chromium.chrome.browser.announcement.AnnouncementNotificationManager$Receiver" |
| android:exported="false"/> |
| |
| <receiver android:name="org.chromium.chrome.browser.notifications.NotificationIntentInterceptor$Receiver" |
| android:exported="false"/> |
| |
| <receiver android:name="org.chromium.chrome.browser.notifications.scheduler.DisplayAgent$Receiver" |
| android:exported="false"/> |
| |
| <receiver android:name="org.chromium.chrome.browser.app.send_tab_to_self.SendTabToSelfNotificationReceiver" |
| android:exported="false"/> |
| |
| <receiver android:name="org.chromium.chrome.browser.customtabs.CustomTabsShareBroadcastReceiver" |
| android:exported="false"/> |
| |
| <receiver android:name="org.chromium.chrome.browser.sharing.click_to_call.ClickToCallMessageHandler$TapReceiver" |
| android:exported="false"/> |
| <receiver android:name="org.chromium.chrome.browser.sharing.shared_clipboard.SharedClipboardMessageHandler$TapReceiver" |
| android:exported="false"/> |
| <receiver android:name="org.chromium.chrome.browser.sharing.shared_clipboard.SharedClipboardMessageHandler$TryAgainReceiver" |
| android:exported="false"/> |
| |
| <receiver android:name="org.chromium.chrome.browser.offlinepages.prefetch.PrefetchedPagesNotifier$ClickReceiver" |
| android:exported="false"/> |
| <receiver android:name="org.chromium.chrome.browser.offlinepages.prefetch.PrefetchedPagesNotifier$SettingsReceiver" |
| android:exported="false"/> |
| |
| <receiver android:name="org.chromium.chrome.browser.offlinepages.AutoFetchNotifier$CompleteNotificationReceiver" |
| android:exported="false"/> |
| <receiver android:name="org.chromium.chrome.browser.offlinepages.AutoFetchNotifier$InProgressCancelReceiver" |
| android:exported="false"/> |
| |
| <service android:name="org.chromium.chrome.browser.media.MediaCaptureNotificationService" |
| android:exported="false"/> |
| <service android:name="org.chromium.chrome.browser.media.ui.ChromeMediaNotificationControllerServices$PlaybackListenerService" |
| android:exported="false"> |
| <intent-filter> |
| <action android:name="android.intent.action.MEDIA_BUTTON" /> |
| </intent-filter> |
| </service> |
| <service android:name="org.chromium.chrome.browser.media.ui.ChromeMediaNotificationControllerServices$PresentationListenerService" |
| android:exported="false"> |
| <intent-filter> |
| <action android:name="android.intent.action.MEDIA_BUTTON" /> |
| </intent-filter> |
| </service> |
| <service android:name="org.chromium.chrome.browser.media.ui.ChromeMediaNotificationControllerServices$CastListenerService" |
| android:exported="false"> |
| <intent-filter> |
| <action android:name="android.intent.action.MEDIA_BUTTON" /> |
| </intent-filter> |
| </service> |
| |
| <service android:name="org.chromium.chrome.browser.tracing.TracingNotificationService" |
| android:exported="false"/> |
| |
| <receiver android:name="org.chromium.chrome.browser.omaha.UpdateNotificationController$UpdateNotificationReceiver" |
| android:exported="false"/> |
| |
| <meta-data android:name="org.chromium.content.browser.SMART_CLIP_PROVIDER" |
| android:value="org.chromium.content_public.browser.SmartClipProvider"/> |
| |
| {% if min_sdk_version|int >= 21 %} |
| <activity |
| android:name="org.chromium.chrome.browser.test_dummy.TestDummyActivity" |
| android:excludeFromRecents="true" |
| android:exported="true" |
| android:noHistory="true" |
| android:theme="@style/Theme.AppCompat" |
| android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize" > |
| </activity> |
| {% endif %} |
| |
| {% block extra_application_definitions %} |
| {% endblock %} |
| {% endmacro %} |
| {% if not definitions_in_split %} |
| {{ application_definitions() }} |
| {% endif %} |
| |
| <!-- The following service entries exist in order to allow us to |
| start more than one sandboxed process. --> |
| |
| <!-- NOTE: If you change the value of "android:process" for the below services, |
| you also need to update kHelperProcessExecutableName in chrome_constants.cc. --> |
| {% set num_sandboxed_services = 40 %} |
| <meta-data android:name="org.chromium.content.browser.NUM_SANDBOXED_SERVICES" |
| android:value="{{ num_sandboxed_services }}"/> |
| |
| {% for i in range(num_sandboxed_services) %} |
| <service android:name="org.chromium.content.app.SandboxedProcessService{{ i }}" |
| android:process=":sandboxed_process{{ i }}" |
| android:permission="{{ manifest_package }}.permission.CHILD_SERVICE" |
| android:isolatedProcess="true" |
| android:exported="{{sandboxed_service_exported|default(false)}}" |
| {% if (i == 0) %} |
| android:useAppZygote="true" |
| {% endif %} |
| {% if (sandboxed_service_exported|default(false)) == 'true' %} |
| android:externalService="true" |
| tools:ignore="ExportedService" |
| android:visibleToInstantApps="true" |
| {% endif %} /> |
| {% endfor %} |
| |
| {% set num_privileged_services = 5 %} |
| <meta-data android:name="org.chromium.content.browser.NUM_PRIVILEGED_SERVICES" |
| android:value="{{ num_privileged_services }}"/> |
| |
| {% for i in range(num_privileged_services) %} |
| {% set privileged_process_name = ':privileged_process%d' % i %} |
| <service android:name="org.chromium.content.app.PrivilegedProcessService{{ i }}" |
| android:process="{{ privileged_process_name }}" |
| android:permission="{{ manifest_package }}.permission.CHILD_SERVICE" |
| android:isolatedProcess="false" |
| android:exported="false" /> |
| |
| {% endfor %} |
| |
| <!-- Downloads Google Sans from GMS Core --> |
| <meta-data android:name="preloaded_fonts" |
| android:resource="@array/chrome_preloaded_google_sans_fonts" /> |
| |
| <meta-data android:name="android.allow_multiple_resumed_activities" android:value="true" /> |
| |
| <!-- Samsung MultiWindow Support --> |
| <meta-data android:name="com.samsung.android.sdk.multiwindow.enable" |
| android:value="true" /> |
| |
| {% if min_sdk_version|int < 24 %} |
| <meta-data android:name="com.samsung.android.sdk.multiwindow.multiinstance.enable" |
| android:value="true" /> |
| <meta-data android:name="com.samsung.android.sdk.multiwindow.multiinstance.launchmode" |
| android:value="singleTask" /> |
| {% endif %} |
| |
| <meta-data android:name="com.samsung.android.sdk.multiwindow.penwindow.enable" |
| android:value="true"/> |
| |
| {% if backup_key is defined %} |
| <!-- Backup keys are channel dependent --> |
| <meta-data android:name="com.google.android.backup.api_key" |
| android:value="{{ backup_key }}" /> |
| {% endif %} |
| |
| {% if channel in ['dev', 'canary', 'default'] %} |
| <meta-data android:name="com.sec.android.support.multiwindow" android:value="true" /> |
| {% endif %} |
| <meta-data android:name="android.content.APP_RESTRICTIONS" |
| android:resource="@xml/app_restrictions"/> |
| |
| {% if include_arcore_manifest_flag == 'true' %} |
| <!-- ARCore APK integration --> |
| <!-- This tag indicates that this application optionally uses ARCore. --> |
| <meta-data android:name="com.google.ar.core" android:value="optional" /> |
| {% endif %} |
| |
| <!-- Cast support --> |
| <meta-data |
| android:name= |
| "com.google.android.gms.cast.framework.OPTIONS_PROVIDER_CLASS_NAME" |
| android:value="org.chromium.components.media_router.caf.CastOptionsProvider"/> |
| |
| <!-- These providers are declared in the base module to give the chrome |
| split preloader more time to work. --> |
| <provider android:name="org.chromium.chrome.browser.util.ChromeFileProvider" |
| android:authorities="{{ manifest_package }}.FileProvider" |
| android:exported="false" |
| android:grantUriPermissions="true"> |
| <meta-data android:name="android.support.FILE_PROVIDER_PATHS" |
| android:resource="@xml/file_paths" /> |
| </provider> |
| |
| <provider android:name="org.chromium.chrome.browser.download.DownloadFileProvider" |
| android:authorities="{{ manifest_package }}.DownloadFileProvider" |
| android:exported="false" |
| android:grantUriPermissions="true"> |
| <meta-data android:name="android.support.FILE_PROVIDER_PATHS" |
| android:resource="@xml/file_paths" /> |
| </provider> |
| |
| <!-- Provider for chrome data. --> |
| <provider android:name="org.chromium.chrome.browser.provider.ChromeBrowserProvider" |
| android:authorities="{{ manifest_package }}.ChromeBrowserProvider;{{ manifest_package }}.browser;{{ manifest_package }}" |
| android:exported="true"> |
| <path-permission android:path="/bookmarks/search_suggest_query" |
| android:readPermission="android.permission.GLOBAL_SEARCH" /> |
| </provider> |
| |
| {% block base_application_definitions %} |
| {% endblock %} |
| {% block extra_application_definitions_for_test %} |
| {% endblock %} |
| </application> |
| {% block extra_root_definitions %} |
| {% endblock %} |
| </manifest> |