v1.2.0: Android TV - Splash screen, Watch history, My List

This commit is contained in:
vndangkhoa 2025-12-25 23:31:35 +07:00
parent 8253ff5b7a
commit bdbdd1652d
1203 changed files with 79038 additions and 13 deletions

View file

@ -2,23 +2,72 @@
[![Docker Image](https://img.shields.io/docker/v/vndangkhoa/streamflix?label=DockerHub&logo=docker)](https://hub.docker.com/r/vndangkhoa/streamflix)
[![GitHub](https://img.shields.io/github/v/release/vndangkhoa/Streamflow?label=GitHub&logo=github)](https://github.com/vndangkhoa/Streamflow)
[![Version](https://img.shields.io/badge/version-1.0.10-blue)](https://github.com/vndangkhoa/Streamflow/releases)
[![Version](https://img.shields.io/badge/version-1.2.0-blue)](https://github.com/vndangkhoa/Streamflow/releases)
StreamFlow is a high-fidelity movie streaming application designed for NAS enthusiasts and home cinema lovers. It combines a premium **Apple TV+ inspired aesthetic** with a lightweight, high-performance backend, now consolidated into a **single Docker image** for effortless deployment.
## 📋 Latest Release: v1.0.10
## 📋 Latest Release: v1.2.0
**What's New in v1.0.10:**
- 📺 **Android TV Support:** Full D-pad navigation for remote control usage
- 🎮 **Improved TV Detection:** Auto-detects Android TV, Fire TV, Shield, and other TV devices
- 🎯 **Row-Based Navigation:** Left/Right arrows stay within row, Up/Down moves between rows
- ⬅️ **Back Button Support:** Android TV back button closes modals and returns to previous screen
- ✨ **Enhanced Focus Styles:** Larger focus indicators for 10-foot viewing distance
- 📱 **Separate APK Downloads:** Mobile and TV versions available on download page
**What's New in v1.2.0:**
- 🎬 **Animated Splash Screen:** Premium logo animation on app launch
- 📺 **Continue Watching:** Watch history persisted across sessions
- ⭐ **My List:** Save favorite movies for quick access
- ⚡ **Faster Loading:** Optimized splash screen (1.2s) and lazy loading
- <20> **Bug Fixes:** Fixed video playback, improved stability
**Previous (v1.1.0):**
- 📺 Native Android TV App with Leanback UI
- 🎮 ExoPlayer Integration for HLS streaming
- 🔍 Voice Search support
---
## 📺 Native Android TV App
A dedicated native Android TV app built with Google's **Leanback** library for the optimal TV experience.
### Features
| Feature | Description |
|---------|-------------|
| **Leanback UI** | Netflix-style horizontal rows with focus animations |
| **ExoPlayer** | High-quality HLS video streaming with buffering |
| **Voice Search** | Native Google voice search integration |
| **D-Pad Navigation** | Seamless remote control navigation |
| **Curated Home** | Personalized sections (Top Rated, New, Genres) |
| **Splash Screen** | Animated logo with premium launch experience |
| **Continue Watching** | Resume where you left off with watch history |
| **My List** | Save favorite movies for quick access |
### Downloads
- **[Download APK (v1.2.0)](https://github.com/vndangkhoa/Streamflow/releases/download/v1.2.0/StreamFlix-TV-v1.2.0-debug.apk)** - Direct Download
- **[All Releases](https://github.com/vndangkhoa/Streamflow/releases/tag/v1.2.0)** - View Release Page
### Installation
```bash
# Install via ADB
adb install StreamFlix-TV-v1.2.0-debug.apk
```
### Project Structure
```
android-tv/
├── app/src/main/java/com/streamflix/tv/
│ ├── data/
│ │ ├── api/ # Retrofit API client with HMAC auth
│ │ ├── model/ # Movie, ApiResponse models
│ │ ├── WatchHistoryManager.kt # Persistent watch history
│ │ └── MyListManager.kt # User favorites
│ └── ui/
│ ├── browse/ # Main browse screen (Leanback)
│ ├── details/ # Movie details with actions
│ ├── playback/ # ExoPlayer video playback
│ └── search/ # Voice + text search
├── SplashActivity.kt # Animated splash screen
└── gradle/
```
**Previous (v1.0.9):**
- 📱 GitHub Releases APK hosting
- 🎨 Updated Android launcher icon
---
@ -63,7 +112,7 @@ version: '3.8'
services:
# StreamFlow Unified (Backend + Frontend)
app:
image: vndangkhoa/streamflix:1.0.10
image: vndangkhoa/streamflix:1.1.0
platform: linux/amd64
ports:
- "3478:8000"
@ -105,6 +154,7 @@ services:
- **Backend Core**: FastAPI (Python 3.11), SQLAlchemy, Redis
- **Scraping Engine**: Playwright (Headless Chromium) & `aiohttp` for resilient data extraction
- **Frontend Engine**: Vanilla JS (ES6+), Vite, ArtPlayer.js
- **Android TV**: Kotlin, Leanback, ExoPlayer (Media3), Retrofit
- **Styling**: Modern CSS with deep backdrop filters and Liquid Glass design tokens
- **Architecture**: Multi-stage Docker Build (Debian-slim)

3
android-tv/.idea/.gitignore vendored Normal file
View file

@ -0,0 +1,3 @@
# Default ignored files
/shelf/
/workspace.xml

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="AndroidProjectSystem">
<option name="providerId" value="com.android.tools.idea.GradleProjectSystem" />
</component>
</project>

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,123 @@
<component name="ProjectCodeStyleConfiguration">
<code_scheme name="Project" version="173">
<JetCodeStyleSettings>
<option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
</JetCodeStyleSettings>
<codeStyleSettings language="XML">
<option name="FORCE_REARRANGE_MODE" value="1" />
<indentOptions>
<option name="CONTINUATION_INDENT_SIZE" value="4" />
</indentOptions>
<arrangement>
<rules>
<section>
<rule>
<match>
<AND>
<NAME>xmlns:android</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>xmlns:.*</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:id</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:name</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>name</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>style</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
<order>ANDROID_ATTRIBUTE_ORDER</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>.*</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
</rules>
</arrangement>
</codeStyleSettings>
<codeStyleSettings language="kotlin">
<option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
</codeStyleSettings>
</code_scheme>
</component>

View file

@ -0,0 +1,5 @@
<component name="ProjectCodeStyleConfiguration">
<state>
<option name="USE_PER_PROJECT_SETTINGS" value="true" />
</state>
</component>

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<bytecodeTargetLevel target="21" />
</component>
</project>

View file

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="GradleSettings">
<option name="linkedExternalProjectsSettings">
<GradleProjectSettings>
<option name="testRunner" value="CHOOSE_PER_TEST" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="gradleJvm" value="#GRADLE_LOCAL_JAVA_HOME" />
<option name="modules">
<set>
<option value="$PROJECT_DIR$" />
<option value="$PROJECT_DIR$/app" />
</set>
</option>
</GradleProjectSettings>
</option>
</component>
</project>

View file

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectMigrations">
<option name="MigrateToGradleLocalJavaHome">
<set>
<option value="$PROJECT_DIR$" />
</set>
</option>
</component>
</project>

10
android-tv/.idea/misc.xml Normal file
View file

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="ProjectRootManager" version="2" languageLevel="JDK_21">
<output url="file://$PROJECT_DIR$/build/classes" />
</component>
<component name="ProjectType">
<option name="id" value="Android" />
</component>
</project>

View file

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="RunConfigurationProducerService">
<option name="ignoredProducers">
<set>
<option value="com.intellij.execution.junit.AbstractAllInDirectoryConfigurationProducer" />
<option value="com.intellij.execution.junit.AllInPackageConfigurationProducer" />
<option value="com.intellij.execution.junit.PatternConfigurationProducer" />
<option value="com.intellij.execution.junit.TestInClassConfigurationProducer" />
<option value="com.intellij.execution.junit.UniqueIdConfigurationProducer" />
<option value="com.intellij.execution.junit.testDiscovery.JUnitTestDiscoveryConfigurationProducer" />
<option value="org.jetbrains.kotlin.idea.junit.KotlinJUnitRunConfigurationProducer" />
<option value="org.jetbrains.kotlin.idea.junit.KotlinPatternConfigurationProducer" />
</set>
</option>
</component>
</project>

6
android-tv/.idea/vcs.xml Normal file
View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$/.." vcs="Git" />
</component>
</project>

View file

@ -0,0 +1,81 @@
plugins {
id 'com.android.application'
id 'org.jetbrains.kotlin.android'
id 'org.jetbrains.kotlin.kapt'
}
android {
namespace 'com.streamflix.tv'
compileSdk 36
defaultConfig {
applicationId "com.streamflix.tv"
minSdk 23
targetSdk 36
versionCode 1
versionName "1.0.0"
// Backend API URL - StreamFlix server
buildConfigField "String", "API_BASE_URL", '"https://nf.khoavo.myds.me"'
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
debug {
minifyEnabled false
}
}
buildFeatures {
buildConfig true
viewBinding true
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget = '17'
}
}
dependencies {
// AndroidX Core
implementation 'androidx.core:core-ktx:1.17.0'
implementation 'androidx.appcompat:appcompat:1.7.1'
implementation 'androidx.activity:activity-ktx:1.12.2'
implementation 'androidx.fragment:fragment-ktx:1.8.9'
// Leanback (TV UI Framework)
implementation 'androidx.leanback:leanback:1.2.0'
implementation 'androidx.leanback:leanback-preference:1.2.0'
// Lifecycle & ViewModel
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.10.0'
implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.10.0'
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.10.0'
// Networking
implementation 'com.squareup.retrofit2:retrofit:3.0.0'
implementation 'com.squareup.retrofit2:converter-gson:3.0.0'
implementation 'com.squareup.okhttp3:okhttp:5.3.2'
implementation 'com.squareup.okhttp3:logging-interceptor:5.3.2'
// Image Loading
implementation 'com.github.bumptech.glide:glide:5.0.5'
kapt 'com.github.bumptech.glide:compiler:5.0.5'
// Coroutines
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.10.2'
// ExoPlayer (Video Playback with HLS support)
implementation 'androidx.media3:media3-exoplayer:1.9.0'
implementation 'androidx.media3:media3-exoplayer-hls:1.9.0'
implementation 'androidx.media3:media3-ui:1.9.0'
implementation 'androidx.media3:media3-ui-leanback:1.9.0'
}

View file

@ -0,0 +1,59 @@
// Generated by view binder compiler. Do not edit!
package com.streamflix.tv.databinding;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.viewbinding.ViewBinding;
import com.streamflix.tv.R;
import java.lang.NullPointerException;
import java.lang.Override;
public final class ActivityDetailsBinding implements ViewBinding {
@NonNull
private final FrameLayout rootView;
@NonNull
public final FrameLayout detailsFragment;
private ActivityDetailsBinding(@NonNull FrameLayout rootView,
@NonNull FrameLayout detailsFragment) {
this.rootView = rootView;
this.detailsFragment = detailsFragment;
}
@Override
@NonNull
public FrameLayout getRoot() {
return rootView;
}
@NonNull
public static ActivityDetailsBinding inflate(@NonNull LayoutInflater inflater) {
return inflate(inflater, null, false);
}
@NonNull
public static ActivityDetailsBinding inflate(@NonNull LayoutInflater inflater,
@Nullable ViewGroup parent, boolean attachToParent) {
View root = inflater.inflate(R.layout.activity_details, parent, false);
if (attachToParent) {
parent.addView(root);
}
return bind(root);
}
@NonNull
public static ActivityDetailsBinding bind(@NonNull View rootView) {
if (rootView == null) {
throw new NullPointerException("rootView");
}
FrameLayout detailsFragment = (FrameLayout) rootView;
return new ActivityDetailsBinding((FrameLayout) rootView, detailsFragment);
}
}

View file

@ -0,0 +1,59 @@
// Generated by view binder compiler. Do not edit!
package com.streamflix.tv.databinding;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.viewbinding.ViewBinding;
import com.streamflix.tv.R;
import java.lang.NullPointerException;
import java.lang.Override;
public final class ActivityMainBinding implements ViewBinding {
@NonNull
private final FrameLayout rootView;
@NonNull
public final FrameLayout mainBrowseFragment;
private ActivityMainBinding(@NonNull FrameLayout rootView,
@NonNull FrameLayout mainBrowseFragment) {
this.rootView = rootView;
this.mainBrowseFragment = mainBrowseFragment;
}
@Override
@NonNull
public FrameLayout getRoot() {
return rootView;
}
@NonNull
public static ActivityMainBinding inflate(@NonNull LayoutInflater inflater) {
return inflate(inflater, null, false);
}
@NonNull
public static ActivityMainBinding inflate(@NonNull LayoutInflater inflater,
@Nullable ViewGroup parent, boolean attachToParent) {
View root = inflater.inflate(R.layout.activity_main, parent, false);
if (attachToParent) {
parent.addView(root);
}
return bind(root);
}
@NonNull
public static ActivityMainBinding bind(@NonNull View rootView) {
if (rootView == null) {
throw new NullPointerException("rootView");
}
FrameLayout mainBrowseFragment = (FrameLayout) rootView;
return new ActivityMainBinding((FrameLayout) rootView, mainBrowseFragment);
}
}

View file

@ -0,0 +1,59 @@
// Generated by view binder compiler. Do not edit!
package com.streamflix.tv.databinding;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.viewbinding.ViewBinding;
import com.streamflix.tv.R;
import java.lang.NullPointerException;
import java.lang.Override;
public final class ActivityPlaybackBinding implements ViewBinding {
@NonNull
private final FrameLayout rootView;
@NonNull
public final FrameLayout playbackFragment;
private ActivityPlaybackBinding(@NonNull FrameLayout rootView,
@NonNull FrameLayout playbackFragment) {
this.rootView = rootView;
this.playbackFragment = playbackFragment;
}
@Override
@NonNull
public FrameLayout getRoot() {
return rootView;
}
@NonNull
public static ActivityPlaybackBinding inflate(@NonNull LayoutInflater inflater) {
return inflate(inflater, null, false);
}
@NonNull
public static ActivityPlaybackBinding inflate(@NonNull LayoutInflater inflater,
@Nullable ViewGroup parent, boolean attachToParent) {
View root = inflater.inflate(R.layout.activity_playback, parent, false);
if (attachToParent) {
parent.addView(root);
}
return bind(root);
}
@NonNull
public static ActivityPlaybackBinding bind(@NonNull View rootView) {
if (rootView == null) {
throw new NullPointerException("rootView");
}
FrameLayout playbackFragment = (FrameLayout) rootView;
return new ActivityPlaybackBinding((FrameLayout) rootView, playbackFragment);
}
}

View file

@ -0,0 +1,59 @@
// Generated by view binder compiler. Do not edit!
package com.streamflix.tv.databinding;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.viewbinding.ViewBinding;
import com.streamflix.tv.R;
import java.lang.NullPointerException;
import java.lang.Override;
public final class ActivitySearchBinding implements ViewBinding {
@NonNull
private final FrameLayout rootView;
@NonNull
public final FrameLayout searchFragment;
private ActivitySearchBinding(@NonNull FrameLayout rootView,
@NonNull FrameLayout searchFragment) {
this.rootView = rootView;
this.searchFragment = searchFragment;
}
@Override
@NonNull
public FrameLayout getRoot() {
return rootView;
}
@NonNull
public static ActivitySearchBinding inflate(@NonNull LayoutInflater inflater) {
return inflate(inflater, null, false);
}
@NonNull
public static ActivitySearchBinding inflate(@NonNull LayoutInflater inflater,
@Nullable ViewGroup parent, boolean attachToParent) {
View root = inflater.inflate(R.layout.activity_search, parent, false);
if (attachToParent) {
parent.addView(root);
}
return bind(root);
}
@NonNull
public static ActivitySearchBinding bind(@NonNull View rootView) {
if (rootView == null) {
throw new NullPointerException("rootView");
}
FrameLayout searchFragment = (FrameLayout) rootView;
return new ActivitySearchBinding((FrameLayout) rootView, searchFragment);
}
}

View file

@ -0,0 +1,91 @@
// Generated by view binder compiler. Do not edit!
package com.streamflix.tv.databinding;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.viewbinding.ViewBinding;
import androidx.viewbinding.ViewBindings;
import com.streamflix.tv.R;
import java.lang.NullPointerException;
import java.lang.Override;
import java.lang.String;
public final class ActivitySplashBinding implements ViewBinding {
@NonNull
private final FrameLayout rootView;
@NonNull
public final ImageView splashLogo;
@NonNull
public final TextView splashTagline;
@NonNull
public final TextView splashTitle;
private ActivitySplashBinding(@NonNull FrameLayout rootView, @NonNull ImageView splashLogo,
@NonNull TextView splashTagline, @NonNull TextView splashTitle) {
this.rootView = rootView;
this.splashLogo = splashLogo;
this.splashTagline = splashTagline;
this.splashTitle = splashTitle;
}
@Override
@NonNull
public FrameLayout getRoot() {
return rootView;
}
@NonNull
public static ActivitySplashBinding inflate(@NonNull LayoutInflater inflater) {
return inflate(inflater, null, false);
}
@NonNull
public static ActivitySplashBinding inflate(@NonNull LayoutInflater inflater,
@Nullable ViewGroup parent, boolean attachToParent) {
View root = inflater.inflate(R.layout.activity_splash, parent, false);
if (attachToParent) {
parent.addView(root);
}
return bind(root);
}
@NonNull
public static ActivitySplashBinding bind(@NonNull View rootView) {
// The body of this method is generated in a way you would not otherwise write.
// This is done to optimize the compiled bytecode for size and performance.
int id;
missingId: {
id = R.id.splash_logo;
ImageView splashLogo = ViewBindings.findChildViewById(rootView, id);
if (splashLogo == null) {
break missingId;
}
id = R.id.splash_tagline;
TextView splashTagline = ViewBindings.findChildViewById(rootView, id);
if (splashTagline == null) {
break missingId;
}
id = R.id.splash_title;
TextView splashTitle = ViewBindings.findChildViewById(rootView, id);
if (splashTitle == null) {
break missingId;
}
return new ActivitySplashBinding((FrameLayout) rootView, splashLogo, splashTagline,
splashTitle);
}
String missingId = rootView.getResources().getResourceName(id);
throw new NullPointerException("Missing required view with ID: ".concat(missingId));
}
}

View file

@ -0,0 +1,14 @@
/**
* Automatically generated file. DO NOT MODIFY
*/
package com.streamflix.tv;
public final class BuildConfig {
public static final boolean DEBUG = Boolean.parseBoolean("true");
public static final String APPLICATION_ID = "com.streamflix.tv";
public static final String BUILD_TYPE = "debug";
public static final int VERSION_CODE = 1;
public static final String VERSION_NAME = "1.0.0";
// Field from default config.
public static final String API_BASE_URL = "https://nf.khoavo.myds.me";
}

View file

@ -0,0 +1 @@
{"compiler-4.16.0.jar (com.github.bumptech.glide:compiler:4.16.0)":"INCREMENTAL_AP"}

View file

@ -0,0 +1 @@
{"compiler-5.0.5.jar (com.github.bumptech.glide:compiler:5.0.5)":"INCREMENTAL_AP"}

View file

@ -0,0 +1,21 @@
{
"version": 3,
"artifactType": {
"type": "APK",
"kind": "Directory"
},
"applicationId": "com.streamflix.tv",
"variantName": "debug",
"elements": [
{
"type": "SINGLE",
"filters": [],
"attributes": [],
"versionCode": 1,
"versionName": "1.0.0",
"outputFile": "app-debug.apk"
}
],
"elementType": "File",
"minSdkVersionForDexing": 24
}

View file

@ -0,0 +1,2 @@
#- File Locator -
listingFile=../../../apk/debug/output-metadata.json

View file

@ -0,0 +1,2 @@
appMetadataVersion=1.1
androidGradlePluginVersion=8.2.0

View file

@ -0,0 +1,2 @@
appMetadataVersion=1.1
androidGradlePluginVersion=8.13.2

View file

@ -0,0 +1,10 @@
{
"version": 3,
"artifactType": {
"type": "COMPATIBLE_SCREEN_MANIFEST",
"kind": "Directory"
},
"applicationId": "com.streamflix.tv",
"variantName": "debug",
"elements": []
}

View file

@ -0,0 +1,10 @@
{
"version": 3,
"artifactType": {
"type": "COMPATIBLE_SCREEN_MANIFEST",
"kind": "Directory"
},
"applicationId": "com.streamflix.tv",
"variantName": "debug",
"elements": []
}

View file

@ -0,0 +1 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?><Layout layout="activity_details" modulePackage="com.streamflix.tv" filePath="app\src\main\res\layout\activity_details.xml" directory="layout" isMerge="false" isBindingData="false" rootNodeType="android.widget.FrameLayout" rootNodeViewId="@+id/details_fragment"><Targets><Target id="@+id/details_fragment" tag="layout/activity_details_0" view="FrameLayout"><Expressions/><location startLine="1" startOffset="0" endLine="5" endOffset="44"/></Target></Targets></Layout>

View file

@ -0,0 +1 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?><Layout layout="activity_main" modulePackage="com.streamflix.tv" filePath="app\src\main\res\layout\activity_main.xml" directory="layout" isMerge="false" isBindingData="false" rootNodeType="android.widget.FrameLayout" rootNodeViewId="@+id/main_browse_fragment"><Targets><Target id="@+id/main_browse_fragment" tag="layout/activity_main_0" view="FrameLayout"><Expressions/><location startLine="1" startOffset="0" endLine="5" endOffset="44"/></Target></Targets></Layout>

View file

@ -0,0 +1 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?><Layout layout="activity_playback" modulePackage="com.streamflix.tv" filePath="app\src\main\res\layout\activity_playback.xml" directory="layout" isMerge="false" isBindingData="false" rootNodeType="android.widget.FrameLayout" rootNodeViewId="@+id/playback_fragment"><Targets><Target id="@+id/playback_fragment" tag="layout/activity_playback_0" view="FrameLayout"><Expressions/><location startLine="1" startOffset="0" endLine="5" endOffset="51"/></Target></Targets></Layout>

View file

@ -0,0 +1 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?><Layout layout="activity_search" modulePackage="com.streamflix.tv" filePath="app\src\main\res\layout\activity_search.xml" directory="layout" isMerge="false" isBindingData="false" rootNodeType="android.widget.FrameLayout" rootNodeViewId="@+id/search_fragment"><Targets><Target id="@+id/search_fragment" tag="layout/activity_search_0" view="FrameLayout"><Expressions/><location startLine="1" startOffset="0" endLine="5" endOffset="44"/></Target></Targets></Layout>

View file

@ -0,0 +1 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?><Layout layout="activity_splash" modulePackage="com.streamflix.tv" filePath="app\src\main\res\layout\activity_splash.xml" directory="layout" isMerge="false" isBindingData="false" rootNodeType="android.widget.FrameLayout"><Targets><Target tag="layout/activity_splash_0" view="FrameLayout"><Expressions/><location startLine="1" startOffset="0" endLine="44" endOffset="13"/></Target><Target id="@+id/splash_logo" view="ImageView"><Expressions/><location startLine="14" startOffset="8" endLine="19" endOffset="58"/></Target><Target id="@+id/splash_title" view="TextView"><Expressions/><location startLine="22" startOffset="8" endLine="30" endOffset="52"/></Target><Target id="@+id/splash_tagline" view="TextView"><Expressions/><location startLine="33" startOffset="8" endLine="40" endOffset="37"/></Target></Targets></Layout>

View file

@ -0,0 +1 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?><Layout layout="activity_details" modulePackage="com.streamflix.tv" filePath="app\src\main\res\layout\activity_details.xml" directory="layout" isMerge="false" isBindingData="false" rootNodeType="android.widget.FrameLayout" rootNodeViewId="@+id/details_fragment"><Targets><Target id="@+id/details_fragment" tag="layout/activity_details_0" view="FrameLayout"><Expressions/><location startLine="1" startOffset="0" endLine="5" endOffset="44"/></Target></Targets></Layout>

View file

@ -0,0 +1 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?><Layout layout="activity_main" modulePackage="com.streamflix.tv" filePath="app\src\main\res\layout\activity_main.xml" directory="layout" isMerge="false" isBindingData="false" rootNodeType="android.widget.FrameLayout" rootNodeViewId="@+id/main_browse_fragment"><Targets><Target id="@+id/main_browse_fragment" tag="layout/activity_main_0" view="FrameLayout"><Expressions/><location startLine="1" startOffset="0" endLine="5" endOffset="44"/></Target></Targets></Layout>

View file

@ -0,0 +1 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?><Layout layout="activity_playback" modulePackage="com.streamflix.tv" filePath="app\src\main\res\layout\activity_playback.xml" directory="layout" isMerge="false" isBindingData="false" rootNodeType="android.widget.FrameLayout" rootNodeViewId="@+id/playback_fragment"><Targets><Target id="@+id/playback_fragment" tag="layout/activity_playback_0" view="FrameLayout"><Expressions/><location startLine="1" startOffset="0" endLine="5" endOffset="51"/></Target></Targets></Layout>

View file

@ -0,0 +1 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?><Layout layout="activity_search" modulePackage="com.streamflix.tv" filePath="app\src\main\res\layout\activity_search.xml" directory="layout" isMerge="false" isBindingData="false" rootNodeType="android.widget.FrameLayout" rootNodeViewId="@+id/search_fragment"><Targets><Target id="@+id/search_fragment" tag="layout/activity_search_0" view="FrameLayout"><Expressions/><location startLine="1" startOffset="0" endLine="5" endOffset="44"/></Target></Targets></Layout>

View file

@ -0,0 +1 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?><Layout layout="activity_details" modulePackage="com.streamflix.tv" filePath="app\src\main\res\layout\activity_details.xml" directory="layout" isMerge="false" isBindingData="false" rootNodeType="android.widget.FrameLayout" rootNodeViewId="@+id/details_fragment"><Targets><Target id="@+id/details_fragment" tag="layout/activity_details_0" view="FrameLayout"><Expressions/><location startLine="1" startOffset="0" endLine="5" endOffset="44"/></Target></Targets></Layout>

View file

@ -0,0 +1 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?><Layout layout="activity_main" modulePackage="com.streamflix.tv" filePath="app\src\main\res\layout\activity_main.xml" directory="layout" isMerge="false" isBindingData="false" rootNodeType="android.widget.FrameLayout" rootNodeViewId="@+id/main_browse_fragment"><Targets><Target id="@+id/main_browse_fragment" tag="layout/activity_main_0" view="FrameLayout"><Expressions/><location startLine="1" startOffset="0" endLine="5" endOffset="44"/></Target></Targets></Layout>

View file

@ -0,0 +1 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?><Layout layout="activity_playback" modulePackage="com.streamflix.tv" filePath="app\src\main\res\layout\activity_playback.xml" directory="layout" isMerge="false" isBindingData="false" rootNodeType="android.widget.FrameLayout" rootNodeViewId="@+id/playback_fragment"><Targets><Target id="@+id/playback_fragment" tag="layout/activity_playback_0" view="FrameLayout"><Expressions/><location startLine="1" startOffset="0" endLine="5" endOffset="51"/></Target></Targets></Layout>

View file

@ -0,0 +1 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?><Layout layout="activity_search" modulePackage="com.streamflix.tv" filePath="app\src\main\res\layout\activity_search.xml" directory="layout" isMerge="false" isBindingData="false" rootNodeType="android.widget.FrameLayout" rootNodeViewId="@+id/search_fragment"><Targets><Target id="@+id/search_fragment" tag="layout/activity_search_0" view="FrameLayout"><Expressions/><location startLine="1" startOffset="0" endLine="5" endOffset="44"/></Target></Targets></Layout>

View file

@ -0,0 +1 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?><Layout layout="activity_details" modulePackage="com.streamflix.tv" filePath="app\src\main\res\layout\activity_details.xml" directory="layout" isMerge="false" isBindingData="false" rootNodeType="android.widget.FrameLayout" rootNodeViewId="@+id/details_fragment"><Targets><Target id="@+id/details_fragment" tag="layout/activity_details_0" view="FrameLayout"><Expressions/><location startLine="1" startOffset="0" endLine="5" endOffset="44"/></Target></Targets></Layout>

View file

@ -0,0 +1 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?><Layout layout="activity_main" modulePackage="com.streamflix.tv" filePath="app\src\main\res\layout\activity_main.xml" directory="layout" isMerge="false" isBindingData="false" rootNodeType="android.widget.FrameLayout" rootNodeViewId="@+id/main_browse_fragment"><Targets><Target id="@+id/main_browse_fragment" tag="layout/activity_main_0" view="FrameLayout"><Expressions/><location startLine="1" startOffset="0" endLine="5" endOffset="44"/></Target></Targets></Layout>

View file

@ -0,0 +1 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?><Layout layout="activity_playback" modulePackage="com.streamflix.tv" filePath="app\src\main\res\layout\activity_playback.xml" directory="layout" isMerge="false" isBindingData="false" rootNodeType="android.widget.FrameLayout" rootNodeViewId="@+id/playback_fragment"><Targets><Target id="@+id/playback_fragment" tag="layout/activity_playback_0" view="FrameLayout"><Expressions/><location startLine="1" startOffset="0" endLine="5" endOffset="51"/></Target></Targets></Layout>

View file

@ -0,0 +1 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?><Layout layout="activity_search" modulePackage="com.streamflix.tv" filePath="app\src\main\res\layout\activity_search.xml" directory="layout" isMerge="false" isBindingData="false" rootNodeType="android.widget.FrameLayout" rootNodeViewId="@+id/search_fragment"><Targets><Target id="@+id/search_fragment" tag="layout/activity_search_0" view="FrameLayout"><Expressions/><location startLine="1" startOffset="0" endLine="5" endOffset="44"/></Target></Targets></Layout>

View file

@ -0,0 +1 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?><Layout layout="activity_splash" modulePackage="com.streamflix.tv" filePath="app\src\main\res\layout\activity_splash.xml" directory="layout" isMerge="false" isBindingData="false" rootNodeType="android.widget.FrameLayout"><Targets><Target tag="layout/activity_splash_0" view="FrameLayout"><Expressions/><location startLine="1" startOffset="0" endLine="44" endOffset="13"/></Target><Target id="@+id/splash_logo" view="ImageView"><Expressions/><location startLine="14" startOffset="8" endLine="19" endOffset="58"/></Target><Target id="@+id/splash_title" view="TextView"><Expressions/><location startLine="22" startOffset="8" endLine="30" endOffset="52"/></Target><Target id="@+id/splash_tagline" view="TextView"><Expressions/><location startLine="33" startOffset="8" endLine="40" endOffset="37"/></Target></Targets></Layout>

View file

@ -0,0 +1 @@
[{"key":"META-INF/MANIFEST.MF","name":"META-INF/MANIFEST.MF","size":74,"crc":1112998917},{"key":"retrofit2/converter/gson/GsonRequestBodyConverter.class","name":"retrofit2/converter/gson/GsonRequestBodyConverter.class","size":3131,"crc":50547565},{"key":"retrofit2/converter/gson/GsonStreamingRequestBody.class","name":"retrofit2/converter/gson/GsonStreamingRequestBody.class","size":1512,"crc":-1861492101},{"key":"retrofit2/converter/gson/GsonConverterFactory.class","name":"retrofit2/converter/gson/GsonConverterFactory.class","size":2717,"crc":-1519560118},{"key":"retrofit2/converter/gson/package-info.class","name":"retrofit2/converter/gson/package-info.class","size":213,"crc":-992403999},{"key":"retrofit2/converter/gson/GsonResponseBodyConverter.class","name":"retrofit2/converter/gson/GsonResponseBodyConverter.class","size":2238,"crc":1302674763}]

View file

@ -0,0 +1 @@
[{"key":"androidx/viewbinding/ViewBinding.class","name":"androidx/viewbinding/ViewBinding.class","size":240,"crc":-1218689533},{"key":"androidx/viewbinding/ViewBindings.class","name":"androidx/viewbinding/ViewBindings.class","size":1150,"crc":2001315322},{"key":"META-INF/androidx.databinding_viewbinding.version","name":"META-INF/androidx.databinding_viewbinding.version","size":6,"crc":-1972360793}]

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1 @@
[{"key":"META-INF/androidx.activity_activity-ktx.version","name":"META-INF/androidx.activity_activity-ktx.version","size":7,"crc":1472946759}]

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1 @@
[{"key":"androidx/versionedparcelable/CustomVersionedParcelable.class","name":"androidx/versionedparcelable/CustomVersionedParcelable.class","size":915,"crc":-363159068},{"key":"androidx/versionedparcelable/NonParcelField.class","name":"androidx/versionedparcelable/NonParcelField.class","size":676,"crc":1361393714},{"key":"androidx/versionedparcelable/ParcelField.class","name":"androidx/versionedparcelable/ParcelField.class","size":762,"crc":-355164638},{"key":"androidx/versionedparcelable/ParcelImpl$1.class","name":"androidx/versionedparcelable/ParcelImpl$1.class","size":1191,"crc":-60532325},{"key":"androidx/versionedparcelable/ParcelImpl.class","name":"androidx/versionedparcelable/ParcelImpl.class","size":1979,"crc":1919067054},{"key":"androidx/versionedparcelable/ParcelUtils.class","name":"androidx/versionedparcelable/ParcelUtils.class","size":5523,"crc":-1129855369},{"key":"androidx/versionedparcelable/VersionedParcel$1.class","name":"androidx/versionedparcelable/VersionedParcel$1.class","size":1546,"crc":-1038307129},{"key":"androidx/versionedparcelable/VersionedParcel$ParcelException.class","name":"androidx/versionedparcelable/VersionedParcel$ParcelException.class","size":538,"crc":1830934000},{"key":"androidx/versionedparcelable/VersionedParcel.class","name":"androidx/versionedparcelable/VersionedParcel.class","size":29325,"crc":142272959},{"key":"androidx/versionedparcelable/VersionedParcelParcel.class","name":"androidx/versionedparcelable/VersionedParcelParcel.class","size":7429,"crc":-328586236},{"key":"androidx/versionedparcelable/VersionedParcelStream$1.class","name":"androidx/versionedparcelable/VersionedParcelStream$1.class","size":1613,"crc":1775874054},{"key":"androidx/versionedparcelable/VersionedParcelStream$FieldBuffer.class","name":"androidx/versionedparcelable/VersionedParcelStream$FieldBuffer.class","size":1288,"crc":1505456534},{"key":"androidx/versionedparcelable/VersionedParcelStream.class","name":"androidx/versionedparcelable/VersionedParcelStream.class","size":13823,"crc":-1859752855},{"key":"androidx/versionedparcelable/VersionedParcelable.class","name":"androidx/versionedparcelable/VersionedParcelable.class","size":148,"crc":752656910},{"key":"androidx/versionedparcelable/VersionedParcelize.class","name":"androidx/versionedparcelable/VersionedParcelize.class","size":964,"crc":886842821},{"key":"META-INF/androidx.versionedparcelable_versionedparcelable.version","name":"META-INF/androidx.versionedparcelable_versionedparcelable.version","size":6,"crc":1557790284}]

View file

@ -0,0 +1 @@
[{"key":"androidx/customview/poolingcontainer/PoolingContainer.class","name":"androidx/customview/poolingcontainer/PoolingContainer.class","size":5411,"crc":1218352752},{"key":"androidx/customview/poolingcontainer/PoolingContainerListener.class","name":"androidx/customview/poolingcontainer/PoolingContainerListener.class","size":572,"crc":1704627172},{"key":"androidx/customview/poolingcontainer/PoolingContainerListenerHolder.class","name":"androidx/customview/poolingcontainer/PoolingContainerListenerHolder.class","size":2033,"crc":-1869864933},{"key":"META-INF/androidx.customview_customview-poolingcontainer.version","name":"META-INF/androidx.customview_customview-poolingcontainer.version","size":6,"crc":-42031000},{"key":"META-INF/customview-poolingcontainer_release.kotlin_module","name":"META-INF/customview-poolingcontainer_release.kotlin_module","size":82,"crc":-469476031}]

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1 @@
[{"key":"META-INF/MANIFEST.MF","name":"META-INF/MANIFEST.MF","size":108,"crc":1316044605},{"key":"META-INF/maven/com.google.guava/listenablefuture/pom.xml","name":"META-INF/maven/com.google.guava/listenablefuture/pom.xml","size":2278,"crc":-995907463},{"key":"META-INF/maven/com.google.guava/listenablefuture/pom.properties","name":"META-INF/maven/com.google.guava/listenablefuture/pom.properties","size":134,"crc":-629924229}]

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1 @@
[{"key":"androidx/media3/ui/leanback/LeanbackPlayerAdapter$1.class","name":"androidx/media3/ui/leanback/LeanbackPlayerAdapter$1.class","size":267,"crc":-168594287},{"key":"androidx/media3/ui/leanback/LeanbackPlayerAdapter$PlayerListener.class","name":"androidx/media3/ui/leanback/LeanbackPlayerAdapter$PlayerListener.class","size":5107,"crc":-530037801},{"key":"androidx/media3/ui/leanback/LeanbackPlayerAdapter.class","name":"androidx/media3/ui/leanback/LeanbackPlayerAdapter.class","size":6590,"crc":-2009215651},{"key":"androidx/media3/ui/leanback/package-info.class","name":"androidx/media3/ui/leanback/package-info.class","size":218,"crc":823644272}]

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1 @@
[{"key":"META-INF/androidx.lifecycle_lifecycle-livedata-core-ktx.version","name":"META-INF/androidx.lifecycle_lifecycle-livedata-core-ktx.version","size":7,"crc":-31665453}]

View file

@ -0,0 +1 @@
[{"key":"META-INF/MANIFEST.MF","name":"META-INF/MANIFEST.MF","size":25,"crc":-301826126},{"key":"androidx/arch/core/internal/FastSafeIterableMap.class","name":"androidx/arch/core/internal/FastSafeIterableMap.class","size":2907,"crc":2116950419},{"key":"androidx/arch/core/internal/SafeIterableMap$AscendingIterator.class","name":"androidx/arch/core/internal/SafeIterableMap$AscendingIterator.class","size":1775,"crc":-347866117},{"key":"androidx/arch/core/internal/SafeIterableMap$DescendingIterator.class","name":"androidx/arch/core/internal/SafeIterableMap$DescendingIterator.class","size":1779,"crc":1644932214},{"key":"androidx/arch/core/internal/SafeIterableMap$Entry.class","name":"androidx/arch/core/internal/SafeIterableMap$Entry.class","size":2378,"crc":1824924906},{"key":"androidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions.class","name":"androidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions.class","size":2551,"crc":1452189535},{"key":"androidx/arch/core/internal/SafeIterableMap$ListIterator.class","name":"androidx/arch/core/internal/SafeIterableMap$ListIterator.class","size":2977,"crc":-1002357144},{"key":"androidx/arch/core/internal/SafeIterableMap$SupportRemove.class","name":"androidx/arch/core/internal/SafeIterableMap$SupportRemove.class","size":1208,"crc":1494321347},{"key":"androidx/arch/core/internal/SafeIterableMap.class","name":"androidx/arch/core/internal/SafeIterableMap.class","size":7303,"crc":1636361416},{"key":"androidx/arch/core/util/Function.class","name":"androidx/arch/core/util/Function.class","size":280,"crc":896912248}]

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1 @@
[{"key":"META-INF/MANIFEST.MF","name":"META-INF/MANIFEST.MF","size":659,"crc":-964657996},{"key":"META-INF/versions/9/OSGI-INF/MANIFEST.MF","name":"META-INF/versions/9/OSGI-INF/MANIFEST.MF","size":145,"crc":-2032555199},{"key":"META-INF/versions/9/module-info.class","name":"META-INF/versions/9/module-info.class","size":187,"crc":-1570101292},{"key":"org/jspecify/annotations/NonNull.class","name":"org/jspecify/annotations/NonNull.class","size":434,"crc":247355667},{"key":"org/jspecify/annotations/NullMarked.class","name":"org/jspecify/annotations/NullMarked.class","size":498,"crc":-1397769612},{"key":"org/jspecify/annotations/NullUnmarked.class","name":"org/jspecify/annotations/NullUnmarked.class","size":488,"crc":1023765034},{"key":"org/jspecify/annotations/Nullable.class","name":"org/jspecify/annotations/Nullable.class","size":436,"crc":-794114223}]

View file

@ -0,0 +1 @@
[{"key":"META-INF/androidx.lifecycle_lifecycle-livedata-ktx.version","name":"META-INF/androidx.lifecycle_lifecycle-livedata-ktx.version","size":7,"crc":-31665453}]

View file

@ -0,0 +1 @@
[{"key":"androidx/lifecycle/EmptyActivityLifecycleCallbacks.class","name":"androidx/lifecycle/EmptyActivityLifecycleCallbacks.class","size":2171,"crc":-1399262857},{"key":"androidx/lifecycle/LifecycleDispatcher$DispatcherActivityCallback.class","name":"androidx/lifecycle/LifecycleDispatcher$DispatcherActivityCallback.class","size":1649,"crc":-708890786},{"key":"androidx/lifecycle/LifecycleDispatcher.class","name":"androidx/lifecycle/LifecycleDispatcher.class","size":1966,"crc":-1443050188},{"key":"androidx/lifecycle/ProcessLifecycleInitializer.class","name":"androidx/lifecycle/ProcessLifecycleInitializer.class","size":3086,"crc":101263685},{"key":"androidx/lifecycle/ProcessLifecycleOwner$Api29Impl.class","name":"androidx/lifecycle/ProcessLifecycleOwner$Api29Impl.class","size":1687,"crc":-799258046},{"key":"androidx/lifecycle/ProcessLifecycleOwner$Companion.class","name":"androidx/lifecycle/ProcessLifecycleOwner$Companion.class","size":2005,"crc":171627555},{"key":"androidx/lifecycle/ProcessLifecycleOwner$attach$1$onActivityPreCreated$1.class","name":"androidx/lifecycle/ProcessLifecycleOwner$attach$1$onActivityPreCreated$1.class","size":1626,"crc":695325623},{"key":"androidx/lifecycle/ProcessLifecycleOwner$attach$1.class","name":"androidx/lifecycle/ProcessLifecycleOwner$attach$1.class","size":3186,"crc":-1170646171},{"key":"androidx/lifecycle/ProcessLifecycleOwner$initializationListener$1.class","name":"androidx/lifecycle/ProcessLifecycleOwner$initializationListener$1.class","size":1420,"crc":-238222058},{"key":"androidx/lifecycle/ProcessLifecycleOwner.class","name":"androidx/lifecycle/ProcessLifecycleOwner.class","size":6450,"crc":-1311709577},{"key":"META-INF/androidx.lifecycle_lifecycle-process.version","name":"META-INF/androidx.lifecycle_lifecycle-process.version","size":7,"crc":-31665453},{"key":"META-INF/lifecycle-process.kotlin_module","name":"META-INF/lifecycle-process.kotlin_module","size":24,"crc":-813369971}]

Some files were not shown because too many files have changed in this diff Show more