Initaler Commit

This commit is contained in:
2026-05-03 21:53:03 +02:00
commit b37b162662
634 changed files with 73932 additions and 0 deletions

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.

View File

Binary file not shown.

View File

@@ -0,0 +1,2 @@
#Mon Apr 20 16:26:14 CEST 2026
gradle.version=9.0-milestone-1

Binary file not shown.

View File

@@ -0,0 +1,2 @@
#Mon Apr 20 16:26:08 CEST 2026
java.home=/opt/android-studio-2025.2.3/android-studio/jbr

BIN
.gradle/file-system.probe Normal file

Binary file not shown.

View File

3
.idea/.gitignore generated vendored Normal file
View File

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

6
.idea/AndroidProjectSystem.xml generated Normal file
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>

1670
.idea/caches/deviceStreaming.xml generated Normal file

File diff suppressed because it is too large Load Diff

6
.idea/compiler.xml generated Normal file
View File

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

10
.idea/deploymentTargetSelector.xml generated Normal file
View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="deploymentTargetSelector">
<selectionStates>
<SelectionState runConfigName="app">
<option name="selectionMode" value="DROPDOWN" />
</SelectionState>
</selectionStates>
</component>
</project>

19
.idea/gradle.xml generated Normal file
View File

@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="GradleMigrationSettings" migrationVersion="1" />
<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
.idea/migrations.xml generated Normal file
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>

9
.idea/misc.xml generated Normal file
View File

@@ -0,0 +1,9 @@
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="ProjectRootManager" version="2" languageLevel="JDK_21" default="true" project-jdk-name="jbr-21" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" />
</component>
<component name="ProjectType">
<option name="id" value="Android" />
</component>
</project>

17
.idea/runConfigurations.xml generated Normal file
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>

58
app/build.gradle Normal file
View File

@@ -0,0 +1,58 @@
plugins {
id 'com.android.application'
}
android {
namespace 'de.libredeck.android'
compileSdk 34
defaultConfig {
applicationId "de.libredeck.android"
minSdk 26
targetSdk 34
versionCode 1
versionName "0.1.0"
buildConfigField "String", "BACKEND_URL", "\"${LIBREDECK_BACKEND_URL ?: 'http://10.0.2.2:8080'}\""
}
buildTypes {
release {
minifyEnabled false
}
}
buildFeatures {
buildConfig true
viewBinding true
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_11
targetCompatibility JavaVersion.VERSION_11
}
}
dependencies {
// UI
implementation 'androidx.appcompat:appcompat:1.7.0'
implementation 'com.google.android.material:material:1.12.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
implementation 'androidx.recyclerview:recyclerview:1.3.2'
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
// Camera + QR scanning
implementation 'androidx.camera:camera-core:1.3.3'
implementation 'androidx.camera:camera-camera2:1.3.3'
implementation 'androidx.camera:camera-lifecycle:1.3.3'
implementation 'androidx.camera:camera-view:1.3.3'
implementation 'com.google.mlkit:barcode-scanning:17.2.0'
implementation 'com.google.guava:guava:32.1.3-android'
// HTTP + JSON
implementation 'com.squareup.okhttp3:okhttp:4.12.0'
implementation 'com.google.code.gson:gson:2.10.1'
// Image loading
implementation 'com.github.bumptech.glide:glide:4.16.0'
}

View File

