fix: Add build script and fix manifest

- Add build-apk.sh for easy compilation
- Simplify AndroidManifest.xml
- Fix themes.xml to use basic Android themes
- Enable BuildConfig
- Add okhttp-dnsoverhttps dependency
This commit is contained in:
Renato
2026-01-28 22:36:38 +00:00
parent d3ce7872e7
commit 2ccdf3a78c
11853 changed files with 741631 additions and 543 deletions

View File

@@ -4,45 +4,32 @@
<!-- Internet permission for streaming IPTV content -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- Network state permissions for monitoring connectivity -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!-- Wake lock to keep screen on during playback -->
<uses-permission android:name="android.permission.WAKE_LOCK" />
<!-- Picture-in-Picture mode for Android O and above -->
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<!-- Permissions for downloading and installing APK updates -->
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="28" />
<application
android:name=".IPTVApplication"
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/ic_launcher"
android:icon="@android:drawable/ic_media_play"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.IPTVApp"
android:usesCleartextTraffic="true"
android:networkSecurityConfig="@xml/network_security_config"
tools:targetApi="34">
<!-- Main Activity - Entry point of the application -->
<!-- Main Activity -->
<activity
android:name=".ui.MainActivity"
android:name=".MainActivity"
android:exported="true"
android:configChanges="orientation|screenSize|smallestScreenSize|screenLayout|keyboard|keyboardHidden|navigation"
android:launchMode="singleTask"
android:screenOrientation="unspecified"
android:theme="@style/Theme.IPTVApp">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
@@ -59,86 +46,19 @@
<data android:mimeType="audio/x-mpegurl" />
<data android:mimeType="application/vnd.apple.mpegurl" />
<data android:mimeType="application/x-mpegurl" />
<data android:mimeType="text/plain" />
</intent-filter>
<!-- Intent filter for opening IPTV URLs -->
<intent-filter>
<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" />
<data android:scheme="https" />
<data android:host="*" />
<data android:pathPattern=".*\\.m3u" />
<data android:pathPattern=".*\\.m3u8" />
</intent-filter>
</activity>
<!-- Player Activity - Full screen video playback -->
<activity
android:name=".ui.PlayerActivity"
android:name=".PlayerActivity"
android:configChanges="orientation|screenSize|smallestScreenSize|screenLayout|keyboard|keyboardHidden|navigation"
android:exported="false"
android:launchMode="singleTop"
android:screenOrientation="unspecified"
android:theme="@style/Theme.IPTVApp.Fullscreen"
android:supportsPictureInPicture="true"
android:resizeableActivity="true"
android:turnScreenOn="true"
android:keepScreenOn="true" />
<!-- Settings Activity -->
<activity
android:name=".ui.SettingsActivity"
android:exported="false"
android:label="@string/settings"
android:parentActivityName=".ui.MainActivity"
android:theme="@style/Theme.IPTVApp" />
<!-- Channel List Activity -->
<activity
android:name=".ui.ChannelListActivity"
android:exported="false"
android:label="@string/channels"
android:parentActivityName=".ui.MainActivity"
android:theme="@style/Theme.IPTVApp" />
<!-- EPG Activity - Electronic Program Guide -->
<activity
android:name=".ui.EpgActivity"
android:exported="false"
android:label="@string/epg"
android:parentActivityName=".ui.MainActivity"
android:theme="@style/Theme.IPTVApp" />
<!-- ExoPlayer Download Service for offline content -->
<service
android:name=".service.DownloadService"
android:exported="false"
android:foregroundServiceType="dataSync" />
<!-- Background playback service -->
<service
android:name=".service.PlaybackService"
android:exported="false"
android:foregroundServiceType="mediaPlayback" />
<!-- TV Launcher Intent for Android TV support -->
<activity
android:name=".ui.TvMainActivity"
android:exported="true"
android:theme="@style/Theme.IPTVApp.Leanback"
android:banner="@drawable/banner"
android:icon="@drawable/banner"
android:logo="@drawable/banner"
android:screenOrientation="landscape">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LEANBACK_LAUNCHER" />
</intent-filter>
</activity>
<!-- FileProvider for sharing APK files -->
<provider
android:name="androidx.core.content.FileProvider"
@@ -150,20 +70,6 @@
android:resource="@xml/file_provider_paths" />
</provider>
<!-- Intent filter for handling downloaded APKs -->
<activity
android:name=".ui.InstallApkActivity"
android:exported="false"
android:theme="@style/Theme.IPTVApp">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="file" />
<data android:scheme="content" />
<data android:mimeType="application/vnd.android.package-archive" />
</intent-filter>
</activity>
</application>
</manifest>

