v1.2.0: Android TV - Splash screen, Watch history, My List
This commit is contained in:
parent
8253ff5b7a
commit
bdbdd1652d
1203 changed files with 79038 additions and 13 deletions
76
README.md
76
README.md
|
|
@ -2,23 +2,72 @@
|
|||
|
||||
[](https://hub.docker.com/r/vndangkhoa/streamflix)
|
||||
[](https://github.com/vndangkhoa/Streamflow)
|
||||
[](https://github.com/vndangkhoa/Streamflow/releases)
|
||||
[](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
3
android-tv/.idea/.gitignore
vendored
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
# Default ignored files
|
||||
/shelf/
|
||||
/workspace.xml
|
||||
6
android-tv/.idea/AndroidProjectSystem.xml
Normal file
6
android-tv/.idea/AndroidProjectSystem.xml
Normal 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>
|
||||
1186
android-tv/.idea/caches/deviceStreaming.xml
Normal file
1186
android-tv/.idea/caches/deviceStreaming.xml
Normal file
File diff suppressed because it is too large
Load diff
123
android-tv/.idea/codeStyles/Project.xml
Normal file
123
android-tv/.idea/codeStyles/Project.xml
Normal 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>
|
||||
5
android-tv/.idea/codeStyles/codeStyleConfig.xml
Normal file
5
android-tv/.idea/codeStyles/codeStyleConfig.xml
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
<component name="ProjectCodeStyleConfiguration">
|
||||
<state>
|
||||
<option name="USE_PER_PROJECT_SETTINGS" value="true" />
|
||||
</state>
|
||||
</component>
|
||||
6
android-tv/.idea/compiler.xml
Normal file
6
android-tv/.idea/compiler.xml
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="CompilerConfiguration">
|
||||
<bytecodeTargetLevel target="21" />
|
||||
</component>
|
||||
</project>
|
||||
18
android-tv/.idea/gradle.xml
Normal file
18
android-tv/.idea/gradle.xml
Normal 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>
|
||||
10
android-tv/.idea/migrations.xml
Normal file
10
android-tv/.idea/migrations.xml
Normal 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
10
android-tv/.idea/misc.xml
Normal 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>
|
||||
17
android-tv/.idea/runConfigurations.xml
Normal file
17
android-tv/.idea/runConfigurations.xml
Normal 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
6
android-tv/.idea/vcs.xml
Normal 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>
|
||||
81
android-tv/app/build.gradle
Normal file
81
android-tv/app/build.gradle
Normal 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'
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
|
@ -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";
|
||||
}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"compiler-4.16.0.jar (com.github.bumptech.glide:compiler:4.16.0)":"INCREMENTAL_AP"}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"compiler-5.0.5.jar (com.github.bumptech.glide:compiler:5.0.5)":"INCREMENTAL_AP"}
|
||||
BIN
android-tv/app/build/intermediates/apk/debug/app-debug.apk
Normal file
BIN
android-tv/app/build/intermediates/apk/debug/app-debug.apk
Normal file
Binary file not shown.
|
|
@ -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
|
||||
}
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
#- File Locator -
|
||||
listingFile=../../../apk/debug/output-metadata.json
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
appMetadataVersion=1.1
|
||||
androidGradlePluginVersion=8.2.0
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
appMetadataVersion=1.1
|
||||
androidGradlePluginVersion=8.13.2
|
||||
Binary file not shown.
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"version": 3,
|
||||
"artifactType": {
|
||||
"type": "COMPATIBLE_SCREEN_MANIFEST",
|
||||
"kind": "Directory"
|
||||
},
|
||||
"applicationId": "com.streamflix.tv",
|
||||
"variantName": "debug",
|
||||
"elements": []
|
||||
}
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"version": 3,
|
||||
"artifactType": {
|
||||
"type": "COMPATIBLE_SCREEN_MANIFEST",
|
||||
"kind": "Directory"
|
||||
},
|
||||
"applicationId": "com.streamflix.tv",
|
||||
"variantName": "debug",
|
||||
"elements": []
|
||||
}
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -0,0 +1 @@
|
|||
6
|
||||
Binary file not shown.
Binary file not shown.
|
|
@ -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}]
|
||||
|
|
@ -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
|
|
@ -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
|
|
@ -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}]
|
||||
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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}]
|
||||
|
|
@ -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
|
|
@ -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}]
|
||||
|
|
@ -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}]
|
||||
|
|
@ -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
Loading…
Reference in a new issue