@@ -0,0 +1,79 @@
// Generated by view binder compiler. Do not edit!
package de.libredeck.android.databinding;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.viewbinding.ViewBinding;
import androidx.viewbinding.ViewBindings;
import com.google.android.material.button.MaterialButton;
import de.libredeck.android.R;
import java.lang.NullPointerException;
import java.lang.Override;
import java.lang.String;
public final class ActivityDeezerAuthBinding implements ViewBinding {
@NonNull
private final LinearLayout rootView;
@NonNull
public final MaterialButton btnCancel;
@NonNull
public final MaterialButton btnOpenDeezerLogin;
private ActivityDeezerAuthBinding(@NonNull LinearLayout rootView,
@NonNull MaterialButton btnCancel, @NonNull MaterialButton btnOpenDeezerLogin) {
this.rootView = rootView;
this.btnCancel = btnCancel;
this.btnOpenDeezerLogin = btnOpenDeezerLogin;
}
@Override
@NonNull
public LinearLayout getRoot() {
return rootView;
}
@NonNull
public static ActivityDeezerAuthBinding inflate(@NonNull LayoutInflater inflater) {
return inflate(inflater, null, false);
}
@NonNull
public static ActivityDeezerAuthBinding inflate(@NonNull LayoutInflater inflater,
@Nullable ViewGroup parent, boolean attachToParent) {
View root = inflater.inflate(R.layout.activity_deezer_auth, parent, false);
if (attachToParent) {
parent.addView(root);
}
return bind(root);
}
@NonNull
public static ActivityDeezerAuthBinding 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.btnCancel;
MaterialButton btnCancel = ViewBindings.findChildViewById(rootView, id);
if (btnCancel == null) {
break missingId;
}
id = R.id.btnOpenDeezerLogin;
MaterialButton btnOpenDeezerLogin = ViewBindings.findChildViewById(rootView, id);
if (btnOpenDeezerLogin == null) {
break missingId;
}
return new ActivityDeezerAuthBinding((LinearLayout) rootView, btnCancel, btnOpenDeezerLogin);
}
String missingId = rootView.getResources().getResourceName(id);
throw new NullPointerException("Missing required view with ID: ".concat(missingId));
}
}

View File

@@ -0,0 +1,91 @@
// Generated by view binder compiler. Do not edit!
package de.libredeck.android.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.google.android.material.button.MaterialButton;
import de.libredeck.android.R;
import java.lang.NullPointerException;
import java.lang.Override;
import java.lang.String;
public final class ActivityMainBinding implements ViewBinding {
@NonNull
private final FrameLayout rootView;
@NonNull
public final MaterialButton btnStart;
@NonNull
public final ImageView ivLogo;
@NonNull
public final TextView tvCreateLink;
private ActivityMainBinding(@NonNull FrameLayout rootView, @NonNull MaterialButton btnStart,
@NonNull ImageView ivLogo, @NonNull TextView tvCreateLink) {
this.rootView = rootView;
this.btnStart = btnStart;
this.ivLogo = ivLogo;
this.tvCreateLink = tvCreateLink;
}
@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) {
// 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.btnStart;
MaterialButton btnStart = ViewBindings.findChildViewById(rootView, id);
if (btnStart == null) {
break missingId;
}
id = R.id.ivLogo;
ImageView ivLogo = ViewBindings.findChildViewById(rootView, id);
if (ivLogo == null) {
break missingId;
}
id = R.id.tvCreateLink;
TextView tvCreateLink = ViewBindings.findChildViewById(rootView, id);
if (tvCreateLink == null) {
break missingId;
}
return new ActivityMainBinding((FrameLayout) rootView, btnStart, ivLogo, tvCreateLink);
}
String missingId = rootView.getResources().getResourceName(id);
throw new NullPointerException("Missing required view with ID: ".concat(missingId));
}
}

View File

