- Add Media3 dependencies (ExoPlayer, HLS, MediaSession, UI) for audio streaming - Implement AudioPlayerService as MediaSessionService with foreground playback support - Create AudioHandler for playback control and AudioMedia domain model with AudioContentType enum - Add MiniPlayerBar and FullPlayerSheet UI components with play/pause, seek, and navigation controls - Implement AudioClassifier with strict priority
146 lines
5.9 KiB
XML
146 lines
5.9 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||
xmlns:tools="http://schemas.android.com/tools">
|
||
|
||
<uses-permission android:name="android.permission.INTERNET" />
|
||
<uses-permission android:name="android.permission.RECORD_AUDIO" />
|
||
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
|
||
<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM" />
|
||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK" />
|
||
|
||
<application
|
||
android:name=".ShaarItApp"
|
||
android:allowBackup="true"
|
||
android:dataExtractionRules="@xml/data_extraction_rules"
|
||
android:fullBackupContent="@xml/backup_rules"
|
||
android:icon="@mipmap/ic_launcher"
|
||
android:label="@string/app_name"
|
||
android:roundIcon="@mipmap/ic_launcher_round"
|
||
android:supportsRtl="true"
|
||
android:theme="@style/Theme.ShaarIt"
|
||
android:usesCleartextTraffic="true"
|
||
tools:targetApi="31">
|
||
|
||
<!-- Disable default WorkManager initialization to use HiltWorkerFactory -->
|
||
<provider
|
||
android:name="androidx.startup.InitializationProvider"
|
||
android:authorities="${applicationId}.androidx-startup"
|
||
android:exported="false"
|
||
tools:node="merge">
|
||
<meta-data
|
||
android:name="androidx.work.WorkManagerInitializer"
|
||
android:value="androidx.startup"
|
||
tools:node="remove" />
|
||
</provider>
|
||
|
||
<activity
|
||
android:name=".MainActivity"
|
||
android:exported="true"
|
||
android:label="@string/app_name"
|
||
android:theme="@style/Theme.ShaarIt.Splash"
|
||
android:windowSoftInputMode="adjustResize">
|
||
<intent-filter>
|
||
<action android:name="android.intent.action.MAIN" />
|
||
<category android:name="android.intent.category.LAUNCHER" />
|
||
</intent-filter>
|
||
|
||
<!-- Share Intent - Text -->
|
||
<intent-filter>
|
||
<action android:name="android.intent.action.SEND" />
|
||
<category android:name="android.intent.category.DEFAULT" />
|
||
<data android:mimeType="text/plain" />
|
||
</intent-filter>
|
||
|
||
<!-- Share Intent - Markdown and Text Files -->
|
||
<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="application/octet-stream" />
|
||
</intent-filter>
|
||
|
||
<!-- App Shortcuts -->
|
||
<meta-data
|
||
android:name="android.app.shortcuts"
|
||
android:resource="@xml/shortcuts" />
|
||
</activity>
|
||
|
||
<!-- Audio Player Service (Media3 MediaSessionService) -->
|
||
<service
|
||
android:name=".service.AudioPlayerService"
|
||
android:exported="true"
|
||
android:foregroundServiceType="mediaPlayback">
|
||
<intent-filter>
|
||
<action android:name="androidx.media3.session.MediaSessionService" />
|
||
</intent-filter>
|
||
</service>
|
||
|
||
<!-- Quick Settings Tile -->
|
||
<service
|
||
android:name=".service.AddLinkTileService"
|
||
android:exported="true"
|
||
android:label="@string/tile_add_link"
|
||
android:icon="@drawable/ic_launcher_foreground"
|
||
android:permission="android.permission.BIND_QUICK_SETTINGS_TILE">
|
||
<intent-filter>
|
||
<action android:name="android.service.quicksettings.action.QS_TILE" />
|
||
</intent-filter>
|
||
</service>
|
||
|
||
<!-- Widget Search Dialog Activity -->
|
||
<activity
|
||
android:name=".widget.WidgetSearchActivity"
|
||
android:exported="false"
|
||
android:theme="@style/Theme.AppCompat.Dialog" />
|
||
|
||
<!-- Legacy Widget (RemoteViews) -->
|
||
<receiver
|
||
android:name=".widget.ShaarliWidgetProvider"
|
||
android:exported="true"
|
||
android:label="@string/app_name">
|
||
<intent-filter>
|
||
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
|
||
</intent-filter>
|
||
<meta-data
|
||
android:name="android.appwidget.provider"
|
||
android:resource="@xml/widget_info" />
|
||
</receiver>
|
||
|
||
<service
|
||
android:name=".widget.ShaarliWidgetService"
|
||
android:exported="false"
|
||
android:permission="android.permission.BIND_REMOTEVIEWS" />
|
||
|
||
<!-- Glance Widget: Recent Links (4×2) -->
|
||
<receiver
|
||
android:name=".widget.glance.RecentLinksWidgetReceiver"
|
||
android:exported="true"
|
||
android:label="@string/widget_recent_links_name">
|
||
<intent-filter>
|
||
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
|
||
</intent-filter>
|
||
<meta-data
|
||
android:name="android.appwidget.provider"
|
||
android:resource="@xml/widget_recent_links_info" />
|
||
</receiver>
|
||
|
||
<!-- Glance Widget: Quick Stats (2×1) -->
|
||
<receiver
|
||
android:name=".widget.glance.QuickStatsWidgetReceiver"
|
||
android:exported="true"
|
||
android:label="@string/widget_quick_stats_name">
|
||
<intent-filter>
|
||
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
|
||
</intent-filter>
|
||
<meta-data
|
||
android:name="android.appwidget.provider"
|
||
android:resource="@xml/widget_quick_stats_info" />
|
||
</receiver>
|
||
</application>
|
||
|
||
</manifest> |