chromium/chrome/android/webapk/shell_apk/AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2015 The Chromium Authors
Use of this source code is governed by a BSD-style license that can be
found in the LICENSE file.
-->

<!-- AndroidManifest.xml is generated in two mustache generation passes.
     Pass #1 with square bracket delimiter to generate AndroidManifest.xml to
             be uploaded to the WebAPK Minting Server. Fields which cannot be
             customized by the WebAPK server on a per-site basis are filled in.
     Pass #2 with curly bracket delimiter fills in the remaining fields. The
             generated AndroidManifest.xml is for the test APK (WebApk.apk,
             UnboundWebApk.apk ...). These APKs are for local testing and are
             not uploaded to the WebAPK server.
-->
{{=[[ ]]=}}

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="{{{manifest_package}}}"
    android:versionCode="{{{version_code}}}"
    android:versionName="{{{version_name}}}" >
    {{{raw_manifest_tags}}}

    <uses-sdk
        android:minSdkVersion="24"
        android:targetSdkVersion="33" />

    <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />

    <queries>
        <intent>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data android:scheme="https" />
        </intent>
        <intent>
            <action android:name="android.support.customtabs.action.ACTION_MANAGE_TRUSTED_WEB_ACTIVITY_DATA" />
            <data android:scheme="https" />
        </intent>
    </queries>

    <application
        android:icon="@mipmap/ic_launcher"
        android:label="@string/short_name"
        android:allowBackup="false"
        android:supportsRtl="true">
        <activity android:name="org.chromium.webapk.shell_apk.h2o.H2OTransparentLauncherActivity"
                  android:theme="@android:style/Theme.Translucent.NoTitleBar"
                  android:excludeFromRecents="true"
                  android:exported="true"
                  android:relinquishTaskIdentity="true">
            {{#intent_filters}}
            <intent-filter android:autoVerify="true">
                <action android:name="android.intent.action.VIEW"></action>
                <category android:name="android.intent.category.DEFAULT"></category>
                <category android:name="android.intent.category.BROWSABLE"></category>
                <data android:scheme="{{{scope_url_scheme}}}" android:host="{{{scope_url_host}}}" {{{scope_url_path_type}}}="{{{scope_url_path}}}"></data>
            </intent-filter>
            <intent-filter>
                <action android:name="android.nfc.action.NDEF_DISCOVERED"></action>
                <category android:name="android.intent.category.DEFAULT"></category>
                <data android:scheme="{{{scope_url_scheme}}}" android:host="{{{scope_url_host}}}" {{{scope_url_path_type}}}="{{{scope_url_path}}}"></data>
            </intent-filter>
            {{/intent_filters}}
            {{{raw_intent_filters}}}
         </activity>

        <activity android:name="org.chromium.webapk.shell_apk.ManageDataLauncherActivity"
            android:theme="@android:style/Theme.Translucent.NoTitleBar">
        </activity>

        <activity android:name="org.chromium.webapk.shell_apk.h2o.H2OOpaqueMainActivity"
                  android:theme="@style/SplashTheme"
                  android:relinquishTaskIdentity="true"
                  android:screenOrientation="{{{android_orientation}}}"
                  android:exported="true"
                  android:enabled="[[#use_new_splash]]@bool/opaque_main_activity_enabled_default[[/use_new_splash]][[^use_new_splash]]false[[/use_new_splash]]">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <meta-data android:name="android.app.shortcuts" android:resource="@xml/shortcuts" />
        </activity>
        <activity android:name="org.chromium.webapk.shell_apk.h2o.SplashActivity"
                  android:theme="@style/SplashTheme"
                  android:screenOrientation="{{{android_orientation}}}"
                  android:launchMode="singleTask">
        </activity>
        <provider android:name="org.chromium.webapk.shell_apk.h2o.SplashContentProvider"
                  android:authorities="{{manifest_package}}.SplashContentProvider"
                  android:exported="true" />
        <activity android:name="org.chromium.webapk.shell_apk.h2o.H2OMainActivity"
                  android:theme="@android:style/Theme.Translucent.NoTitleBar"
                  android:exported="true"
                  android:enabled="[[#use_new_splash]]@bool/transparent_main_activity_enabled_default[[/use_new_splash]][[^use_new_splash]]true[[/use_new_splash]]"
                  android:excludeFromRecents="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <meta-data android:name="android.app.shortcuts" android:resource="@xml/shortcuts" />
        </activity>
        <activity android:name="org.chromium.webapk.shell_apk.NotificationPermissionRequestActivity"
                  android:theme="@style/PermissionRequestTheme">
        </activity>

        {{#share_template}}
        <activity-alias android:name="org.chromium.webapk.shell_apk.ShareActivity{{{index}}}"
                  android:label="{{{title}}}"
                  android:exported="true"
                  android:targetActivity="org.chromium.webapk.shell_apk.h2o.H2OTransparentLauncherActivity">
          <meta-data android:name="org.chromium.webapk.shell_apk.shareAction" android:value="{{{action}}}" />
          <meta-data android:name="org.chromium.webapk.shell_apk.shareMethod" android:value="{{{method}}}" />
          <meta-data android:name="org.chromium.webapk.shell_apk.shareParamTitle" android:value="{{{param_title}}}" />
          <meta-data android:name="org.chromium.webapk.shell_apk.shareParamText" android:value="{{{param_text}}}" />
          <meta-data android:name="org.chromium.webapk.shell_apk.shareParamUrl" android:value="{{{param_url}}}" />
          {{#enctype}}
          <meta-data android:name="org.chromium.webapk.shell_apk.shareEnctype" android:value="{{{enctype}}}" />
          {{/enctype}}
          {{^is_file_upload}}
          <intent-filter>
            <action android:name="android.intent.action.SEND" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:mimeType="text/plain" />
          </intent-filter>
          {{/is_file_upload}}
          {{#is_file_upload}}
          {{^is_file_upload_param_empty}}
          <meta-data android:name="org.chromium.webapk.shell_apk.shareParamNames" android:value="{{{param_names}}}" />
          <meta-data android:name="org.chromium.webapk.shell_apk.shareParamAccepts" android:value="{{{param_accepts}}}" />
          {{/is_file_upload_param_empty}}
          <intent-filter>
            <action android:name="android.intent.action.SEND" />
            {{^is_file_upload_param_empty}}
            <action android:name="android.intent.action.SEND_MULTIPLE" />
            {{/is_file_upload_param_empty}}
            <category android:name="android.intent.category.DEFAULT" />
            {{#mime_types}}
            <data android:mimeType="{{{mime_type}}}" />
            {{/mime_types}}
          </intent-filter>
          {{/is_file_upload}}
        </activity-alias>
        {{/share_template}}
        <meta-data android:name="org.chromium.webapk.shell_apk.shellApkVersion" android:value="[[ shell_apk_version ]]" />
        {{#bound_webapk}}
        <meta-data android:name="org.chromium.webapk.shell_apk.runtimeHost" android:value="{{{runtime_host}}}" />
        <meta-data android:name="org.chromium.webapk.shell_apk.runtimeHostApplicationName" android:value="{{{runtime_host_application_name}}}" />
        {{/bound_webapk}}
        <meta-data android:name="org.chromium.webapk.shell_apk.startUrl" android:value="{{{start_url}}}" />
        {{#logged_intent_url_param}}
        <meta-data android:name="org.chromium.webapk.shell_apk.loggedIntentUrlParam" android:value="{{{logged_intent_url_param}}}" />
        {{/logged_intent_url_param}}
        <meta-data android:name="org.chromium.webapk.shell_apk.scope" android:value="{{{scope_url}}}" />
        <meta-data android:name="org.chromium.webapk.shell_apk.displayMode" android:value="{{{display_mode}}}" />
        <meta-data android:name="org.chromium.webapk.shell_apk.orientation" android:value="{{{orientation}}}" />
        <meta-data android:name="org.chromium.webapk.shell_apk.themeColor" android:value="{{{theme_color}}}" />
        <meta-data android:name="org.chromium.webapk.shell_apk.darkThemeColor" android:value="{{{dark_theme_color}}}" />

        <!-- Empty if the Web Manifest does not provide a background color. -->
        <meta-data android:name="org.chromium.webapk.shell_apk.backgroundColor" android:value="{{{background_color}}}" />
        <!-- Empty if the Web Manifest does not provide a background color. -->
        <meta-data android:name="org.chromium.webapk.shell_apk.darkBackgroundColor" android:value="{{{dark_background_color}}}" />

        <meta-data android:name="org.chromium.webapk.shell_apk.defaultBackgroundColorId" android:resource="@color/webapp_default_bg" />
        <meta-data android:name="org.chromium.webapk.shell_apk.iconId" android:resource="@mipmap/app_icon" />
        {{#has_maskable_icon}}
        <meta-data android:name="org.chromium.webapk.shell_apk.maskableIconId" android:resource="@mipmap/maskable_app_icon"/>
        {{/has_maskable_icon}}
        <meta-data android:name="org.chromium.webapk.shell_apk.splashId" android:resource="@drawable/splash_icon" />
        <meta-data android:name="org.chromium.webapk.shell_apk.isSplashIconMaskableBooleanId" android:resource="@bool/is_splash_icon_maskable"/>
        <meta-data android:name="org.chromium.webapk.shell_apk.distributor" android:value="{{{distributor}}}" />

        {{!  Hashes of icons should be taken of the icons as they are available on the web. The icon
             bytes should not be transformed (e.g. decoded / encoded) prior to taking the hash.
        }}
        <meta-data android:name="org.chromium.webapk.shell_apk.iconUrlsAndIconMurmur2Hashes" android:value="{{{icon_urls_and_icon_murmur2_hashes}}}" />

        <meta-data android:name="org.chromium.webapk.shell_apk.webManifestUrl" android:value="{{{web_manifest_url}}}" />
        <meta-data android:name="org.chromium.webapk.shell_apk.webManifestId" android:value="{{{web_manifest_id}}}" />
        <meta-data android:name="org.chromium.webapk.shell_apk.appKey" android:value="{{{app_key}}}" />

        <meta-data android:name="org.chromium.webapk.shell_apk.isNewStyleWebApk" android:value="[[ use_new_splash ]]" />
        <meta-data android:name="org.chromium.webapk.shell_apk.enableSiteSettingsShortcut" android:value="{{{enable_site_settings_shortcut}}}" />
        <meta-data android:name="org.chromium.webapk.shell_apk.hasCustomName" android:value="{{{has_custom_name}}}" />
        <service
            android:name="org.chromium.webapk.shell_apk.WebApkServiceFactory"
            android:exported="true"
            tools:ignore="ExportedService">
            <intent-filter>
              <action android:name="android.intent.action.MAIN" />
              <category android:name="android.intent.category.WEBAPK_API" />
            </intent-filter>
        </service>
        <service
            android:name="org.chromium.webapk.shell_apk.IdentityService"
            android:exported="true"
            tools:ignore="ExportedService">
            <intent-filter>
              <action android:name="org.webapk.IDENTITY_SERVICE_API" />
            </intent-filter>
        </service>
    </application>
</manifest>