@@ -0,0 +1,114 @@
// Generated by view binder compiler. Do not edit!
package de.libredeck.android.databinding;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.ProgressBar;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.RecyclerView;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
import androidx.viewbinding.ViewBinding;
import androidx.viewbinding.ViewBindings;
import de.libredeck.android.R;
import java.lang.NullPointerException;
import java.lang.Override;
import java.lang.String;
public final class ActivityPlaylistBinding implements ViewBinding {
@NonNull
private final FrameLayout rootView;
@NonNull
public final ProgressBar progressBar;
@NonNull
public final RecyclerView recyclerPlaylists;
@NonNull
public final SwipeRefreshLayout swipeRefresh;
@NonNull
public final TextView tvEmpty;
@NonNull
public final TextView tvLoadingMsg;
private ActivityPlaylistBinding(@NonNull FrameLayout rootView, @NonNull ProgressBar progressBar,
@NonNull RecyclerView recyclerPlaylists, @NonNull SwipeRefreshLayout swipeRefresh,
@NonNull TextView tvEmpty, @NonNull TextView tvLoadingMsg) {
this.rootView = rootView;
this.progressBar = progressBar;
this.recyclerPlaylists = recyclerPlaylists;
this.swipeRefresh = swipeRefresh;
this.tvEmpty = tvEmpty;
this.tvLoadingMsg = tvLoadingMsg;
}
@Override
@NonNull
public FrameLayout getRoot() {
return rootView;
}
@NonNull
public static ActivityPlaylistBinding inflate(@NonNull LayoutInflater inflater) {
return inflate(inflater, null, false);
}
@NonNull
public static ActivityPlaylistBinding inflate(@NonNull LayoutInflater inflater,
@Nullable ViewGroup parent, boolean attachToParent) {
View root = inflater.inflate(R.layout.activity_playlist, parent, false);
if (attachToParent) {
parent.addView(root);
}
return bind(root);
}
@NonNull
public static ActivityPlaylistBinding 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.progressBar;
ProgressBar progressBar = ViewBindings.findChildViewById(rootView, id);
if (progressBar == null) {
break missingId;
}
id = R.id.recyclerPlaylists;
RecyclerView recyclerPlaylists = ViewBindings.findChildViewById(rootView, id);
if (recyclerPlaylists == null) {
break missingId;
}
id = R.id.swipeRefresh;
SwipeRefreshLayout swipeRefresh = ViewBindings.findChildViewById(rootView, id);
if (swipeRefresh == null) {
break missingId;
}
id = R.id.tvEmpty;
TextView tvEmpty = ViewBindings.findChildViewById(rootView, id);
if (tvEmpty == null) {
break missingId;
}
id = R.id.tvLoadingMsg;
TextView tvLoadingMsg = ViewBindings.findChildViewById(rootView, id);
if (tvLoadingMsg == null) {
break missingId;
}
return new ActivityPlaylistBinding((FrameLayout) rootView, progressBar, recyclerPlaylists,
swipeRefresh, tvEmpty, tvLoadingMsg);
}
String missingId = rootView.getResources().getResourceName(id);
throw new NullPointerException("Missing required view with ID: ".concat(missingId));
}
}

View File

