Initaler Commit
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
|
After Width: | Height: | Size: 231 KiB |
@@ -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>
|
||||
|
After Width: | Height: | Size: 605 KiB |
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
|
After Width: | Height: | Size: 231 KiB |
|
After Width: | Height: | Size: 231 KiB |
|
After Width: | Height: | Size: 231 KiB |
|
After Width: | Height: | Size: 231 KiB |
|
After Width: | Height: | Size: 231 KiB |
|
After Width: | Height: | Size: 231 KiB |
|
After Width: | Height: | Size: 231 KiB |
|
After Width: | Height: | Size: 231 KiB |
|
After Width: | Height: | Size: 231 KiB |
|
After Width: | Height: | Size: 231 KiB |
@@ -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>
|
||||