├── .gitignore ├── .idea ├── .gitignore ├── .name ├── assetWizardSettings.xml ├── caches │ └── deviceStreaming.xml ├── compiler.xml ├── copyright │ └── profiles_settings.xml ├── deploymentTargetSelector.xml ├── gradle.xml ├── kotlinc.xml ├── migrations.xml ├── misc.xml ├── runConfigurations.xml └── vcs.xml ├── CHANGELOG.md ├── IPTVmine.jks ├── Image ├── 1.png ├── 2.png ├── 3.png ├── 4.png ├── 5.png └── 6.png ├── Images ├── LICENSE ├── README.md ├── app ├── .gitignore ├── build.gradle.kts ├── proguard-rules.pro ├── release │ ├── app-release.apk │ ├── baselineProfiles │ │ ├── 0 │ │ │ └── app-release.dm │ │ └── 1 │ │ │ └── app-release.dm │ └── output-metadata.json └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── samyak2403 │ │ └── iptvmine │ │ └── ExampleInstrumentedTest.kt │ ├── main │ ├── AndroidManifest.xml │ ├── assets │ │ └── tv_channels.json │ ├── ic_launcher-playstore.png │ ├── java │ │ └── com │ │ │ └── samyak2403 │ │ │ └── iptvmine │ │ │ ├── InternetSpeed │ │ │ └── InternetSpeedActivity.kt │ │ │ ├── MainActivity.kt │ │ │ ├── adapter │ │ │ └── ChannelsAdapter.kt │ │ │ ├── model │ │ │ └── Channel.kt │ │ │ ├── provider │ │ │ └── ChannelsProvider.kt │ │ │ └── screens │ │ │ ├── AboutFragment.kt │ │ │ ├── HomeFragment.kt │ │ │ └── PlayerActivity.kt │ └── res │ │ ├── drawable │ │ ├── about_app.png │ │ ├── dialog_background.xml │ │ ├── edittext_background.xml │ │ ├── ic_arrow_back.xml │ │ ├── ic_baseline_forward.xml │ │ ├── ic_baseline_fullscreen.xml │ │ ├── ic_baseline_fullscreen_exit.xml │ │ ├── ic_baseline_lock.xml │ │ ├── ic_baseline_lock_open.xml │ │ ├── ic_baseline_pause.xml │ │ ├── ic_baseline_play_arrow.xml │ │ ├── ic_baseline_replay.xml │ │ ├── ic_launcher_background.xml │ │ ├── ic_launcher_foreground.xml │ │ ├── ic_search.xml │ │ ├── ic_tv.png │ │ ├── magnifying_glass.xml │ │ ├── search.xml │ │ ├── search_bar_background.xml │ │ ├── tv.png │ │ └── tv_logo.png │ │ ├── layout │ │ ├── activity_internet_speed.xml │ │ ├── activity_main.xml │ │ ├── activity_player.xml │ │ ├── activity_tv.xml │ │ ├── custom_controller.xml │ │ ├── dialog_app_info.xml │ │ ├── dialog_quality_selector.xml │ │ ├── fragment_about.xml │ │ ├── fragment_home.xml │ │ └── item_channel.xml │ │ ├── menu │ │ └── menu_bottom.xml │ │ ├── mipmap-anydpi-v26 │ │ ├── ic_launcher.xml │ │ └── ic_launcher_round.xml │ │ ├── mipmap-hdpi │ │ ├── ic_launcher.webp │ │ ├── ic_launcher_foreground.webp │ │ └── ic_launcher_round.webp │ │ ├── mipmap-mdpi │ │ ├── ic_launcher.webp │ │ ├── ic_launcher_foreground.webp │ │ └── ic_launcher_round.webp │ │ ├── mipmap-xhdpi │ │ ├── ic_launcher.webp │ │ ├── ic_launcher_foreground.webp │ │ └── ic_launcher_round.webp │ │ ├── mipmap-xxhdpi │ │ ├── ic_launcher.webp │ │ ├── ic_launcher_foreground.webp │ │ └── ic_launcher_round.webp │ │ ├── mipmap-xxxhdpi │ │ ├── ic_launcher.webp │ │ ├── ic_launcher_foreground.webp │ │ └── ic_launcher_round.webp │ │ ├── raw │ │ ├── app_info.json │ │ ├── share_app.json │ │ ├── speedtester.json │ │ ├── update.json │ │ └── update_app.json │ │ ├── values-night │ │ └── themes.xml │ │ ├── values │ │ ├── colors.xml │ │ ├── ic_launcher_background.xml │ │ ├── strings.xml │ │ ├── styles.xml │ │ └── themes.xml │ │ └── xml │ │ ├── backup_rules.xml │ │ └── data_extraction_rules.xml │ └── test │ └── java │ └── com │ └── samyak2403 │ └── iptvmine │ └── ExampleUnitTest.kt ├── build.gradle.kts ├── fastlane └── metadata │ └── android │ └── en-US │ ├── full_description.txt │ ├── images │ ├── icon.png │ └── phoneScreenshots │ │ ├── 1.png │ │ ├── 2.png │ │ ├── 3.png │ │ ├── 4.png │ │ ├── 5.png │ │ └── 6.png │ └── short_description.txt ├── gradle.properties ├── gradle ├── libs.versions.toml └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── iptv.jks ├── local.properties ├── settings.gradle └── settings.gradle.kts /.gitignore: -------------------------------------------------------------------------------- 1 | # Project exclude paths 2 | /.gradle/ -------------------------------------------------------------------------------- /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | -------------------------------------------------------------------------------- /.idea/.name: -------------------------------------------------------------------------------- 1 | IPTV -------------------------------------------------------------------------------- /.idea/assetWizardSettings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 45 | 46 | -------------------------------------------------------------------------------- /.idea/caches/deviceStreaming.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 388 | 389 | -------------------------------------------------------------------------------- /.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/copyright/profiles_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /.idea/deploymentTargetSelector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/gradle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 19 | 20 | -------------------------------------------------------------------------------- /.idea/kotlinc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | -------------------------------------------------------------------------------- /.idea/migrations.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 9 | -------------------------------------------------------------------------------- /.idea/runConfigurations.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 16 | 17 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | All notable changes to this project will be documented in this file. 4 | 5 | ## [1.0.8] - 2025-01-09 6 | ### Added 7 | - Updated **UI design** for a modern and user-friendly experience. 8 | - **Fast Channel data handling** to improve Channel speed and reliability. 9 | 10 | ### Fixed 11 | - Resolved minor bugs affecting channel loading and playback. 12 | - Fixed crashes occurring during user session management. 13 | - Improved overall stability and performance of the app. 14 | 15 | ### Changed 16 | - Enhanced search and filtering to respond faster to user queries. 17 | - Redesigned **HomeFragment** for better usability and navigation flow. 18 | - Updated **PlayerFragment** to support smoother transitions between channels. 19 | 20 | ## [1.0.0] - 2024-09-15 21 | ### Added 22 | - Initial release of **IPTV Mine** with M3U playlist support. 23 | - **ChannelsProvider ViewModel** to fetch, parse, and filter channels based on user queries. 24 | - **Search Feature** with a debounce mechanism for better filtering. 25 | - Integrated **ExoPlayer** for seamless video streaming. 26 | - Support for **HLS (HTTP Live Streaming)** media sources. 27 | - Added **full-screen mode** and **orientation handling** in the video player. 28 | - Basic **UI layout** for channel listing, player controls, and home screen. 29 | 30 | ### Changed 31 | - Updated the **UI layout** to improve user experience, including: 32 | - Improved search functionality with better filtering options. 33 | - Redesigned **HomeFragment** for more intuitive navigation. 34 | - Updated **channel list display** to be more visually appealing. 35 | 36 | ### Fixed 37 | - Resolved issues with video playback position handling. 38 | - Fixed **NullPointerException** when loading specific channels from the playlist. 39 | -------------------------------------------------------------------------------- /IPTVmine.jks: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IPTVmine-org/IPTVmine/5abd373dc3d392138a9d71cfe66012a17588cd5f/IPTVmine.jks -------------------------------------------------------------------------------- /Image/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IPTVmine-org/IPTVmine/5abd373dc3d392138a9d71cfe66012a17588cd5f/Image/1.png -------------------------------------------------------------------------------- /Image/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IPTVmine-org/IPTVmine/5abd373dc3d392138a9d71cfe66012a17588cd5f/Image/2.png -------------------------------------------------------------------------------- /Image/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IPTVmine-org/IPTVmine/5abd373dc3d392138a9d71cfe66012a17588cd5f/Image/3.png -------------------------------------------------------------------------------- /Image/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IPTVmine-org/IPTVmine/5abd373dc3d392138a9d71cfe66012a17588cd5f/Image/4.png -------------------------------------------------------------------------------- /Image/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IPTVmine-org/IPTVmine/5abd373dc3d392138a9d71cfe66012a17588cd5f/Image/5.png -------------------------------------------------------------------------------- /Image/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IPTVmine-org/IPTVmine/5abd373dc3d392138a9d71cfe66012a17588cd5f/Image/6.png -------------------------------------------------------------------------------- /Images: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Indian IPTVmine App 2 | 3 | 4 | 5 | ![pv](https://pageview.vercel.app/?github_user=IPTVmine) 6 | ![pv](https://pageview.vercel.app/?github_user=IPTVmine-org/IPTVmine) 7 | 8 | 9 | 10 | [![Latest release](https://img.shields.io/github/v/release/samyak2403/IPTVmine?include_prereleases)](https://github.com/samyak2403/IPTVmine/releases) 11 | ## 📲 Download the APK: 12 | # Indian IPTVmine App 13 | 14 | [Get it on GitHub](https://github.com/samyak2403/IPTVmine/releases/latest) 15 | [](https://apt.izzysoft.de/fdroid/index/apk/com.samyak2403.iptvmine) 16 | [](https://github.com/samyak2403/Sportsmine) 17 | 18 | 19 | [Get it on GitHub](https://www.codester.com/items/55131/url-player-android-app-template) 20 | 21 | 22 | 23 | ## Overview 24 | The **Indian IPTV App** is a comprehensive platform that allows users to stream over 500 Indian TV channels directly from their devices. The app provides a seamless streaming experience with a wide variety of channels, including news, entertainment, sports, movies, and regional content. 25 | 26 | ## Learning Purpose 27 | This project is developed with the primary aim of learning and improving our skills in mobile application development. The project serves as a practical example of how to implement IPTV streaming features in an Android app, including integrating multiple channels, managing streaming quality, and creating a user-friendly interface. 28 | 29 | By working on this app, we aim to: 30 | - Enhance our understanding of Android development using Java and Kotlin. 31 | - Improve our skills in integrating streaming services using IPTV technology. 32 | - Learn about the design and implementation of user interfaces that support multiple languages and categories. 33 | - Gain experience in handling large amounts of data, such as managing and updating a list of 500+ channels. 34 | - Understand best practices for app performance optimization, particularly for streaming apps. 35 | 36 | ## Screenshots 37 | 38 | **TV Channels** | **Live** 39 | :-------------------------:|:-------------------------: 40 | | 41 | | 42 | | 43 | 44 | **TV Channels** | **Live** 45 | :-------------------------:|:-------------------------: 46 | | 47 | 48 | **TV Mode** | **Live** 49 | :-------------------------:|:-------------------------: 50 | | 51 | 52 | 53 | 54 | 55 | 56 | 57 | ## Disclaimer 📢 58 | 59 | - IPTV operates as a simple m3u streaming player. 60 | - Any issues regarding internet regulations should be addressed directly to the source website. The developer assumes no legal responsibility. 61 | 62 | ## Credits 63 | 64 | [Channel Source](https://github.com/FunctionError/PiratesTv) 65 | 66 | ## Features 67 | - **500+ Indian TV Channels**: Enjoy a vast collection of channels from various genres. 68 | - **High-Quality Streaming**: HD streaming available for supported channels. 69 | - **Multi-Language Support**: Channels available in multiple Indian languages. 70 | - **User-Friendly Interface**: Easy-to-use interface with quick navigation. 71 | - **Favorite Channels**: Bookmark your favorite channels for easy access. 72 | - **Search Functionality**: Quickly find channels by name or category. 73 | - **Regular Updates**: New channels and content added regularly. 74 | 75 | ## Installation 76 | 77 | ### Prerequisites 78 | - Android version 5.0 (Lollipop) or higher. 79 | - Stable internet connection. 80 | 81 | ### Steps 82 | 1. **Clone the repository:** 83 | ```bash 84 | git clone https://github.com/samyak2403/IPTVmine.git 85 | ``` 86 | 2. **Navigate to the project directory:** 87 | ```bash 88 | cd indian-iptv-app 89 | ``` 90 | 3. **Build and run the app using Android Studio.** 91 | 92 | ## Usage 93 | 1. Open the **Indian IPTV App**. 94 | 2. Browse through the categories or use the search function to find your preferred channel. 95 | 3. Tap on a channel to start streaming. 96 | 97 | ## Channel Categories 98 | - **News** 99 | - **Entertainment** 100 | - **Sports** 101 | - **Movies** 102 | - **Music** 103 | - **Kids** 104 | - **Regional** 105 | ## Star History 106 | 107 | 108 | 109 | 110 | 111 | Star History Chart 112 | 113 | 114 | 115 | ## Contributors 116 | 117 | Please Feel free to contribute by submitting a Pull Request! 118 | 119 | [![](https://contrib.rocks/image?repo=samyak2403/IPTVmine)](https://github.com/samyak2403/IPTVmine/graphs/contributors) 120 | 121 | ## Contributing 122 | We welcome contributions! Please follow the steps below to contribute: 123 | 124 | 1. Fork the repository. 125 | 2. Create a new branch: `git checkout -b feature/your-feature-name`. 126 | 3. Make your changes and commit them: `git commit -m 'Add some feature'`. 127 | 4. Push to the branch: `git push origin feature/your-feature-name`. 128 | 5. Open a pull request. 129 | 130 | ## License 131 | This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details. 132 | 133 | ## Contact 134 | For any queries or support, please contact us at arrowwouldpro@gmail.com. 135 | 136 | ## Acknowledgments 137 | - [Open Source Libraries](#) used in this project. 138 | - Special thanks to our community contributors. 139 | 140 | 141 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /app/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | alias(libs.plugins.android.application) 3 | alias(libs.plugins.jetbrains.kotlin.android) 4 | } 5 | 6 | android { 7 | namespace = "com.samyak2403.iptvmine" 8 | compileSdk = 35 9 | 10 | defaultConfig { 11 | applicationId = "com.samyak2403.iptvmine" 12 | minSdk = 21 13 | targetSdk = 34 14 | versionCode = 10 15 | versionName = "1.0.9" 16 | 17 | testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" 18 | } 19 | 20 | buildTypes { 21 | release { 22 | isMinifyEnabled = true 23 | isShrinkResources = true 24 | proguardFiles( 25 | getDefaultProguardFile("proguard-android-optimize.txt"), 26 | "proguard-rules.pro" 27 | ) 28 | } 29 | } 30 | compileOptions { 31 | sourceCompatibility = JavaVersion.VERSION_1_8 32 | targetCompatibility = JavaVersion.VERSION_1_8 33 | } 34 | kotlinOptions { 35 | jvmTarget = "1.8" 36 | } 37 | buildFeatures{ 38 | viewBinding = true 39 | } 40 | } 41 | 42 | dependencies { 43 | 44 | implementation(libs.androidx.core.ktx) 45 | implementation(libs.androidx.appcompat) 46 | implementation(libs.material) 47 | implementation(libs.androidx.activity) 48 | implementation(libs.androidx.constraintlayout) 49 | 50 | //for exoplayer 51 | implementation(libs.exoplayerCore) 52 | implementation(libs.exoplayerUi) 53 | 54 | //for playing online content 55 | implementation(libs.exoplayerDash) 56 | implementation(libs.androidx.fragment) 57 | implementation(libs.cronet.embedded) 58 | testImplementation(libs.junit) 59 | androidTestImplementation(libs.androidx.junit) 60 | androidTestImplementation(libs.androidx.espresso.core) 61 | implementation (libs.smoothbottombar) 62 | // Fragment library 63 | implementation("androidx.fragment:fragment-ktx:1.6.0") 64 | implementation("com.github.bumptech.glide:glide:4.16.0") 65 | 66 | implementation("com.google.code.gson:gson:2.8.8") 67 | 68 | implementation("com.squareup.okhttp3:okhttp:4.11.0") 69 | 70 | implementation ("com.airbnb.android:lottie:4.2.2") 71 | 72 | // SpeedTest Library 73 | implementation("fr.bmartel:jspeedtest:1.32.1") 74 | // Gauge Library 75 | implementation("com.github.Gruzer:simple-gauge-android:0.3.1") 76 | 77 | //Toast 78 | implementation ("com.github.samyak2403:TastyToasts:1.0.2") 79 | 80 | implementation ("de.hdodenhof:circleimageview:3.1.0") 81 | 82 | // implementation ("com.github.halilozercan:BetterVideoPlayer:2.0.0-alpha01") 83 | // implementation ("com.github.halilozercan:BetterVideoPlayer:v1.1.0") 84 | // implementation ("com.github.halilozercan:BetterVideoPlayer:1.1.0") 85 | 86 | // implementation(project(mapOf("path" to ":bettervideoplayer"))) 87 | 88 | implementation("androidx.lifecycle:lifecycle-extensions:2.2.0") // For older versions of LiveData 89 | // or 90 | // implementation ("androidx.lifecycle:lifecycle-livedata-ktx:2.7.1" )// For the latest versions with Kotlin extensions 91 | // implementation ("androidx.lifecycle:lifecycle-viewmodel-ktx:2.7.1") // For ViewModel 92 | // Add other dependencies here 93 | } -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile 22 | 23 | # Preserve the Channel class and its fields 24 | # Add project-specific ProGuard rules here. 25 | # You can control the set of applied configuration files using the 26 | # proguardFiles setting in build.gradle. 27 | 28 | # For more details, see: 29 | # http://developer.android.com/guide/developing/tools/proguard.html 30 | 31 | # If your project uses WebView with JS, uncomment the following 32 | # and specify the fully qualified class name of the JavaScript interface 33 | # class: 34 | # -keepclassmembers class fqcn.of.javascript.interface.for.webview { 35 | # public *; 36 | # } 37 | 38 | # Uncomment this to preserve the line number information for 39 | # debugging stack traces. 40 | # -keepattributes SourceFile,LineNumberTable 41 | 42 | # If you keep the line number information, uncomment this to 43 | # hide the original source file name. 44 | # -renamesourcefileattribute SourceFile 45 | 46 | # Preserve the Channel class and its fields and methods 47 | -keep class com.samyak2403.iptvmine.model.Channel { 48 | ; 49 | ; 50 | } 51 | 52 | # Keep the CREATOR field necessary for Parcelable implementation 53 | -keepclassmembers class com.samyak2403.iptvmine.model.Channel { 54 | public static final android.os.Parcelable$Creator *; 55 | } 56 | 57 | # Preserve the Parcel constructor 58 | -keepclassmembers class com.samyak2403.iptvmine.model.Channel { 59 | public Channel(android.os.Parcel); 60 | } 61 | 62 | # Preserve the HomeFragment class and its fields and methods 63 | -keep class com.samyak2403.iptvmine.screens.HomeFragment { 64 | ; 65 | ; 66 | } 67 | 68 | # Preserve the ChannelsProvider class and its fields and methods 69 | -keep class com.samyak2403.iptvmine.provider.ChannelsProvider { 70 | ; 71 | ; 72 | } 73 | 74 | # Keep ViewModel and LiveData-related classes (used by ViewModelProvider) 75 | -keep class androidx.lifecycle.** { *; } 76 | 77 | # Keep the ChannelsAdapter class and its fields and methods (for RecyclerView) 78 | -keep class com.samyak2403.iptvmine.adapter.ChannelsAdapter { 79 | ; 80 | ; 81 | } 82 | 83 | # Preserve all Fragment subclasses 84 | -keep class * extends androidx.fragment.app.Fragment { 85 | ; 86 | ; 87 | } 88 | 89 | # Preserve Handler-related classes 90 | -keep class android.os.Handler { 91 | ; 92 | ; 93 | } 94 | 95 | # Preserve Looper-related classes 96 | -keep class android.os.Looper { 97 | ; 98 | ; 99 | } 100 | 101 | # Keep LiveData and ViewModel classes and their methods 102 | -keep class androidx.lifecycle.LiveData { 103 | ; 104 | } 105 | 106 | -keep class androidx.lifecycle.MutableLiveData { 107 | ; 108 | } 109 | 110 | -keep class androidx.lifecycle.ViewModel { 111 | ; 112 | } 113 | 114 | # Keep coroutine-related classes and methods 115 | -keep class kotlinx.coroutines.CoroutineScope { 116 | ; 117 | } 118 | 119 | -keep class kotlinx.coroutines.Dispatchers { 120 | ; 121 | ; 122 | } 123 | 124 | -keep class kotlinx.coroutines.JobSupport { 125 | ; 126 | ; 127 | } 128 | 129 | # Keep networking-related classes and methods (if necessary) 130 | -keepclassmembers class java.net.HttpURLConnection { 131 | ; 132 | } 133 | 134 | -keep class java.net.URL { 135 | ; 136 | } 137 | 138 | # Keep the ChannelsProvider ViewModel class and its members 139 | -keepclassmembers class com.samyak2403.iptvmine.provider.ChannelsProvider { 140 | *; 141 | } 142 | 143 | # Keep the Channel model class 144 | -keepclassmembers class com.samyak2403.iptvmine.model.Channel { 145 | *; 146 | } 147 | 148 | # Prevent obfuscation of methods used for reflection by Android Lifecycle 149 | -keepclassmembers class * extends androidx.lifecycle.ViewModel { 150 | public (...); 151 | } 152 | 153 | # Keep methods and fields annotated with @SerializedName or similar (if using serialization) 154 | -keepclassmembers class * { 155 | @com.google.gson.annotations.SerializedName ; 156 | } 157 | 158 | # Keep coroutine-related classes and methods to avoid runtime issues 159 | -dontwarn kotlinx.coroutines.** 160 | -keep class kotlinx.coroutines.** { *; } 161 | -keepclassmembers class kotlinx.coroutines.** { *; } 162 | 163 | # Keep URL and HttpURLConnection usage (common in network calls) 164 | -keep class java.net.URL { *; } 165 | -keep class java.net.HttpURLConnection { *; } 166 | 167 | -------------------------------------------------------------------------------- /app/release/app-release.apk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IPTVmine-org/IPTVmine/5abd373dc3d392138a9d71cfe66012a17588cd5f/app/release/app-release.apk -------------------------------------------------------------------------------- /app/release/baselineProfiles/0/app-release.dm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IPTVmine-org/IPTVmine/5abd373dc3d392138a9d71cfe66012a17588cd5f/app/release/baselineProfiles/0/app-release.dm -------------------------------------------------------------------------------- /app/release/baselineProfiles/1/app-release.dm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IPTVmine-org/IPTVmine/5abd373dc3d392138a9d71cfe66012a17588cd5f/app/release/baselineProfiles/1/app-release.dm -------------------------------------------------------------------------------- /app/release/output-metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": 3, 3 | "artifactType": { 4 | "type": "APK", 5 | "kind": "Directory" 6 | }, 7 | "applicationId": "com.samyak2403.iptvmine", 8 | "variantName": "release", 9 | "elements": [ 10 | { 11 | "type": "SINGLE", 12 | "filters": [], 13 | "attributes": [], 14 | "versionCode": 10, 15 | "versionName": "1.0.9", 16 | "outputFile": "app-release.apk" 17 | } 18 | ], 19 | "elementType": "File", 20 | "baselineProfiles": [ 21 | { 22 | "minApi": 28, 23 | "maxApi": 30, 24 | "baselineProfiles": [ 25 | "baselineProfiles/1/app-release.dm" 26 | ] 27 | }, 28 | { 29 | "minApi": 31, 30 | "maxApi": 2147483647, 31 | "baselineProfiles": [ 32 | "baselineProfiles/0/app-release.dm" 33 | ] 34 | } 35 | ], 36 | "minSdkVersionForDexing": 21 37 | } -------------------------------------------------------------------------------- /app/src/androidTest/java/com/samyak2403/iptvmine/ExampleInstrumentedTest.kt: -------------------------------------------------------------------------------- 1 | package com.samyak2403.iptvmine 2 | 3 | import androidx.test.platform.app.InstrumentationRegistry 4 | import androidx.test.ext.junit.runners.AndroidJUnit4 5 | 6 | import org.junit.Test 7 | import org.junit.runner.RunWith 8 | 9 | import org.junit.Assert.* 10 | 11 | /** 12 | * Instrumented test, which will execute on an Android device. 13 | * 14 | * See [testing documentation](http://d.android.com/tools/testing). 15 | */ 16 | @RunWith(AndroidJUnit4::class) 17 | class ExampleInstrumentedTest { 18 | @Test 19 | fun useAppContext() { 20 | // Context of the app under test. 21 | val appContext = InstrumentationRegistry.getInstrumentation().targetContext 22 | assertEquals("com.samyak2403.iptv", appContext.packageName) 23 | } 24 | } -------------------------------------------------------------------------------- /app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 21 | 24 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /app/src/main/assets/tv_channels.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IPTVmine-org/IPTVmine/5abd373dc3d392138a9d71cfe66012a17588cd5f/app/src/main/assets/tv_channels.json -------------------------------------------------------------------------------- /app/src/main/ic_launcher-playstore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IPTVmine-org/IPTVmine/5abd373dc3d392138a9d71cfe66012a17588cd5f/app/src/main/ic_launcher-playstore.png -------------------------------------------------------------------------------- /app/src/main/java/com/samyak2403/iptvmine/InternetSpeed/InternetSpeedActivity.kt: -------------------------------------------------------------------------------- 1 | package com.samyak2403.iptvmine.InternetSpeed 2 | 3 | import android.content.Context 4 | import android.os.Bundle 5 | import android.util.Log 6 | import android.view.View 7 | import androidx.appcompat.app.AppCompatActivity 8 | import androidx.appcompat.widget.Toolbar 9 | import androidx.core.content.ContextCompat 10 | import com.ekn.gruzer.gaugelibrary.Range 11 | 12 | import com.samyak2403.iptvmine.R 13 | import com.samyak2403.iptvmine.databinding.ActivityInternetSpeedBinding 14 | import fr.bmartel.speedtest.SpeedTestReport 15 | import fr.bmartel.speedtest.SpeedTestSocket 16 | import fr.bmartel.speedtest.inter.ISpeedTestListener 17 | import fr.bmartel.speedtest.model.SpeedTestError 18 | import java.text.DecimalFormat 19 | import kotlin.math.floor 20 | 21 | class InternetSpeedActivity : AppCompatActivity(), ISpeedTestListener { 22 | 23 | private lateinit var binding: ActivityInternetSpeedBinding 24 | private lateinit var context: Context 25 | 26 | private var startTime: Long = 0 27 | 28 | override fun onCreate(savedInstanceState: Bundle?) { 29 | super.onCreate(savedInstanceState) 30 | binding = ActivityInternetSpeedBinding.inflate(layoutInflater) 31 | setContentView(binding.root) 32 | 33 | // Set the Toolbar as the ActionBar 34 | val toolbar = findViewById(R.id.toolbar) 35 | setSupportActionBar(toolbar) 36 | supportActionBar?.setDisplayHomeAsUpEnabled(true) 37 | supportActionBar?.setDisplayShowHomeEnabled(true) 38 | 39 | context = this 40 | 41 | 42 | init() 43 | } 44 | 45 | override fun onSupportNavigateUp(): Boolean { 46 | onBackPressed() 47 | return true 48 | } 49 | 50 | private fun init() { 51 | setupGauge() 52 | 53 | 54 | binding.startTestBT.setOnClickListener { 55 | 56 | binding.startTestBT.visibility = View.GONE 57 | Thread { getNetSpeed() }.start() 58 | 59 | } 60 | } 61 | 62 | private fun setupGauge() { 63 | val coolPink = Range().apply { 64 | color = ContextCompat.getColor(context, R.color.cool_pink) 65 | from = 0.0 66 | to = 50.0 67 | } 68 | 69 | val yellowRange = Range().apply { 70 | color = ContextCompat.getColor(context, R.color.yellow) 71 | from = 50.0 72 | to = 100.0 73 | } 74 | 75 | val greenRange = Range().apply { 76 | color = ContextCompat.getColor(context, R.color.cool_green) 77 | from = 100.0 78 | to = 150.0 79 | } 80 | 81 | with(binding.speedGauge) { 82 | addRange(coolPink) 83 | addRange(yellowRange) 84 | addRange(greenRange) 85 | minValue = 0.0 86 | maxValue = 150.0 87 | value = 0.0 88 | valueColor = ContextCompat.getColor(context, android.R.color.transparent) 89 | } 90 | } 91 | 92 | private fun getNetSpeed() { 93 | val speedTestSocket = SpeedTestSocket() 94 | binding.speedGauge.valueColor = ContextCompat.getColor(context, R.color.white) 95 | 96 | startTime = System.currentTimeMillis() 97 | speedTestSocket.addSpeedTestListener(this) 98 | speedTestSocket.startDownload("http://ipv4.appliwave.testdebit.info/50M.iso", 100) 99 | } 100 | 101 | override fun onCompletion(report: SpeedTestReport) { 102 | val downloadSpeedMbps = report.transferRateBit.toFloat() / 1_000_000 103 | val latencyMs = (System.currentTimeMillis() - startTime) / 600 104 | 105 | runOnUiThread { 106 | binding.speedGauge.value = floor(downloadSpeedMbps.toDouble()) 107 | binding.speedTxt.text = String.format("%s MB/s", DecimalFormat("##").format(downloadSpeedMbps)) 108 | binding.latencyTxt.text = String.format("%s ms", latencyMs) 109 | binding.startTestBT.apply { 110 | visibility = View.VISIBLE 111 | text = getString(R.string.start) 112 | } 113 | binding.speedGauge.valueColor = ContextCompat.getColor(context, android.R.color.transparent) 114 | } 115 | Log.d("SpeedTest", "onCompletion: $downloadSpeedMbps Mbps") 116 | } 117 | 118 | override fun onProgress(percent: Float, report: SpeedTestReport) { 119 | val downloadSpeedMbps = report.transferRateBit.toFloat() / 1_000_000 120 | runOnUiThread { binding.speedGauge.value = floor(downloadSpeedMbps.toDouble()) } 121 | Log.d("SpeedTest", "onProgress: $downloadSpeedMbps Mbps") 122 | } 123 | 124 | override fun onError(speedTestError: SpeedTestError, errorMessage: String) { 125 | Log.e("SpeedTest", "Error: $errorMessage") 126 | } 127 | } 128 | -------------------------------------------------------------------------------- /app/src/main/java/com/samyak2403/iptvmine/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package com.samyak2403.iptvmine 2 | 3 | import android.os.Bundle 4 | 5 | import androidx.appcompat.app.AppCompatActivity 6 | import androidx.fragment.app.Fragment 7 | import androidx.fragment.app.commit 8 | import com.samyak2403.iptvmine.screens.AboutFragment 9 | import com.samyak2403.iptvmine.screens.HomeFragment 10 | import me.ibrahimsn.lib.SmoothBottomBar 11 | 12 | class MainActivity : AppCompatActivity() { 13 | 14 | override fun onCreate(savedInstanceState: Bundle?) { 15 | super.onCreate(savedInstanceState) 16 | setContentView(R.layout.activity_main) 17 | 18 | val bottomBar = findViewById(R.id.bottomBar) 19 | 20 | // Initialize with HomeFragment 21 | if (savedInstanceState == null) { 22 | replaceFragment(HomeFragment()) 23 | } 24 | 25 | // Set up SmoothBottomBar item selection listener 26 | bottomBar.setOnItemSelectedListener { 27 | 28 | when (it) { 29 | 0 -> replaceFragment(HomeFragment()) // First menu item for Home 30 | 1 -> replaceFragment(AboutFragment()) // Second menu item for About 31 | } 32 | 33 | 34 | } 35 | } 36 | 37 | // Function to replace the current fragment 38 | private fun replaceFragment(fragment: Fragment) { 39 | supportFragmentManager.commit { 40 | replace(R.id.fragmentContainerView, fragment) 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /app/src/main/java/com/samyak2403/iptvmine/adapter/ChannelsAdapter.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Created by Samyak Kamble on 8/14/24, 12:18 PM 3 | * Copyright (c) 2024. All rights reserved. 4 | * Last modified 8/14/24, 12:18 PM 5 | */ 6 | 7 | package com.samyak2403.iptvmine.adapter 8 | 9 | import android.view.LayoutInflater 10 | import android.view.View 11 | import android.view.ViewGroup 12 | import android.widget.ImageView 13 | import android.widget.TextView 14 | import androidx.recyclerview.widget.DiffUtil 15 | import androidx.recyclerview.widget.RecyclerView 16 | import com.bumptech.glide.Glide 17 | import com.samyak2403.iptvmine.R 18 | import com.samyak2403.iptvmine.model.Channel 19 | 20 | class ChannelsAdapter( 21 | private var channels: List, 22 | private val onChannelClicked: (Channel) -> Unit 23 | ) : RecyclerView.Adapter() { 24 | 25 | override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ChannelViewHolder { 26 | val view = LayoutInflater.from(parent.context) 27 | .inflate(R.layout.item_channel, parent, false) 28 | return ChannelViewHolder(view) 29 | } 30 | 31 | override fun onBindViewHolder(holder: ChannelViewHolder, position: Int) { 32 | holder.bind(channels[position]) 33 | } 34 | 35 | override fun getItemCount(): Int = channels.size 36 | 37 | fun updateChannels(newChannels: List) { 38 | val diffResult = DiffUtil.calculateDiff(ChannelDiffCallback(channels, newChannels)) 39 | channels = newChannels 40 | diffResult.dispatchUpdatesTo(this) 41 | } 42 | 43 | inner class ChannelViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { 44 | private val logoImageView: ImageView = itemView.findViewById(R.id.logoImageView) 45 | private val nameTextView: TextView = itemView.findViewById(R.id.nameTextView) 46 | 47 | fun bind(channel: Channel) { 48 | nameTextView.text = channel.name 49 | Glide.with(itemView.context) 50 | .load(channel.logoUrl) 51 | .placeholder(R.drawable.ic_tv) 52 | .into(logoImageView) 53 | 54 | itemView.setOnClickListener { 55 | onChannelClicked(channel) 56 | } 57 | } 58 | } 59 | 60 | private class ChannelDiffCallback( 61 | private val oldList: List, 62 | private val newList: List 63 | ) : DiffUtil.Callback() { 64 | 65 | override fun getOldListSize(): Int = oldList.size 66 | 67 | override fun getNewListSize(): Int = newList.size 68 | 69 | override fun areItemsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean { 70 | // Assuming the name is unique for each channel 71 | return oldList[oldItemPosition].name == newList[newItemPosition].name 72 | } 73 | 74 | override fun areContentsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean { 75 | // Check if contents are the same, including the logoUrl and streamUrl 76 | return oldList[oldItemPosition] == newList[newItemPosition] 77 | } 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /app/src/main/java/com/samyak2403/iptvmine/model/Channel.kt: -------------------------------------------------------------------------------- 1 | package com.samyak2403.iptvmine.model 2 | 3 | import android.os.Parcel 4 | import android.os.Parcelable 5 | 6 | data class Channel( 7 | val name: String, 8 | val logoUrl: String, 9 | val streamUrl: String 10 | ) : Parcelable { 11 | constructor(parcel: Parcel) : this( 12 | parcel.readString() ?: "", 13 | parcel.readString() ?: "", 14 | parcel.readString() ?: "" 15 | ) { 16 | // Read other fields if needed 17 | } 18 | 19 | override fun writeToParcel(parcel: Parcel, flags: Int) { 20 | parcel.writeString(name) 21 | parcel.writeString(logoUrl) 22 | parcel.writeString(streamUrl) 23 | } 24 | 25 | override fun describeContents(): Int { 26 | return 0 27 | } 28 | 29 | companion object CREATOR : Parcelable.Creator { 30 | override fun createFromParcel(parcel: Parcel): Channel { 31 | return Channel(parcel) 32 | } 33 | 34 | override fun newArray(size: Int): Array { 35 | return arrayOfNulls(size) 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /app/src/main/java/com/samyak2403/iptvmine/provider/ChannelsProvider.kt: -------------------------------------------------------------------------------- 1 | package com.samyak2403.iptvmine.provider 2 | 3 | import androidx.lifecycle.LiveData 4 | import androidx.lifecycle.MutableLiveData 5 | import androidx.lifecycle.ViewModel 6 | import androidx.lifecycle.viewModelScope 7 | import com.samyak2403.iptvmine.model.Channel 8 | import kotlinx.coroutines.* 9 | import java.io.BufferedReader 10 | import java.net.HttpURLConnection 11 | import java.net.URL 12 | 13 | class ChannelsProvider : ViewModel() { 14 | 15 | private val _channels = MutableLiveData>() 16 | val channels: LiveData> get() = _channels 17 | 18 | private val _filteredChannels = MutableLiveData>() 19 | val filteredChannels: LiveData> get() = _filteredChannels 20 | 21 | private val _error = MutableLiveData() 22 | val error: LiveData get() = _error 23 | 24 | private val sourceUrl = "" 25 | 26 | private var fetchJob: Job? = null 27 | 28 | /** 29 | * Fetch the M3U file from the provided URL asynchronously. 30 | */ 31 | fun fetchM3UFile() { 32 | fetchJob?.cancel() // Cancel any ongoing fetch job. 33 | 34 | fetchJob = viewModelScope.launch(Dispatchers.IO) { 35 | try { 36 | val url = URL(sourceUrl) 37 | val urlConnection = url.openConnection() as HttpURLConnection 38 | urlConnection.apply { 39 | connectTimeout = 10000 40 | readTimeout = 10000 41 | requestMethod = "GET" 42 | } 43 | 44 | if (urlConnection.responseCode == HttpURLConnection.HTTP_OK) { 45 | val fileText = urlConnection.inputStream.bufferedReader().use(BufferedReader::readText) 46 | val tempChannels = parseM3UFile(fileText) 47 | 48 | withContext(Dispatchers.Main) { 49 | _channels.value = tempChannels 50 | _error.value = null 51 | } 52 | } else { 53 | withContext(Dispatchers.Main) { 54 | _error.value = "Error: HTTP ${urlConnection.responseCode}" 55 | } 56 | } 57 | urlConnection.disconnect() 58 | } catch (e: Exception) { 59 | withContext(Dispatchers.Main) { 60 | _error.value = "Failed to fetch channels: ${e.localizedMessage}" 61 | } 62 | } 63 | } 64 | } 65 | 66 | /** 67 | * Parse M3U file content and return a list of [Channel] objects. 68 | */ 69 | private fun parseM3UFile(fileText: String): List { 70 | val lines = fileText.lines() 71 | val channelsList = mutableListOf() 72 | 73 | var name: String? = null 74 | var logoUrl: String = getDefaultLogoUrl() 75 | var streamUrl: String? = null 76 | 77 | for (line in lines) { 78 | when { 79 | line.startsWith("#EXTINF:") -> { 80 | name = extractChannelName(line) 81 | logoUrl = extractLogoUrl(line) ?: getDefaultLogoUrl() 82 | } 83 | line.isNotBlank() && isValidStreamUrl(line) -> { 84 | streamUrl = line 85 | if (!name.isNullOrEmpty() && !streamUrl.isNullOrEmpty()) { 86 | channelsList.add(Channel(name, logoUrl, streamUrl)) 87 | } 88 | name = null 89 | logoUrl = getDefaultLogoUrl() 90 | } 91 | } 92 | } 93 | return channelsList 94 | } 95 | 96 | /** 97 | * Provide a default logo URL if one is not specified in the M3U file. 98 | */ 99 | private fun getDefaultLogoUrl() = "assets/images/ic_tv.png" 100 | 101 | /** 102 | * Extract the channel name from the EXTINF line. 103 | */ 104 | private fun extractChannelName(line: String): String? { 105 | return line.substringAfterLast(",", "").trim() 106 | } 107 | 108 | /** 109 | * Extract the logo URL from the EXTINF line. 110 | */ 111 | private fun extractLogoUrl(line: String): String? { 112 | val parts = line.split("\"") 113 | return parts.firstOrNull { isValidUrl(it) } 114 | } 115 | 116 | /** 117 | * Validate whether a string is a valid URL. 118 | */ 119 | private fun isValidUrl(url: String): Boolean { 120 | return url.startsWith("http://") || url.startsWith("https://") 121 | } 122 | 123 | /** 124 | * Validate whether a string is a valid stream URL. 125 | * Specifically supports M3U8 links and other common video stream formats. 126 | */ 127 | private fun isValidStreamUrl(url: String): Boolean { 128 | return isValidUrl(url) && (url.endsWith(".m3u8") || url.endsWith(".mp4") || url.endsWith(".avi") || url.endsWith(".mkv")) 129 | } 130 | 131 | /** 132 | * Filter channels based on the user's query and update [_filteredChannels]. 133 | */ 134 | fun filterChannels(query: String) { 135 | val filtered = _channels.value?.filter { it.name.contains(query, ignoreCase = true) } ?: emptyList() 136 | _filteredChannels.value = filtered 137 | } 138 | 139 | /** 140 | * Cancel any ongoing fetch when ViewModel is cleared. 141 | */ 142 | override fun onCleared() { 143 | super.onCleared() 144 | fetchJob?.cancel() 145 | } 146 | } 147 | -------------------------------------------------------------------------------- /app/src/main/java/com/samyak2403/iptvmine/screens/AboutFragment.kt: -------------------------------------------------------------------------------- 1 | package com.samyak2403.iptvmine.screens 2 | 3 | import android.content.Intent 4 | import android.content.pm.PackageManager 5 | import android.net.Uri 6 | import android.os.Bundle 7 | import android.view.LayoutInflater 8 | import android.view.View 9 | import android.view.ViewGroup 10 | 11 | import androidx.fragment.app.Fragment 12 | 13 | import com.samyak2403.iptvmine.InternetSpeed.InternetSpeedActivity 14 | import com.samyak2403.iptvmine.R 15 | import com.samyak2403.iptvmine.databinding.FragmentAboutBinding 16 | import com.samyak2403.tastytoast.TastyToast 17 | 18 | 19 | class AboutFragment : Fragment() { 20 | 21 | private var _binding: FragmentAboutBinding? = null 22 | private val binding get() = _binding!! 23 | 24 | override fun onCreateView( 25 | inflater: LayoutInflater, container: ViewGroup?, 26 | savedInstanceState: Bundle? 27 | ): View { 28 | // Inflate the layout for this fragment using ViewBinding 29 | _binding = FragmentAboutBinding.inflate(inflater, container, false) 30 | return binding.root 31 | 32 | 33 | 34 | } 35 | 36 | 37 | 38 | 39 | override fun onViewCreated(view: View, savedInstanceState: Bundle?) { 40 | super.onViewCreated(view, savedInstanceState) 41 | 42 | 43 | 44 | // Display app version 45 | binding.tvAppVersion.text = getAppVersion() 46 | 47 | 48 | 49 | binding.CardInternetSpeed.setOnClickListener { 50 | openInternetSpeedTester() 51 | } 52 | 53 | // Set click listeners for the cards 54 | binding.cardShare.setOnClickListener { 55 | TastyToast.makeText(requireContext(), "Share App clicked", TastyToast.LENGTH_LONG, TastyToast.SUCCESS) 56 | 57 | shareApp() 58 | } 59 | 60 | binding.cardAppInfo.setOnClickListener { 61 | showAppInfo() 62 | } 63 | 64 | binding.cardUpdate.setOnClickListener { 65 | TastyToast.makeText(requireContext(), "Check for updates", TastyToast.LENGTH_LONG, TastyToast.INFO) 66 | openDownloadLink() 67 | } 68 | 69 | // Fetch live data and display in tvLiveData 70 | fetchLiveData() 71 | } 72 | 73 | private fun openInternetSpeedTester() { 74 | val intent = Intent(requireContext(), InternetSpeedActivity::class.java) 75 | startActivity(intent) 76 | } 77 | 78 | private fun fetchLiveData() { 79 | TastyToast.makeText(requireContext(), "Error 69", TastyToast.LENGTH_LONG, TastyToast.ERROR) 80 | 81 | } 82 | 83 | private fun getAppVersion(): String { 84 | return try { 85 | val packageInfo = 86 | requireContext().packageManager.getPackageInfo(requireContext().packageName, 0) 87 | "Version: ${packageInfo.versionName} (${packageInfo.versionCode})" 88 | } catch (e: PackageManager.NameNotFoundException) { 89 | "Version info not available" 90 | } 91 | } 92 | 93 | private fun shareApp() { 94 | val shareIntent = Intent(Intent.ACTION_SEND).apply { 95 | type = "text/plain" 96 | putExtra( 97 | Intent.EXTRA_TEXT, 98 | "The Indian IPTV App is a comprehensive platform that allows users to stream over 500 Indian TV channels directly from their devices. The app provides a seamless streaming experience with a wide variety of channels, including news, entertainment, sports, movies, and regional content.\n\nDownload now: https://github.com/samyak2403/IPTVmine?tab=readme-ov-file#indian-iptvmine-app-1" 99 | ) 100 | } 101 | startActivity(Intent.createChooser(shareIntent, "Share App via")) 102 | } 103 | 104 | private fun showAppInfo() { 105 | val dialogView = layoutInflater.inflate(R.layout.dialog_app_info, null) 106 | 107 | // Create and display a dialog 108 | val dialog = androidx.appcompat.app.AlertDialog.Builder(requireContext()) 109 | .setView(dialogView) 110 | .setPositiveButton("OK") { dialog, _ -> dialog.dismiss() } 111 | .create() 112 | 113 | dialog.show() 114 | } 115 | 116 | private fun openDownloadLink() { 117 | val url = "https://github.com/samyak2403/IPTVmine?tab=readme-ov-file#indian-iptvmine-app-1" 118 | val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url)) 119 | startActivity(intent) 120 | } 121 | 122 | 123 | override fun onDestroyView() { 124 | super.onDestroyView() 125 | _binding = null 126 | } 127 | } 128 | -------------------------------------------------------------------------------- /app/src/main/java/com/samyak2403/iptvmine/screens/HomeFragment.kt: -------------------------------------------------------------------------------- 1 | ///* 2 | // * Created by Samyak kamble on 8/14/24, 11:33 AM 3 | // * Copyright (c) 2024 . All rights reserved. 4 | // * Last modified 8/14/24, 11:33 AM 5 | // */ 6 | 7 | package com.samyak2403.iptvmine.screens 8 | 9 | import android.os.Bundle 10 | import android.os.Handler 11 | import android.os.Looper 12 | import android.text.Editable 13 | import android.text.TextWatcher 14 | import android.view.LayoutInflater 15 | import android.view.View 16 | import android.view.ViewGroup 17 | import android.widget.EditText 18 | import android.widget.ImageView 19 | import android.widget.ProgressBar 20 | import androidx.fragment.app.Fragment 21 | import androidx.lifecycle.Observer 22 | import androidx.lifecycle.ViewModelProvider 23 | import androidx.recyclerview.widget.LinearLayoutManager 24 | import androidx.recyclerview.widget.RecyclerView 25 | 26 | import com.samyak2403.iptvmine.R 27 | import com.samyak2403.iptvmine.adapter.ChannelsAdapter 28 | import com.samyak2403.iptvmine.model.Channel 29 | import com.samyak2403.iptvmine.provider.ChannelsProvider 30 | 31 | class HomeFragment : Fragment() { 32 | 33 | private lateinit var channelsProvider: ChannelsProvider 34 | private lateinit var searchEditText: EditText 35 | private lateinit var searchIcon: ImageView 36 | private lateinit var progressBar: ProgressBar 37 | private lateinit var recyclerView: RecyclerView 38 | private lateinit var adapter: ChannelsAdapter 39 | 40 | private var debounceHandler: Handler? = null 41 | private var isSearchVisible: Boolean = false 42 | 43 | override fun onCreateView( 44 | inflater: LayoutInflater, container: ViewGroup?, 45 | savedInstanceState: Bundle? 46 | ): View? { 47 | val view = inflater.inflate(R.layout.fragment_home, container, false) 48 | 49 | channelsProvider = ViewModelProvider(this).get(ChannelsProvider::class.java) 50 | searchEditText = view.findViewById(R.id.searchEditText) 51 | searchIcon = view.findViewById(R.id.search_icon) 52 | progressBar = view.findViewById(R.id.progressBar) 53 | recyclerView = view.findViewById(R.id.recyclerView) 54 | 55 | adapter = ChannelsAdapter(emptyList()) { channel: Channel -> 56 | PlayerActivity.start(requireContext(), channel) 57 | } 58 | 59 | recyclerView.layoutManager = LinearLayoutManager(requireContext()) 60 | recyclerView.adapter = adapter 61 | 62 | setupObservers() 63 | fetchData() 64 | 65 | // Set click listener to toggle the search bar visibility 66 | searchIcon.setOnClickListener { 67 | toggleSearchBar() 68 | } 69 | 70 | searchEditText.addTextChangedListener(object : TextWatcher { 71 | override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {} 72 | 73 | override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { 74 | debounceHandler?.removeCallbacksAndMessages(null) 75 | debounceHandler = Handler(Looper.getMainLooper()) 76 | debounceHandler?.postDelayed({ 77 | filterChannels(s.toString()) 78 | }, 500) 79 | } 80 | 81 | override fun afterTextChanged(s: Editable?) {} 82 | }) 83 | 84 | return view 85 | } 86 | 87 | private fun setupObservers() { 88 | channelsProvider.channels.observe(viewLifecycleOwner, Observer { data -> 89 | adapter.updateChannels(data) 90 | }) 91 | 92 | channelsProvider.filteredChannels.observe(viewLifecycleOwner, Observer { data -> 93 | adapter.updateChannels(data) 94 | }) 95 | } 96 | 97 | private fun fetchData() { 98 | progressBar.visibility = View.VISIBLE 99 | channelsProvider.fetchM3UFile() 100 | progressBar.visibility = View.GONE 101 | } 102 | 103 | private fun filterChannels(query: String) { 104 | channelsProvider.filterChannels(query) 105 | } 106 | 107 | private fun toggleSearchBar() { 108 | if (isSearchVisible) { 109 | searchEditText.visibility = View.GONE 110 | isSearchVisible = false 111 | } else { 112 | searchEditText.visibility = View.VISIBLE 113 | isSearchVisible = true 114 | } 115 | } 116 | } -------------------------------------------------------------------------------- /app/src/main/res/drawable/about_app.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IPTVmine-org/IPTVmine/5abd373dc3d392138a9d71cfe66012a17588cd5f/app/src/main/res/drawable/about_app.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/dialog_background.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | 9 | 10 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/edittext_background.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | 9 | 10 | 13 | 18 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_arrow_back.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_baseline_forward.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_baseline_fullscreen.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_baseline_fullscreen_exit.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_baseline_lock.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_baseline_lock_open.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_baseline_pause.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_baseline_play_arrow.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_baseline_replay.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_launcher_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 10 | 15 | 20 | 25 | 30 | 35 | 40 | 45 | 50 | 55 | 60 | 65 | 70 | 75 | 80 | 85 | 90 | 95 | 100 | 105 | 110 | 115 | 120 | 125 | 130 | 135 | 140 | 145 | 150 | 155 | 160 | 165 | 170 | 171 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_launcher_foreground.xml: -------------------------------------------------------------------------------- 1 | 7 | 8 | 9 | 15 | 18 | 21 | 22 | 23 | 24 | 30 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_search.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_tv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IPTVmine-org/IPTVmine/5abd373dc3d392138a9d71cfe66012a17588cd5f/app/src/main/res/drawable/ic_tv.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/magnifying_glass.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/search.xml: -------------------------------------------------------------------------------- 1 | 6 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/search_bar_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 10 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/tv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IPTVmine-org/IPTVmine/5abd373dc3d392138a9d71cfe66012a17588cd5f/app/src/main/res/drawable/tv.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/tv_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IPTVmine-org/IPTVmine/5abd373dc3d392138a9d71cfe66012a17588cd5f/app/src/main/res/drawable/tv_logo.png -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_internet_speed.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 11 | 21 | 22 | 26 | 27 | 35 | 36 | 37 | 38 | 39 | 40 | 48 | 49 | 56 | 57 | 64 | 65 | 71 | 72 | 73 | 74 | 81 | 82 | 89 | 90 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 108 | 109 | 117 | 118 | 129 | 130 | 131 | 132 | 133 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | 12 | 13 | 14 | 26 | 27 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_player.xml: -------------------------------------------------------------------------------- 1 | 6 | 10 | 11 | 22 | 23 | 29 | 30 | 39 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_tv.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 12 | 24 | 25 | 29 | 30 | 38 | 39 | 53 | 54 | 64 | 65 | 66 | 67 | 68 | 75 | 76 | 81 | 82 | 83 | 84 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | -------------------------------------------------------------------------------- /app/src/main/res/layout/custom_controller.xml: -------------------------------------------------------------------------------- 1 | 6 | 11 | 12 | 20 | 26 | 34 | 41 | 48 | 56 | 57 | 58 | 65 | 71 | 76 | 82 | 88 | 95 | 96 | 106 | 107 | -------------------------------------------------------------------------------- /app/src/main/res/layout/dialog_app_info.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 14 | 15 | 24 | 25 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /app/src/main/res/layout/dialog_quality_selector.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 12 | 13 | 17 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_about.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 10 | 20 | 21 | 25 | 26 | 34 | 35 | 36 | 37 | 38 | 39 | 50 | 51 | 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 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 114 | 115 | 119 | 120 | 121 | 129 | 130 | 131 | 139 | 140 | 141 | 142 | 151 | 152 | 153 | 157 | 158 | 159 | 166 | 167 | 168 | 176 | 177 | 178 | 179 | 188 | 189 | 193 | 194 | 195 | 203 | 204 | 205 | 213 | 214 | 215 | 216 | 225 | 226 | 227 | 231 | 232 | 233 | 240 | 241 | 242 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 275 | 276 | 287 | 288 | 289 | 290 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_home.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 16 | 17 | 27 | 28 | 32 | 33 | 41 | 42 | 56 | 57 | 67 | 68 | 69 | 70 | 79 | 80 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_channel.xml: -------------------------------------------------------------------------------- 1 | 6 | 12 | 13 | 19 | 20 | 28 | 29 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_bottom.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | 9 | 13 | 14 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IPTVmine-org/IPTVmine/5abd373dc3d392138a9d71cfe66012a17588cd5f/app/src/main/res/mipmap-hdpi/ic_launcher.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IPTVmine-org/IPTVmine/5abd373dc3d392138a9d71cfe66012a17588cd5f/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IPTVmine-org/IPTVmine/5abd373dc3d392138a9d71cfe66012a17588cd5f/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IPTVmine-org/IPTVmine/5abd373dc3d392138a9d71cfe66012a17588cd5f/app/src/main/res/mipmap-mdpi/ic_launcher.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IPTVmine-org/IPTVmine/5abd373dc3d392138a9d71cfe66012a17588cd5f/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IPTVmine-org/IPTVmine/5abd373dc3d392138a9d71cfe66012a17588cd5f/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IPTVmine-org/IPTVmine/5abd373dc3d392138a9d71cfe66012a17588cd5f/app/src/main/res/mipmap-xhdpi/ic_launcher.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IPTVmine-org/IPTVmine/5abd373dc3d392138a9d71cfe66012a17588cd5f/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IPTVmine-org/IPTVmine/5abd373dc3d392138a9d71cfe66012a17588cd5f/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IPTVmine-org/IPTVmine/5abd373dc3d392138a9d71cfe66012a17588cd5f/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IPTVmine-org/IPTVmine/5abd373dc3d392138a9d71cfe66012a17588cd5f/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IPTVmine-org/IPTVmine/5abd373dc3d392138a9d71cfe66012a17588cd5f/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IPTVmine-org/IPTVmine/5abd373dc3d392138a9d71cfe66012a17588cd5f/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IPTVmine-org/IPTVmine/5abd373dc3d392138a9d71cfe66012a17588cd5f/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IPTVmine-org/IPTVmine/5abd373dc3d392138a9d71cfe66012a17588cd5f/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /app/src/main/res/raw/app_info.json: -------------------------------------------------------------------------------- 1 | {"v":"4.8.0","meta":{"g":"LottieFiles AE 3.3.6","a":"Bilal Arief","k":"information, icon, animation, web, mobile, app, blue, simple, indicator, details, informative, notification, info icon, information animation, notification icon","d":"Effortlessly conveying information, this simple yet captivating blue animation icon is the perfect addition to any web or mobile application as an information indicator.","tc":"Blue"},"fr":60,"ip":0,"op":104,"w":1080,"h":1080,"nm":"Info","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"White-InfoIconDot","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[540.383,325.611,0],"ix":2},"a":{"a":0,"k":[0,175,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.779,0.779,0.333],"y":[0,0,0]},"t":47,"s":[100,100,100]},{"i":{"x":[0.216,0.216,0.667],"y":[1,1,1]},"o":{"x":[0.597,0.597,0.333],"y":[0,0,0]},"t":56,"s":[115,115,100]},{"t":67,"s":[100,100,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[50,50],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":10,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,175],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":0,"k":100,"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"gr","it":[{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":0,"k":100,"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":1,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":1,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.217],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":25,"s":[0]},{"t":77,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":4,"nm":"Trim Paths 3","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":666,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"LightBlue-InfoIconDot","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[540.383,146.358,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[101.209,101.209,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[50,50],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0.788235294118,0.933333333333,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":10,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.788235294118,0.933333333333,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,175],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":0,"k":100,"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"gr","it":[{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":0,"k":100,"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":1,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":1,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.19],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":9,"s":[0]},{"t":67,"s":[100]}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.221],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":9,"s":[0]},{"t":31,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":4,"nm":"Trim Paths 2","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":666,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"DarkBlue-InfoIconDot","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[540.383,146.358,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[101.209,101.209,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[50,50],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0.38431372549,0.803921568627,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":10,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.38431372549,0.803921568627,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,175],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":0,"k":100,"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"gr","it":[{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":0,"k":100,"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":1,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":1,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":5.852,"ix":1},"e":{"a":0,"k":46.645,"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":4,"nm":"Trim Paths 2","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.19],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":16,"s":[0]},{"t":74,"s":[100]}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.221],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":16,"s":[0]},{"t":38,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":5,"nm":"Trim Paths 3","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":666,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"White-InfoIcon","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[534,555,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.779,0.779,0.333],"y":[0,0,0]},"t":47,"s":[100,100,100]},{"i":{"x":[0.216,0.216,0.667],"y":[1,1,1]},"o":{"x":[0.597,0.597,0.333],"y":[0,0,0]},"t":56,"s":[115,115,100]},{"t":67,"s":[100,100,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-12,-204],[-12,114]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":50,"ix":5},"lc":2,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[18,74],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.217],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":25,"s":[0]},{"t":63,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":666,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"LightBlue-InfoIcon","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[534,555,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-12,-204],[-12,114]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.788235294118,0.933333333333,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":50,"ix":5},"lc":2,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[18,74],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.19],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":9,"s":[0]},{"t":67,"s":[100]}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.221],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":9,"s":[0]},{"t":31,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":666,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"DarkBlue-InfoIcon ","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[534,555,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-12,-204],[-12,114]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.38431372549,0.803921568627,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":50,"ix":5},"lc":2,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.38431372549,0.803921568627,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[18,74],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.19],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":17,"s":[0]},{"t":75,"s":[100]}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.221],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":17,"s":[0]},{"t":39,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 2","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":666,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"DarkBlue-CircleStroke","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[538.648,533.626,0],"ix":2},"a":{"a":0,"k":[27.013,127.349,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[784,784],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.057],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":17,"s":[100]},{"t":47,"s":[0]}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.329],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":17,"s":[100]},{"t":75,"s":[0]}],"ix":2},"o":{"a":0,"k":9000,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"st","c":{"a":0,"k":[0.38431372549,0.803921568627,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":35,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[28,132],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":666,"st":0,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"LightBlue-CircleStroke","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[538.648,533.626,0],"ix":2},"a":{"a":0,"k":[27.013,127.349,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[784,784],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.057],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[100]},{"t":41,"s":[0]}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.329],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[100]},{"t":71,"s":[0]}],"ix":2},"o":{"a":0,"k":9000,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"st","c":{"a":0,"k":[0.788235294118,0.933333333333,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":35,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[28,132],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":666,"st":0,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"Blue-Circle","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":28,"s":[25]},{"t":39,"s":[100]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[544.429,560.879,0],"ix":2},"a":{"a":0,"k":[32.429,152.879,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.354,0.354,0.667],"y":[1.438,1.438,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":13,"s":[0,0,100]},{"t":37,"s":[100,100,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[784,784],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.592156862745,0.870588235294,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[28,132],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":666,"st":0,"bm":0}],"markers":[]} -------------------------------------------------------------------------------- /app/src/main/res/raw/share_app.json: -------------------------------------------------------------------------------- 1 | {"v":"5.1.1","fr":29.9700012207031,"ip":0,"op":60.0000024438501,"w":150,"h":150,"nm":"share_wait","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Capa de formas 5","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":60.131,"ix":10},"p":{"a":0,"k":[30.265,74.39,0],"ix":2},"a":{"a":0,"k":[-44.735,-0.61,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"a","pt":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":0,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-44.5,-52],[-44.5,0],[43.5,0],[43.5,-52]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-44.5,-52],[-44.5,0],[43.5,0],[43.5,-52]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":16,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-44.5,-52],[-44.5,0],[43.5,0],[43.5,-52]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-131.001,-0.775],[-131.001,51.225],[-43.001,51.225],[-43.001,-0.775]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":30,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-131.001,-0.775],[-131.001,51.225],[-43.001,51.225],[-43.001,-0.775]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-44.5,-52],[-44.5,0],[43.5,0],[43.5,-52]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":45,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-44.5,-52],[-44.5,0],[43.5,0],[43.5,-52]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-44.5,-52],[-44.5,0],[43.5,0],[43.5,-52]],"c":true}]},{"t":60.0000024438501}],"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Máscara 1"}],"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-44.5,0],[43.5,-52]],"c":false},"ix":2},"nm":"Trazado 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.054901998183,0.537254961799,0.788234994926,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":15,"ix":5},"lc":1,"lj":1,"ml":4,"nm":"Trazo 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.054901998183,0.537254961799,0.788234994926,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Relleno 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformar"}],"nm":"Forma 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":600.000024438501,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Capa de formas 4","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[74.5,49,0],"ix":2},"a":{"a":0,"k":[-0.5,-26,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"a","pt":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":0,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-44.5,-52],[-44.5,0],[43.5,0],[43.5,-52]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-131.5,-1],[-131.5,51],[-43.5,51],[-43.5,-1]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":16,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-131.5,-1],[-131.5,51],[-43.5,51],[-43.5,-1]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-44.5,-52],[-44.5,0],[43.5,0],[43.5,-52]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":30,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-44.5,-52],[-44.5,0],[43.5,0],[43.5,-52]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-44.5,-52],[-44.5,0],[43.5,0],[43.5,-52]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":45,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-44.5,-52],[-44.5,0],[43.5,0],[43.5,-52]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-44.5,-52],[-44.5,0],[43.5,0],[43.5,-52]],"c":true}]},{"t":60.0000024438501}],"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Máscara 1"}],"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-44.5,0],[43.5,-52]],"c":false},"ix":2},"nm":"Trazado 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.054901998183,0.537254961799,0.788234994926,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":15,"ix":5},"lc":1,"lj":1,"ml":4,"nm":"Trazo 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.054901998183,0.537254961799,0.788234994926,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Relleno 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformar"}],"nm":"Forma 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":600.000024438501,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Capa de formas 3","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":0,"s":[118.265,125.39,0],"e":[118.265,125.39,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":16,"s":[118.265,125.39,0],"e":[30.265,74.39,0],"to":[-14.6666660308838,-8.5,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":30,"s":[30.265,74.39,0],"e":[118.265,125.39,0],"to":[0,0,0],"ti":[-14.6666660308838,-8.5,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":45,"s":[118.265,125.39,0],"e":[118.265,125.39,0],"to":[0,0,0],"ti":[0,0,0]},{"t":60.0000024438501}],"ix":2},"a":{"a":0,"k":[42.913,-51.552,0],"ix":1},"s":{"a":0,"k":[118.298,118.298,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[32.291,32.291],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Trazado elíptico 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0.054901998183,0.537254961799,0.788234994926,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"nm":"Trazo 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.054901998183,0.537254961799,0.788234994926,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Relleno 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[42.913,-51.552],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[112.896,112.896],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformar"}],"nm":"Elipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":600.000024438501,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Capa de formas 2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[30.265,74.39,0],"ix":2},"a":{"a":0,"k":[42.913,-51.552,0],"ix":1},"s":{"a":0,"k":[118.298,118.298,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[32.291,32.291],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Trazado elíptico 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0.054901998183,0.537254961799,0.788234994926,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"nm":"Trazo 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.054901998183,0.537254961799,0.788234994926,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Relleno 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[42.913,-51.552],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[112.896,112.896],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformar"}],"nm":"Elipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":600.000024438501,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Capa de formas 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":0,"s":[118.265,23.39,0],"e":[30.5,75,0],"to":[-14.6275415420532,8.60161209106445,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":16,"s":[30.5,75,0],"e":[118.265,23.39,0],"to":[0,0,0],"ti":[-14.6275415420532,8.60161209106445,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":30,"s":[118.265,23.39,0],"e":[118.265,23.39,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":45,"s":[118.265,23.39,0],"e":[118.265,23.39,0],"to":[0,0,0],"ti":[0,0,0]},{"t":60.0000024438501}],"ix":2},"a":{"a":0,"k":[42.913,-51.552,0],"ix":1},"s":{"a":0,"k":[118.298,118.298,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[32.291,32.291],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Trazado elíptico 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0.054901998183,0.537254961799,0.788234994926,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"nm":"Trazo 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.054901998183,0.537254961799,0.788234994926,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Relleno 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[42.913,-51.552],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[112.896,112.896],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformar"}],"nm":"Elipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":600.000024438501,"st":0,"bm":0}],"markers":[]} -------------------------------------------------------------------------------- /app/src/main/res/raw/update.json: -------------------------------------------------------------------------------- 1 | {"v":"4.8.0","meta":{"g":"LottieFiles AE 3.0.2","a":"","k":"","d":"","tc":""},"fr":24,"ip":24,"op":96,"w":300,"h":300,"nm":"update","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"mask","td":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[114,175,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[136,136],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":32,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[0.180391992307,0.180391992307,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[36,-25],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"cog-top Outlines","tt":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[0.054],"y":[0]},"t":24,"s":[0]},{"i":{"x":[0.015],"y":[1]},"o":{"x":[0.808],"y":[0]},"t":32,"s":[20]},{"t":96,"s":[-360]}],"ix":10},"p":{"a":0,"k":[230.5,85.5,0],"ix":2},"a":{"a":0,"k":[55.889,55.889,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-1.465,-4.555],[0,0],[-2.499,2.944],[0,0],[0.389,-4.769],[0,0],[-3.435,1.764],[0,0],[2.185,-4.257],[0,0],[-3.849,0.314],[0,0],[3.648,-3.097],[0,0],[-3.676,-1.182],[0,0],[4.555,-1.465],[0,0],[-2.943,-2.499],[0,0],[4.769,0.39],[0,0],[-1.763,-3.435],[0,0],[4.257,2.185],[0,0],[-0.314,-3.848],[0,0],[3.097,3.648],[0,0],[1.182,-3.676],[0,0],[1.465,4.555],[0,0],[2.499,-2.944],[0,0],[-0.389,4.769],[0,0],[3.435,-1.764],[0,0],[-2.185,4.257],[0,0],[3.849,-0.314],[0,0],[-3.648,3.097],[0,0],[3.676,1.182],[0,0],[-4.555,1.465],[0,0],[2.943,2.499],[0,0],[-4.769,-0.39],[0,0],[1.763,3.435],[0,0],[-4.257,-2.185],[0,0],[0.314,3.848],[0,0],[-3.097,-3.647],[0,0],[-1.182,3.676]],"o":[[1.465,-4.555],[0,0],[1.182,3.676],[0,0],[3.097,-3.647],[0,0],[-0.314,3.848],[0,0],[4.257,-2.185],[0,0],[-1.763,3.435],[0,0],[4.769,-0.39],[0,0],[-2.943,2.499],[0,0],[4.555,1.465],[0,0],[-3.676,1.182],[0,0],[3.648,3.097],[0,0],[-3.849,-0.314],[0,0],[2.185,4.257],[0,0],[-3.435,-1.764],[0,0],[0.389,4.769],[0,0],[-2.499,-2.944],[0,0],[-1.465,4.555],[0,0],[-1.182,-3.676],[0,0],[-3.097,3.648],[0,0],[0.314,-3.848],[0,0],[-4.257,2.185],[0,0],[1.763,-3.435],[0,0],[-4.769,0.39],[0,0],[2.943,-2.499],[0,0],[-4.555,-1.465],[0,0],[3.676,-1.182],[0,0],[-3.648,-3.097],[0,0],[3.849,0.314],[0,0],[-2.185,-4.257],[0,0],[3.435,1.764],[0,0],[-0.389,-4.769],[0,0],[2.499,2.944],[0,0]],"v":[[-4.688,-51.084],[4.688,-51.084],[5.359,-48.998],[13.8,-47.32],[15.218,-48.989],[23.88,-45.402],[23.701,-43.217],[30.858,-38.437],[32.807,-39.437],[39.436,-32.807],[38.436,-30.857],[43.218,-23.701],[45.401,-23.88],[48.989,-15.217],[47.319,-13.801],[48.998,-5.359],[51.084,-4.688],[51.084,4.688],[48.998,5.359],[47.319,13.801],[48.989,15.218],[45.401,23.88],[43.218,23.702],[38.436,30.858],[39.436,32.807],[32.807,39.437],[30.858,38.437],[23.701,43.218],[23.88,45.402],[15.218,48.989],[13.8,47.32],[5.359,48.999],[4.688,51.084],[-4.688,51.084],[-5.359,48.999],[-13.8,47.32],[-15.218,48.989],[-23.88,45.402],[-23.701,43.218],[-30.858,38.437],[-32.807,39.437],[-39.436,32.807],[-38.436,30.858],[-43.218,23.702],[-45.401,23.88],[-48.989,15.218],[-47.319,13.801],[-48.998,5.359],[-51.084,4.688],[-51.084,-4.688],[-48.998,-5.359],[-47.319,-13.801],[-48.989,-15.217],[-45.401,-23.88],[-43.218,-23.701],[-38.436,-30.857],[-39.436,-32.807],[-32.807,-39.437],[-30.858,-38.437],[-23.701,-43.217],[-23.88,-45.402],[-15.218,-48.989],[-13.8,-47.32],[-5.359,-48.998]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.780392216701,0.803921628466,0.84313731474,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[55.889,55.889],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"mask 2","td":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[114,175,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[136,136],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":32,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[0.180391992307,0.180391992307,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[36,-25],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"cog-bott Outlines","tt":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.134],"y":[1]},"o":{"x":[0.131],"y":[0]},"t":24,"s":[0]},{"i":{"x":[0.024],"y":[1]},"o":{"x":[0.798],"y":[0]},"t":32,"s":[20]},{"t":96,"s":[-360]}],"ix":10},"p":{"a":0,"k":[160.5,252.5,0],"ix":2},"a":{"a":0,"k":[55.889,55.889,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-1.466,-4.555],[0,0],[-2.499,2.943],[0,0],[0.389,-4.769],[0,0],[-3.435,1.763],[0,0],[2.185,-4.257],[0,0],[-3.849,0.314],[0,0],[3.648,-3.097],[0,0],[-3.676,-1.182],[0,0],[4.555,-1.465],[0,0],[-2.943,-2.499],[0,0],[4.769,0.389],[0,0],[-1.763,-3.435],[0,0],[4.257,2.185],[0,0],[-0.314,-3.849],[0,0],[3.097,3.648],[0,0],[1.183,-3.676],[0,0],[1.465,4.555],[0,0],[2.499,-2.943],[0,0],[-0.389,4.769],[0,0],[3.435,-1.763],[0,0],[-2.185,4.257],[0,0],[3.848,-0.314],[0,0],[-3.648,3.097],[0,0],[3.675,1.182],[0,0],[-4.555,1.465],[0,0],[2.943,2.499],[0,0],[-4.77,-0.389],[0,0],[1.763,3.435],[0,0],[-4.257,-2.185],[0,0],[0.315,3.849],[0,0],[-3.097,-3.648],[0,0],[-1.182,3.676]],"o":[[1.465,-4.555],[0,0],[1.183,3.676],[0,0],[3.097,-3.648],[0,0],[-0.314,3.849],[0,0],[4.257,-2.185],[0,0],[-1.763,3.435],[0,0],[4.769,-0.389],[0,0],[-2.943,2.499],[0,0],[4.555,1.465],[0,0],[-3.676,1.182],[0,0],[3.648,3.097],[0,0],[-3.849,-0.314],[0,0],[2.185,4.257],[0,0],[-3.435,-1.763],[0,0],[0.389,4.769],[0,0],[-2.499,-2.943],[0,0],[-1.466,4.555],[0,0],[-1.182,-3.676],[0,0],[-3.097,3.648],[0,0],[0.315,-3.849],[0,0],[-4.257,2.185],[0,0],[1.763,-3.435],[0,0],[-4.77,0.389],[0,0],[2.943,-2.499],[0,0],[-4.555,-1.465],[0,0],[3.675,-1.182],[0,0],[-3.648,-3.097],[0,0],[3.848,0.314],[0,0],[-2.185,-4.257],[0,0],[3.435,1.763],[0,0],[-0.389,-4.769],[0,0],[2.499,2.943],[0,0]],"v":[[-4.688,-47.015],[4.688,-47.015],[5.358,-44.928],[13.8,-43.249],[15.218,-44.92],[23.88,-41.331],[23.701,-39.148],[30.858,-34.367],[32.807,-35.367],[39.436,-28.738],[38.436,-26.788],[43.218,-19.632],[45.401,-19.811],[48.989,-11.148],[47.319,-9.73],[48.998,-1.29],[51.084,-0.618],[51.084,8.757],[48.998,9.428],[47.319,17.87],[48.989,19.288],[45.401,27.949],[43.218,27.771],[38.436,34.928],[39.436,36.876],[32.807,43.505],[30.858,42.505],[23.701,47.288],[23.88,49.471],[15.218,53.059],[13.8,51.389],[5.358,53.068],[4.688,55.154],[-4.688,55.154],[-5.359,53.068],[-13.8,51.389],[-15.218,53.059],[-23.88,49.471],[-23.702,47.288],[-30.858,42.505],[-32.807,43.505],[-39.436,36.876],[-38.436,34.928],[-43.218,27.771],[-45.401,27.949],[-48.989,19.288],[-47.319,17.87],[-48.998,9.428],[-51.084,8.757],[-51.084,-0.618],[-48.998,-1.29],[-47.319,-9.73],[-48.989,-11.148],[-45.401,-19.811],[-43.218,-19.632],[-38.436,-26.788],[-39.436,-28.738],[-32.807,-35.367],[-30.858,-34.367],[-23.702,-39.148],[-23.88,-41.331],[-15.218,-44.92],[-13.8,-43.249],[-5.359,-44.928]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.780392216701,0.803921628466,0.84313731474,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[55.889,51.819],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"center Outlines","sr":1,"ks":{"o":{"a":0,"k":30,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[0.17],"y":[0]},"t":24,"s":[0]},{"i":{"x":[0.01],"y":[1]},"o":{"x":[0.856],"y":[0]},"t":32,"s":[20]},{"t":96,"s":[-360]}],"ix":10},"p":{"a":0,"k":[150.5,150.5,0],"ix":2},"a":{"a":0,"k":[22.5,22.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-5.799,0],[0,5.799],[5.799,0],[0,-5.799]],"o":[[5.799,0],[0,-5.799],[-5.799,0],[0,5.799]],"v":[[0,10.5],[10.5,0],[0,-10.5],[-10.5,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[-0.781,-0.781],[-0.781,0.781],[0.782,0.781],[0.781,-0.781]],"o":[[0.781,0.781],[0.782,-0.781],[-0.781,-0.781],[-0.781,0.781]],"v":[[-13.663,13.491],[-10.835,13.491],[-10.835,10.663],[-13.663,10.663]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[-0.781,0.781],[0.781,0.781],[0.781,-0.781],[-0.781,-0.781]],"o":[[0.781,-0.781],[-0.781,-0.781],[-0.781,0.781],[0.781,0.781]],"v":[[13.914,-11.257],[13.914,-14.086],[11.086,-14.086],[11.086,-11.257]],"c":true},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":0,"k":{"i":[[0.781,-0.781],[-0.781,-0.781],[-0.781,0.782],[0.781,0.781]],"o":[[-0.781,0.781],[0.781,0.782],[0.781,-0.781],[-0.781,-0.781]],"v":[[-14.491,-13.663],[-14.491,-10.835],[-11.663,-10.835],[-11.663,-13.663]],"c":true},"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ind":4,"ty":"sh","ix":5,"ks":{"a":0,"k":{"i":[[-0.781,-0.781],[-0.781,0.781],[0.781,0.781],[0.781,-0.781]],"o":[[0.781,0.781],[0.781,-0.781],[-0.781,-0.781],[-0.781,0.781]],"v":[[10.257,13.914],[13.086,13.914],[13.086,11.086],[10.257,11.086]],"c":true},"ix":2},"nm":"Path 5","mn":"ADBE Vector Shape - Group","hd":false},{"ind":5,"ty":"sh","ix":6,"ks":{"a":0,"k":{"i":[[0,-1.105],[-1.105,0],[0,1.105],[1.105,0]],"o":[[0,1.105],[1.105,0],[0,-1.105],[-1.105,0]],"v":[[-19.5,0.5],[-17.5,2.5],[-15.5,0.5],[-17.5,-1.5]],"c":true},"ix":2},"nm":"Path 6","mn":"ADBE Vector Shape - Group","hd":false},{"ind":6,"ty":"sh","ix":7,"ks":{"a":0,"k":{"i":[[-1.105,0],[0,1.105],[1.105,0],[0,-1.105]],"o":[[1.105,0],[0,-1.105],[-1.105,0],[0,1.105]],"v":[[17.5,2.5],[19.5,0.5],[17.5,-1.5],[15.5,0.5]],"c":true},"ix":2},"nm":"Path 7","mn":"ADBE Vector Shape - Group","hd":false},{"ind":7,"ty":"sh","ix":8,"ks":{"a":0,"k":{"i":[[-1.105,0],[0,1.105],[1.105,0],[0,-1.105]],"o":[[1.105,0],[0,-1.105],[-1.105,0],[0,1.105]],"v":[[0.5,19.5],[2.5,17.5],[0.5,15.5],[-1.5,17.5]],"c":true},"ix":2},"nm":"Path 8","mn":"ADBE Vector Shape - Group","hd":false},{"ind":8,"ty":"sh","ix":9,"ks":{"a":0,"k":{"i":[[-1.105,0],[0,1.105],[1.105,0],[0,-1.105]],"o":[[1.105,0],[0,-1.105],[-1.105,0],[0,1.105]],"v":[[0.5,-15.5],[2.5,-17.5],[0.5,-19.5],[-1.5,-17.5]],"c":true},"ix":2},"nm":"Path 9","mn":"ADBE Vector Shape - Group","hd":false},{"ind":9,"ty":"sh","ix":10,"ks":{"a":0,"k":{"i":[[0,-12.426],[12.426,0],[0,12.426],[-12.426,0]],"o":[[0,12.426],[-12.426,0],[0,-12.426],[12.426,0]],"v":[[22.5,0],[0,22.5],[-22.5,0],[0,-22.5]],"c":true},"ix":2},"nm":"Path 10","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[22.5,22.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":12,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"center2 Outlines","parent":7,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[55.889,55.889,0],"ix":2},"a":{"a":0,"k":[8.75,8.75,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[1.933,0],[0,1.933],[-1.933,0],[0,-1.933]],"o":[[-1.933,0],[0,-1.933],[1.933,0],[0,1.933]],"v":[[0,3.5],[-3.5,0],[0,-3.5],[3.5,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[4.694,0],[0,-4.694],[-4.694,0],[0,4.694]],"o":[[-4.694,0],[0,4.694],[4.694,0],[0,-4.694]],"v":[[0,-8.5],[-8.5,0],[0,8.5],[8.5,0]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.780392216701,0.803921628466,0.84313731474,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[8.75,8.75],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"cog-main Outlines","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[0.015],"y":[0]},"t":24,"s":[0]},{"i":{"x":[0.024],"y":[1]},"o":{"x":[0.798],"y":[0]},"t":32,"s":[-20]},{"t":96,"s":[360]}],"ix":10},"p":{"a":0,"k":[150.5,150.5,0],"ix":2},"a":{"a":0,"k":[55.889,55.889,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,19.054],[19.054,0],[0,-19.054],[-19.054,0]],"o":[[0,-19.054],[-19.054,0],[0,19.054],[19.054,0]],"v":[[34.5,0],[0,-34.5],[-34.5,0],[0,34.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,18.501],[18.501,0],[0,-18.501],[-18.501,0]],"o":[[0,-18.501],[-18.501,0],[0,18.501],[18.501,0]],"v":[[33.5,0],[0,-33.5],[-33.5,0],[0,33.5]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[0,-5.799],[5.799,0],[0,5.799],[-5.799,0]],"o":[[0,5.799],[-5.799,0],[0,-5.799],[5.799,0]],"v":[[10.5,0],[0,10.5],[-10.5,0],[0,-10.5]],"c":true},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":0,"k":{"i":[[0,0],[-1.465,-4.555],[0,0],[-2.499,2.943],[0,0],[0.389,-4.769],[0,0],[-3.435,1.763],[0,0],[2.185,-4.257],[0,0],[-3.849,0.314],[0,0],[3.648,-3.097],[0,0],[-3.676,-1.183],[0,0],[4.555,-1.465],[0,0],[-2.943,-2.499],[0,0],[4.769,0.389],[0,0],[-1.763,-3.435],[0,0],[4.257,2.185],[0,0],[-0.314,-3.849],[0,0],[3.097,3.648],[0,0],[1.183,-3.676],[0,0],[1.465,4.555],[0,0],[2.499,-2.943],[0,0],[-0.389,4.769],[0,0],[3.435,-1.763],[0,0],[-2.185,4.257],[0,0],[3.849,-0.314],[0,0],[-3.648,3.097],[0,0],[3.676,1.183],[0,0],[-4.555,1.465],[0,0],[2.943,2.499],[0,0],[-4.769,-0.389],[0,0],[1.763,3.435],[0,0],[-4.257,-2.185],[0,0],[0.314,3.849],[0,0],[-3.097,-3.648],[0,0],[-1.183,3.676]],"o":[[1.465,-4.556],[0,0],[1.183,3.676],[0,0],[3.097,-3.648],[0,0],[-0.314,3.849],[0,0],[4.257,-2.185],[0,0],[-1.763,3.435],[0,0],[4.769,-0.389],[0,0],[-2.943,2.499],[0,0],[4.555,1.465],[0,0],[-3.676,1.183],[0,0],[3.648,3.097],[0,0],[-3.849,-0.314],[0,0],[2.185,4.257],[0,0],[-3.435,-1.763],[0,0],[0.389,4.769],[0,0],[-2.499,-2.943],[0,0],[-1.465,4.555],[0,0],[-1.183,-3.676],[0,0],[-3.097,3.648],[0,0],[0.314,-3.849],[0,0],[-4.257,2.185],[0,0],[1.763,-3.435],[0,0],[-4.769,0.389],[0,0],[2.943,-2.499],[0,0],[-4.556,-1.465],[0,0],[3.676,-1.183],[0,0],[-3.648,-3.097],[0,0],[3.849,0.314],[0,0],[-2.185,-4.257],[0,0],[3.435,1.763],[0,0],[-0.389,-4.769],[0,0],[2.499,2.943],[0,0]],"v":[[-4.688,-51.083],[4.688,-51.084],[5.358,-48.998],[13.8,-47.319],[15.218,-48.989],[23.88,-45.401],[23.701,-43.218],[30.858,-38.436],[32.807,-39.436],[39.436,-32.807],[38.436,-30.858],[43.218,-23.701],[45.401,-23.88],[48.989,-15.218],[47.319,-13.8],[48.998,-5.358],[51.084,-4.688],[51.084,4.688],[48.998,5.358],[47.319,13.8],[48.989,15.218],[45.401,23.88],[43.218,23.701],[38.436,30.858],[39.436,32.807],[32.807,39.436],[30.858,38.436],[23.701,43.218],[23.88,45.401],[15.218,48.989],[13.8,47.319],[5.358,48.998],[4.688,51.084],[-4.688,51.084],[-5.358,48.998],[-13.8,47.319],[-15.218,48.989],[-23.88,45.401],[-23.701,43.218],[-30.858,38.436],[-32.807,39.436],[-39.436,32.807],[-38.436,30.858],[-43.218,23.701],[-45.401,23.88],[-48.989,15.218],[-47.319,13.8],[-48.998,5.358],[-51.083,4.688],[-51.084,-4.688],[-48.998,-5.358],[-47.319,-13.8],[-48.989,-15.218],[-45.401,-23.88],[-43.218,-23.701],[-38.436,-30.858],[-39.436,-32.807],[-32.807,-39.436],[-30.858,-38.436],[-23.701,-43.218],[-23.88,-45.401],[-15.218,-48.989],[-13.8,-47.319],[-5.358,-48.998]],"c":true},"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 2","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.305882352941,0.286274509804,0.807843197093,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[55.889,55.889],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":7,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"mask 3","td":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[114,175,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[136,136],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":32,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[0.180391992307,0.180391992307,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[36,-25],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":9,"ty":1,"nm":"Pale Blue Solid 1","tt":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[150,150,0],"ix":2},"a":{"a":0,"k":[150,150,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"sw":300,"sh":300,"sc":"#f7f7fa","ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":10,"ty":1,"nm":"White Solid 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[150,150,0],"ix":2},"a":{"a":0,"k":[150,150,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"sw":300,"sh":300,"sc":"#ffffff","ip":0,"op":120,"st":0,"bm":0}],"markers":[]} -------------------------------------------------------------------------------- /app/src/main/res/values-night/themes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #FF000000 4 | #FFFFFFFF 5 | #333333 6 | 7 | #121212 8 | #FFFFFF 9 | #CCCCCC 10 | #FFFFFF 11 | #6200EA 12 | #3700B3 13 | 14 | 15 | 16 | #0091EA 17 | #64DD17 18 | #F50057 19 | #FFD600 20 | 21 | #1B023B 22 | #FF03DAC5 23 | -------------------------------------------------------------------------------- /app/src/main/res/values/ic_launcher_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #FFFFFF 4 | -------------------------------------------------------------------------------- /app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | IPTV Mine 3 | Interstitial_Android 4 | 5757725 5 | About 6 | Home 7 | 8 | Hello blank fragment 9 | Share App 10 | 11 | 12 | Region 13 | City 14 | Country 15 | Speed Test 16 | Latency 17 | Start 18 | Server 19 | Time 20 | 21 | 22 | Tap to Start 23 | 24 | -------------------------------------------------------------------------------- /app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/values/themes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 |