@@ -0,0 +1,113 @@
// Generated by view binder compiler. Do not edit!
package de.libredeck.android.databinding;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.camera.view.PreviewView;
import androidx.viewbinding.ViewBinding;
import androidx.viewbinding.ViewBindings;
import com.google.android.material.button.MaterialButton;
import de.libredeck.android.R;
import java.lang.NullPointerException;
import java.lang.Override;
import java.lang.String;
public final class ActivityScanBinding implements ViewBinding {
@NonNull
private final FrameLayout rootView;
@NonNull
public final MaterialButton btnCancel;
@NonNull
public final MaterialButton btnNextCard;
@NonNull
public final LinearLayout layoutHint;
@NonNull
public final FrameLayout overlaySuccess;
@NonNull
public final PreviewView previewView;
private ActivityScanBinding(@NonNull FrameLayout rootView, @NonNull MaterialButton btnCancel,
@NonNull MaterialButton btnNextCard, @NonNull LinearLayout layoutHint,
@NonNull FrameLayout overlaySuccess, @NonNull PreviewView previewView) {
this.rootView = rootView;
this.btnCancel = btnCancel;
this.btnNextCard = btnNextCard;
this.layoutHint = layoutHint;
this.overlaySuccess = overlaySuccess;
this.previewView = previewView;
}
@Override
@NonNull
public FrameLayout getRoot() {
return rootView;
}
@NonNull
public static ActivityScanBinding inflate(@NonNull LayoutInflater inflater) {
return inflate(inflater, null, false);
}
@NonNull
public static ActivityScanBinding inflate(@NonNull LayoutInflater inflater,
@Nullable ViewGroup parent, boolean attachToParent) {
View root = inflater.inflate(R.layout.activity_scan, parent, false);
if (attachToParent) {
parent.addView(root);
}
return bind(root);
}
@NonNull
public static ActivityScanBinding 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.btnCancel;
MaterialButton btnCancel = ViewBindings.findChildViewById(rootView, id);
if (btnCancel == null) {
break missingId;
}
id = R.id.btnNextCard;
MaterialButton btnNextCard = ViewBindings.findChildViewById(rootView, id);
if (btnNextCard == null) {
break missingId;
}
id = R.id.layoutHint;
LinearLayout layoutHint = ViewBindings.findChildViewById(rootView, id);
if (layoutHint == null) {
break missingId;
}
id = R.id.overlaySuccess;
FrameLayout overlaySuccess = ViewBindings.findChildViewById(rootView, id);
if (overlaySuccess == null) {
break missingId;
}
id = R.id.previewView;
PreviewView previewView = ViewBindings.findChildViewById(rootView, id);
if (previewView == null) {
break missingId;
}
return new ActivityScanBinding((FrameLayout) rootView, btnCancel, btnNextCard, layoutHint,
overlaySuccess, previewView);
}
String missingId = rootView.getResources().getResourceName(id);
throw new NullPointerException("Missing required view with ID: ".concat(missingId));
}
}

View File

@@ -0,0 +1,90 @@
// Generated by view binder compiler. Do not edit!
package de.libredeck.android.databinding;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
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.google.android.material.card.MaterialCardView;
import de.libredeck.android.R;
import java.lang.NullPointerException;
import java.lang.Override;
import java.lang.String;
public final class ItemPlaylistBinding implements ViewBinding {
@NonNull
private final MaterialCardView rootView;
@NonNull
public final ImageView ivCover;
@NonNull
public final TextView tvCount;
@NonNull
public final TextView tvTitle;
private ItemPlaylistBinding(@NonNull MaterialCardView rootView, @NonNull ImageView ivCover,
@NonNull TextView tvCount, @NonNull TextView tvTitle) {
this.rootView = rootView;
this.ivCover = ivCover;
this.tvCount = tvCount;
this.tvTitle = tvTitle;
}
@Override
@NonNull
public MaterialCardView getRoot() {
return rootView;
}
@NonNull
public static ItemPlaylistBinding inflate(@NonNull LayoutInflater inflater) {
return inflate(inflater, null, false);
}
@NonNull
public static ItemPlaylistBinding inflate(@NonNull LayoutInflater inflater,
@Nullable ViewGroup parent, boolean attachToParent) {
View root = inflater.inflate(R.layout.item_playlist, parent, false);
if (attachToParent) {
parent.addView(root);
}
return bind(root);
}
@NonNull
public static ItemPlaylistBinding 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.ivCover;
ImageView ivCover = ViewBindings.findChildViewById(rootView, id);
if (ivCover == null) {
break missingId;
}
id = R.id.tvCount;
TextView tvCount = ViewBindings.findChildViewById(rootView, id);
if (tvCount == null) {
break missingId;
}
id = R.id.tvTitle;
TextView tvTitle = ViewBindings.findChildViewById(rootView, id);
if (tvTitle == null) {
break missingId;
}
return new ItemPlaylistBinding((MaterialCardView) rootView, ivCover, tvCount, tvTitle);
}
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 de.libredeck.android;
public final class BuildConfig {
public static final boolean DEBUG = Boolean.parseBoolean("true");
public static final String APPLICATION_ID = "de.libredeck.android";
public static final String BUILD_TYPE = "debug";
public static final int VERSION_CODE = 1;
public static final String VERSION_NAME = "0.1.0";
// Field from default config.
public static final String BACKEND_URL = "http://192.168.178.106:8091";
}

