129 lines
6.0 KiB
XML
129 lines
6.0 KiB
XML
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
|
xmlns:tools="http://schemas.android.com/tools">
|
|
|
|
<uses-permission android:name="android.permission.INTERNET"/>
|
|
|
|
<!-- Remove USE_FULL_SCREEN_INTENT added by flutter_callkit_incoming/flutter_local_notifications.
|
|
Not needed: app only has outgoing calls (no incoming call UI on lock screen). -->
|
|
<uses-permission android:name="android.permission.USE_FULL_SCREEN_INTENT" tools:node="remove"/>
|
|
|
|
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
|
|
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
|
|
<uses-permission android:name="android.permission.CAMERA"/>
|
|
<!-- No broad media/storage permissions; use Android Photo Picker (API 33+) and SAF/share intents -->
|
|
|
|
<!-- Bluetooth permissions for audio routing (Android 12+) -->
|
|
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" android:maxSdkVersion="32" />
|
|
|
|
<!-- Background streaming permissions -->
|
|
<uses-permission android:name="android.permission.WAKE_LOCK"/>
|
|
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
|
|
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC"/>
|
|
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MICROPHONE"/>
|
|
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
|
|
|
|
<queries>
|
|
<intent>
|
|
<action android:name="android.speech.RecognitionService" />
|
|
</intent>
|
|
<intent>
|
|
<action android:name="android.intent.action.TTS_SERVICE" />
|
|
</intent>
|
|
</queries>
|
|
|
|
<!-- Custom Application class creates notification channels at startup to prevent
|
|
ForegroundServiceDidNotStartInTimeException. This ensures channels exist before
|
|
any foreground service attempts to use them. -->
|
|
<application
|
|
android:label="Conduit"
|
|
android:name=".ConduitApplication"
|
|
android:icon="@mipmap/ic_launcher"
|
|
android:allowBackup="false"
|
|
android:fullBackupContent="false"
|
|
android:usesCleartextTraffic="true">
|
|
<service
|
|
android:name=".ConduitVoiceInteractionSessionService"
|
|
android:permission="android.permission.BIND_VOICE_INTERACTION"
|
|
android:exported="true">
|
|
<meta-data
|
|
android:name="android.voice_interaction"
|
|
android:resource="@xml/voice_interaction_service" />
|
|
<intent-filter>
|
|
<action android:name="android.service.voice.VoiceInteractionService" />
|
|
</intent-filter>
|
|
</service>
|
|
|
|
<activity
|
|
android:name=".MainActivity"
|
|
android:exported="true"
|
|
android:launchMode="singleInstance"
|
|
android:theme="@style/LaunchTheme"
|
|
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
|
|
android:hardwareAccelerated="true"
|
|
android:windowSoftInputMode="adjustResize">
|
|
<!-- Specifies an Android theme to apply to this Activity as soon as
|
|
the Android process has started. This theme is visible to the user
|
|
while the Flutter UI initializes. After that, this theme continues
|
|
to determine the Window background behind the Flutter UI. -->
|
|
<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>
|
|
|
|
<!-- Receive shares: text, single/multiple files, images -->
|
|
<intent-filter>
|
|
<action android:name="android.intent.action.SEND" />
|
|
<category android:name="android.intent.category.DEFAULT" />
|
|
<data android:mimeType="text/*" />
|
|
</intent-filter>
|
|
<intent-filter>
|
|
<action android:name="android.intent.action.SEND" />
|
|
<category android:name="android.intent.category.DEFAULT" />
|
|
<data android:mimeType="image/*" />
|
|
</intent-filter>
|
|
<intent-filter>
|
|
<action android:name="android.intent.action.SEND" />
|
|
<category android:name="android.intent.category.DEFAULT" />
|
|
<data android:mimeType="*/*" />
|
|
</intent-filter>
|
|
<intent-filter>
|
|
<action android:name="android.intent.action.SEND_MULTIPLE" />
|
|
<category android:name="android.intent.category.DEFAULT" />
|
|
<data android:mimeType="*/*" />
|
|
</intent-filter>
|
|
</activity>
|
|
|
|
<!-- Adds a text-selection action (Android) shown in the selection toolbar.
|
|
It forwards the selected text into our existing share flow so the
|
|
Dart share handler receives it just like a regular share. -->
|
|
<activity
|
|
android:name=".ProcessTextActivity"
|
|
android:exported="true"
|
|
android:label="Ask Conduit"
|
|
android:noHistory="true">
|
|
<intent-filter>
|
|
<action android:name="android.intent.action.PROCESS_TEXT" />
|
|
<category android:name="android.intent.category.DEFAULT" />
|
|
<data android:mimeType="text/plain" />
|
|
</intent-filter>
|
|
</activity>
|
|
|
|
<!-- Background streaming service -->
|
|
<service
|
|
android:name=".BackgroundStreamingService"
|
|
android:enabled="true"
|
|
android:exported="false"
|
|
android:foregroundServiceType="dataSync|microphone"/>
|
|
|
|
<!-- Don't delete the meta-data below.
|
|
This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
|
|
<meta-data
|
|
android:name="flutterEmbedding"
|
|
android:value="2" />
|
|
</application>
|
|
</manifest>
|