summaryrefslogtreecommitdiff
path: root/player-android/android/app/src/main/AndroidManifest.xml
blob: 81db32c8fc90612da35518a2e698efa0f7f84b26 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- Required for all network calls (API, streaming). -->
    <uses-permission android:name="android.permission.INTERNET" />
    <!-- Required by audio_service to keep audio playing when the app is in the
         background.  Without this the OS may kill the media playback process. -->
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
    <!-- Required to declare mediaPlayback foreground service type on API 34+. -->
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK" />
    <!-- Prevents the CPU from sleeping while audio is actively playing. -->
    <uses-permission android:name="android.permission.WAKE_LOCK" />

    <application
        android:label="Player"
        android:name="${applicationName}"
        android:icon="@drawable/ic_launcher">
        <activity
            android:name=".MainActivity"
            android:exported="true"
            android:launchMode="singleTop"
            android:taskAffinity=""
            android:theme="@style/LaunchTheme"
            android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
            android:hardwareAccelerated="true"
            android:windowSoftInputMode="adjustResize">
            <meta-data
                android:name="io.flutter.embedding.android.NormalTheme"
                android:resource="@style/NormalTheme" />
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <!-- Deep-link intent-filter for public share URLs.
                 When a user opens a link of the form
                   https://<PLAYER_HOST>/share/<token>
                 Android routes the intent to this activity and go_router
                 navigates to the ShareViewerScreen (/share/:token).
                 Replace PLAYER_HOST with the real server hostname (e.g.
                 player.example.com) for production deployments; the wildcard
                 host below accepts any host for development flexibility.
                 android:autoVerify="true" enables App Links (verified deep
                 links) once an assetlinks.json file is served at the host;
                 without verification the OS shows the disambiguation dialog.
                 Both http and https schemes are declared so links work with
                 self-signed or non-TLS development servers as well as
                 production HTTPS deployments. -->
            <intent-filter android:autoVerify="true">
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
                <data android:scheme="https"
                      android:host="PLAYER_HOST"
                      android:pathPattern="/share/.*" />
            </intent-filter>
            <intent-filter android:autoVerify="true">
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
                <data android:scheme="http"
                      android:host="PLAYER_HOST"
                      android:pathPattern="/share/.*" />
            </intent-filter>
        </activity>
        <meta-data
            android:name="flutterEmbedding"
            android:value="2" />
        <!-- Disable Impeller on the x86_64 emulator: its OpenGL ES driver
             does not support GL_EXT_shader_framebuffer_fetch, causing Impeller
             to fail compiling blend-mode shaders.  Skia renders correctly. -->
        <meta-data
            android:name="io.flutter.embedding.android.EnableImpeller"
            android:value="false" />
        <!-- audio_service background playback service.
             android:foregroundServiceType="mediaPlayback" is mandatory on
             Android 10+ (API 29+) to grant media-playback foreground service
             privileges.  This overrides the entry auto-merged from
             audio_service's own manifest to explicitly pin the foreground
             service type.  Class names match audio_service 0.18.x internals. -->
        <service
            android:name="com.ryanheise.audioservice.AudioService"
            android:exported="true"
            android:foregroundServiceType="mediaPlayback">
            <intent-filter>
                <action android:name="android.media.browse.MediaBrowserService" />
            </intent-filter>
        </service>
        <!-- Receives hardware media button events (headset play/pause, etc.)
             and forwards them to audio_service. -->
        <receiver
            android:name="com.ryanheise.audioservice.MediaButtonReceiver"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MEDIA_BUTTON" />
            </intent-filter>
        </receiver>
    </application>
</manifest>