Binary file not shown.

View File

@@ -0,0 +1,21 @@
{
"version": 3,
"artifactType": {
"type": "APK",
"kind": "Directory"
},
"applicationId": "de.libredeck.android",
"variantName": "debug",
"elements": [
{
"type": "SINGLE",
"filters": [],
"attributes": [],
"versionCode": 1,
"versionName": "0.1.0",
"outputFile": "app-debug.apk"
}
],
"elementType": "File",
"minSdkVersionForDexing": 26
}

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.3.2

View File

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

View File

@@ -0,0 +1 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?><Layout layout="activity_deezer_auth" modulePackage="de.libredeck.android" filePath="app/src/main/res/layout/activity_deezer_auth.xml" directory="layout" isMerge="false" isBindingData="false" rootNodeType="android.widget.LinearLayout"><Targets><Target tag="layout/activity_deezer_auth_0" view="LinearLayout"><Expressions/><location startLine="1" startOffset="0" endLine="43" endOffset="14"/></Target><Target id="@+id/btnOpenDeezerLogin" view="com.google.android.material.button.MaterialButton"><Expressions/><location startLine="27" startOffset="4" endLine="34" endOffset="47"/></Target><Target id="@+id/btnCancel" view="com.google.android.material.button.MaterialButton"><Expressions/><location startLine="36" startOffset="4" endLine="41" endOffset="58"/></Target></Targets></Layout>

View File

@@ -0,0 +1 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?><Layout layout="activity_main" modulePackage="de.libredeck.android" filePath="app/src/main/res/layout/activity_main.xml" directory="layout" isMerge="false" isBindingData="false" rootNodeType="android.widget.FrameLayout"><Targets><Target tag="layout/activity_main_0" view="FrameLayout"><Expressions/><location startLine="1" startOffset="0" endLine="75" endOffset="13"/></Target><Target id="@+id/ivLogo" view="ImageView"><Expressions/><location startLine="24" startOffset="8" endLine="31" endOffset="56"/></Target><Target id="@+id/btnStart" view="com.google.android.material.button.MaterialButton"><Expressions/><location startLine="33" startOffset="8" endLine="40" endOffset="41"/></Target><Target id="@+id/tvCreateLink" view="TextView"><Expressions/><location startLine="62" startOffset="8" endLine="71" endOffset="37"/></Target></Targets></Layout>

View File

@@ -0,0 +1 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?><Layout layout="activity_playlist" modulePackage="de.libredeck.android" filePath="app/src/main/res/layout/activity_playlist.xml" directory="layout" isMerge="false" isBindingData="false" rootNodeType="android.widget.FrameLayout"><Targets><Target tag="layout/activity_playlist_0" view="FrameLayout"><Expressions/><location startLine="1" startOffset="0" endLine="45" endOffset="13"/></Target><Target id="@+id/swipeRefresh" view="androidx.swiperefreshlayout.widget.SwipeRefreshLayout"><Expressions/><location startLine="6" startOffset="4" endLine="18" endOffset="59"/></Target><Target id="@+id/recyclerPlaylists" view="androidx.recyclerview.widget.RecyclerView"><Expressions/><location startLine="11" startOffset="8" endLine="16" endOffset="34"/></Target><Target id="@+id/tvEmpty" view="TextView"><Expressions/><location startLine="20" startOffset="4" endLine="27" endOffset="34"/></Target><Target id="@+id/progressBar" view="ProgressBar"><Expressions/><location startLine="29" startOffset="4" endLine="34" endOffset="34"/></Target><Target id="@+id/tvLoadingMsg" view="TextView"><Expressions/><location startLine="36" startOffset="4" endLine="43" endOffset="34"/></Target></Targets></Layout>

