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

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:startColor="#1A9AAA"
android:endColor="#46C14A"
android:angle="135"
android:type="linear"/>
<corners android:radius="10dp"/>
</shape>

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#00000000"/>
<stroke android:width="1dp" android:color="#2A4E54"/>
<corners android:radius="10dp"/>
</shape>

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#101C1E"/>
<stroke android:width="1dp" android:color="#1C3236"/>
<corners android:radius="14dp"/>
</shape>

View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<gradient
android:type="radial"
android:gradientRadius="160dp"
android:startColor="#1A9AAA"
android:endColor="#00000000"/>
</shape>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#CC080D0E"/>
<corners android:topLeftRadius="14dp" android:topRightRadius="14dp"/>
</shape>

View File

@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@android:color/transparent"
android:pathData="M9,18l6,-6-6,-6"
android:strokeColor="#888899"
android:strokeWidth="2"
android:strokeLineCap="round"
android:strokeLineJoin="round"/>
</vector>

Binary file not shown.

After

Width:  |  Height:  |  Size: 231 KiB

View File

@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="56dp"
android:height="56dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#2E2E3E"
android:pathData="M0,0h24v24H0z"/>
<path
android:fillColor="#888899"
android:pathData="M12,3v10.55c-0.59-0.34-1.27-0.55-2-0.55c-2.21,0-4,1.79-4,4s1.79,4,4,4s4-1.79,4-4V7h4V3h-6z"/>
</vector>

Binary file not shown.

After

Width:  |  Height:  |  Size: 605 KiB

View File

@@ -0,0 +1,44 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center"
android:padding="32dp"
android:background="@color/bg">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Mit Deezer anmelden"
android:textSize="22sp"
android:textStyle="bold"
android:textColor="@color/text"
android:layout_marginBottom="16dp"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Um auf deine Playlists zugreifen zu können, musst du dich bei Deezer anmelden. Du wirst in deinem Browser weitergeleitet."
android:textColor="@color/text_muted"
android:textSize="14sp"
android:gravity="center"
android:layout_marginBottom="40dp"/>
<com.google.android.material.button.MaterialButton
android:id="@+id/btnOpenDeezerLogin"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Mit Deezer anmelden"
android:padding="16dp"
android:layout_marginBottom="12dp"
style="@style/Widget.Material3.Button"/>
<com.google.android.material.button.MaterialButton
android:id="@+id/btnCancel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Abbrechen"
style="@style/Widget.Material3.Button.TextButton"/>
</LinearLayout>

View File

@@ -0,0 +1,76 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/bg">
<!-- Subtle radial glow top-right, matching the web hero -->
<View
android:layout_width="320dp"
android:layout_height="320dp"
android:layout_gravity="top|end"
android:background="@drawable/bg_glow_teal"
android:alpha="0.18"/>
<!-- Centre content: logo + start button -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:orientation="vertical"
android:gravity="center"
android:paddingLeft="40dp"
android:paddingRight="40dp">
<ImageView
android:id="@+id/ivLogo"
android:layout_width="200dp"
android:layout_height="200dp"
android:src="@drawable/logo"
android:scaleType="fitCenter"
android:layout_marginBottom="48dp"
android:contentDescription="LibreDeck Logo"/>
<com.google.android.material.button.MaterialButton
android:id="@+id/btnStart"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Starten"
android:textSize="17sp"
android:paddingTop="18dp"
android:paddingBottom="18dp"/>
</LinearLayout>
<!-- Bottom link -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom|center_horizontal"
android:orientation="vertical"
android:gravity="center"
android:paddingBottom="32dp"
android:paddingTop="16dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Neue Decks erstellen?"
android:textColor="@color/text_dim"
android:textSize="13sp"
android:layout_marginBottom="4dp"/>
<TextView
android:id="@+id/tvCreateLink"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="libredeck.langhei.de"
android:textColor="@color/accent"
android:textSize="14sp"
android:textStyle="bold"
android:clickable="true"
android:focusable="true"/>
</LinearLayout>
</FrameLayout>

View File

@@ -0,0 +1,46 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/bg">
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:id="@+id/swipeRefresh"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerPlaylists"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipToPadding="false"
android:padding="8dp"/>
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
<TextView
android:id="@+id/tvEmpty"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="Keine Playlists gefunden"
android:textColor="@color/text_muted"
android:visibility="gone"/>
<ProgressBar
android:id="@+id/progressBar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:visibility="gone"/>
<TextView
android:id="@+id/tvLoadingMsg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="72dp"
android:textColor="@color/text_muted"
android:visibility="gone"/>
</FrameLayout>

View File

