chromium/chromecast/browser/android/apk/AndroidManifest.xml.jinja2

<?xml version="1.0" encoding="utf-8"?>

<!-- Copyright 2014 The Chromium Authors
     Use of this source code is governed by a BSD-style license that can be
     found in the LICENSE file.
 -->

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:tools="http://schemas.android.com/tools"
          package="org.chromium.chromecast.shell">

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

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE_SPECIAL_USE"/>
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.START_ACTIVITIES_FROM_BACKGROUND"
                     tools:ignore="ProtectedPermissions" />
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
    <uses-permission android:name="android.permission.WAKE_LOCK"/>

    <!-- Needed because CastWebContentsActivity sets orientation to landscape. -->
    <uses-feature android:name="android.hardware.screen.landscape" android:required="false" />

    <application android:name="org.chromium.chromecast.shell.CastApplication"
                 android:icon="@drawable/ic_settings_cast">
        <service android:name="org.chromium.chromecast.shell.CastBrowserService"
                 android:hardwareAccelerated="true"
                 android:label="Chromecast Web Browser"
                 android:exported="true"
                 android:foregroundServiceType="specialUse"
                 tools:ignore="ExportedService">
             <property android:name="android.app.PROPERTY_SPECIAL_USE_FGS_SUBTYPE"
                       android:value="cast" />
            <intent-filter>
                <action android:name="com.google.cast.action.START_CAST_BROWSER" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </service>
        <service android:name="org.chromium.chromecast.shell.CastWebContentsService"
                 android:foregroundServiceType="specialUse">
             <property android:name="android.app.PROPERTY_SPECIAL_USE_FGS_SUBTYPE"
                       android:value="cast" />
        </service>

        <activity android:name="org.chromium.chromecast.shell.CastWebContentsActivity"
                  android:theme="@style/CastShellTheme"
                  android:exported="true"
                  android:hardwareAccelerated="true"
                  android:launchMode="singleInstance"
                  android:screenOrientation="landscape"
                  android:taskAffinity=".CastWebContentsActivity"
                  android:supportsPictureInPicture="true"
                  android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|screenLayout|smallestScreenSize|uiMode"
                  android:excludeFromRecents="false"
                  android:noHistory="false"
                  android:showWhenLocked="true">
        </activity>

        <service android:name="org.chromium.chromecast.shell.TaskRemovedMonitorService"
                 android:exported="false">
        </service>

        <!-- The following service entries exist in order to allow us to
             start more than one sandboxed process. -->
        {% 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:isolatedProcess="true"
                 android:exported="false" />
        {% 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) %}
        <service android:name="org.chromium.content.app.PrivilegedProcessService{{ i }}"
                 android:process=":privileged_process{{ i }}"
                 android:isolatedProcess="false"
                 android:exported="false" />
        {% endfor %}
    </application>

</manifest>