View File

@@ -0,0 +1 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?><Layout layout="activity_scan" modulePackage="de.libredeck.android" filePath="app/src/main/res/layout/activity_scan.xml" directory="layout" isMerge="false" isBindingData="false" rootNodeType="android.widget.FrameLayout"><Targets><Target tag="layout/activity_scan_0" view="FrameLayout"><Expressions/><location startLine="1" startOffset="0" endLine="90" endOffset="13"/></Target><Target id="@+id/previewView" view="androidx.camera.view.PreviewView"><Expressions/><location startLine="8" startOffset="4" endLine="11" endOffset="45"/></Target><Target id="@+id/layoutHint" view="LinearLayout"><Expressions/><location startLine="14" startOffset="4" endLine="49" endOffset="18"/></Target><Target id="@+id/btnCancel" view="com.google.android.material.button.MaterialButton"><Expressions/><location startLine="35" startOffset="8" endLine="47" endOffset="66"/></Target><Target id="@+id/overlaySuccess" view="FrameLayout"><Expressions/><location startLine="52" startOffset="4" endLine="88" endOffset="17"/></Target><Target id="@+id/btnNextCard" view="com.google.android.material.button.MaterialButton"><Expressions/><location startLine="76" startOffset="12" endLine="84" endOffset="41"/></Target></Targets></Layout>

View File

@@ -0,0 +1 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?><Layout layout="item_playlist" modulePackage="de.libredeck.android" filePath="app/src/main/res/layout/item_playlist.xml" directory="layout" isMerge="false" isBindingData="false" rootNodeType="com.google.android.material.card.MaterialCardView"><Targets><Target tag="layout/item_playlist_0" view="com.google.android.material.card.MaterialCardView"><Expressions/><location startLine="1" startOffset="0" endLine="61" endOffset="51"/></Target><Target id="@+id/ivCover" view="ImageView"><Expressions/><location startLine="19" startOffset="8" endLine="24" endOffset="43"/></Target><Target id="@+id/tvTitle" view="TextView"><Expressions/><location startLine="34" startOffset="12" endLine="42" endOffset="40"/></Target><Target id="@+id/tvCount" view="TextView"><Expressions/><location startLine="44" startOffset="12" endLine="50" endOffset="47"/></Target></Targets></Layout>

View File

@@ -0,0 +1 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?><Layout layout="activity_deezer_auth" modulePackage="de.libredeck.android" filePath="app/src/main/res/layout/activity_deezer_auth.xml" directory="layout" isMerge="false" isBindingData="false" rootNodeType="android.widget.LinearLayout"><Targets><Target tag="layout/activity_deezer_auth_0" view="LinearLayout"><Expressions/><location startLine="1" startOffset="0" endLine="43" endOffset="14"/></Target><Target id="@+id/btnOpenDeezerLogin" view="com.google.android.material.button.MaterialButton"><Expressions/><location startLine="27" startOffset="4" endLine="34" endOffset="47"/></Target><Target id="@+id/btnCancel" view="com.google.android.material.button.MaterialButton"><Expressions/><location startLine="36" startOffset="4" endLine="41" endOffset="58"/></Target></Targets></Layout>

View File

@@ -0,0 +1 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?><Layout layout="activity_main" modulePackage="de.libredeck.android" filePath="app/src/main/res/layout/activity_main.xml" directory="layout" isMerge="false" isBindingData="false" rootNodeType="android.widget.FrameLayout"><Targets><Target tag="layout/activity_main_0" view="FrameLayout"><Expressions/><location startLine="1" startOffset="0" endLine="75" endOffset="13"/></Target><Target id="@+id/ivLogo" view="ImageView"><Expressions/><location startLine="24" startOffset="8" endLine="31" endOffset="56"/></Target><Target id="@+id/btnStart" view="com.google.android.material.button.MaterialButton"><Expressions/><location startLine="33" startOffset="8" endLine="40" endOffset="41"/></Target><Target id="@+id/tvCreateLink" view="TextView"><Expressions/><location startLine="62" startOffset="8" endLine="71" endOffset="37"/></Target></Targets></Layout>