@@ -0,0 +1,91 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/bg">
<!-- Camera preview (fills screen) -->
<androidx.camera.view.PreviewView
android:id="@+id/previewView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<!-- Scanning hint bar at bottom -->
<LinearLayout
android:id="@+id/layoutHint"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:background="@drawable/bg_scan_hint"
android:orientation="vertical"
android:gravity="center"
android:paddingLeft="32dp"
android:paddingRight="32dp"
android:paddingTop="24dp"
android:paddingBottom="32dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="QR-Code auf die Karte halten"
android:textColor="@color/text_muted"
android:textSize="15sp"
android:layout_marginBottom="20dp"/>
<com.google.android.material.button.MaterialButton
android:id="@+id/btnCancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Abbrechen"
android:textColor="@color/text_muted"
android:paddingTop="12dp"
android:paddingBottom="12dp"
android:paddingLeft="28dp"
android:paddingRight="28dp"
app:backgroundTint="@null"
android:background="@drawable/bg_button_outline"
style="@style/Widget.Material3.Button.OutlinedButton"/>
</LinearLayout>
<!-- Success overlay shown after successful scan -->
<FrameLayout
android:id="@+id/overlaySuccess"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#F0080D0E"
android:visibility="gone">
<!-- Glow behind button -->
<View
android:layout_width="280dp"
android:layout_height="280dp"
android:layout_gravity="center"
android:background="@drawable/bg_glow_teal"
android:alpha="0.25"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:orientation="vertical"
android:gravity="center"
android:paddingLeft="40dp"
android:paddingRight="40dp">
<com.google.android.material.button.MaterialButton
android:id="@+id/btnNextCard"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Nächste Karte"
android:textSize="17sp"
android:paddingTop="20dp"
android:paddingBottom="20dp"
android:minWidth="240dp"/>
</LinearLayout>
</FrameLayout>
</FrameLayout>

View File

@@ -0,0 +1,62 @@
<?xml version="1.0" encoding="utf-8"?>
<com.google.android.material.card.MaterialCardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="6dp"
app:cardBackgroundColor="@color/surface"
app:cardCornerRadius="12dp"
app:strokeColor="@color/border"
app:strokeWidth="1dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="12dp"
android:gravity="center_vertical">
<ImageView
android:id="@+id/ivCover"
android:layout_width="56dp"
android:layout_height="56dp"
android:scaleType="centerCrop"
android:background="@color/bg"/>
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical"
android:paddingStart="12dp"
android:paddingEnd="8dp">
<TextView
android:id="@+id/tvTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@color/text"
android:textSize="15sp"
android:textStyle="bold"
android:maxLines="2"
android:ellipsize="end"/>
<TextView
android:id="@+id/tvCount"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/text_muted"
android:textSize="12sp"
android:layout_marginTop="2dp"/>
</LinearLayout>
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:src="@drawable/ic_arrow_right"
android:tint="@color/accent"/>
</LinearLayout>
</com.google.android.material.card.MaterialCardView>

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/bg"/>
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
</adaptive-icon>

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/bg"/>
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
</adaptive-icon>

Binary file not shown.

After

Width:  |  Height:  |  Size: 231 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 231 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 231 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 231 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 231 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 231 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 231 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 231 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 231 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 231 KiB

View File

@@ -0,0 +1,59 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:ns1="http://schemas.android.com/tools">
<color name="accent">#1A9AAA</color>
<color name="bg">#080D0E</color>
<color name="bg_2">#0C1415</color>
<color name="border">#1C3236</color>
<color name="border_h">#2A4E54</color>
<color name="green">#46C14A</color>
<color name="green_h">#55D659</color>
<color name="surface">#101C1E</color>
<color name="surface_2">#162224</color>
<color name="teal">#1A9AAA</color>
<color name="teal_dark">#136E7A</color>
<color name="teal_h">#22B5C8</color>
<color name="text">#DFF0F2</color>
<color name="text_dim">#3A6068</color>
<color name="text_muted">#6E9EA6</color>
<color name="white">#FFFFFF</color>
<string name="app_name">libredeck</string>
<style name="Theme.Libredeck" parent="Theme.Material3.DayNight.NoActionBar">
<item name="colorPrimary">@color/teal</item>
<item name="colorPrimaryVariant">@color/teal_dark</item>
<item name="colorSecondary">@color/green</item>
<item name="colorOnPrimary">@color/white</item>
<item name="android:colorBackground">@color/bg</item>
<item name="colorSurface">@color/surface</item>
<item name="colorOnSurface">@color/text</item>
<item name="colorOutline">@color/border</item>
<item name="android:statusBarColor">@color/bg</item>
<item name="android:navigationBarColor">@color/bg</item>
<item name="android:windowLightStatusBar">false</item>
<item name="android:windowLightNavigationBar" ns1:targetApi="o_mr1">false</item>
<item name="materialButtonStyle">@style/Widget.Libredeck.Button</item>
<item name="borderlessButtonStyle">@style/Widget.Libredeck.Button.Text</item>
</style>
<style name="Widget.Libredeck.Button" parent="Widget.Material3.Button">
<item name="android:background">@drawable/bg_button_gradient</item>
<item name="android:textColor">@color/white</item>
<item name="android:textStyle">bold</item>
<item name="android:textSize">15sp</item>
<item name="android:letterSpacing">0.01</item>
<item name="backgroundTint">@null</item>
<item name="iconTint">@color/white</item>
<item name="rippleColor">@color/teal_dark</item>
<item name="android:insetTop">0dp</item>
<item name="android:insetBottom">0dp</item>
<item name="android:paddingTop">16dp</item>
<item name="android:paddingBottom">16dp</item>
<item name="cornerRadius">10dp</item>
<item name="elevation">0dp</item>
</style>
<style name="Widget.Libredeck.Button.Text" parent="Widget.Material3.Button.TextButton">
<item name="android:textColor">@color/text_muted</item>
<item name="android:textSize">13sp</item>
<item name="backgroundTint">@null</item>
</style>
</resources>