Private
Public Access
Plexamp Lite 1.14: Android 4.1 build with ExoPlayer, lyrics, home-screen widget
- One build per Android level, as in Tenda: build/PlexampLite.apk (Android 2.2+, versionCode 1508) and build/PlexampLite-api16.apk (Android 4.1+, 1516), from shared src/ plus platform/api8 or platform/api16. - Android 4.1 build: ExoPlayer 2.18.7 behind a small Engine interface (gapless hand-over to read-ahead and downloaded files, a longer buffer, MediaPlayer fallback for tracks it can't decode), a notification and lock screen with art and buttons, a resizable widget, Holo, a menu button without a Menu key, metered networks. R8 shrinks ExoPlayer and Guava (tools/fetch_exoplayer.sh, tools/r8-rules.pro). - Both builds: lyrics in Now Playing as in the Mac app (timed lyrics follow and seek), a home-screen widget, media play/pause keys, the moon icon drawn without clipPath. - PlexampLite-noreport on the SD card stops play reports, for tests against a real server. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
2e7476669e
commit
13f29e26c4
39 files changed
+1685
-119
No files matched your search
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- the widget's and the Android 4.1 notification's card -->
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<solid android:color="#F01D1D22" />
|
||||
<corners android:radius="6dp" />
|
||||
</shape>
|
||||
@@ -23,6 +23,7 @@
|
||||
android:layout_width="wrap_content" android:layout_height="wrap_content"
|
||||
android:textColor="@color/text" android:textSize="@dimen/text_sub" />
|
||||
</LinearLayout>
|
||||
<ImageButton android:id="@+id/np_lyrics_btn" style="@style/IconButton" android:contentDescription="@string/lyrics" />
|
||||
<ImageButton android:id="@+id/np_queue" style="@style/IconButton" />
|
||||
</LinearLayout>
|
||||
|
||||
@@ -41,6 +42,11 @@
|
||||
android:layout_height="match_parent"
|
||||
android:layout_gravity="center"
|
||||
android:scaleType="centerCrop" />
|
||||
<com.minamp.LyricsView
|
||||
android:id="@+id/np_lyrics"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:visibility="gone" />
|
||||
</FrameLayout>
|
||||
|
||||
<LinearLayout
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Home-screen widget (4x1) and the Android 4.1 notification. Only views RemoteViews allows; PlayerViews fills it. -->
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/rv_root"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="horizontal"
|
||||
android:gravity="center_vertical"
|
||||
android:background="@drawable/widget_bg"
|
||||
android:padding="4dp">
|
||||
|
||||
<ImageView android:id="@+id/rv_art"
|
||||
android:layout_width="56dp" android:layout_height="56dp"
|
||||
android:scaleType="centerCrop" android:src="@drawable/art_placeholder" />
|
||||
|
||||
<LinearLayout android:id="@+id/rv_text"
|
||||
android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1"
|
||||
android:orientation="vertical" android:gravity="center_vertical"
|
||||
android:paddingLeft="8dp" android:paddingRight="2dp">
|
||||
<TextView android:id="@+id/rv_title"
|
||||
android:layout_width="match_parent" android:layout_height="wrap_content"
|
||||
android:textColor="@color/text" android:textSize="@dimen/text_mini_title" android:textStyle="bold"
|
||||
android:singleLine="true" android:ellipsize="end" />
|
||||
<TextView android:id="@+id/rv_sub"
|
||||
android:layout_width="match_parent" android:layout_height="wrap_content"
|
||||
android:textColor="@color/text2" android:textSize="@dimen/text_mini_sub"
|
||||
android:singleLine="true" android:ellipsize="end" />
|
||||
</LinearLayout>
|
||||
|
||||
<ImageButton android:id="@+id/rv_prev" android:layout_width="38dp" android:layout_height="48dp"
|
||||
android:background="@drawable/bg_pressable_round" android:scaleType="center" android:contentDescription="@string/previous" />
|
||||
<ImageButton android:id="@+id/rv_toggle" android:layout_width="44dp" android:layout_height="48dp"
|
||||
android:background="@drawable/bg_pressable_round" android:scaleType="center" android:contentDescription="@string/play_pause" />
|
||||
<ImageButton android:id="@+id/rv_next" android:layout_width="38dp" android:layout_height="48dp"
|
||||
android:background="@drawable/bg_pressable_round" android:scaleType="center" android:contentDescription="@string/next" />
|
||||
<ImageButton android:id="@+id/rv_close" android:layout_width="34dp" android:layout_height="48dp"
|
||||
android:background="@drawable/bg_pressable_round" android:scaleType="center" android:contentDescription="@string/close"
|
||||
android:visibility="gone" />
|
||||
</LinearLayout>
|
||||
@@ -0,0 +1,53 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- The larger widget (Android 4.1+, when it's made two rows tall or more) and the expanded Android 4.1 notification. -->
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/rv_root"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="horizontal"
|
||||
android:background="@drawable/widget_bg"
|
||||
android:padding="6dp">
|
||||
|
||||
<ImageView android:id="@+id/rv_art"
|
||||
android:layout_width="112dp" android:layout_height="112dp"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:scaleType="centerCrop" android:src="@drawable/art_placeholder" />
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1"
|
||||
android:orientation="vertical" android:paddingLeft="10dp">
|
||||
|
||||
<LinearLayout android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1"
|
||||
android:orientation="horizontal">
|
||||
<LinearLayout android:id="@+id/rv_text"
|
||||
android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1"
|
||||
android:orientation="vertical" android:gravity="center_vertical">
|
||||
<TextView android:id="@+id/rv_title"
|
||||
android:layout_width="match_parent" android:layout_height="wrap_content"
|
||||
android:textColor="@color/text" android:textSize="@dimen/text_body" android:textStyle="bold"
|
||||
android:maxLines="2" android:ellipsize="end" />
|
||||
<TextView android:id="@+id/rv_sub"
|
||||
android:layout_width="match_parent" android:layout_height="wrap_content"
|
||||
android:textColor="@color/text2" android:textSize="@dimen/text_sub"
|
||||
android:singleLine="true" android:ellipsize="end" />
|
||||
<TextView android:id="@+id/rv_album"
|
||||
android:layout_width="match_parent" android:layout_height="wrap_content"
|
||||
android:textColor="@color/text2" android:textSize="@dimen/text_mini_sub"
|
||||
android:singleLine="true" android:ellipsize="end" />
|
||||
</LinearLayout>
|
||||
<ImageButton android:id="@+id/rv_close" android:layout_width="34dp" android:layout_height="34dp"
|
||||
android:background="@drawable/bg_pressable_round" android:scaleType="center"
|
||||
android:contentDescription="@string/close" android:visibility="gone" />
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout android:layout_width="match_parent" android:layout_height="48dp"
|
||||
android:orientation="horizontal" android:gravity="center">
|
||||
<ImageButton android:id="@+id/rv_prev" android:layout_width="0dp" android:layout_height="48dp" android:layout_weight="1"
|
||||
android:background="@drawable/bg_pressable_round" android:scaleType="center" android:contentDescription="@string/previous" />
|
||||
<ImageButton android:id="@+id/rv_toggle" android:layout_width="0dp" android:layout_height="48dp" android:layout_weight="1"
|
||||
android:background="@drawable/bg_pressable_round" android:scaleType="center" android:contentDescription="@string/play_pause" />
|
||||
<ImageButton android:id="@+id/rv_next" android:layout_width="0dp" android:layout_height="48dp" android:layout_weight="1"
|
||||
android:background="@drawable/bg_pressable_round" android:scaleType="center" android:contentDescription="@string/next" />
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
@@ -72,21 +72,26 @@
|
||||
<string name="loading_albums">Loading albums…</string>
|
||||
<string name="loading_artists">Loading artists…</string>
|
||||
<string name="loading_libraries">Loading libraries…</string>
|
||||
<string name="loading_lyrics">Loading lyrics…</string>
|
||||
<string name="loading_playlists">Loading playlists…</string>
|
||||
<string name="log_empty">Nothing logged yet.</string>
|
||||
<string name="love">Add to favourites</string>
|
||||
<string name="loved">Added to favourites</string>
|
||||
<string name="loved_radio">Favourites radio</string>
|
||||
<string name="loved_radio_sub">Your top rated</string>
|
||||
<string name="lyrics">Lyrics</string>
|
||||
<string name="lyrics_failed">Couldn\'t load the lyrics</string>
|
||||
<string name="min">%1$d min</string>
|
||||
<string name="music">Music</string>
|
||||
<string name="n_albums">%1$d albums</string>
|
||||
<string name="n_albums_one">%1$d album</string>
|
||||
<string name="n_tracks">%1$d tracks</string>
|
||||
<string name="n_tracks_one">%1$d track</string>
|
||||
<string name="next">Next</string>
|
||||
<string name="no_albums">No albums</string>
|
||||
<string name="no_albums_library">No albums in this library</string>
|
||||
<string name="no_artists_library">No artists in this library</string>
|
||||
<string name="no_lyrics">No lyrics for this track</string>
|
||||
<string name="no_music_libraries">%1$s has no music libraries</string>
|
||||
<string name="no_playlists">No music playlists yet</string>
|
||||
<string name="no_sd">No SD card available</string>
|
||||
@@ -117,12 +122,14 @@
|
||||
<string name="play">Play</string>
|
||||
<string name="play_all">Play all</string>
|
||||
<string name="play_next">Play next</string>
|
||||
<string name="play_pause">Play or pause</string>
|
||||
<string name="playback_error">Playback error (%1$d/%2$d)</string>
|
||||
<string name="playing_from">PLAYING FROM</string>
|
||||
<string name="playing_next">Playing next</string>
|
||||
<string name="playing_x">Playing %1$s</string>
|
||||
<string name="playlist">Playlist</string>
|
||||
<string name="plex_server">Plex server</string>
|
||||
<string name="previous">Previous</string>
|
||||
<string name="quality_away_title">Quality away / mobile</string>
|
||||
<string name="quality_bt_title">Quality over Bluetooth</string>
|
||||
<string name="quality_home_title">Quality at home</string>
|
||||
@@ -237,5 +244,6 @@
|
||||
<string name="unlove">Remove from favourites</string>
|
||||
<string name="unloved">Removed from favourites</string>
|
||||
<string name="up_next">Queue</string>
|
||||
<string name="widget_name">Plexamp Lite player</string>
|
||||
<string name="you">you</string>
|
||||
</resources>
|
||||
@@ -19,6 +19,8 @@
|
||||
<dimen name="text_mini_sub">13sp</dimen>
|
||||
<dimen name="text_card_title">13sp</dimen>
|
||||
<dimen name="text_log">11sp</dimen>
|
||||
<dimen name="text_lyrics">19sp</dimen> <!-- timed lyrics in Now Playing -->
|
||||
<dimen name="text_lyrics_plain">16sp</dimen> <!-- plain-text lyrics -->
|
||||
|
||||
<!-- touch targets and bars -->
|
||||
<dimen name="touch">48dp</dimen>
|
||||
|
||||
@@ -72,21 +72,26 @@
|
||||
<string name="loading_albums">Cargando álbums…</string>
|
||||
<string name="loading_artists">Cargando artistas…</string>
|
||||
<string name="loading_libraries">Cargando bibliotecas…</string>
|
||||
<string name="loading_lyrics">Cargando a letra…</string>
|
||||
<string name="loading_playlists">Cargando listas…</string>
|
||||
<string name="log_empty">Aínda non hai nada no rexistro.</string>
|
||||
<string name="love">Engadir a favoritas</string>
|
||||
<string name="loved">Engadida a favoritas</string>
|
||||
<string name="loved_radio">Radio de favoritas</string>
|
||||
<string name="loved_radio_sub">As mellor valoradas</string>
|
||||
<string name="lyrics">Letra</string>
|
||||
<string name="lyrics_failed">Non se puido cargar a letra</string>
|
||||
<string name="min">%1$d min</string>
|
||||
<string name="music">Música</string>
|
||||
<string name="n_albums">%1$d álbums</string>
|
||||
<string name="n_albums_one">%1$d álbum</string>
|
||||
<string name="n_tracks">%1$d pistas</string>
|
||||
<string name="n_tracks_one">%1$d pista</string>
|
||||
<string name="next">Seguinte</string>
|
||||
<string name="no_albums">Non hai álbums</string>
|
||||
<string name="no_albums_library">Esta biblioteca non ten álbums</string>
|
||||
<string name="no_artists_library">Esta biblioteca non ten artistas</string>
|
||||
<string name="no_lyrics">Esta pista non ten letra</string>
|
||||
<string name="no_music_libraries">%1$s non ten bibliotecas de música</string>
|
||||
<string name="no_playlists">Aínda non hai listas de música</string>
|
||||
<string name="no_sd">Non hai tarxeta SD dispoñible</string>
|
||||
@@ -117,12 +122,14 @@
|
||||
<string name="play">Reproducir</string>
|
||||
<string name="play_all">Reproducir</string>
|
||||
<string name="play_next">Reproducir a continuación</string>
|
||||
<string name="play_pause">Reproducir ou pausar</string>
|
||||
<string name="playback_error">Erro de reprodución (%1$d/%2$d)</string>
|
||||
<string name="playing_from">REPRODUCINDO DESDE</string>
|
||||
<string name="playing_next">Soará a continuación</string>
|
||||
<string name="playing_x">Reproducindo %1$s</string>
|
||||
<string name="playlist">Lista de reprodución</string>
|
||||
<string name="plex_server">Servidor Plex</string>
|
||||
<string name="previous">Anterior</string>
|
||||
<string name="quality_away_title">Calidade fóra / datos móbiles</string>
|
||||
<string name="quality_bt_title">Calidade por Bluetooth</string>
|
||||
<string name="quality_home_title">Calidade na casa</string>
|
||||
@@ -237,5 +244,6 @@
|
||||
<string name="unlove">Quitar de favoritas</string>
|
||||
<string name="unloved">Quitada de favoritas</string>
|
||||
<string name="up_next">Cola</string>
|
||||
<string name="widget_name">Reprodutor de Plexamp Lite</string>
|
||||
<string name="you">ti</string>
|
||||
</resources>
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<style name="AppTheme" parent="@android:style/Theme.NoTitleBar">
|
||||
<style name="AppTheme" parent="@style/BaseTheme">
|
||||
<item name="android:windowBackground">@color/bg</item>
|
||||
<item name="android:textColor">@color/text</item>
|
||||
<item name="android:textColorPrimary">@color/text</item>
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- The Android look the app's theme (styles.xml) builds on. The Android 4.1 build replaces this file
|
||||
(platform/api16/res/values) with Holo, for Android 4's dialogs, spinners and text fields. -->
|
||||
<resources>
|
||||
<style name="BaseTheme" parent="@android:style/Theme.NoTitleBar" />
|
||||
</resources>
|
||||
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- 4x1 on both Android 2.x (74n-2 dp cells) and 4.x (70n-30 dp). The Android 4.1 build replaces this file
|
||||
(platform/api16/res/xml) to make the widget resizable. -->
|
||||
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:minWidth="250dp"
|
||||
android:minHeight="40dp"
|
||||
android:updatePeriodMillis="0"
|
||||
android:initialLayout="@layout/widget_player" />
|
||||
Reference in new issue
Block a user