View File

@@ -0,0 +1 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?><Layout layout="activity_playlist" modulePackage="de.libredeck.android" filePath="app/src/main/res/layout/activity_playlist.xml" directory="layout" isMerge="false" isBindingData="false" rootNodeType="android.widget.FrameLayout"><Targets><Target tag="layout/activity_playlist_0" view="FrameLayout"><Expressions/><location startLine="1" startOffset="0" endLine="45" endOffset="13"/></Target><Target id="@+id/swipeRefresh" view="androidx.swiperefreshlayout.widget.SwipeRefreshLayout"><Expressions/><location startLine="6" startOffset="4" endLine="18" endOffset="59"/></Target><Target id="@+id/recyclerPlaylists" view="androidx.recyclerview.widget.RecyclerView"><Expressions/><location startLine="11" startOffset="8" endLine="16" endOffset="34"/></Target><Target id="@+id/tvEmpty" view="TextView"><Expressions/><location startLine="20" startOffset="4" endLine="27" endOffset="34"/></Target><Target id="@+id/progressBar" view="ProgressBar"><Expressions/><location startLine="29" startOffset="4" endLine="34" endOffset="34"/></Target><Target id="@+id/tvLoadingMsg" view="TextView"><Expressions/><location startLine="36" startOffset="4" endLine="43" endOffset="34"/></Target></Targets></Layout>

View File

@@ -0,0 +1 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?><Layout layout="activity_scan" modulePackage="de.libredeck.android" filePath="app/src/main/res/layout/activity_scan.xml" directory="layout" isMerge="false" isBindingData="false" rootNodeType="android.widget.FrameLayout"><Targets><Target tag="layout/activity_scan_0" view="FrameLayout"><Expressions/><location startLine="1" startOffset="0" endLine="90" endOffset="13"/></Target><Target id="@+id/previewView" view="androidx.camera.view.PreviewView"><Expressions/><location startLine="8" startOffset="4" endLine="11" endOffset="45"/></Target><Target id="@+id/layoutHint" view="LinearLayout"><Expressions/><location startLine="14" startOffset="4" endLine="49" endOffset="18"/></Target><Target id="@+id/btnCancel" view="com.google.android.material.button.MaterialButton"><Expressions/><location startLine="35" startOffset="8" endLine="47" endOffset="66"/></Target><Target id="@+id/overlaySuccess" view="FrameLayout"><Expressions/><location startLine="52" startOffset="4" endLine="88" endOffset="17"/></Target><Target id="@+id/btnNextCard" view="com.google.android.material.button.MaterialButton"><Expressions/><location startLine="76" startOffset="12" endLine="84" endOffset="41"/></Target></Targets></Layout>

View File

@@ -0,0 +1 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?><Layout layout="item_playlist" modulePackage="de.libredeck.android" filePath="app/src/main/res/layout/item_playlist.xml" directory="layout" isMerge="false" isBindingData="false" rootNodeType="com.google.android.material.card.MaterialCardView"><Targets><Target tag="layout/item_playlist_0" view="com.google.android.material.card.MaterialCardView"><Expressions/><location startLine="1" startOffset="0" endLine="61" endOffset="51"/></Target><Target id="@+id/ivCover" view="ImageView"><Expressions/><location startLine="19" startOffset="8" endLine="24" endOffset="43"/></Target><Target id="@+id/tvTitle" view="TextView"><Expressions/><location startLine="34" startOffset="12" endLine="42" endOffset="40"/></Target><Target id="@+id/tvCount" view="TextView"><Expressions/><location startLine="44" startOffset="12" endLine="50" endOffset="47"/></Target></Targets></Layout>

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