View File

@@ -1,188 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Base application theme - Light -->
<style name="Theme.IPTVApp" parent="Theme.Material3.Light.NoActionBar">
<!-- Primary brand colors -->
<item name="colorPrimary">@color/primary</item>
<item name="colorPrimaryDark">@color/primary_dark</item>
<item name="colorPrimaryContainer">@color/primary_light</item>
<item name="colorOnPrimary">@color/text_on_primary</item>
<item name="colorOnPrimaryContainer">@color/primary_variant</item>
<!-- Secondary brand colors -->
<item name="colorSecondary">@color/secondary</item>
<item name="colorSecondaryContainer">@color/secondary_light</item>
<item name="colorOnSecondary">@color/text_on_secondary</item>
<item name="colorOnSecondaryContainer">@color/secondary_variant</item>
<!-- Tertiary colors -->
<item name="colorTertiary">@color/tertiary</item>
<item name="colorTertiaryContainer">@color/tertiary_light</item>
<item name="colorOnTertiary">@color/text_on_primary</item>
<item name="colorOnTertiaryContainer">@color/tertiary_dark</item>
<!-- Surface colors -->
<item name="colorSurface">@color/surface</item>
<item name="colorSurfaceVariant">@color/surface_variant</item>
<item name="colorOnSurface">@color/text_primary</item>
<item name="colorOnSurfaceVariant">@color/text_secondary</item>
<!-- Background colors -->
<item name="android:colorBackground">@color/background</item>
<item name="colorOnBackground">@color/text_primary</item>
<!-- Error colors -->
<item name="colorError">@color/error</item>
<item name="colorErrorContainer">@color/error</item>
<item name="colorOnError">@color/text_on_primary</item>
<item name="colorOnErrorContainer">@color/error</item>
<!-- Outline -->
<item name="colorOutline">@color/border</item>
<item name="colorOutlineVariant">@color/divider</item>
<!-- Status bar -->
<!-- Base application theme -->
<style name="Theme.IPTVApp" parent="android:Theme.Material.Light.NoActionBar">
<item name="android:colorPrimary">@color/primary</item>
<item name="android:colorPrimaryDark">@color/primary_dark</item>
<item name="android:colorAccent">@color/secondary</item>
<item name="android:statusBarColor">@color/primary_dark</item>
<item name="android:windowLightStatusBar">true</item>
<!-- Navigation bar -->
<item name="android:navigationBarColor">@color/background</item>
<item name="android:windowLightNavigationBar">true</item>
<!-- Typography -->
<item name="textAppearanceDisplayLarge">@style/TextAppearance.IPTV.DisplayLarge</item>
<item name="textAppearanceDisplayMedium">@style/TextAppearance.IPTV.DisplayMedium</item>
<item name="textAppearanceDisplaySmall">@style/TextAppearance.IPTV.DisplaySmall</item>
<item name="textAppearanceHeadlineLarge">@style/TextAppearance.IPTV.HeadlineLarge</item>
<item name="textAppearanceHeadlineMedium">@style/TextAppearance.IPTV.HeadlineMedium</item>
<item name="textAppearanceHeadlineSmall">@style/TextAppearance.IPTV.HeadlineSmall</item>
<item name="textAppearanceTitleLarge">@style/TextAppearance.IPTV.TitleLarge</item>
<item name="textAppearanceTitleMedium">@style/TextAppearance.IPTV.TitleMedium</item>
<item name="textAppearanceTitleSmall">@style/TextAppearance.IPTV.TitleSmall</item>
<item name="textAppearanceBodyLarge">@style/TextAppearance.IPTV.BodyLarge</item>
<item name="textAppearanceBodyMedium">@style/TextAppearance.IPTV.BodyMedium</item>
<item name="textAppearanceBodySmall">@style/TextAppearance.IPTV.BodySmall</item>
<item name="textAppearanceLabelLarge">@style/TextAppearance.IPTV.LabelLarge</item>
<item name="textAppearanceLabelMedium">@style/TextAppearance.IPTV.LabelMedium</item>
<item name="textAppearanceLabelSmall">@style/TextAppearance.IPTV.LabelSmall</item>
<!-- Shape appearance -->
<item name="shapeAppearanceSmallComponent">@style/ShapeAppearance.IPTV.SmallComponent</item>
<item name="shapeAppearanceMediumComponent">@style/ShapeAppearance.IPTV.MediumComponent</item>
<item name="shapeAppearanceLargeComponent">@style/ShapeAppearance.IPTV.LargeComponent</item>
<!-- Component styles -->
<item name="materialButtonStyle">@style/Widget.IPTV.Button</item>
<item name="materialCardViewStyle">@style/Widget.IPTV.CardView</item>
<item name="textInputStyle">@style/Widget.IPTV.TextInputLayout</item>
<item name="toolbarStyle">@style/Widget.IPTV.Toolbar</item>
<item name="appBarLayoutStyle">@style/Widget.IPTV.AppBar</item>
<item name="bottomNavigationStyle">@style/Widget.IPTV.BottomNavigation</item>
<item name="tabStyle">@style/Widget.IPTV.TabLayout</item>
<item name="sliderStyle">@style/Widget.IPTV.Slider</item>
<item name="switchStyle">@style/Widget.IPTV.Switch</item>
<item name="checkboxStyle">@style/Widget.IPTV.CheckBox</item>
<item name="radioButtonStyle">@style/Widget.IPTV.RadioButton</item>
<!-- Dialog themes -->
<item name="materialAlertDialogTheme">@style/ThemeOverlay.IPTV.MaterialAlertDialog</item>
<item name="alertDialogTheme">@style/ThemeOverlay.IPTV.AlertDialog</item>
<!-- Popup menu -->
<item name="popupMenuStyle">@style/Widget.IPTV.PopupMenu</item>
</style>
<!-- Dark Theme -->
<style name="Theme.IPTVApp.Dark" parent="Theme.Material3.Dark.NoActionBar">
<!-- Primary brand colors -->
<item name="colorPrimary">@color/primary_light</item>
<item name="colorPrimaryDark">@color/primary</item>
<item name="colorPrimaryContainer">@color/primary_variant</item>
<item name="colorOnPrimary">@color/text_on_primary</item>
<item name="colorOnPrimaryContainer">@color/primary_light</item>
<!-- Secondary brand colors -->
<item name="colorSecondary">@color/secondary_light</item>
<item name="colorSecondaryContainer">@color/secondary_variant</item>
<item name="colorOnSecondary">@color/text_on_secondary</item>
<item name="colorOnSecondaryContainer">@color/secondary_light</item>
<!-- Tertiary colors -->
<item name="colorTertiary">@color/tertiary_light</item>
<item name="colorTertiaryContainer">@color/tertiary_dark</item>
<item name="colorOnTertiary">@color/text_on_primary</item>
<item name="colorOnTertiaryContainer">@color/tertiary_light</item>
<!-- Surface colors -->
<item name="colorSurface">@color/surface_dark</item>
<item name="colorSurfaceVariant">@color/surface_variant_dark</item>
<item name="colorOnSurface">@color/text_primary_dark</item>
<item name="colorOnSurfaceVariant">@color/text_secondary_dark</item>
<!-- Background colors -->
<item name="android:colorBackground">@color/background_dark</item>
<item name="colorOnBackground">@color/text_primary_dark</item>
<!-- Error colors -->
<item name="colorError">@color/error_dark</item>
<item name="colorErrorContainer">@color/error_dark</item>
<item name="colorOnError">@color/text_on_primary</item>
<item name="colorOnErrorContainer">@color/error_dark</item>
<!-- Outline -->
<item name="colorOutline">@color/border_dark</item>
<item name="colorOutlineVariant">@color/divider_dark</item>
<!-- Status bar -->
<style name="Theme.IPTVApp.Dark" parent="android:Theme.Material.NoActionBar">
<item name="android:colorPrimary">@color/primary_light</item>
<item name="android:colorPrimaryDark">@color/primary</item>
<item name="android:colorAccent">@color/secondary_light</item>
<item name="android:statusBarColor">@color/background_dark</item>
<item name="android:windowLightStatusBar">false</item>
<!-- Navigation bar -->
<item name="android:navigationBarColor">@color/background_dark</item>
<item name="android:windowLightNavigationBar">false</item>
<!-- Typography -->
<item name="textAppearanceDisplayLarge">@style/TextAppearance.IPTV.DisplayLarge</item>
<item name="textAppearanceDisplayMedium">@style/TextAppearance.IPTV.DisplayMedium</item>
<item name="textAppearanceDisplaySmall">@style/TextAppearance.IPTV.DisplaySmall</item>
<item name="textAppearanceHeadlineLarge">@style/TextAppearance.IPTV.HeadlineLarge</item>
<item name="textAppearanceHeadlineMedium">@style/TextAppearance.IPTV.HeadlineMedium</item>
<item name="textAppearanceHeadlineSmall">@style/TextAppearance.IPTV.HeadlineSmall</item>
<item name="textAppearanceTitleLarge">@style/TextAppearance.IPTV.TitleLarge</item>
<item name="textAppearanceTitleMedium">@style/TextAppearance.IPTV.TitleMedium</item>
<item name="textAppearanceTitleSmall">@style/TextAppearance.IPTV.TitleSmall</item>
<item name="textAppearanceBodyLarge">@style/TextAppearance.IPTV.BodyLarge</item>
<item name="textAppearanceBodyMedium">@style/TextAppearance.IPTV.BodyMedium</item>
<item name="textAppearanceBodySmall">@style/TextAppearance.IPTV.BodySmall</item>
<item name="textAppearanceLabelLarge">@style/TextAppearance.IPTV.LabelLarge</item>
<item name="textAppearanceLabelMedium">@style/TextAppearance.IPTV.LabelMedium</item>
<item name="textAppearanceLabelSmall">@style/TextAppearance.IPTV.LabelSmall</item>
<!-- Shape appearance -->
<item name="shapeAppearanceSmallComponent">@style/ShapeAppearance.IPTV.SmallComponent</item>
<item name="shapeAppearanceMediumComponent">@style/ShapeAppearance.IPTV.MediumComponent</item>
<item name="shapeAppearanceLargeComponent">@style/ShapeAppearance.IPTV.LargeComponent</item>
<!-- Component styles -->
<item name="materialButtonStyle">@style/Widget.IPTV.Button</item>
<item name="materialCardViewStyle">@style/Widget.IPTV.CardView.Dark</item>
<item name="textInputStyle">@style/Widget.IPTV.TextInputLayout.Dark</item>
<item name="toolbarStyle">@style/Widget.IPTV.Toolbar.Dark</item>
<item name="appBarLayoutStyle">@style/Widget.IPTV.AppBar.Dark</item>
<item name="bottomNavigationStyle">@style/Widget.IPTV.BottomNavigation.Dark</item>
<item name="tabStyle">@style/Widget.IPTV.TabLayout.Dark</item>
<item name="sliderStyle">@style/Widget.IPTV.Slider.Dark</item>
<item name="switchStyle">@style/Widget.IPTV.Switch.Dark</item>
<item name="checkboxStyle">@style/Widget.IPTV.CheckBox.Dark</item>
<item name="radioButtonStyle">@style/Widget.IPTV.RadioButton.Dark</item>
<!-- Dialog themes -->
<item name="materialAlertDialogTheme">@style/ThemeOverlay.IPTV.MaterialAlertDialog.Dark</item>
<item name="alertDialogTheme">@style/ThemeOverlay.IPTV.AlertDialog.Dark</item>
<!-- Popup menu -->
<item name="popupMenuStyle">@style/Widget.IPTV.PopupMenu.Dark</item>
</style>
<!-- Fullscreen Player Theme (Immersive) -->
@@ -193,7 +31,6 @@
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowTranslucentNavigation">true</item>
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
<item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:navigationBarColor">@android:color/transparent</item>
<item name="android:background">@android:color/black</item>
@@ -207,282 +44,9 @@
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowTranslucentNavigation">true</item>
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
<item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:navigationBarColor">@android:color/transparent</item>
<item name="android:background">@android:color/black</item>
</style>
<!-- Android TV / Leanback Theme -->
<style name="Theme.IPTVApp.Leanback" parent="Theme.Leanback">
<item name="android:windowBackground">@android:color/black</item>
<item name="android:colorPrimary">@color/primary</item>
<item name="android:colorPrimaryDark">@color/primary_dark</item>
<item name="android:colorAccent">@color/secondary</item>
</style>
<!-- ============================================ -->
<!-- Text Appearances -->
<!-- ============================================ -->
<style name="TextAppearance.IPTV.DisplayLarge" parent="TextAppearance.Material3.DisplayLarge">
<item name="fontFamily">@font/roboto_regular</item>
<item name="android:fontFamily">@font/roboto_regular</item>
</style>
<style name="TextAppearance.IPTV.DisplayMedium" parent="TextAppearance.Material3.DisplayMedium">
<item name="fontFamily">@font/roboto_regular</item>
<item name="android:fontFamily">@font/roboto_regular</item>
</style>
<style name="TextAppearance.IPTV.DisplaySmall" parent="TextAppearance.Material3.DisplaySmall">
<item name="fontFamily">@font/roboto_regular</item>
<item name="android:fontFamily">@font/roboto_regular</item>
</style>
<style name="TextAppearance.IPTV.HeadlineLarge" parent="TextAppearance.Material3.HeadlineLarge">
<item name="fontFamily">@font/roboto_medium</item>
<item name="android:fontFamily">@font/roboto_medium</item>
</style>
<style name="TextAppearance.IPTV.HeadlineMedium" parent="TextAppearance.Material3.HeadlineMedium">
<item name="fontFamily">@font/roboto_medium</item>
<item name="android:fontFamily">@font/roboto_medium</item>
</style>
<style name="TextAppearance.IPTV.HeadlineSmall" parent="TextAppearance.Material3.HeadlineSmall">
<item name="fontFamily">@font/roboto_medium</item>
<item name="android:fontFamily">@font/roboto_medium</item>
</style>
<style name="TextAppearance.IPTV.TitleLarge" parent="TextAppearance.Material3.TitleLarge">
<item name="fontFamily">@font/roboto_medium</item>
<item name="android:fontFamily">@font/roboto_medium</item>
</style>
<style name="TextAppearance.IPTV.TitleMedium" parent="TextAppearance.Material3.TitleMedium">
<item name="fontFamily">@font/roboto_medium</item>
<item name="android:fontFamily">@font/roboto_medium</item>
</style>
<style name="TextAppearance.IPTV.TitleSmall" parent="TextAppearance.Material3.TitleSmall">
<item name="fontFamily">@font/roboto_medium</item>
<item name="android:fontFamily">@font/roboto_medium</item>
</style>
<style name="TextAppearance.IPTV.BodyLarge" parent="TextAppearance.Material3.BodyLarge">
<item name="fontFamily">@font/roboto_regular</item>
<item name="android:fontFamily">@font/roboto_regular</item>
</style>
<style name="TextAppearance.IPTV.BodyMedium" parent="TextAppearance.Material3.BodyMedium">
<item name="fontFamily">@font/roboto_regular</item>
<item name="android:fontFamily">@font/roboto_regular</item>
</style>
<style name="TextAppearance.IPTV.BodySmall" parent="TextAppearance.Material3.BodySmall">
<item name="fontFamily">@font/roboto_regular</item>
<item name="android:fontFamily">@font/roboto_regular</item>
</style>
<style name="TextAppearance.IPTV.LabelLarge" parent="TextAppearance.Material3.LabelLarge">
<item name="fontFamily">@font/roboto_medium</item>
<item name="android:fontFamily">@font/roboto_medium</item>
</style>
<style name="TextAppearance.IPTV.LabelMedium" parent="TextAppearance.Material3.LabelMedium">
<item name="fontFamily">@font/roboto_medium</item>
<item name="android:fontFamily">@font/roboto_medium</item>
</style>
<style name="TextAppearance.IPTV.LabelSmall" parent="TextAppearance.Material3.LabelSmall">
<item name="fontFamily">@font/roboto_medium</item>
<item name="android:fontFamily">@font/roboto_medium</item>
</style>
<!-- ============================================ -->
<!-- Shape Appearances -->
<!-- ============================================ -->
<style name="ShapeAppearance.IPTV.SmallComponent" parent="ShapeAppearance.Material3.SmallComponent">
<item name="cornerFamily">rounded</item>
<item name="cornerSize">8dp</item>
</style>
<style name="ShapeAppearance.IPTV.MediumComponent" parent="ShapeAppearance.Material3.MediumComponent">
<item name="cornerFamily">rounded</item>
<item name="cornerSize">12dp</item>
</style>
<style name="ShapeAppearance.IPTV.LargeComponent" parent="ShapeAppearance.Material3.LargeComponent">
<item name="cornerFamily">rounded</item>
<item name="cornerSize">16dp</item>
</style>
<!-- ============================================ -->
<!-- Widget Styles -->
<!-- ============================================ -->
<!-- Button -->
<style name="Widget.IPTV.Button" parent="Widget.Material3.Button">
<item name="android:textAppearance">@style/TextAppearance.IPTV.LabelLarge</item>
<item name="android:minHeight">48dp</item>
<item name="cornerRadius">8dp</item>
</style>
<!-- CardView -->
<style name="Widget.IPTV.CardView" parent="Widget.Material3.CardView.Elevated">
<item name="cardBackgroundColor">@color/surface</item>
<item name="cardElevation">2dp</item>
<item name="cardCornerRadius">12dp</item>
</style>
<style name="Widget.IPTV.CardView.Dark" parent="Widget.Material3.CardView.Elevated">
<item name="cardBackgroundColor">@color/surface_dark</item>
<item name="cardElevation">2dp</item>
<item name="cardCornerRadius">12dp</item>
</style>
<!-- TextInputLayout -->
<style name="Widget.IPTV.TextInputLayout" parent="Widget.Material3.TextInputLayout.OutlinedBox">
<item name="boxStrokeColor">@color/primary</item>
<item name="hintTextColor">@color/primary</item>
</style>
<style name="Widget.IPTV.TextInputLayout.Dark" parent="Widget.Material3.TextInputLayout.OutlinedBox">
<item name="boxStrokeColor">@color/primary_light</item>
<item name="hintTextColor">@color/primary_light</item>
</style>
<!-- Toolbar -->
<style name="Widget.IPTV.Toolbar" parent="Widget.Material3.Toolbar">
<item name="android:background">@color/primary</item>
<item name="titleTextColor">@color/text_on_primary</item>
<item name="subtitleTextColor">@color/text_on_primary</item>
</style>
<style name="Widget.IPTV.Toolbar.Dark" parent="Widget.Material3.Toolbar">
<item name="android:background">@color/surface_dark</item>
<item name="titleTextColor">@color/text_primary_dark</item>
<item name="subtitleTextColor">@color/text_secondary_dark</item>
</style>
<!-- AppBar -->
<style name="Widget.IPTV.AppBar" parent="Widget.Material3.AppBarLayout">
<item name="android:background">@color/primary</item>
<item name="elevation">4dp</item>
</style>
<style name="Widget.IPTV.AppBar.Dark" parent="Widget.Material3.AppBarLayout">
<item name="android:background">@color/surface_dark</item>
<item name="elevation">4dp</item>
</style>
<!-- BottomNavigation -->
<style name="Widget.IPTV.BottomNavigation" parent="Widget.Material3.BottomNavigationView">
<item name="android:background">@color/surface</item>
<item name="itemIconTint">@color/navigation_item</item>
<item name="itemTextColor">@color/navigation_item</item>
<item name="itemRippleColor">@color/ripple</item>
</style>
<style name="Widget.IPTV.BottomNavigation.Dark" parent="Widget.Material3.BottomNavigationView">
<item name="android:background">@color/surface_dark</item>
<item name="itemIconTint">@color/navigation_item_dark</item>
<item name="itemTextColor">@color/navigation_item_dark</item>
<item name="itemRippleColor">@color/ripple_dark</item>
</style>
<!-- TabLayout -->
<style name="Widget.IPTV.TabLayout" parent="Widget.Material3.TabLayout">
<item name="android:background">@color/primary</item>
<item name="tabIndicatorColor">@color/text_on_primary</item>
<item name="tabSelectedTextColor">@color/text_on_primary</item>
<item name="tabTextColor">@color/text_on_primary</item>
</style>
<style name="Widget.IPTV.TabLayout.Dark" parent="Widget.Material3.TabLayout">
<item name="android:background">@color/surface_dark</item>
<item name="tabIndicatorColor">@color/primary_light</item>
<item name="tabSelectedTextColor">@color/primary_light</item>
<item name="tabTextColor">@color/text_secondary_dark</item>
</style>
<!-- Slider -->
<style name="Widget.IPTV.Slider" parent="Widget.Material3.Slider">
<item name="trackColorActive">@color/primary</item>
<item name="trackColorInactive">@color/surface_variant</item>
<item name="thumbColor">@color/primary</item>
</style>
<style name="Widget.IPTV.Slider.Dark" parent="Widget.Material3.Slider">
<item name="trackColorActive">@color/primary_light</item>
<item name="trackColorInactive">@color/surface_variant_dark</item>
<item name="thumbColor">@color/primary_light</item>
</style>
<!-- Switch -->
<style name="Widget.IPTV.Switch" parent="Widget.Material3.CompoundButton.MaterialSwitch">
<item name="thumbTint">@color/primary</item>
<item name="trackTint">@color/primary_light</item>
</style>
<style name="Widget.IPTV.Switch.Dark" parent="Widget.Material3.CompoundButton.MaterialSwitch">
<item name="thumbTint">@color/primary_light</item>
<item name="trackTint">@color/primary</item>
</style>
<!-- CheckBox -->
<style name="Widget.IPTV.CheckBox" parent="Widget.Material3.CompoundButton.CheckBox">
<item name="buttonTint">@color/primary</item>
</style>
<style name="Widget.IPTV.CheckBox.Dark" parent="Widget.Material3.CompoundButton.CheckBox">
<item name="buttonTint">@color/primary_light</item>
</style>
<!-- RadioButton -->
<style name="Widget.IPTV.RadioButton" parent="Widget.Material3.CompoundButton.RadioButton">
<item name="buttonTint">@color/primary</item>
</style>
<style name="Widget.IPTV.RadioButton.Dark" parent="Widget.Material3.CompoundButton.RadioButton">
<item name="buttonTint">@color/primary_light</item>
</style>
<!-- PopupMenu -->
<style name="Widget.IPTV.PopupMenu" parent="Widget.Material3.PopupMenu">
<item name="android:popupBackground">@drawable/popup_background</item>
</style>
<style name="Widget.IPTV.PopupMenu.Dark" parent="Widget.Material3.PopupMenu">
<item name="android:popupBackground">@drawable/popup_background_dark</item>
</style>
<!-- ============================================ -->
<!-- Theme Overlays -->
<!-- ============================================ -->
<style name="ThemeOverlay.IPTV.MaterialAlertDialog" parent="ThemeOverlay.Material3.MaterialAlertDialog">
<item name="colorPrimary">@color/primary</item>
<item name="colorSurface">@color/surface</item>
<item name="colorOnSurface">@color/text_primary</item>
</style>
<style name="ThemeOverlay.IPTV.MaterialAlertDialog.Dark" parent="ThemeOverlay.Material3.MaterialAlertDialog">
<item name="colorPrimary">@color/primary_light</item>
<item name="colorSurface">@color/surface_dark</item>
<item name="colorOnSurface">@color/text_primary_dark</item>
</style>
<style name="ThemeOverlay.IPTV.AlertDialog" parent="ThemeOverlay.Material3.Dialog.Alert">
<item name="colorPrimary">@color/primary</item>
<item name="android:background">@color/surface</item>
</style>
<style name="ThemeOverlay.IPTV.AlertDialog.Dark" parent="ThemeOverlay.Material3.Dialog.Alert">
<item name="colorPrimary">@color/primary_light</item>
<item name="android:background">@color/surface_dark</item>
</style>
</resources>