diff --git a/app/build.gradle b/app/build.gradle
index 8388683a..799e1dd1 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -44,12 +44,12 @@ android {
}
}
}
- compileSdkVersion 22
- buildToolsVersion '22.0.1'
+ compileSdkVersion 23
+ buildToolsVersion '23.0.0'
defaultConfig {
applicationId "com.kabouzeid.gramophone"
minSdkVersion 16
- targetSdkVersion 22
+ targetSdkVersion 23
versionCode 64
versionName "0.9.43 beta5"
}
@@ -75,14 +75,14 @@ dependencies {
compile('com.crashlytics.sdk.android:crashlytics:2.5.1@aar') {
transitive = true;
}
- compile 'com.android.support:support-v4:22.2.1'
- compile 'com.android.support:support-v13:22.2.1'
- compile 'com.android.support:appcompat-v7:22.2.1'
- compile 'com.android.support:recyclerview-v7:22.2.1'
- compile 'com.android.support:cardview-v7:22.2.1'
- compile 'com.android.support:palette-v7:22.2.1'
- compile 'com.android.support:design:22.2.1'
- compile 'com.android.support:support-annotations:22.2.1'
+ compile 'com.android.support:support-v4:23.0.0'
+ compile 'com.android.support:support-v13:23.0.0'
+ compile 'com.android.support:appcompat-v7:23.0.0'
+ compile 'com.android.support:recyclerview-v7:23.0.0'
+ compile 'com.android.support:cardview-v7:23.0.0'
+ compile 'com.android.support:palette-v7:23.0.0'
+ compile 'com.android.support:design:23.0.0'
+ compile 'com.android.support:support-annotations:23.0.0'
compile 'com.github.ksoichiro:android-observablescrollview:1.5.2'
compile 'asia.ivity.android:drag-sort-listview:1.0'
diff --git a/app/src/main/assets/changelog.html b/app/src/main/assets/changelog.html
index 247dd329..19218355 100644
--- a/app/src/main/assets/changelog.html
+++ b/app/src/main/assets/changelog.html
@@ -25,6 +25,13 @@
You can view the changelog dialog again at any time from the about section.
+Version 0.9.43 beta5
+
+
+ - IMPROVEMENT: The sliding panel should open and close a bit smoother now..
+
+
+
Version 0.9.43 beta4
diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsSlidingMusicPanelActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsSlidingMusicPanelActivity.java
index dc405015..a410aaae 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsSlidingMusicPanelActivity.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsSlidingMusicPanelActivity.java
@@ -3,6 +3,7 @@ package com.kabouzeid.gramophone.ui.activities.base;
import android.animation.Animator;
import android.animation.AnimatorSet;
import android.animation.ArgbEvaluator;
+import android.animation.ObjectAnimator;
import android.annotation.SuppressLint;
import android.content.ComponentName;
import android.content.Intent;
@@ -25,6 +26,7 @@ import android.support.v4.util.Pair;
import android.support.v7.graphics.Palette;
import android.support.v7.widget.CardView;
import android.support.v7.widget.Toolbar;
+import android.util.Property;
import android.util.TypedValue;
import android.view.GestureDetector;
import android.view.MenuItem;
@@ -88,6 +90,7 @@ public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivi
private static final int FAB_CIRCULAR_REVEAL_ANIMATION_TIME = 1000;
private static final long DEFAULT_PROGRESS_VIEW_REFRESH_INTERVAL = 500;
private static final int CMD_REFRESH_PROGRESS_VIEWS = 1;
+ private static final int SLIDING_PANEL_ANIMATION_STEPS = 1000;
@Bind(R.id.play_pause_fab)
FloatingActionButton playPauseButton;
@@ -165,7 +168,12 @@ public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivi
private AnimatorSet colorTransitionAnimator;
- private ArgbEvaluator argbEvaluator = new ArgbEvaluator();
+ private ObjectAnimator fabXAnimator;
+ private ObjectAnimator fabYAnimator;
+ private ObjectAnimator fabColorAnimator;
+ private int lastFabStartColor;
+ private int lastFabEndColor;
+ private ObjectAnimator miniPlayerAlphaAnimator;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -333,13 +341,7 @@ public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivi
private void setUpPlayPauseButtonTint() {
int fabColor = colorPlaybackControls && slidingUpPanelLayout.getPanelState() == SlidingUpPanelLayout.PanelState.EXPANDED ? lastPlaybackControlsColor : getThemeColorAccent();
- setPlayPauseButtonTint(fabColor);
- }
-
- private void setPlayPauseButtonTint(int color) {
- int fabDrawableColor = ColorUtil.getDrawableColorForBackground(this, color);
- playPauseButton.setBackgroundTintList(ColorStateList.valueOf(color));
- playPauseButton.getDrawable().setColorFilter(fabDrawableColor, PorterDuff.Mode.SRC_IN);
+ FloatingActionButtonProperty.FAB_COLOR.set(playPauseButton, fabColor);
}
private void setUpMiniPlayer() {
@@ -394,16 +396,16 @@ public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivi
@Override
public void onPanelSlide(View view, float slideOffset) {
- float xTranslation = (dummyFab.getX() + mediaControllerContainer.getX() + footerFrame.getX() - playPauseButton.getLeft()) * slideOffset;
- float yTranslation = (dummyFab.getY() + mediaControllerContainer.getY() + footerFrame.getY() - playPauseButton.getTop()) * slideOffset;
+ initFabXAnimatorIfNecessary();
+ initFabYAnimatorIfNecessary();
+ initFabColorAnimatorIfNecessary();
+ initMiniPlayerAlphaAnimatorIfNecessary();
- playPauseButton.setTranslationX(xTranslation);
- playPauseButton.setTranslationY(yTranslation);
-
- miniPlayer.setAlpha(1 - slideOffset);
-
- int newColor = colorPlaybackControls ? (int) argbEvaluator.evaluate(slideOffset, getThemeColorAccent(), lastPlaybackControlsColor) : getThemeColorAccent();
- setPlayPauseButtonTint(newColor);
+ int durationProgress = (int) (SLIDING_PANEL_ANIMATION_STEPS * slideOffset);
+ fabXAnimator.setCurrentPlayTime(durationProgress);
+ fabYAnimator.setCurrentPlayTime(durationProgress);
+ fabColorAnimator.setCurrentPlayTime(durationProgress);
+ miniPlayerAlphaAnimator.setCurrentPlayTime(durationProgress);
}
@Override
@@ -449,6 +451,52 @@ public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivi
}
+ private void initFabXAnimatorIfNecessary() {
+ if (fabXAnimator == null) {
+ float xTranslation = dummyFab.getX() + mediaControllerContainer.getX() + footerFrame.getX() - playPauseButton.getLeft();
+ fabXAnimator = ObjectAnimator.ofFloat(playPauseButton, View.TRANSLATION_X, 0, xTranslation);
+ fabXAnimator.setDuration(SLIDING_PANEL_ANIMATION_STEPS);
+ }
+ }
+
+ private void initFabYAnimatorIfNecessary() {
+ if (fabYAnimator == null) {
+ float yTranslation = dummyFab.getY() + mediaControllerContainer.getY() + footerFrame.getY() - playPauseButton.getTop();
+ fabYAnimator = ObjectAnimator.ofFloat(playPauseButton, View.TRANSLATION_Y, 0, yTranslation);
+ fabYAnimator.setDuration(SLIDING_PANEL_ANIMATION_STEPS);
+ }
+ }
+
+ private void initFabColorAnimatorIfNecessary() {
+ int startColor = getThemeColorAccent();
+ int endColor;
+ if (colorPlaybackControls) {
+ endColor = lastPlaybackControlsColor;
+ } else {
+ endColor = startColor;
+ }
+ if (fabColorAnimator == null) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+ fabColorAnimator = ObjectAnimator.ofArgb(playPauseButton, FloatingActionButtonProperty.FAB_COLOR, startColor, endColor);
+ } else {
+ fabColorAnimator = ObjectAnimator.ofInt(playPauseButton, FloatingActionButtonProperty.FAB_COLOR, startColor, endColor);
+ fabColorAnimator.setEvaluator(new ArgbEvaluator());
+ }
+ fabColorAnimator.setDuration(SLIDING_PANEL_ANIMATION_STEPS);
+ } else if (startColor != lastFabStartColor || endColor != lastFabEndColor) {
+ fabColorAnimator.setIntValues(startColor, endColor);
+ }
+ lastFabStartColor = startColor;
+ lastFabEndColor = endColor;
+ }
+
+ private void initMiniPlayerAlphaAnimatorIfNecessary() {
+ if (miniPlayerAlphaAnimator == null) {
+ miniPlayerAlphaAnimator = ObjectAnimator.ofFloat(miniPlayer, View.ALPHA, 1, 0);
+ miniPlayerAlphaAnimator.setDuration(SLIDING_PANEL_ANIMATION_STEPS);
+ }
+ }
+
private void toggleSlidingPanel() {
if (slidingUpPanelLayout.getPanelState() != SlidingUpPanelLayout.PanelState.EXPANDED) {
slidingUpPanelLayout.setPanelState(SlidingUpPanelLayout.PanelState.EXPANDED);
@@ -1102,4 +1150,20 @@ public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivi
super.notifyTaskColorChange(color);
}
}
+
+ private static class FloatingActionButtonProperty {
+ public static final Property FAB_COLOR = new Property(Integer.class, "fabColor") {
+ @Override
+ public void set(FloatingActionButton object, Integer value) {
+ object.setBackgroundTintList(ColorStateList.valueOf(value));
+ object.setRippleColor(shiftColorDown(value));
+ object.getDrawable().setColorFilter(ColorUtil.getDrawableColorForBackground(object.getContext(), value), PorterDuff.Mode.SRC_IN);
+ }
+
+ @Override
+ public Integer get(FloatingActionButton object) {
+ return object.getBackgroundTintList() != null ? object.getBackgroundTintList().getDefaultColor() : 0;
+ }
+ };
+ }
}
diff --git a/app/src/main/java/com/kabouzeid/gramophone/util/ViewUtil.java b/app/src/main/java/com/kabouzeid/gramophone/util/ViewUtil.java
index 3262f95b..edc514ca 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/util/ViewUtil.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/util/ViewUtil.java
@@ -42,8 +42,13 @@ public class ViewUtil {
public final static int DEFAULT_COLOR_ANIMATION_DURATION = 500;
private static Animator createColorAnimator(Object target, String propertyName, int startColor, int endColor) {
- ObjectAnimator animator = ObjectAnimator.ofObject(target, propertyName,
- new ArgbEvaluator(), startColor, endColor);
+ ObjectAnimator animator;
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+ animator = ObjectAnimator.ofArgb(target, propertyName, startColor, endColor);
+ } else {
+ animator = ObjectAnimator.ofInt(target, propertyName, startColor, endColor);
+ animator.setEvaluator(new ArgbEvaluator());
+ }
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
animator.setInterpolator(new PathInterpolator(0.4f, 0f, 1f, 1f));
diff --git a/app/src/main/res/layout/notification.xml b/app/src/main/res/layout/notification.xml
index d9728dae..c5f8ef24 100644
--- a/app/src/main/res/layout/notification.xml
+++ b/app/src/main/res/layout/notification.xml
@@ -16,16 +16,11 @@
+ android:layout_height="64dp">
-
- Caja de título grande
Barra de progreso alternativa
Mostrar tarjeta bajo los controles del reproductor
+ Controles de reproducción coloreados
Ocultar barra inferior
No se encontró ningún ecualizador
"No se encontró el ID de audio. Intenta otra vez."
@@ -157,6 +158,7 @@
Mostrar tarjeta detrás de los botones de control de reproducción (reproducir/pausar, etc.)
Si bien la calidad del arte de tapa del almacenamiento tiene mejor calidad, puede tardar más en cargar. Sólo activar si no se quieren artes de tapa de baja resolución.
Oculta la barra con la información de reproducción actual en la parte inferior. Aún puedes deslizar el botón de reproducir/pausar en cualquier dirección para abrir la vista de reproducción actual.
+ El botón de reproducir/pausar, aleatorio y repetir así como la barra de progreso son coloreados con el color vibrante de la carátula del álbum.
"No se puede descargar una tapa de álbum coincidente."
Buscar en la biblioteca...
Escaneando contenido...
diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml
index 9d5cd3fd..2dacbd6b 100644
--- a/app/src/main/res/values-it/strings.xml
+++ b/app/src/main/res/values-it/strings.xml
@@ -119,6 +119,7 @@
Riquadro titolo più grande
Cursore di scorrimento alternativo
Sfondo card per i controlli di riproduzione
+ Controlli di riproduzione colorati
Nascondi barra inferiore
Nessun equalizzatore trovato
"Nessun ID audio, riproduci qualcosa e prova di nuovo."
@@ -157,6 +158,7 @@
Visualizza un contorno in stile card dietro ai controlli di riproduzione (play, pausa ecc.).
Aggira il Media Store; l\'opzione può incrementare la qualità delle copertine, ma a volte causa rallentamenti nel caricamento delle immagini. Abilita soltanto se hai problemi con copertine a bassa risoluzione.
Nasconde la barra con le informazioni di riproduzione in basso. È ancora possibile trascinare il pulsante play/pausa in qualsiasi direzione per aprire la schermata In riproduzione.
+ I pulsanti play/pausa, casuale e ripeti così come la barra d\'avanzamento sono colorati secondo la gamma di colori della copertina.
"Impossibile scaricare una copertina adatta."
Cerca nella tua libreria...
Nuova scannerizzazione media in corso...
diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml
index 42b6f95a..19a803e4 100644
--- a/app/src/main/res/values-pl/strings.xml
+++ b/app/src/main/res/values-pl/strings.xml
@@ -118,7 +118,7 @@
Nieprzeźroczystość paska stanu
Większe pole tytułu
Alternatywny pasek postępu
- Wyświetlanie karty pod przyciskami odtwarzania
+ Karta pod przyciskami odtwarzania
"Kolorowe przyciski odtwarzania
"
Ukryj dolną belkę
@@ -156,9 +156,10 @@
Zaznacz, a pasek stanu będzie nieprzeźroczysty i nie zasłoni już okładki albumu
Zaznacz, a pole nazwy utworu i wykonawcy pod okładką albumu będzie większe
Zaznacz, a w odróżnieniu od domyślnego suwaka, pasek postępu nie zasłoni okładki albumu
- Zaznacz, a pod przyciskami sterującymi odtwarzaczem (odtwarzanie/pauza, itp.) zostanie wyświetlona karta
+ Zaznacz, a pod przyciskami sterującymi odtwarzaczem (Graj/Pauzuj, itp.) zostanie wyświetlona karta
Pomijaj korzystanie z Media Store, polepszy to jakość okładek, ale może spowodować ich wolniejsze ładowanie. Zaznacz tylko wtedy, gdy masz kłopoty z niską jakością grafik
Ukrywa dolną belkę z informacjami o obecnie granym utworze. Nadal można przesuwać przycisk Graj/Pauza w dowolnym kierunku, aby otworzyć widok obecnie granego utworu
+ Zaznacz, a przyciski \'\'Graj/Pauzuj\'\', \'\'Odtwarzaj Losowo\'\', \'\'Powtórz\'\' oraz pasek postępu, będą w kolorach z okładek albumów
"Nie udało się pobrać okładki pasującej do albumu"
Szukaj w bibliotece...
Ponowny skan nośnika...