diff --git a/app/build.gradle b/app/build.gradle
index 3e60efac..2788d84e 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -63,8 +63,10 @@ android {
renderscriptTargetApi 23
applicationId "com.kabouzeid.gramophone"
- versionCode 93
- versionName "0.9.53 TEMP"
+ versionCode 94
+ versionName "0.9.54 RC"
+
+ manifestPlaceholders = [appName: "@string/app_name"]
}
buildTypes {
release {
@@ -74,6 +76,9 @@ android {
signingConfig signingConfigs.release
}
debug {
+ applicationIdSuffix '.debug'
+ versionNameSuffix ' DEBUG'
+ manifestPlaceholders = [appName: "Phonograph DEBUG"]
signingConfig signingConfigs.debug
}
}
@@ -109,6 +114,10 @@ dependencies {
transitive = true
}
+ compile('com.github.kabouzeid:app-theme-helper:0.7.11kmod@aar'){
+ transitive = true
+ }
+
compile 'com.android.support:support-v4:23.1.1'
compile 'com.android.support:support-v13:23.1.1'
compile 'com.android.support:appcompat-v7:23.1.1'
@@ -132,5 +141,5 @@ dependencies {
compile 'de.psdev.licensesdialog:licensesdialog:1.8.0'
compile 'com.github.kabouzeid:AppIntro:3.3.0k'
compile 'com.github.bumptech.glide:glide:3.6.1'
- compile 'com.github.kabouzeid:RecyclerView-FastScroll:4a2754f1d6'
+ compile 'com.github.kabouzeid:RecyclerView-FastScroll:v1.2-kmod'
}
diff --git a/app/src/main/assets/phonograph-changelog.html b/app/src/main/assets/phonograph-changelog.html
index 4f2ec5b1..025d43a0 100644
--- a/app/src/main/assets/phonograph-changelog.html
+++ b/app/src/main/assets/phonograph-changelog.html
@@ -25,6 +25,33 @@
You can view the changelog dialog again at any time from the about section.
+Version 0.9.54 RC
+
+
+ - NEW: Added transition when opening a playlist.
+ - IMPROVEMENT: Adjusted the colors generated by the Palette API for better performance.
+
+ - IMPROVEMENT: Synced translations.
+ - FIX: Fixed a bug with the switches on the settings page.
+
+
+Version 0.9.54 beta 1
+
+
+ - NEW: Yet again changed the theme engine, should be quite stable again now.
+ - NEW: Improved fastscroller (auto hide is missing right now).
+
+
+
+Version 0.9.53 PREVIEW 1
+
+
+ - NEW (PREVIEW): Completely new underlying theme engine.
+ - IMPROVEMENT: Various things, I don't quite remember.
+ - IMPROVEMENT: Synced translations.
+
+
+
Version 0.9.52
diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/PlaylistAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/PlaylistAdapter.java
index b465daf4..14005734 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/adapter/PlaylistAdapter.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/PlaylistAdapter.java
@@ -11,6 +11,8 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.PopupMenu;
+import com.kabouzeid.appthemehelper.ThemeStore;
+import com.kabouzeid.appthemehelper.util.ATHUtil;
import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.adapter.base.AbsMultiSelectAdapter;
import com.kabouzeid.gramophone.adapter.base.MediaEntryViewHolder;
@@ -24,7 +26,6 @@ import com.kabouzeid.gramophone.loader.PlaylistSongLoader;
import com.kabouzeid.gramophone.model.Playlist;
import com.kabouzeid.gramophone.model.Song;
import com.kabouzeid.gramophone.model.smartplaylist.AbsSmartPlaylist;
-import com.kabouzeid.gramophone.util.ColorUtil;
import com.kabouzeid.gramophone.util.MusicUtil;
import com.kabouzeid.gramophone.util.NavigationUtil;
import com.kabouzeid.gramophone.util.Util;
@@ -98,7 +99,7 @@ public class PlaylistAdapter extends AbsMultiSelectAdapter= Build.VERSION_CODES.LOLLIPOP) {
itemView.setElevation(activity.getResources().getDimensionPixelSize(R.dimen.card_elevation));
}
diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/SearchAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/SearchAdapter.java
index 62a01b1c..a9e5a17a 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/adapter/SearchAdapter.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/SearchAdapter.java
@@ -13,6 +13,7 @@ import com.bumptech.glide.Glide;
import com.bumptech.glide.Priority;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.bumptech.glide.request.target.Target;
+import com.kabouzeid.appthemehelper.util.ATHUtil;
import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.adapter.base.MediaEntryViewHolder;
import com.kabouzeid.gramophone.glide.SongGlideRequest;
@@ -26,7 +27,6 @@ import com.kabouzeid.gramophone.model.Album;
import com.kabouzeid.gramophone.model.Artist;
import com.kabouzeid.gramophone.model.Song;
import com.kabouzeid.gramophone.util.ArtistSignatureUtil;
-import com.kabouzeid.gramophone.util.ColorUtil;
import com.kabouzeid.gramophone.util.MusicUtil;
import com.kabouzeid.gramophone.util.NavigationUtil;
@@ -139,7 +139,7 @@ public class SearchAdapter extends RecyclerView.Adapter= Build.VERSION_CODES.LOLLIPOP) {
itemView.setElevation(activity.getResources().getDimensionPixelSize(R.dimen.card_elevation));
}
diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/album/AlbumAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/album/AlbumAdapter.java
index ff60d0e9..dc6933df 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/adapter/album/AlbumAdapter.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/album/AlbumAdapter.java
@@ -12,6 +12,8 @@ import android.view.View;
import android.view.ViewGroup;
import com.bumptech.glide.Glide;
+import com.kabouzeid.appthemehelper.util.ColorUtil;
+import com.kabouzeid.appthemehelper.util.MaterialValueHelper;
import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.adapter.base.AbsMultiSelectAdapter;
import com.kabouzeid.gramophone.adapter.base.MediaEntryViewHolder;
@@ -23,7 +25,6 @@ import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
import com.kabouzeid.gramophone.interfaces.CabHolder;
import com.kabouzeid.gramophone.model.Album;
import com.kabouzeid.gramophone.model.Song;
-import com.kabouzeid.gramophone.util.ColorUtil;
import com.kabouzeid.gramophone.util.MusicUtil;
import com.kabouzeid.gramophone.util.NavigationUtil;
import com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView;
@@ -108,10 +109,10 @@ public class AlbumAdapter extends AbsMultiSelectAdapterUnable to load" + e.getLocalizedMessage() + "
", "text/html", "UTF-8");
diff --git a/app/src/main/java/com/kabouzeid/gramophone/dialogs/DonationDialog.java b/app/src/main/java/com/kabouzeid/gramophone/dialogs/DonationDialog.java
index 37e0ea63..9e815b8e 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/dialogs/DonationDialog.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/dialogs/DonationDialog.java
@@ -25,9 +25,10 @@ import com.afollestad.materialdialogs.internal.ThemeSingleton;
import com.anjlab.android.iab.v3.BillingProcessor;
import com.anjlab.android.iab.v3.SkuDetails;
import com.anjlab.android.iab.v3.TransactionDetails;
+import com.kabouzeid.appthemehelper.ThemeStore;
+import com.kabouzeid.appthemehelper.util.ATHUtil;
import com.kabouzeid.gramophone.App;
import com.kabouzeid.gramophone.R;
-import com.kabouzeid.gramophone.util.ColorUtil;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
@@ -168,12 +169,14 @@ public class DonationDialog extends DialogFragment implements BillingProcessor.I
viewHolder.price.setText(skuDetails.priceText);
final boolean purchased = donationDialog.billingProcessor.isPurchased(skuDetails.productId);
+ int titleTextColor = purchased ? ATHUtil.resolveColor(getContext(), android.R.attr.textColorHint) : ThemeStore.textColorPrimary(getContext());
+ int contentTextColor = purchased ? titleTextColor : ThemeStore.textColorSecondary(getContext());
- int titleTextColor = purchased ? ColorUtil.resolveColor(getContext(), android.R.attr.textColorHint) : ColorUtil.resolveColor(getContext(), android.R.attr.textColorPrimary);
- int contentTextColor = purchased ? titleTextColor : ColorUtil.resolveColor(getContext(), android.R.attr.textColorSecondary);
-
+ //noinspection ResourceAsColor
viewHolder.title.setTextColor(titleTextColor);
+ //noinspection ResourceAsColor
viewHolder.text.setTextColor(contentTextColor);
+ //noinspection ResourceAsColor
viewHolder.price.setTextColor(titleTextColor);
strikeThrough(viewHolder.title, purchased);
diff --git a/app/src/main/java/com/kabouzeid/gramophone/glide/PhonographColoredTarget.java b/app/src/main/java/com/kabouzeid/gramophone/glide/PhonographColoredTarget.java
index 09d8040d..13b4e375 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/glide/PhonographColoredTarget.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/glide/PhonographColoredTarget.java
@@ -4,10 +4,11 @@ import android.graphics.drawable.Drawable;
import android.widget.ImageView;
import com.bumptech.glide.request.animation.GlideAnimation;
+import com.kabouzeid.appthemehelper.util.ATHUtil;
import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.glide.palette.BitmapPaletteTarget;
import com.kabouzeid.gramophone.glide.palette.BitmapPaletteWrapper;
-import com.kabouzeid.gramophone.util.ColorUtil;
+import com.kabouzeid.gramophone.util.PhonographColorUtil;
public abstract class PhonographColoredTarget extends BitmapPaletteTarget {
public PhonographColoredTarget(ImageView view) {
@@ -23,11 +24,11 @@ public abstract class PhonographColoredTarget extends BitmapPaletteTarget {
@Override
public void onResourceReady(BitmapPaletteWrapper resource, GlideAnimation super BitmapPaletteWrapper> glideAnimation) {
super.onResourceReady(resource, glideAnimation);
- onColorReady(ColorUtil.getColor(resource.getPalette(), getDefaultBarColor()));
+ onColorReady(PhonographColorUtil.getColor(resource.getPalette(), getDefaultBarColor()));
}
protected int getDefaultBarColor() {
- return ColorUtil.resolveColor(getView().getContext(), R.attr.default_bar_color);
+ return ATHUtil.resolveColor(getView().getContext(), R.attr.default_bar_color);
}
public abstract void onColorReady(int color);
diff --git a/app/src/main/java/com/kabouzeid/gramophone/glide/palette/BitmapPaletteTranscoder.java b/app/src/main/java/com/kabouzeid/gramophone/glide/palette/BitmapPaletteTranscoder.java
index b3585850..eee8f931 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/glide/palette/BitmapPaletteTranscoder.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/glide/palette/BitmapPaletteTranscoder.java
@@ -7,7 +7,7 @@ import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.Resource;
import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool;
import com.bumptech.glide.load.resource.transcode.ResourceTranscoder;
-import com.kabouzeid.gramophone.util.ColorUtil;
+import com.kabouzeid.gramophone.util.PhonographColorUtil;
public class BitmapPaletteTranscoder implements ResourceTranscoder {
private final BitmapPool bitmapPool;
@@ -23,7 +23,7 @@ public class BitmapPaletteTranscoder implements ResourceTranscoder transcode(Resource bitmapResource) {
Bitmap bitmap = bitmapResource.get();
- BitmapPaletteWrapper bitmapPaletteWrapper = new BitmapPaletteWrapper(bitmap, ColorUtil.generatePalette(bitmap));
+ BitmapPaletteWrapper bitmapPaletteWrapper = new BitmapPaletteWrapper(bitmap, PhonographColorUtil.generatePalette(bitmap));
return new BitmapPaletteResource(bitmapPaletteWrapper, bitmapPool);
}
diff --git a/app/src/main/java/com/kabouzeid/gramophone/helper/PlayingNotificationHelper.java b/app/src/main/java/com/kabouzeid/gramophone/helper/PlayingNotificationHelper.java
index b7688bf7..525cf7be 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/helper/PlayingNotificationHelper.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/helper/PlayingNotificationHelper.java
@@ -24,13 +24,14 @@ import com.bumptech.glide.Glide;
import com.bumptech.glide.request.animation.GlideAnimation;
import com.bumptech.glide.request.target.SimpleTarget;
import com.bumptech.glide.request.target.Target;
+import com.kabouzeid.appthemehelper.util.ColorUtil;
import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.glide.SongGlideRequest;
import com.kabouzeid.gramophone.glide.palette.BitmapPaletteWrapper;
import com.kabouzeid.gramophone.model.Song;
import com.kabouzeid.gramophone.service.MusicService;
import com.kabouzeid.gramophone.ui.activities.MainActivity;
-import com.kabouzeid.gramophone.util.ColorUtil;
+import com.kabouzeid.gramophone.util.PhonographColorUtil;
import com.kabouzeid.gramophone.util.PreferenceUtil;
public class PlayingNotificationHelper {
@@ -69,7 +70,7 @@ public class PlayingNotificationHelper {
@Override
public void onResourceReady(BitmapPaletteWrapper resource, GlideAnimation super BitmapPaletteWrapper> glideAnimation) {
- setAlbumCover(resource.getBitmap(), ColorUtil.getColor(resource.getPalette(), Color.TRANSPARENT));
+ setAlbumCover(resource.getBitmap(), PhonographColorUtil.getColor(resource.getPalette(), Color.TRANSPARENT));
}
};
}
@@ -214,7 +215,7 @@ public class PlayingNotificationHelper {
bgColor = Color.TRANSPARENT;
}
setBackgroundColor(bgColor);
- setDarkNotificationContent(bgColor == Color.TRANSPARENT ? Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP : ColorUtil.useDarkTextColorOnBackground(bgColor));
+ setDarkNotificationContent(bgColor == Color.TRANSPARENT ? Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP : ColorUtil.isColorLight(bgColor));
if (notification != null) {
notificationManager.notify(notificationId, notification);
diff --git a/app/src/main/java/com/kabouzeid/gramophone/misc/FloatingActionButtonProperties.java b/app/src/main/java/com/kabouzeid/gramophone/misc/FloatingActionButtonProperties.java
deleted file mode 100644
index 1c692e6c..00000000
--- a/app/src/main/java/com/kabouzeid/gramophone/misc/FloatingActionButtonProperties.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package com.kabouzeid.gramophone.misc;
-
-import android.content.res.ColorStateList;
-import android.graphics.PorterDuff;
-import android.support.design.widget.FloatingActionButton;
-import android.util.Property;
-
-import com.kabouzeid.gramophone.util.ColorUtil;
-
-/**
- * @author Karim Abou Zeid (kabouzeid)
- */
-public class FloatingActionButtonProperties {
- public static final Property COLOR = new Property(Integer.class, "color") {
- @Override
- public void set(FloatingActionButton object, Integer value) {
- object.setBackgroundTintList(ColorStateList.valueOf(value));
- object.getDrawable().mutate().setColorFilter(ColorUtil.getPrimaryTextColorForBackground(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/prefs/ColorChooserPreference.java b/app/src/main/java/com/kabouzeid/gramophone/prefs/ColorChooserPreference.java
deleted file mode 100644
index ecdf00ae..00000000
--- a/app/src/main/java/com/kabouzeid/gramophone/prefs/ColorChooserPreference.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package com.kabouzeid.gramophone.prefs;
-
-import android.content.Context;
-import android.preference.Preference;
-import android.support.annotation.ColorInt;
-import android.support.annotation.NonNull;
-import android.util.AttributeSet;
-import android.view.View;
-
-import com.kabouzeid.gramophone.R;
-import com.kabouzeid.gramophone.views.ColorView;
-
-public class ColorChooserPreference extends Preference {
-
- @ColorInt
- private int color;
- private ColorView colorView;
-
- public ColorChooserPreference(@NonNull Context context) {
- this(context, null);
- }
-
- public ColorChooserPreference(@NonNull Context context, AttributeSet attrs) {
- this(context, attrs, 0);
- }
-
- public ColorChooserPreference(@NonNull Context context, AttributeSet attrs, int defStyleAttr) {
- super(context, attrs, defStyleAttr);
- setLayoutResource(R.layout.preference_custom);
- setWidgetLayoutResource(R.layout.preference_color_widget);
- }
-
- @Override
- protected void onBindView(@NonNull View view) {
- super.onBindView(view);
- colorView = (ColorView) view.findViewById(R.id.circle);
- invalidateColor();
- }
-
- public void setColor(int color) {
- this.color = color;
- invalidateColor();
- }
-
- private void invalidateColor() {
- if (colorView != null) {
- if (this.color != 0) {
- colorView.setVisibility(View.VISIBLE);
- colorView.setColor(color);
- } else {
- colorView.setVisibility(View.GONE);
- }
- }
- }
-}
diff --git a/app/src/main/java/com/kabouzeid/gramophone/prefs/DynamicPreferenceCategory.java b/app/src/main/java/com/kabouzeid/gramophone/prefs/DynamicPreferenceCategory.java
deleted file mode 100644
index 0a08e7bb..00000000
--- a/app/src/main/java/com/kabouzeid/gramophone/prefs/DynamicPreferenceCategory.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package com.kabouzeid.gramophone.prefs;
-
-import android.content.Context;
-import android.preference.PreferenceCategory;
-import android.support.annotation.NonNull;
-import android.util.AttributeSet;
-import android.view.View;
-import android.widget.TextView;
-
-import com.afollestad.materialdialogs.internal.ThemeSingleton;
-import com.kabouzeid.gramophone.R;
-
-/**
- * Uses the theme's primary color as the text color of the category.
- *
- * @author Aidan Follestad (afollestad)
- */
-public class DynamicPreferenceCategory extends PreferenceCategory {
-
- public DynamicPreferenceCategory(@NonNull Context context, @NonNull AttributeSet attrs) {
- this(context, attrs, 0);
- }
-
- public DynamicPreferenceCategory(@NonNull Context context) {
- this(context, null, 0);
- }
-
- public DynamicPreferenceCategory(@NonNull Context context, AttributeSet attrs, int defStyleAttr) {
- super(context, attrs, defStyleAttr);
- setLayoutResource(R.layout.preference_category_custom);
- setSelectable(false);
- }
-
- @Override
- protected void onBindView(@NonNull View view) {
- super.onBindView(view);
- ((TextView) view.findViewById(android.R.id.title)).setTextColor(ThemeSingleton.get().positiveColor);
- }
-}
diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AboutActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AboutActivity.java
index e8adb1b3..98bb454c 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AboutActivity.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AboutActivity.java
@@ -8,7 +8,6 @@ import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v7.widget.AppCompatButton;
import android.support.v7.widget.Toolbar;
-import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ImageView;
@@ -16,12 +15,12 @@ import android.widget.LinearLayout;
import android.widget.TextView;
import com.afollestad.materialdialogs.internal.ThemeSingleton;
+import com.kabouzeid.appthemehelper.ThemeStore;
+import com.kabouzeid.appthemehelper.util.ATHUtil;
import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.dialogs.ChangelogDialog;
import com.kabouzeid.gramophone.dialogs.DonationDialog;
import com.kabouzeid.gramophone.ui.activities.base.AbsBaseActivity;
-import com.kabouzeid.gramophone.util.ColorUtil;
-import com.kabouzeid.gramophone.util.ViewUtil;
import butterknife.Bind;
import butterknife.ButterKnife;
@@ -127,14 +126,14 @@ public class AboutActivity extends AbsBaseActivity implements View.OnClickListen
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_about);
- setStatusBarTransparent();
+ setDrawUnderStatusbar(true);
ButterKnife.bind(this);
- setUpViews();
+ setStatusbarColorAuto();
+ setNavigationbarColorAuto();
+ setTaskDescriptionColorAuto();
- if (shouldColorNavigationBar())
- setNavigationBarThemeColor();
- setStatusBarThemeColor();
+ setUpViews();
}
private void setUpViews() {
@@ -145,7 +144,7 @@ public class AboutActivity extends AbsBaseActivity implements View.OnClickListen
}
private void setUpToolbar() {
- toolbar.setBackgroundColor(getThemeColorPrimary());
+ toolbar.setBackgroundColor(ThemeStore.primaryColor(this));
setSupportActionBar(toolbar);
//noinspection ConstantConditions
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
@@ -177,7 +176,7 @@ public class AboutActivity extends AbsBaseActivity implements View.OnClickListen
}
private void setUpIconTint() {
- int iconColor = ColorUtil.resolveColor(this, R.attr.icon_color);
+ int iconColor = ATHUtil.resolveColor(this, R.attr.icon_color, ThemeStore.textColorSecondary(this));
iconInfo.setColorFilter(iconColor);
iconChangelog.setColorFilter(iconColor);
iconIntro.setColorFilter(iconColor);
@@ -273,12 +272,4 @@ public class AboutActivity extends AbsBaseActivity implements View.OnClickListen
.build()
.showAppCompat();
}
-
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- boolean darkContent = ColorUtil.useDarkTextColorOnBackground(getThemeColorPrimary());
- ViewUtil.setToolbarContentDark(this, toolbar, darkContent);
- setUseDarkStatusBarIcons(darkContent);
- return super.onCreateOptionsMenu(menu);
- }
}
diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AlbumDetailActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AlbumDetailActivity.java
index f83f5fa4..ff7b98eb 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AlbumDetailActivity.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AlbumDetailActivity.java
@@ -19,6 +19,8 @@ import com.bumptech.glide.Glide;
import com.bumptech.glide.request.RequestListener;
import com.bumptech.glide.request.target.Target;
import com.github.ksoichiro.android.observablescrollview.ObservableRecyclerView;
+import com.kabouzeid.appthemehelper.util.ColorUtil;
+import com.kabouzeid.appthemehelper.util.MaterialValueHelper;
import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.adapter.song.AlbumSongAdapter;
import com.kabouzeid.gramophone.dialogs.SleepTimerDialog;
@@ -34,8 +36,8 @@ import com.kabouzeid.gramophone.model.Album;
import com.kabouzeid.gramophone.ui.activities.base.AbsSlidingMusicPanelActivity;
import com.kabouzeid.gramophone.ui.activities.tageditor.AbsTagEditorActivity;
import com.kabouzeid.gramophone.ui.activities.tageditor.AlbumTagEditorActivity;
-import com.kabouzeid.gramophone.util.ColorUtil;
import com.kabouzeid.gramophone.util.NavigationUtil;
+import com.kabouzeid.gramophone.util.PhonographColorUtil;
import com.kabouzeid.gramophone.util.Util;
import butterknife.Bind;
@@ -76,14 +78,11 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- setStatusBarTransparent();
+ setDrawUnderStatusbar(true);
ButterKnife.bind(this);
supportPostponeEnterTransition();
- if (shouldColorNavigationBar())
- setNavigationBarColor(DialogUtils.resolveColor(this, R.attr.default_bar_color));
-
getAlbumFromIntentExtras();
setUpObservableListViewParams();
setUpToolBar();
@@ -109,8 +108,8 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements
// Change alpha of overlay
toolbarAlpha = Math.max(0, Math.min(1, (float) scrollY / flexibleRange));
- toolbar.setBackgroundColor(ColorUtil.getColorWithAlpha(toolbarAlpha, toolbarColor));
- setStatusBarColor(ColorUtil.getColorWithAlpha(cab != null && cab.isActive() ? 1 : toolbarAlpha, toolbarColor));
+ toolbar.setBackgroundColor(ColorUtil.withAlpha(toolbarColor, toolbarAlpha));
+ setStatusbarColor(ColorUtil.withAlpha(toolbarColor, cab != null && cab.isActive() ? 1 : toolbarAlpha));
// Translate name text
int maxTitleTranslationY = albumArtViewHeight;
@@ -177,17 +176,10 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements
private void setColors(int color) {
toolbarColor = color;
albumTitleView.setBackgroundColor(color);
- albumTitleView.setTextColor(ColorUtil.getPrimaryTextColorForBackground(this, color));
+ albumTitleView.setTextColor(MaterialValueHelper.getPrimaryTextColor(this, ColorUtil.isColorLight(color)));
- if (shouldColorNavigationBar())
- setNavigationBarColor(color);
-
- notifyTaskColorChange(color);
- }
-
- @Override
- protected boolean overridesTaskColor() {
- return true;
+ setNavigationbarColor(color);
+ setTaskDescriptionColor(color);
}
@Override
@@ -305,11 +297,11 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements
cab = new MaterialCab(this, R.id.cab_stub)
.setMenu(menuRes)
.setCloseDrawableRes(R.drawable.ic_close_white_24dp)
- .setBackgroundColor(ColorUtil.shiftBackgroundColorForLightText(getPaletteColor()))
+ .setBackgroundColor(PhonographColorUtil.shiftBackgroundColorForLightText(getPaletteColor()))
.start(new MaterialCab.Callback() {
@Override
public boolean onCabCreated(MaterialCab materialCab, Menu menu) {
- setStatusBarColor(ColorUtil.getOpaqueColor(toolbarColor));
+ setStatusbarColor(ColorUtil.stripAlpha(toolbarColor));
return callback.onCabCreated(materialCab, menu);
}
@@ -320,7 +312,7 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements
@Override
public boolean onCabFinished(MaterialCab materialCab) {
- setStatusBarColor(ColorUtil.getColorWithAlpha(toolbarAlpha, toolbarColor));
+ setStatusbarColor(ColorUtil.withAlpha(toolbarColor, toolbarAlpha));
return callback.onCabFinished(materialCab);
}
});
@@ -341,4 +333,10 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements
super.onMediaStoreChanged();
refresh();
}
+
+ @Override
+ public void setStatusbarColor(int color) {
+ super.setStatusbarColor(color);
+ setLightStatusbar(false);
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/ArtistDetailActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/ArtistDetailActivity.java
index cdb6ab90..2d00f27f 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/ArtistDetailActivity.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/ArtistDetailActivity.java
@@ -26,6 +26,9 @@ import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.bumptech.glide.request.RequestListener;
import com.bumptech.glide.request.target.Target;
import com.github.ksoichiro.android.observablescrollview.ObservableListView;
+import com.kabouzeid.appthemehelper.util.ColorUtil;
+import com.kabouzeid.appthemehelper.util.MaterialValueHelper;
+import com.kabouzeid.gramophone.BuildConfig;
import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.adapter.album.HorizontalAlbumAdapter;
import com.kabouzeid.gramophone.adapter.song.ArtistSongAdapter;
@@ -48,8 +51,8 @@ import com.kabouzeid.gramophone.model.Artist;
import com.kabouzeid.gramophone.model.Song;
import com.kabouzeid.gramophone.ui.activities.base.AbsSlidingMusicPanelActivity;
import com.kabouzeid.gramophone.util.ArtistSignatureUtil;
-import com.kabouzeid.gramophone.util.ColorUtil;
import com.kabouzeid.gramophone.util.NavigationUtil;
+import com.kabouzeid.gramophone.util.PhonographColorUtil;
import com.kabouzeid.gramophone.util.Util;
import java.util.ArrayList;
@@ -100,12 +103,9 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- setStatusBarTransparent();
+ setDrawUnderStatusbar(true);
ButterKnife.bind(this);
- if (shouldColorNavigationBar())
- setNavigationBarColor(DialogUtils.resolveColor(this, R.attr.default_bar_color));
-
lastFMRestClient = new LastFMRestClient(this);
getArtistFromIntentExtras();
@@ -134,8 +134,8 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
// Change alpha of overlay
toolbarAlpha = Math.max(0, Math.min(1, (float) scrollY / flexibleRange));
- toolbar.setBackgroundColor(ColorUtil.getColorWithAlpha(toolbarAlpha, toolbarColor));
- setStatusBarColor(ColorUtil.getColorWithAlpha(cab != null && cab.isActive() ? 1 : toolbarAlpha, toolbarColor));
+ toolbar.setBackgroundColor(ColorUtil.withAlpha(toolbarColor, toolbarAlpha));
+ setStatusbarColor(ColorUtil.withAlpha(toolbarColor, cab != null && cab.isActive() ? 1 : toolbarAlpha));
// Translate name text
int maxTitleTranslationY = artistImageViewHeight;
@@ -219,6 +219,10 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
}
private void loadBiography() {
+ if (BuildConfig.DEBUG) {
+ biography = Html.fromHtml("Not available in debug builds, because this is causing a crash for whatever reason.");
+ return;
+ }
lastFMRestClient.getApiService().getArtistInfo(artist.name, null).enqueue(new Callback() {
@Override
public void onResponse(Response response) {
@@ -287,11 +291,6 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
});
}
- @Override
- protected boolean overridesTaskColor() {
- return true;
- }
-
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
@@ -305,15 +304,12 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
return toolbarColor;
}
- private void setColors(int vibrantColor) {
- toolbarColor = vibrantColor;
- artistName.setBackgroundColor(vibrantColor);
- artistName.setTextColor(ColorUtil.getPrimaryTextColorForBackground(this, vibrantColor));
-
- if (shouldColorNavigationBar())
- setNavigationBarColor(vibrantColor);
-
- notifyTaskColorChange(vibrantColor);
+ private void setColors(int color) {
+ toolbarColor = color;
+ artistName.setBackgroundColor(color);
+ artistName.setTextColor(MaterialValueHelper.getPrimaryTextColor(this, ColorUtil.isColorLight(color)));
+ setNavigationbarColor(color);
+ setTaskDescriptionColor(color);
}
private void getArtistFromIntentExtras() {
@@ -391,11 +387,11 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
cab = new MaterialCab(this, R.id.cab_stub)
.setMenu(menuRes)
.setCloseDrawableRes(R.drawable.ic_close_white_24dp)
- .setBackgroundColor(ColorUtil.shiftBackgroundColorForLightText(getPaletteColor()))
+ .setBackgroundColor(PhonographColorUtil.shiftBackgroundColorForLightText(getPaletteColor()))
.start(new MaterialCab.Callback() {
@Override
public boolean onCabCreated(MaterialCab materialCab, Menu menu) {
- setStatusBarColor(ColorUtil.getOpaqueColor(toolbarColor));
+ setStatusbarColor(ColorUtil.stripAlpha(toolbarColor));
return callback.onCabCreated(materialCab, menu);
}
@@ -406,7 +402,7 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
@Override
public boolean onCabFinished(MaterialCab materialCab) {
- setStatusBarColor(ColorUtil.getColorWithAlpha(toolbarAlpha, toolbarColor));
+ setStatusbarColor(ColorUtil.withAlpha(toolbarColor, toolbarAlpha));
return callback.onCabFinished(materialCab);
}
});
@@ -427,4 +423,10 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
super.onMediaStoreChanged();
reloadDataSets();
}
+
+ @Override
+ public void setStatusbarColor(int color) {
+ super.setStatusbarColor(color);
+ setLightStatusbar(false);
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/IntroActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/IntroActivity.java
index c7869d9b..de368542 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/IntroActivity.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/IntroActivity.java
@@ -1,19 +1,18 @@
package com.kabouzeid.gramophone.ui.activities;
import android.Manifest;
-import android.app.ActivityManager;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
-import android.support.annotation.ColorInt;
import android.support.v4.content.ContextCompat;
import android.widget.Toast;
import com.github.paolorotolo.appintro.AppIntro;
import com.github.paolorotolo.appintro.AppIntroFragment;
+import com.kabouzeid.appthemehelper.ATH;
+import com.kabouzeid.appthemehelper.util.ColorUtil;
import com.kabouzeid.gramophone.R;
-import com.kabouzeid.gramophone.util.ColorUtil;
import com.kabouzeid.gramophone.util.PreferenceUtil;
/**
@@ -23,8 +22,9 @@ public class IntroActivity extends AppIntro {
@Override
public void init(Bundle savedInstanceState) {
int color = ContextCompat.getColor(this, R.color.blue_grey_700);
- setStatusBarColor(ColorUtil.shiftColorDown(color));
- setTaskColor(color);
+
+ ATH.setStatusbarColor(this, ColorUtil.darkenColor(color));
+ ATH.setTaskDescriptionColor(this, color);
showSkipButton(false);
@@ -40,15 +40,6 @@ public class IntroActivity extends AppIntro {
addSlide(AppIntroFragment.newInstance(getString(R.string.label_playing_queue), getString(R.string.rearrange_playing_queue_instruction), R.drawable.tutorial_rearrange_queue, color));
}
- private void setTaskColor(@ColorInt int color) {
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
- setTaskDescription(new ActivityManager.TaskDescription(
- null,
- null,
- ColorUtil.getOpaqueColor(color)));
- }
- }
-
private boolean hasExternalStoragePermission() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
return checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED && checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED;
diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MainActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MainActivity.java
index 8711ea26..0621e555 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MainActivity.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MainActivity.java
@@ -5,8 +5,6 @@ import android.content.ComponentName;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
-import android.content.res.ColorStateList;
-import android.graphics.Color;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
@@ -20,7 +18,6 @@ import android.support.design.widget.AppBarLayout.OnOffsetChangedListener;
import android.support.design.widget.NavigationView;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
-import android.support.v4.content.ContextCompat;
import android.support.v4.view.ViewPager;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.widget.Toolbar;
@@ -34,8 +31,12 @@ import android.widget.ImageView;
import android.widget.TextView;
import com.afollestad.materialcab.MaterialCab;
-import com.afollestad.materialdialogs.internal.ThemeSingleton;
import com.bumptech.glide.Glide;
+import com.kabouzeid.appthemehelper.ThemeStore;
+import com.kabouzeid.appthemehelper.util.ATHUtil;
+import com.kabouzeid.appthemehelper.util.NavigationViewUtil;
+import com.kabouzeid.appthemehelper.util.TabLayoutUtil;
+import com.kabouzeid.appthemehelper.util.ToolbarContentTintHelper;
import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.adapter.PagerAdapter;
import com.kabouzeid.gramophone.dialogs.ChangelogDialog;
@@ -56,11 +57,10 @@ import com.kabouzeid.gramophone.service.MusicService;
import com.kabouzeid.gramophone.ui.activities.base.AbsSlidingMusicPanelActivity;
import com.kabouzeid.gramophone.ui.fragments.mainactivityfragments.AbsMainActivityFragment;
import com.kabouzeid.gramophone.ui.fragments.mainactivityfragments.AbsMainActivityRecyclerViewCustomGridSizeFragment;
-import com.kabouzeid.gramophone.util.ColorUtil;
import com.kabouzeid.gramophone.util.NavigationUtil;
+import com.kabouzeid.gramophone.util.PhonographColorUtil;
import com.kabouzeid.gramophone.util.PreferenceUtil;
import com.kabouzeid.gramophone.util.Util;
-import com.kabouzeid.gramophone.util.ViewUtil;
import com.sothree.slidinguppanel.SlidingUpPanelLayout;
import java.io.File;
@@ -107,14 +107,14 @@ public class MainActivity extends AbsSlidingMusicPanelActivity
findViewById(R.id.drawer_content_container).setFitsSystemWindows(false);
}
+ setStatusbarColorAuto();
+ setNavigationbarColorAuto();
+ setTaskDescriptionColorAuto();
+
setUpDrawerLayout();
setUpToolbar();
setUpViewPager();
- if (shouldColorNavigationBar())
- setNavigationBarThemeColor();
- setStatusBarThemeColor();
-
checkChangelog();
if (!PreferenceUtil.getInstance(this).introShown()) {
@@ -160,8 +160,8 @@ public class MainActivity extends AbsSlidingMusicPanelActivity
pager.setOffscreenPageLimit(pagerAdapter.getCount() - 1); // => all
tabs.setupWithViewPager(pager);
- tabs.setTabTextColors(ColorUtil.getSecondaryTextColorForBackground(this, getThemeColorPrimary()), ColorUtil.getPrimaryTextColorForBackground(this, getThemeColorPrimary()));
- tabs.setSelectedTabIndicatorColor(getThemeColorAccent() == Color.WHITE && !ColorUtil.useDarkTextColorOnBackground(getThemeColorPrimary()) ? Color.WHITE : ThemeSingleton.get().positiveColor.getDefaultColor());
+
+ TabLayoutUtil.setTabLayoutColors(tabs, ToolbarContentTintHelper.toolbarTitleColor(this, ThemeStore.primaryColor(this)), ThemeStore.accentColor(this));
int startPosition = PreferenceUtil.getInstance(this).getDefaultStartPage();
startPosition = startPosition == -1 ? PreferenceUtil.getInstance(this).getLastStartPage() : startPosition;
@@ -169,43 +169,21 @@ public class MainActivity extends AbsSlidingMusicPanelActivity
}
private void setUpToolbar() {
+ int primaryColor = ThemeStore.primaryColor(this);
+ appbar.setBackgroundColor(primaryColor);
+ toolbar.setBackgroundColor(primaryColor);
toolbar.setNavigationIcon(R.drawable.ic_menu_white_24dp);
setTitle(getResources().getString(R.string.app_name));
- setAppBarColor();
setSupportActionBar(toolbar);
}
- private void setAppBarColor() {
- appbar.setBackgroundColor(getThemeColorPrimary());
- }
-
private void setUpNavigationView() {
navigationView.setCheckedItem(R.id.nav_library);
- final int colorAccent = ThemeSingleton.get().positiveColor.getDefaultColor();
- navigationView.setItemTextColor(new ColorStateList(
- new int[][]{
- //{-android.R.attr.state_enabled}, // disabled
- {android.R.attr.state_checked}, // checked
- {} // default
- },
- new int[]{
- // 0,
- colorAccent,
- ThemeSingleton.get().darkTheme ? ContextCompat.getColor(this, R.color.primary_text_default_material_dark) : ContextCompat.getColor(this, R.color.primary_text_default_material_light)
- }
- ));
- navigationView.setItemIconTintList(new ColorStateList(
- new int[][]{
- //{-android.R.attr.state_enabled}, // disabled
- {android.R.attr.state_checked}, // checked
- {} // default
- },
- new int[]{
- // 0,
- colorAccent,
- ThemeSingleton.get().darkTheme ? ContextCompat.getColor(this, R.color.secondary_text_default_material_dark) : ContextCompat.getColor(this, R.color.secondary_text_default_material_light)
- }
- ));
+
+ int accentColor = ThemeStore.accentColor(this);
+ NavigationViewUtil.setItemIconColors(navigationView, ATHUtil.resolveColor(this, R.attr.icon_color, ThemeStore.textColorSecondary(this)), accentColor);
+ NavigationViewUtil.setItemTextColors(navigationView, ThemeStore.textColorPrimary(this), accentColor);
+
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
@@ -334,16 +312,7 @@ public class MainActivity extends AbsSlidingMusicPanelActivity
menu.removeItem(R.id.action_grid_size);
menu.removeItem(R.id.action_colored_footers);
}
- boolean darkContent = ColorUtil.useDarkTextColorOnBackground(getThemeColorPrimary());
- ViewUtil.setToolbarContentDark(this, toolbar, darkContent);
- setUseDarkStatusBarIcons(darkContent);
- return true;
- }
-
- @Override
- public boolean onPrepareOptionsMenu(Menu menu) {
- ViewUtil.invalidateToolbarPopupMenuTint(toolbar);
- return super.onPrepareOptionsMenu(menu);
+ return super.onCreateOptionsMenu(menu);
}
@Override
@@ -357,8 +326,6 @@ public class MainActivity extends AbsSlidingMusicPanelActivity
return true;
}
- ViewUtil.invalidateToolbarPopupMenuTint(toolbar);
-
Fragment currentFragment = getCurrentFragment();
if (currentFragment instanceof AbsMainActivityRecyclerViewCustomGridSizeFragment) {
AbsMainActivityRecyclerViewCustomGridSizeFragment absMainActivityRecyclerViewCustomGridSizeFragment = (AbsMainActivityRecyclerViewCustomGridSizeFragment) currentFragment;
@@ -571,7 +538,7 @@ public class MainActivity extends AbsSlidingMusicPanelActivity
cab = new MaterialCab(this, R.id.cab_stub)
.setMenu(menu)
.setCloseDrawableRes(R.drawable.ic_close_white_24dp)
- .setBackgroundColor(ColorUtil.shiftBackgroundColorForLightText(getThemeColorPrimary()))
+ .setBackgroundColor(PhonographColorUtil.shiftBackgroundColorForLightText(ThemeStore.primaryColor(this)))
.start(callback);
return cab;
}
@@ -619,12 +586,12 @@ public class MainActivity extends AbsSlidingMusicPanelActivity
@Override
public void onDrawerOpened(View drawerView) {
- setUseDarkStatusBarIcons(false);
+ setLightStatusbar(false);
}
@Override
public void onDrawerClosed(View drawerView) {
- setUseDarkStatusBarIcons(ColorUtil.useDarkTextColorOnBackground(getThemeColorPrimary()));
+ setLightStatusbarAuto(ThemeStore.primaryColor(this));
}
@Override
diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/PlaylistDetailActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/PlaylistDetailActivity.java
index ec830738..d0ca8ef7 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/PlaylistDetailActivity.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/PlaylistDetailActivity.java
@@ -1,10 +1,12 @@
package com.kabouzeid.gramophone.ui.activities;
+import android.os.Build;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
+import android.transition.Slide;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
@@ -15,6 +17,7 @@ import com.h6ah4i.android.widget.advrecyclerview.animator.GeneralItemAnimator;
import com.h6ah4i.android.widget.advrecyclerview.animator.RefactoredDefaultItemAnimator;
import com.h6ah4i.android.widget.advrecyclerview.draggable.RecyclerViewDragDropManager;
import com.h6ah4i.android.widget.advrecyclerview.utils.WrapperAdapterUtils;
+import com.kabouzeid.appthemehelper.ThemeStore;
import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.adapter.song.PlaylistSongAdapter;
import com.kabouzeid.gramophone.adapter.song.SmartPlaylistSongAdapter;
@@ -28,10 +31,9 @@ import com.kabouzeid.gramophone.model.PlaylistSong;
import com.kabouzeid.gramophone.model.Song;
import com.kabouzeid.gramophone.model.smartplaylist.AbsSmartPlaylist;
import com.kabouzeid.gramophone.ui.activities.base.AbsSlidingMusicPanelActivity;
-import com.kabouzeid.gramophone.util.ColorUtil;
import com.kabouzeid.gramophone.util.NavigationUtil;
+import com.kabouzeid.gramophone.util.PhonographColorUtil;
import com.kabouzeid.gramophone.util.PlaylistsUtil;
-import com.kabouzeid.gramophone.util.ViewUtil;
import java.util.ArrayList;
import java.util.List;
@@ -63,9 +65,13 @@ public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity impleme
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- setStatusBarTransparent();
+ setDrawUnderStatusbar(true);
ButterKnife.bind(this);
+ setStatusbarColorAuto();
+ setNavigationbarColorAuto();
+ setTaskDescriptionColorAuto();
+
getIntentExtras();
setUpRecyclerView();
@@ -74,9 +80,9 @@ public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity impleme
setUpToolBar();
- if (shouldColorNavigationBar())
- setNavigationBarThemeColor();
- setStatusBarThemeColor();
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+ getWindow().setEnterTransition(new Slide());
+ }
}
@Override
@@ -137,7 +143,7 @@ public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity impleme
}
private void setUpToolBar() {
- toolbar.setBackgroundColor(getThemeColorPrimary());
+ toolbar.setBackgroundColor(ThemeStore.primaryColor(this));
setSupportActionBar(toolbar);
//noinspection ConstantConditions
getSupportActionBar().setTitle(playlist.name);
@@ -159,10 +165,7 @@ public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity impleme
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_playlist_detail, menu);
- boolean darkContent = ColorUtil.useDarkTextColorOnBackground(getThemeColorPrimary());
- ViewUtil.setToolbarContentDark(this, toolbar, darkContent);
- setUseDarkStatusBarIcons(darkContent);
- return true;
+ return super.onCreateOptionsMenu(menu);
}
@Override
@@ -191,7 +194,7 @@ public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity impleme
cab = new MaterialCab(this, R.id.cab_stub)
.setMenu(menu)
.setCloseDrawableRes(R.drawable.ic_close_white_24dp)
- .setBackgroundColor(ColorUtil.shiftBackgroundColorForLightText(getThemeColorPrimary()))
+ .setBackgroundColor(PhonographColorUtil.shiftBackgroundColorForLightText(ThemeStore.primaryColor(this)))
.start(callback);
return cab;
}
diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/SearchActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/SearchActivity.java
index 19e4844d..df10a4a9 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/SearchActivity.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/SearchActivity.java
@@ -10,7 +10,6 @@ import android.support.v7.widget.Toolbar;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.KeyEvent;
-import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
@@ -19,12 +18,12 @@ import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
+import com.kabouzeid.appthemehelper.ThemeStore;
+import com.kabouzeid.appthemehelper.util.ToolbarContentTintHelper;
import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.adapter.SearchAdapter;
import com.kabouzeid.gramophone.ui.activities.base.AbsMusicServiceActivity;
-import com.kabouzeid.gramophone.util.ColorUtil;
import com.kabouzeid.gramophone.util.Util;
-import com.kabouzeid.gramophone.util.ViewUtil;
import butterknife.Bind;
import butterknife.ButterKnife;
@@ -51,9 +50,13 @@ public class SearchActivity extends AbsMusicServiceActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_search);
- setStatusBarTransparent();
+ setDrawUnderStatusbar(true);
ButterKnife.bind(this);
+ setStatusbarColorAuto();
+ setNavigationbarColorAuto();
+ setTaskDescriptionColorAuto();
+
recyclerView.setLayoutManager(new LinearLayoutManager(this));
searchAdapter = new SearchAdapter(this);
recyclerView.setAdapter(searchAdapter);
@@ -68,29 +71,17 @@ public class SearchActivity extends AbsMusicServiceActivity {
setUpToolBar();
setUpSearchBar();
-
- if (shouldColorNavigationBar())
- setNavigationBarThemeColor();
- setStatusBarThemeColor();
- }
-
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- boolean darkContent = ColorUtil.useDarkTextColorOnBackground(getThemeColorPrimary());
- ViewUtil.setToolbarContentDark(this, toolbar, darkContent);
- setUseDarkStatusBarIcons(darkContent);
- return super.onCreateOptionsMenu(menu);
}
private void setUpToolBar() {
- toolbar.setBackgroundColor(getThemeColorPrimary());
+ toolbar.setBackgroundColor(ThemeStore.primaryColor(this));
setSupportActionBar(toolbar);
//noinspection ConstantConditions
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
private void setUpSearchBar() {
- searchCloseBtn.setColorFilter(ViewUtil.getToolbarIconColor(this, ColorUtil.useDarkTextColorOnBackground(getThemeColorPrimary())), PorterDuff.Mode.SRC_IN);
+ searchCloseBtn.setColorFilter(ToolbarContentTintHelper.toolbarContentColor(this, ThemeStore.primaryColor(this)), PorterDuff.Mode.SRC_IN);
searchCloseBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
@@ -98,8 +89,8 @@ public class SearchActivity extends AbsMusicServiceActivity {
}
});
- searchSrcText.setTextColor(ColorUtil.getPrimaryTextColorForBackground(this, getThemeColorPrimary()));
- searchSrcText.setHintTextColor(ColorUtil.getSecondaryTextColorForBackground(this, getThemeColorPrimary()));
+ searchSrcText.setTextColor(ToolbarContentTintHelper.toolbarTitleColor(this, ThemeStore.primaryColor(this)));
+ searchSrcText.setHintTextColor(ToolbarContentTintHelper.toolbarSubtitleColor(this, ThemeStore.primaryColor(this)));
searchSrcText.setHint(R.string.search_hint);
searchSrcText.addTextChangedListener(new TextWatcher() {
diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/SettingsActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/SettingsActivity.java
index 8030e1de..51b4ffc5 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/SettingsActivity.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/SettingsActivity.java
@@ -10,22 +10,22 @@ import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.PreferenceFragment;
import android.preference.PreferenceManager;
+import android.preference.TwoStatePreference;
import android.support.annotation.ColorInt;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
+import android.support.annotation.StyleRes;
import android.support.v7.widget.Toolbar;
-import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import com.afollestad.materialdialogs.color.ColorChooserDialog;
+import com.kabouzeid.appthemehelper.ThemeStore;
+import com.kabouzeid.appthemehelper.common.prefs.ATEColorPreference;
+import com.kabouzeid.appthemehelper.util.ColorUtil;
import com.kabouzeid.gramophone.R;
-import com.kabouzeid.gramophone.prefs.ColorChooserPreference;
import com.kabouzeid.gramophone.ui.activities.base.AbsBaseActivity;
-import com.kabouzeid.gramophone.util.ColorUtil;
import com.kabouzeid.gramophone.util.NavigationUtil;
-import com.kabouzeid.gramophone.util.PreferenceUtil;
-import com.kabouzeid.gramophone.util.ViewUtil;
import butterknife.Bind;
import butterknife.ButterKnife;
@@ -40,33 +40,41 @@ public class SettingsActivity extends AbsBaseActivity implements ColorChooserDia
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_preferences);
- setStatusBarTransparent();
+ setDrawUnderStatusbar(true);
ButterKnife.bind(this);
- toolbar.setBackgroundColor(getThemeColorPrimary());
+ setStatusbarColorAuto();
+ setNavigationbarColorAuto();
+ setTaskDescriptionColorAuto();
+
+ toolbar.setBackgroundColor(ThemeStore.primaryColor(this));
setSupportActionBar(toolbar);
//noinspection ConstantConditions
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
- if (savedInstanceState == null)
+ if (savedInstanceState == null) {
getFragmentManager().beginTransaction().replace(R.id.content_frame, new SettingsFragment()).commit();
-
- if (shouldColorNavigationBar())
- setNavigationBarThemeColor();
- setStatusBarThemeColor();
+ } else {
+ SettingsFragment frag = (SettingsFragment) getFragmentManager().findFragmentById(R.id.content_frame);
+ if (frag != null) frag.invalidateSettings();
+ }
}
@Override
public void onColorSelection(@NonNull ColorChooserDialog dialog, @ColorInt int selectedColor) {
switch (dialog.getTitle()) {
case R.string.primary_color:
- PreferenceUtil.getInstance(this).setThemeColorPrimary(selectedColor);
+ ThemeStore.editTheme(this)
+ .primaryColor(selectedColor)
+ .commit();
break;
case R.string.accent_color:
- PreferenceUtil.getInstance(this).setThemeColorAccent(selectedColor);
+ ThemeStore.editTheme(this)
+ .accentColor(selectedColor)
+ .commit();
break;
}
- recreateIfThemeChanged();
+ recreate();
}
@Override
@@ -78,14 +86,6 @@ public class SettingsActivity extends AbsBaseActivity implements ColorChooserDia
return super.onOptionsItemSelected(item);
}
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- boolean darkContent = ColorUtil.useDarkTextColorOnBackground(getThemeColorPrimary());
- ViewUtil.setToolbarContentDark(this, toolbar, darkContent);
- setUseDarkStatusBarIcons(darkContent);
- return super.onCreateOptionsMenu(menu);
- }
-
public static class SettingsFragment extends PreferenceFragment {
private static void setSummary(@NonNull Preference preference) {
@@ -109,12 +109,6 @@ public class SettingsActivity extends AbsBaseActivity implements ColorChooserDia
}
}
- @Override
- public void onViewCreated(View view, Bundle savedInstanceState) {
- super.onViewCreated(view, savedInstanceState);
- view.findViewById(android.R.id.list).setPadding(0, 0, 0, 0);
- }
-
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -125,7 +119,16 @@ public class SettingsActivity extends AbsBaseActivity implements ColorChooserDia
addPreferencesFromResource(R.xml.pref_images);
addPreferencesFromResource(R.xml.pref_lockscreen);
addPreferencesFromResource(R.xml.pref_audio);
+ }
+ @Override
+ public void onViewCreated(View view, Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+ view.findViewById(android.R.id.list).setPadding(0, 0, 0, 0);
+ invalidateSettings();
+ }
+
+ private void invalidateSettings() {
final Preference defaultStartPage = findPreference("default_start_page");
setSummary(defaultStartPage);
defaultStartPage.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@@ -142,8 +145,10 @@ public class SettingsActivity extends AbsBaseActivity implements ColorChooserDia
@Override
public boolean onPreferenceChange(Preference preference, @NonNull Object o) {
setSummary(generalTheme, o);
- PreferenceUtil.getInstance(getActivity()).setGeneralTheme(getActivity(), (String) o);
- ((SettingsActivity) getActivity()).recreateIfThemeChanged();
+ ThemeStore.editTheme(getActivity())
+ .activityTheme(getThemeResFromPrefValue((String) o))
+ .commit();
+ getActivity().recreate();
return true;
}
});
@@ -158,46 +163,51 @@ public class SettingsActivity extends AbsBaseActivity implements ColorChooserDia
}
});
- ColorChooserPreference primaryColor = (ColorChooserPreference) findPreference("primary_color");
- primaryColor.setColor(PreferenceUtil.getInstance(getActivity()).getThemeColorPrimary(getActivity()));
- primaryColor.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
+ ATEColorPreference primaryColorPref = (ATEColorPreference) findPreference("primary_color");
+ final int primaryColor = ThemeStore.primaryColor(getActivity());
+ primaryColorPref.setColor(primaryColor, ColorUtil.darkenColor(primaryColor));
+ primaryColorPref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(@NonNull Preference preference) {
new ColorChooserDialog.Builder(((SettingsActivity) getActivity()), R.string.primary_color)
.accentMode(false)
.allowUserColorInput(true)
.allowUserColorInputAlpha(false)
- .preselect(PreferenceUtil.getInstance(getActivity()).getThemeColorPrimary(getActivity()))
+ .preselect(primaryColor)
.show();
return true;
}
});
- ColorChooserPreference accentColor = (ColorChooserPreference) findPreference("accent_color");
- accentColor.setColor(PreferenceUtil.getInstance(getActivity()).getThemeColorAccent(getActivity()));
- accentColor.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
+ ATEColorPreference accentColorPref = (ATEColorPreference) findPreference("accent_color");
+ final int accentColor = ThemeStore.accentColor(getActivity());
+ accentColorPref.setColor(accentColor, ColorUtil.darkenColor(accentColor));
+ accentColorPref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(@NonNull Preference preference) {
new ColorChooserDialog.Builder(((SettingsActivity) getActivity()), R.string.accent_color)
.accentMode(true)
.allowUserColorInput(true)
.allowUserColorInputAlpha(false)
- .preselect(PreferenceUtil.getInstance(getActivity()).getThemeColorAccent(getActivity()))
+ .preselect(accentColor)
.show();
return true;
}
});
- Preference colorNavBar = findPreference("should_color_navigation_bar");
+ TwoStatePreference colorNavBar = (TwoStatePreference) findPreference("should_color_navigation_bar");
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
colorNavBar.setEnabled(false);
colorNavBar.setSummary(R.string.pref_only_lollipop);
} else {
+ colorNavBar.setChecked(ThemeStore.coloredNavigationBar(getActivity()));
colorNavBar.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
- PreferenceUtil.getInstance(getActivity()).setColoredNavigationBar((boolean) newValue);
- ((SettingsActivity) getActivity()).recreateIfThemeChanged();
+ ThemeStore.editTheme(getActivity())
+ .coloredNavigationBar((Boolean) newValue)
+ .commit();
+ getActivity().recreate();
return true;
}
});
@@ -223,5 +233,18 @@ public class SettingsActivity extends AbsBaseActivity implements ColorChooserDia
ResolveInfo ri = pm.resolveActivity(effects, 0);
return ri != null;
}
+
+ @StyleRes
+ public int getThemeResFromPrefValue(String themePrefValue) {
+ switch (themePrefValue) {
+ case "dark":
+ return R.style.Theme_Phonograph;
+ case "black":
+ return R.style.Theme_Phonograph_Black;
+ case "light":
+ default:
+ return R.style.Theme_Phonograph_Light;
+ }
+ }
}
}
diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsBaseActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsBaseActivity.java
index 2536a802..b98ddbe2 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsBaseActivity.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsBaseActivity.java
@@ -7,7 +7,6 @@ import android.media.AudioManager;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
-import android.os.Handler;
import android.provider.Settings;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
@@ -16,7 +15,7 @@ import android.support.v4.app.ActivityCompat;
import android.view.KeyEvent;
import android.view.View;
-import com.afollestad.materialdialogs.internal.ThemeSingleton;
+import com.kabouzeid.appthemehelper.ThemeStore;
import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.interfaces.KabViewsDisableAble;
@@ -66,18 +65,9 @@ public abstract class AbsBaseActivity extends AbsThemeActivity implements KabVie
}
protected void onPermissionsChanged() {
- postRecreate();
- }
-
- protected void postRecreate() {
if (!recreating) {
recreating = true;
- new Handler().postDelayed(new Runnable() {
- @Override
- public void run() {
- recreate();
- }
- }, 200);
+ postRecreate();
}
}
@@ -165,7 +155,7 @@ public abstract class AbsBaseActivity extends AbsThemeActivity implements KabVie
requestPermissions();
}
})
- .setActionTextColor(ThemeSingleton.get().positiveColor)
+ .setActionTextColor(ThemeStore.accentColor(this))
.show();
} else {
// User has deny permission and checked never show permission dialog so you can redirect to Application settings page
@@ -181,7 +171,7 @@ public abstract class AbsBaseActivity extends AbsThemeActivity implements KabVie
startActivity(intent);
}
})
- .setActionTextColor(ThemeSingleton.get().positiveColor)
+ .setActionTextColor(ThemeStore.accentColor(this))
.show();
}
return;
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 00080515..80116b59 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
@@ -33,9 +33,9 @@ public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivi
@Bind(R.id.sliding_layout)
SlidingUpPanelLayout slidingUpPanelLayout;
- private int navigationBarColor;
+ private int navigationbarColor;
private int taskColor;
- private boolean useDarkStatusBarIcons;
+ private boolean lightStatusbar;
private AbsPlayerFragment playerFragment;
private MiniPlayerFragment miniPlayerFragment;
@@ -100,11 +100,11 @@ public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivi
@Override
public void onPanelCollapsed(View view) {
- super.setUseDarkStatusBarIcons(useDarkStatusBarIcons);
- super.notifyTaskColorChange(taskColor);
- if (shouldColorNavigationBar()) {
- super.setNavigationBarColor(navigationBarColor);
- }
+ // restore values
+ super.setLightStatusbar(lightStatusbar);
+ super.setTaskDescriptionColor(taskColor);
+ super.setNavigationbarColor(navigationbarColor);
+
playerFragment.setMenuVisibility(false);
playerFragment.setUserVisibleHint(false);
playerFragment.onHide();
@@ -112,12 +112,12 @@ public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivi
@Override
public void onPanelExpanded(View view) {
- super.setUseDarkStatusBarIcons(false);
+ // setting fragments values
int playerFragmentColor = playerFragment.getPaletteColor();
- super.notifyTaskColorChange(playerFragmentColor);
- if (shouldColorNavigationBar()) {
- super.setNavigationBarColor(playerFragmentColor);
- }
+ super.setLightStatusbar(false);
+ super.setTaskDescriptionColor(playerFragmentColor);
+ super.setNavigationbarColor(playerFragmentColor);
+
playerFragment.setMenuVisibility(true);
playerFragment.setUserVisibleHint(true);
playerFragment.onShow();
@@ -182,38 +182,44 @@ public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivi
super.onBackPressed();
}
- @Override
- protected void setUseDarkStatusBarIcons(boolean useDarkIcons) {
- useDarkStatusBarIcons = useDarkIcons;
- if (getPanelState() == SlidingUpPanelLayout.PanelState.COLLAPSED) {
- super.setUseDarkStatusBarIcons(useDarkIcons);
- }
- }
-
- @Override
- protected void setNavigationBarColor(@ColorInt int color) {
- this.navigationBarColor = color;
- if (getPanelState() == SlidingUpPanelLayout.PanelState.COLLAPSED) {
- super.setNavigationBarColor(color);
- }
- }
-
- @Override
- protected void notifyTaskColorChange(@ColorInt int color) {
- this.taskColor = color;
- if (getPanelState() == null || getPanelState() == SlidingUpPanelLayout.PanelState.COLLAPSED) {
- super.notifyTaskColorChange(color);
- }
- }
-
@Override
public void onPaletteColorChanged() {
if (getPanelState() == SlidingUpPanelLayout.PanelState.EXPANDED) {
int playerFragmentColor = playerFragment.getPaletteColor();
- super.notifyTaskColorChange(playerFragmentColor);
- if (shouldColorNavigationBar()) {
- super.setNavigationBarColor(playerFragmentColor);
- }
+ super.setTaskDescriptionColor(playerFragmentColor);
+ super.setNavigationbarColor(playerFragmentColor);
}
}
+
+ @Override
+ public void setLightStatusbar(boolean enabled) {
+ lightStatusbar = enabled;
+ if (getPanelState() == SlidingUpPanelLayout.PanelState.COLLAPSED) {
+ super.setLightStatusbar(enabled);
+ }
+ }
+
+ @Override
+ public void setNavigationbarColor(int color) {
+ this.navigationbarColor = color;
+ if (getPanelState() == SlidingUpPanelLayout.PanelState.COLLAPSED) {
+ super.setNavigationbarColor(color);
+ }
+ }
+
+ @Override
+ public void setTaskDescriptionColor(@ColorInt int color) {
+ this.taskColor = color;
+ if (getPanelState() == null || getPanelState() == SlidingUpPanelLayout.PanelState.COLLAPSED) {
+ super.setTaskDescriptionColor(color);
+ }
+ }
+
+ public MiniPlayerFragment getMiniPlayerFragment() {
+ return miniPlayerFragment;
+ }
+
+ public AbsPlayerFragment getPlayerFragment() {
+ return playerFragment;
+ }
}
diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsThemeActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsThemeActivity.java
index e0a7d54d..ea9beb85 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsThemeActivity.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsThemeActivity.java
@@ -1,192 +1,94 @@
package com.kabouzeid.gramophone.ui.activities.base;
-import android.app.ActivityManager;
-import android.content.res.ColorStateList;
-import android.graphics.Color;
import android.os.Build;
import android.os.Bundle;
-import android.os.Handler;
import android.support.annotation.ColorInt;
-import android.support.annotation.Nullable;
-import android.support.v7.app.AppCompatActivity;
import android.view.View;
-import com.afollestad.materialdialogs.internal.ThemeSingleton;
+import com.kabouzeid.appthemehelper.ATH;
+import com.kabouzeid.appthemehelper.ThemeStore;
+import com.kabouzeid.appthemehelper.common.ATHToolbarActivity;
+import com.kabouzeid.appthemehelper.util.ColorUtil;
+import com.kabouzeid.appthemehelper.util.MaterialDialogsUtil;
import com.kabouzeid.gramophone.R;
-import com.kabouzeid.gramophone.interfaces.KabViewsDisableAble;
-import com.kabouzeid.gramophone.util.ColorUtil;
-import com.kabouzeid.gramophone.util.PreferenceUtil;
import com.kabouzeid.gramophone.util.Util;
/**
- * @author Aidan Follestad (afollestad), Karim Abou Zeid (kabouzeid)
+ * @author Karim Abou Zeid (kabouzeid)
*/
-public abstract class AbsThemeActivity extends AppCompatActivity implements KabViewsDisableAble {
- private int colorPrimary;
- private int colorPrimaryDarker;
- private int colorAccent;
- private int theme;
- private boolean coloredNavigationBar;
-
- @Nullable
- private ActivityManager.TaskDescription taskDescription;
+public abstract class AbsThemeActivity extends ATHToolbarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
- theme = PreferenceUtil.getInstance(this).getGeneralTheme();
- setTheme(theme);
+ // default theme
+ if (!ThemeStore.isConfigured(this, 1)) {
+ ThemeStore.editTheme(this)
+ .activityTheme(R.style.Theme_Phonograph_Light)
+ .primaryColorRes(R.color.indigo_500)
+ .accentColorRes(R.color.pink_A400)
+ .commit();
+ }
super.onCreate(savedInstanceState);
- setupTheme();
+ MaterialDialogsUtil.updateMaterialDialogsThemeSingleton(this);
}
- @Override
- protected void onResume() {
- super.onResume();
- // the handler is necessary to avoid "java.lang.RuntimeException: Performing pause of activity that is not resumed"
- new Handler().postDelayed(new Runnable() {
- @Override
- public void run() {
- recreateIfThemeChanged();
- }
- }, 200);
- }
-
- private void setupTheme() {
- boolean dark = theme != R.style.Theme_Phonograph_Light;
-
- colorPrimary = PreferenceUtil.getInstance(this).getThemeColorPrimary(this);
- colorPrimaryDarker = ColorUtil.shiftColorDown(colorPrimary);
- colorAccent = PreferenceUtil.getInstance(this).getThemeColorAccent(this);
- coloredNavigationBar = PreferenceUtil.getInstance(this).shouldUseColoredNavigationBar();
-
- final ColorStateList accentColorStateList;
- if (colorAccent == Color.WHITE && !dark) {
- accentColorStateList = ColorStateList.valueOf(Color.BLACK);
- } else if (colorAccent == Color.BLACK && dark) {
- accentColorStateList = ColorStateList.valueOf(Color.WHITE);
- } else {
- accentColorStateList = ColorStateList.valueOf(colorAccent);
- }
-
- ThemeSingleton.get().positiveColor = accentColorStateList;
- ThemeSingleton.get().negativeColor = accentColorStateList;
- ThemeSingleton.get().neutralColor = accentColorStateList;
- ThemeSingleton.get().widgetColor = accentColorStateList.getDefaultColor();
- ThemeSingleton.get().darkTheme = dark;
-
-
- if (!overridesTaskColor()) {
- notifyTaskColorChange(getThemeColorPrimary());
- }
- }
-
- protected void recreateIfThemeChanged() {
- if (didThemeChanged()) {
- recreate();
- }
- }
-
- private boolean didThemeChanged() {
- return coloredNavigationBar != PreferenceUtil.getInstance(this).shouldUseColoredNavigationBar() ||
- colorPrimary != PreferenceUtil.getInstance(this).getThemeColorPrimary(this) ||
- colorAccent != PreferenceUtil.getInstance(this).getThemeColorAccent(this) ||
- theme != PreferenceUtil.getInstance(this).getGeneralTheme();
- }
-
- protected void notifyTaskColorChange(@ColorInt int color) {
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
- // Sets color of entry in the system recents page
- if (taskDescription == null || taskDescription.getPrimaryColor() != color) {
- taskDescription = new ActivityManager.TaskDescription(
- null,
- null,
- ColorUtil.getOpaqueColor(color));
- setTaskDescription(taskDescription);
- }
- }
- }
-
- public int getThemeColorPrimary() {
- return colorPrimary;
- }
-
- public int getThemeColorPrimaryDarker() {
- return colorPrimaryDarker;
- }
-
- public int getThemeColorAccent() {
- return colorAccent;
- }
-
- public boolean shouldColorNavigationBar() {
- return coloredNavigationBar;
- }
-
- protected void setStatusBarTransparent() {
+ // TODO see "materialize" library for setting window flags
+ protected void setDrawUnderStatusbar(boolean drawUnderStatusbar) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
Util.setAllowDrawUnderStatusBar(getWindow());
else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)
Util.setStatusBarTranslucent(getWindow());
}
- protected void setNavigationBarColor(@ColorInt int color) {
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
- getWindow().setNavigationBarColor(color);
- }
-
/**
* This will set the color of the view with the id "status_bar" on KitKat and Lollipop.
* On Lollipop if no such view is found it will set the statusbar color using the native method.
*
* @param color the new statusbar color (will be shifted down on Lollipop and above)
*/
- protected final void setStatusBarColor(@ColorInt int color) {
+ public void setStatusbarColor(int color) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
final View statusBar = getWindow().getDecorView().getRootView().findViewById(R.id.status_bar);
if (statusBar != null) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
- statusBar.setBackgroundColor(ColorUtil.shiftColorDown(color));
+ statusBar.setBackgroundColor(ColorUtil.darkenColor(color));
+ ATH.setLightStatusbarAuto(this, color);
} else {
statusBar.setBackgroundColor(color);
}
- } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
- getWindow().setStatusBarColor(ColorUtil.shiftColorDown(color));
- }
- }
-
- }
-
- protected void setUseDarkStatusBarIcons(boolean useDarkIcons) {
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
- int systemUiVisibility = getWindow().getDecorView().getSystemUiVisibility();
- if (useDarkIcons) {
- getWindow().getDecorView().setSystemUiVisibility(systemUiVisibility | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
} else {
- getWindow().getDecorView().setSystemUiVisibility(systemUiVisibility & ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
+ ATH.setStatusbarColor(this, ColorUtil.darkenColor(color));
}
}
}
- protected final void setNavigationBarThemeColor() {
- setNavigationBarColor(colorPrimary);
+ public void setStatusbarColorAuto() {
+ // we don't want to use statusbar color because we are doing the color darkening on our own to support KitKat
+ setStatusbarColor(ThemeStore.primaryColor(this));
}
- protected final void setStatusBarThemeColor() {
- setStatusBarColor(colorPrimary);
+ public void setTaskDescriptionColor(@ColorInt int color) {
+ ATH.setTaskDescriptionColor(this, color);
}
- protected final void resetNavigationBarColor() {
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
- setNavigationBarColor(ColorUtil.resolveColor(this, android.R.attr.navigationBarColor));
+ public void setTaskDescriptionColorAuto() {
+ setTaskDescriptionColor(ThemeStore.primaryColor(this));
}
- protected final void resetStatusBarColor() {
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
- setStatusBarColor(ColorUtil.resolveColor(this, android.R.attr.statusBarColor));
+ public void setNavigationbarColor(int color) {
+ ATH.setNavigationbarColor(this, color);
}
- protected boolean overridesTaskColor() {
- return false;
+ public void setNavigationbarColorAuto() {
+ setNavigationbarColor(ThemeStore.navigationBarColor(this));
+ }
+
+ public void setLightStatusbar(boolean enabled) {
+ ATH.setLightStatusbar(this, enabled);
+ }
+
+ public void setLightStatusbarAuto(int bgColor) {
+ setLightStatusbar(ColorUtil.isColorLight(bgColor));
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/tageditor/AbsTagEditorActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/tageditor/AbsTagEditorActivity.java
index a63da241..cf536dd2 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/tageditor/AbsTagEditorActivity.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/tageditor/AbsTagEditorActivity.java
@@ -3,10 +3,8 @@ package com.kabouzeid.gramophone.ui.activities.tageditor;
import android.app.SearchManager;
import android.content.Intent;
import android.content.pm.ActivityInfo;
-import android.content.res.ColorStateList;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
-import android.graphics.PorterDuff;
import android.media.MediaScannerConnection;
import android.net.Uri;
import android.os.Build;
@@ -16,7 +14,6 @@ import android.support.annotation.Nullable;
import android.support.design.widget.FloatingActionButton;
import android.support.v7.widget.Toolbar;
import android.util.Log;
-import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.animation.OvershootInterpolator;
@@ -25,13 +22,14 @@ import android.widget.LinearLayout;
import com.afollestad.materialdialogs.MaterialDialog;
import com.github.ksoichiro.android.observablescrollview.ObservableScrollView;
+import com.kabouzeid.appthemehelper.ThemeStore;
+import com.kabouzeid.appthemehelper.util.ColorUtil;
+import com.kabouzeid.appthemehelper.util.TintHelper;
import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.misc.SimpleObservableScrollViewCallbacks;
import com.kabouzeid.gramophone.ui.activities.base.AbsBaseActivity;
-import com.kabouzeid.gramophone.util.ColorUtil;
import com.kabouzeid.gramophone.util.MusicUtil;
import com.kabouzeid.gramophone.util.Util;
-import com.kabouzeid.gramophone.util.ViewUtil;
import org.jaudiotagger.audio.AudioFile;
import org.jaudiotagger.audio.AudioFileIO;
@@ -86,7 +84,7 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity {
header.setTranslationY(scrollY);
alpha = 1;
}
- toolbar.setBackgroundColor(ColorUtil.getColorWithAlpha(alpha, paletteColorPrimary));
+ toolbar.setBackgroundColor(ColorUtil.withAlpha(paletteColorPrimary, alpha));
image.setTranslationY(scrollY / 2);
}
};
@@ -189,10 +187,7 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity {
}
});
- int fabColor = getThemeColorAccent();
- int fabDrawableColor = ColorUtil.getPrimaryTextColorForBackground(this, fabColor);
- fab.setBackgroundTintList(ColorStateList.valueOf(fabColor));
- fab.getDrawable().setColorFilter(fabDrawableColor, PorterDuff.Mode.SRC_IN);
+ TintHelper.setTintAuto(fab, ThemeStore.accentColor(this), true);
}
protected abstract void save();
@@ -233,14 +228,6 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity {
return super.onOptionsItemSelected(item);
}
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- boolean darkContent = ColorUtil.useDarkTextColorOnBackground(paletteColorPrimary);
- ViewUtil.setToolbarContentDark(this, toolbar, darkContent);
- setUseDarkStatusBarIcons(darkContent);
- return super.onCreateOptionsMenu(menu);
- }
-
protected void setNoImageMode() {
isInNoImageMode = true;
image.setVisibility(View.GONE);
@@ -248,14 +235,13 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity {
observableScrollView.setPadding(0, Util.getActionBarSize(this), 0, 0);
observableScrollViewCallbacks.onScrollChanged(observableScrollView.getCurrentScrollY(), false, false);
- paletteColorPrimary = getIntent().getIntExtra(EXTRA_PALETTE,
- getThemeColorPrimary());
+ paletteColorPrimary = getIntent().getIntExtra(EXTRA_PALETTE, ThemeStore.primaryColor(this));
toolbar.setBackgroundColor(paletteColorPrimary);
header.setBackgroundColor(paletteColorPrimary);
- if (shouldColorNavigationBar())
- setNavigationBarColor(paletteColorPrimary);
- setStatusBarColor(paletteColorPrimary);
+ setStatusbarColor(paletteColorPrimary);
+ setNavigationbarColor(paletteColorPrimary);
+ setTaskDescriptionColor(paletteColorPrimary);
}
protected void dataChanged() {
@@ -284,19 +270,10 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity {
private void setColors(int color) {
paletteColorPrimary = color;
observableScrollViewCallbacks.onScrollChanged(observableScrollView.getCurrentScrollY(), false, false);
- if (shouldColorNavigationBar())
- setNavigationBarColor(paletteColorPrimary);
- setStatusBarColor(paletteColorPrimary);
header.setBackgroundColor(paletteColorPrimary);
- boolean darkContent = ColorUtil.useDarkTextColorOnBackground(paletteColorPrimary);
- ViewUtil.setToolbarContentDark(AbsTagEditorActivity.this, toolbar, darkContent);
- setUseDarkStatusBarIcons(darkContent);
- notifyTaskColorChange(paletteColorPrimary);
- }
-
- @Override
- protected boolean overridesTaskColor() {
- return true;
+ setStatusbarColor(paletteColorPrimary);
+ setNavigationbarColor(paletteColorPrimary);
+ setTaskDescriptionColor(paletteColorPrimary);
}
protected void writeValuesToFiles(@NonNull final Map fieldKeyValueMap) {
diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/tageditor/AlbumTagEditorActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/tageditor/AlbumTagEditorActivity.java
index 83a04e0c..f402e1fb 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/tageditor/AlbumTagEditorActivity.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/tageditor/AlbumTagEditorActivity.java
@@ -18,6 +18,7 @@ import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.bumptech.glide.request.animation.GlideAnimation;
import com.bumptech.glide.request.target.SimpleTarget;
+import com.kabouzeid.appthemehelper.util.ATHUtil;
import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.glide.palette.BitmapPaletteTranscoder;
import com.kabouzeid.gramophone.glide.palette.BitmapPaletteWrapper;
@@ -25,9 +26,9 @@ import com.kabouzeid.gramophone.lastfm.rest.LastFMRestClient;
import com.kabouzeid.gramophone.lastfm.rest.model.LastFmAlbum;
import com.kabouzeid.gramophone.loader.AlbumLoader;
import com.kabouzeid.gramophone.model.Song;
-import com.kabouzeid.gramophone.util.ColorUtil;
import com.kabouzeid.gramophone.util.LastFMUtil;
import com.kabouzeid.gramophone.util.MusicUtil;
+import com.kabouzeid.gramophone.util.PhonographColorUtil;
import org.jaudiotagger.tag.FieldKey;
import org.jaudiotagger.tag.images.Artwork;
@@ -92,7 +93,7 @@ public class AlbumTagEditorActivity extends AbsTagEditorActivity implements Text
@Override
protected void loadCurrentImage() {
Bitmap bitmap = getAlbumArt();
- setImageBitmap(bitmap, ColorUtil.getColor(ColorUtil.generatePalette(bitmap), ColorUtil.resolveColor(this, R.attr.default_bar_color)));
+ setImageBitmap(bitmap, PhonographColorUtil.getColor(PhonographColorUtil.generatePalette(bitmap), ATHUtil.resolveColor(this, R.attr.default_bar_color)));
deleteAlbumArt = false;
}
@@ -128,7 +129,7 @@ public class AlbumTagEditorActivity extends AbsTagEditorActivity implements Text
@Override
public void onResourceReady(BitmapPaletteWrapper resource, GlideAnimation super BitmapPaletteWrapper> glideAnimation) {
albumArtBitmap = getResizedAlbumCover(resource.getBitmap(), 2048);
- setImageBitmap(albumArtBitmap, ColorUtil.getColor(resource.getPalette(), ColorUtil.resolveColor(AlbumTagEditorActivity.this, R.attr.default_bar_color)));
+ setImageBitmap(albumArtBitmap, PhonographColorUtil.getColor(resource.getPalette(), ATHUtil.resolveColor(AlbumTagEditorActivity.this, R.attr.default_bar_color)));
deleteAlbumArt = false;
dataChanged();
setResult(RESULT_OK);
@@ -159,7 +160,7 @@ public class AlbumTagEditorActivity extends AbsTagEditorActivity implements Text
@Override
protected void deleteImage() {
- setImageBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.default_album_art), ColorUtil.resolveColor(this, R.attr.default_bar_color));
+ setImageBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.default_album_art), ATHUtil.resolveColor(this, R.attr.default_bar_color));
deleteAlbumArt = true;
dataChanged();
}
@@ -223,9 +224,9 @@ public class AlbumTagEditorActivity extends AbsTagEditorActivity implements Text
@Override
public void onResourceReady(BitmapPaletteWrapper resource, GlideAnimation super BitmapPaletteWrapper> glideAnimation) {
- ColorUtil.getColor(resource.getPalette(), Color.TRANSPARENT);
+ PhonographColorUtil.getColor(resource.getPalette(), Color.TRANSPARENT);
albumArtBitmap = getResizedAlbumCover(resource.getBitmap(), 2048);
- setImageBitmap(albumArtBitmap, ColorUtil.getColor(resource.getPalette(), ColorUtil.resolveColor(AlbumTagEditorActivity.this, R.attr.default_bar_color)));
+ setImageBitmap(albumArtBitmap, PhonographColorUtil.getColor(resource.getPalette(), ATHUtil.resolveColor(AlbumTagEditorActivity.this, R.attr.default_bar_color)));
deleteAlbumArt = false;
dataChanged();
setResult(RESULT_OK);
diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AbsMainActivityRecyclerViewFragment.java b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AbsMainActivityRecyclerViewFragment.java
index 139261d3..2e80b6ec 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AbsMainActivityRecyclerViewFragment.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AbsMainActivityRecyclerViewFragment.java
@@ -13,9 +13,13 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
+import com.kabouzeid.appthemehelper.ThemeStore;
+import com.kabouzeid.appthemehelper.util.ATHUtil;
+import com.kabouzeid.appthemehelper.util.ColorUtil;
+import com.kabouzeid.appthemehelper.util.MaterialValueHelper;
import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.interfaces.MusicServiceEventListener;
-import com.kabouzeid.gramophone.views.FastScroller;
+import com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView;
import butterknife.Bind;
import butterknife.ButterKnife;
@@ -27,6 +31,8 @@ public abstract class AbsMainActivityRecyclerViewFragment {
- private static SwatchComparator sInstance;
-
- static SwatchComparator getInstance() {
- if (sInstance == null) {
- sInstance = new SwatchComparator();
- }
- return sInstance;
- }
-
- @Override
- public int compare(Palette.Swatch lhs, Palette.Swatch rhs) {
- return lhs.getPopulation() - rhs.getPopulation();
- }
- }
-
- @ColorInt
- public static int resolveColor(@NonNull Context context, @AttrRes int colorAttr) {
- TypedArray a = context.obtainStyledAttributes(new int[]{colorAttr});
- int resId = a.getColor(0, 0);
- a.recycle();
- return resId;
- }
-
- @ColorInt
- public static int getOpaqueColor(@ColorInt int color) {
- return color | 0xFF000000;
- }
-
- @ColorInt
- public static int getColorWithAlpha(float alpha, @ColorInt int baseColor) {
- int a = Math.min(255, Math.max(0, (int) (alpha * 255))) << 24;
- int rgb = 0x00ffffff & baseColor;
- return a + rgb;
- }
-
- @ColorInt
- public static int shiftColor(@ColorInt int color, @FloatRange(from = 0.0f, to = 2.0f) float by) {
- if (by == 1f) return color;
- int alpha = Color.alpha(color);
- float[] hsv = new float[3];
- Color.colorToHSV(color, hsv);
- hsv[2] *= by; // value component
- // don't use getColorWithAlpha(float alpha, int baseColor) here
- return (alpha << 24) + (0x00ffffff & Color.HSVToColor(hsv));
- }
-
- @SuppressWarnings("ResourceType")
- @ColorInt
- public static int shiftColorDown(@ColorInt int color) {
- return shiftColor(color, 0.9f);
- }
-
- @SuppressWarnings("ResourceType")
- @ColorInt
- public static int shiftColorUp(@ColorInt int color) {
- return shiftColor(color, 1.1f);
- }
-
- @ColorInt
- public static int getPrimaryTextColor(final Context context, boolean dark) {
- return dark ? ContextCompat.getColor(context, R.color.primary_text_default_material_light) : ContextCompat.getColor(context, R.color.primary_text_default_material_dark);
- }
-
- @ColorInt
- public static int getSecondaryTextColor(final Context context, boolean dark) {
- return dark ? ContextCompat.getColor(context, R.color.secondary_text_default_material_light) : ContextCompat.getColor(context, R.color.secondary_text_default_material_dark);
- }
-
- @ColorInt
- public static int getPrimaryDisabledTextColor(final Context context, boolean dark) {
- return dark ? ContextCompat.getColor(context, R.color.primary_text_disabled_material_light) : ContextCompat.getColor(context, R.color.primary_text_disabled_material_dark);
- }
-
- @ColorInt
- public static int getSecondaryDisabledTextColor(final Context context, boolean dark) {
- return dark ? ContextCompat.getColor(context, R.color.secondary_text_disabled_material_light) : ContextCompat.getColor(context, R.color.secondary_text_disabled_material_dark);
- }
-
- public static float getLuminance(@ColorInt int color) {
- return (Color.red(color) * 0.299f + Color.green(color) * 0.587f + Color.blue(color) * 0.114f);
- }
-
- public static boolean useDarkTextColorOnBackground(@ColorInt int backgroundColor) {
- return getLuminance(backgroundColor) > (255f / 1.5f);
- }
-
- @ColorInt
- public static int getPrimaryTextColorForBackground(final Context context, @ColorInt int backgroundColor) {
- return getPrimaryTextColor(context, useDarkTextColorOnBackground(backgroundColor));
- }
-
- @ColorInt
- public static int getSecondaryTextColorForBackground(final Context context, @ColorInt int backgroundColor) {
- return getSecondaryTextColor(context, useDarkTextColorOnBackground(backgroundColor));
- }
-
- @ColorInt
- public static int getPrimaryDisabledTextColorForBackground(final Context context, @ColorInt int backgroundColor) {
- return getPrimaryDisabledTextColor(context, useDarkTextColorOnBackground(backgroundColor));
- }
-
- @ColorInt
- public static int getSecondaryDisabledTextColorForBackground(final Context context, @ColorInt int backgroundColor) {
- return getSecondaryDisabledTextColor(context, useDarkTextColorOnBackground(backgroundColor));
- }
-
- @ColorInt
- public static int shiftBackgroundColorForLightText(@ColorInt int backgroundColor) {
- while (ColorUtil.useDarkTextColorOnBackground(backgroundColor)) {
- backgroundColor = ColorUtil.shiftColorDown(backgroundColor);
- }
- return backgroundColor;
- }
-
- @ColorInt
- public static int shiftBackgroundColorForDarkText(@ColorInt int backgroundColor) {
- while (!ColorUtil.useDarkTextColorOnBackground(backgroundColor)) {
- backgroundColor = ColorUtil.shiftColorUp(backgroundColor);
- }
- return backgroundColor;
- }
-
- public static int[] rgb2lab(int R, int G, int B) {
- //http://www.brucelindbloom.com
-
- float r, g, b, X, Y, Z, fx, fy, fz, xr, yr, zr;
- float Ls, as, bs;
- float eps = 216.f / 24389.f;
- float k = 24389.f / 27.f;
-
- float Xr = 0.964221f; // reference white D50
- float Yr = 1.0f;
- float Zr = 0.825211f;
-
- // RGB to XYZ
- r = R / 255.f; //R 0..1
- g = G / 255.f; //G 0..1
- b = B / 255.f; //B 0..1
-
- // assuming sRGB (D65)
- if (r <= 0.04045)
- r = r / 12;
- else
- r = (float) Math.pow((r + 0.055) / 1.055, 2.4);
-
- if (g <= 0.04045)
- g = g / 12;
- else
- g = (float) Math.pow((g + 0.055) / 1.055, 2.4);
-
- if (b <= 0.04045)
- b = b / 12;
- else
- b = (float) Math.pow((b + 0.055) / 1.055, 2.4);
-
-
- X = 0.436052025f * r + 0.385081593f * g + 0.143087414f * b;
- Y = 0.222491598f * r + 0.71688606f * g + 0.060621486f * b;
- Z = 0.013929122f * r + 0.097097002f * g + 0.71418547f * b;
-
- // XYZ to Lab
- xr = X / Xr;
- yr = Y / Yr;
- zr = Z / Zr;
-
- if (xr > eps)
- fx = (float) Math.pow(xr, 1 / 3.);
- else
- fx = (float) ((k * xr + 16.) / 116.);
-
- if (yr > eps)
- fy = (float) Math.pow(yr, 1 / 3.);
- else
- fy = (float) ((k * yr + 16.) / 116.);
-
- if (zr > eps)
- fz = (float) Math.pow(zr, 1 / 3.);
- else
- fz = (float) ((k * zr + 16.) / 116);
-
- Ls = (116 * fy) - 16;
- as = 500 * (fx - fy);
- bs = 200 * (fy - fz);
-
- int[] lab = new int[3];
- lab[0] = (int) (2.55 * Ls + .5);
- lab[1] = (int) (as + .5);
- lab[2] = (int) (bs + .5);
- return lab;
- }
-
- /**
- * Computes the difference between two RGB colors by converting them to the L*a*b scale and
- * comparing them using the CIE76 algorithm { http://en.wikipedia.org/wiki/Color_difference#CIE76}
- *
- * @return > 23 corresponds to a JND (just noticeable difference)
- */
- public static double getColorDifference(int a, int b) {
- int r1, g1, b1, r2, g2, b2;
- r1 = Color.red(a);
- g1 = Color.green(a);
- b1 = Color.blue(a);
- r2 = Color.red(b);
- g2 = Color.green(b);
- b2 = Color.blue(b);
- int[] lab1 = rgb2lab(r1, g1, b1);
- int[] lab2 = rgb2lab(r2, g2, b2);
- return Math.sqrt(Math.pow(lab2[0] - lab1[0], 2) + Math.pow(lab2[1] - lab1[1], 2) + Math.pow(lab2[2] - lab1[2], 2));
- }
-}
diff --git a/app/src/main/java/com/kabouzeid/gramophone/util/NavigationUtil.java b/app/src/main/java/com/kabouzeid/gramophone/util/NavigationUtil.java
index 6cc4ef96..744cc915 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/util/NavigationUtil.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/util/NavigationUtil.java
@@ -8,6 +8,7 @@ import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.ActivityOptionsCompat;
import android.support.v4.util.Pair;
+import android.view.View;
import android.widget.Toast;
import com.kabouzeid.gramophone.R;
@@ -17,44 +18,68 @@ import com.kabouzeid.gramophone.model.Playlist;
import com.kabouzeid.gramophone.ui.activities.AlbumDetailActivity;
import com.kabouzeid.gramophone.ui.activities.ArtistDetailActivity;
import com.kabouzeid.gramophone.ui.activities.PlaylistDetailActivity;
+import com.kabouzeid.gramophone.ui.activities.base.AbsSlidingMusicPanelActivity;
/**
* @author Karim Abou Zeid (kabouzeid)
*/
public class NavigationUtil {
- public static void goToArtist(@NonNull final Activity activity, final int artistId, @Nullable final Pair... sharedElements) {
- if (activity instanceof ArtistDetailActivity) return;
+ public static void goToArtist(@NonNull final Activity activity, final int artistId, @Nullable Pair... sharedElements) {
if (!disableViewsAndCheckIsReadyForTransition(activity)) return;
final Intent intent = new Intent(activity, ArtistDetailActivity.class);
intent.putExtra(ArtistDetailActivity.EXTRA_ARTIST_ID, artistId);
+ sharedElements = addMiniPlayerSharedElement(activity, sharedElements);
+
//noinspection unchecked
activity.startActivity(intent, ActivityOptionsCompat.makeSceneTransitionAnimation(activity, sharedElements).toBundle());
}
- public static void goToAlbum(@NonNull final Activity activity, final int albumId, @Nullable final Pair... sharedElements) {
- if (activity instanceof AlbumDetailActivity) return;
+ public static void goToAlbum(@NonNull final Activity activity, final int albumId, @Nullable Pair... sharedElements) {
if (!disableViewsAndCheckIsReadyForTransition(activity)) return;
final Intent intent = new Intent(activity, AlbumDetailActivity.class);
intent.putExtra(AlbumDetailActivity.EXTRA_ALBUM_ID, albumId);
+ sharedElements = addMiniPlayerSharedElement(activity, sharedElements);
+
//noinspection unchecked
activity.startActivity(intent, ActivityOptionsCompat.makeSceneTransitionAnimation(activity, sharedElements).toBundle());
}
- public static void goToPlaylist(@NonNull final Activity activity, final Playlist playlist, @Nullable final Pair... sharedElements) {
+ public static void goToPlaylist(@NonNull final Activity activity, final Playlist playlist, @Nullable Pair... sharedElements) {
if (!disableViewsAndCheckIsReadyForTransition(activity)) return;
final Intent intent = new Intent(activity, PlaylistDetailActivity.class);
intent.putExtra(PlaylistDetailActivity.EXTRA_PLAYLIST, playlist);
+ sharedElements = addMiniPlayerSharedElement(activity, sharedElements);
+
//noinspection unchecked
activity.startActivity(intent, ActivityOptionsCompat.makeSceneTransitionAnimation(activity, sharedElements).toBundle());
}
+ private static Pair[] addMiniPlayerSharedElement(Activity activity, @Nullable Pair... sharedElements) {
+ if (activity instanceof AbsSlidingMusicPanelActivity) {
+ View miniPlayer = ((AbsSlidingMusicPanelActivity) activity).getMiniPlayerFragment().getView();
+ Pair miniPlayerSharedElement = Pair.create(miniPlayer, activity.getString(R.string.transition_mini_player));
+
+ if (sharedElements != null) {
+ Pair[] tmpSharedElements;
+ tmpSharedElements = new Pair[sharedElements.length + 1];
+ System.arraycopy(sharedElements, 0, tmpSharedElements, 0, sharedElements.length);
+ sharedElements = tmpSharedElements;
+
+ sharedElements[sharedElements.length - 1] = miniPlayerSharedElement;
+ } else {
+ sharedElements = new Pair[]{miniPlayerSharedElement};
+ }
+ }
+ return sharedElements;
+ }
+
private static boolean disableViewsAndCheckIsReadyForTransition(@NonNull final Activity activity) {
if (activity instanceof KabViewsDisableAble) {
if (((KabViewsDisableAble) activity).areViewsEnabled()) {
diff --git a/app/src/main/java/com/kabouzeid/gramophone/util/PhonographColorUtil.java b/app/src/main/java/com/kabouzeid/gramophone/util/PhonographColorUtil.java
new file mode 100644
index 00000000..7c6ca979
--- /dev/null
+++ b/app/src/main/java/com/kabouzeid/gramophone/util/PhonographColorUtil.java
@@ -0,0 +1,80 @@
+package com.kabouzeid.gramophone.util;
+
+import android.graphics.Bitmap;
+import android.support.annotation.ColorInt;
+import android.support.annotation.Nullable;
+import android.support.v7.graphics.Palette;
+
+import com.kabouzeid.appthemehelper.util.ColorUtil;
+
+import java.util.Collections;
+import java.util.Comparator;
+
+/**
+ * @author Karim Abou Zeid (kabouzeid)
+ */
+public class PhonographColorUtil {
+ public static final int PALETTE_BITMAP_SIZE = 10;
+
+ @Nullable
+ public static Palette generatePalette(Bitmap bitmap) {
+ if (bitmap == null) return null;
+ return Palette.from(bitmap)
+ .resizeBitmapSize(PALETTE_BITMAP_SIZE)
+ .generate();
+ }
+
+ @ColorInt
+ public static int getColor(@Nullable Palette palette, int fallback) {
+ if (palette != null) {
+ if (palette.getVibrantSwatch() != null) {
+ return palette.getVibrantSwatch().getRgb();
+ } else if (palette.getMutedSwatch() != null) {
+ return palette.getMutedSwatch().getRgb();
+ } else if (palette.getDarkVibrantSwatch() != null) {
+ return palette.getDarkVibrantSwatch().getRgb();
+ } else if (palette.getDarkMutedSwatch() != null) {
+ return palette.getDarkMutedSwatch().getRgb();
+ } else if (palette.getLightVibrantSwatch() != null) {
+ return palette.getLightVibrantSwatch().getRgb();
+ } else if (palette.getLightMutedSwatch() != null) {
+ return palette.getLightMutedSwatch().getRgb();
+ } else if (palette.getSwatches() != null && !palette.getSwatches().isEmpty()) {
+ return Collections.max(palette.getSwatches(), SwatchComparator.getInstance()).getRgb();
+ }
+ }
+ return fallback;
+ }
+
+ private static class SwatchComparator implements Comparator {
+ private static SwatchComparator sInstance;
+
+ static SwatchComparator getInstance() {
+ if (sInstance == null) {
+ sInstance = new SwatchComparator();
+ }
+ return sInstance;
+ }
+
+ @Override
+ public int compare(Palette.Swatch lhs, Palette.Swatch rhs) {
+ return lhs.getPopulation() - rhs.getPopulation();
+ }
+ }
+
+ @ColorInt
+ public static int shiftBackgroundColorForLightText(@ColorInt int backgroundColor) {
+ while (ColorUtil.isColorLight(backgroundColor)) {
+ backgroundColor = ColorUtil.darkenColor(backgroundColor);
+ }
+ return backgroundColor;
+ }
+
+ @ColorInt
+ public static int shiftBackgroundColorForDarkText(@ColorInt int backgroundColor) {
+ while (!ColorUtil.isColorLight(backgroundColor)) {
+ backgroundColor = ColorUtil.lightenColor(backgroundColor);
+ }
+ return backgroundColor;
+ }
+}
diff --git a/app/src/main/java/com/kabouzeid/gramophone/util/Util.java b/app/src/main/java/com/kabouzeid/gramophone/util/Util.java
index b08c61b0..91f94957 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/util/Util.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/util/Util.java
@@ -48,11 +48,6 @@ public class Util {
return size;
}
- public static int getSmallerScreenSize(@NonNull Context c) {
- Point size = Util.getScreenSize(c);
- return Math.min(size.x, size.y);
- }
-
@TargetApi(19)
public static void setStatusBarTranslucent(@NonNull Window window) {
window.setFlags(
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 6f4beb4d..11f87b77 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/util/ViewUtil.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/util/ViewUtil.java
@@ -3,42 +3,19 @@ package com.kabouzeid.gramophone.util;
import android.animation.Animator;
import android.animation.ArgbEvaluator;
import android.animation.ObjectAnimator;
-import android.content.Context;
-import android.graphics.PorterDuff;
-import android.graphics.drawable.Drawable;
import android.os.Build;
-import android.support.annotation.ColorInt;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
import android.support.v4.view.ViewCompat;
-import android.support.v7.view.menu.ListMenuItemView;
-import android.support.v7.view.menu.MenuPopupHelper;
-import android.support.v7.widget.ActionMenuView;
-import android.support.v7.widget.Toolbar;
-import android.util.Log;
-import android.view.Menu;
-import android.view.MenuItem;
import android.view.View;
-import android.view.ViewTreeObserver;
import android.view.animation.PathInterpolator;
-import android.widget.CheckBox;
-import android.widget.ImageView;
-import android.widget.ListView;
-import android.widget.RadioButton;
import android.widget.TextView;
-import com.afollestad.materialdialogs.internal.MDTintHelper;
-import com.afollestad.materialdialogs.internal.ThemeSingleton;
-import com.kabouzeid.gramophone.R;
-
-import java.lang.reflect.Field;
-import java.util.ArrayList;
-
/**
* @author Karim Abou Zeid (kabouzeid)
*/
public class ViewUtil {
+ public final static int PHONOGRAPH_ANIM_TIME = 1000;
+
public static Animator createBackgroundColorTransition(final View v, final int startColor, final int endColor) {
return createColorAnimator(v, "backgroundColor", startColor, endColor);
}
@@ -47,8 +24,6 @@ public class ViewUtil {
return createColorAnimator(v, "textColor", startColor, endColor);
}
- public final static int PHONOGRAPH_ANIM_TIME = 1000;
-
private static Animator createColorAnimator(Object target, String propertyName, int startColor, int endColor) {
ObjectAnimator animator;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
@@ -65,149 +40,6 @@ public class ViewUtil {
return animator;
}
- /**
- * Should be called in {@link android.app.Activity#onPrepareOptionsMenu(Menu)} and {@link android.app.Activity#onOptionsItemSelected(MenuItem)}
- *
- * @param toolbar the toolbar to apply the tint on
- */
- public static void invalidateToolbarPopupMenuTint(@Nullable final Toolbar toolbar) {
- if (toolbar == null) return;
- toolbar.post(new Runnable() {
- @Override
- public void run() {
- try {
- Field f1 = Toolbar.class.getDeclaredField("mMenuView");
- f1.setAccessible(true);
- ActionMenuView actionMenuView = (ActionMenuView) f1.get(toolbar);
-
- Field f2 = ActionMenuView.class.getDeclaredField("mPresenter");
- f2.setAccessible(true);
- Object presenter = f2.get(actionMenuView); // ActionMenuPresenter is not a public class, so we use Object here
-
- Field f3 = presenter.getClass().getDeclaredField("mOverflowPopup");
- f3.setAccessible(true);
- MenuPopupHelper overflowMenuPopupHelper = (MenuPopupHelper) f3.get(presenter);
- ViewUtil.setTintForMenuPopupHelper(overflowMenuPopupHelper);
-
- Field f4 = presenter.getClass().getDeclaredField("mActionButtonPopup");
- f4.setAccessible(true);
- MenuPopupHelper subMenuPopupHelper = (MenuPopupHelper) f4.get(presenter);
- ViewUtil.setTintForMenuPopupHelper(subMenuPopupHelper);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- });
- }
-
- public static void setTintForMenuPopupHelper(@Nullable MenuPopupHelper menuPopupHelper) {
- if (menuPopupHelper == null) return;
- final ListView listView = menuPopupHelper.getPopup().getListView();
- listView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
- @Override
- public void onGlobalLayout() {
- try {
- Field checkboxField = ListMenuItemView.class.getDeclaredField("mCheckBox");
- checkboxField.setAccessible(true);
- Field radioButtonField = ListMenuItemView.class.getDeclaredField("mRadioButton");
- radioButtonField.setAccessible(true);
-
- for (int i = 0; i < listView.getChildCount(); i++) {
- View v = listView.getChildAt(i);
- if (!(v instanceof ListMenuItemView)) continue;
- ListMenuItemView iv = (ListMenuItemView) v;
-
- CheckBox check = (CheckBox) checkboxField.get(iv);
- if (check != null) {
- MDTintHelper.setTint(check, ThemeSingleton.get().positiveColor.getDefaultColor());
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
- check.setBackground(null);
- }
- }
-
- RadioButton radioButton = (RadioButton) radioButtonField.get(iv);
- if (radioButton != null) {
- MDTintHelper.setTint(radioButton, ThemeSingleton.get().positiveColor.getDefaultColor());
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
- radioButton.setBackground(null);
- }
- }
- }
- } catch (Throwable e) {
- e.printStackTrace();
- }
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
- listView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
- } else {
- //noinspection deprecation
- listView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
- }
- }
- });
- }
-
- /**
- * Call this in {@link android.app.Activity#onCreateOptionsMenu(Menu)} and everywhere where the toolbar color is changed.
- */
- public static void setToolbarContentColorForBackground(@NonNull Context context, @Nullable Toolbar toolbar, @ColorInt final int backgroundColor) {
- ViewUtil.setToolbarContentDark(context, toolbar, ColorUtil.useDarkTextColorOnBackground(backgroundColor));
- }
-
- public static void setToolbarContentDark(@NonNull Context context, @Nullable Toolbar toolbar, boolean dark) {
- if (toolbar == null) return;
-
- toolbar.setTitleTextColor(ColorUtil.getPrimaryTextColor(context, dark));
- toolbar.setSubtitleTextColor(ColorUtil.getSecondaryTextColor(context, dark));
-
- setToolbarIconColor(context, toolbar, getToolbarIconColor(context, dark));
- }
-
- @ColorInt
- public static int getToolbarIconColor(Context context, boolean dark) {
- if (dark) {
- return ColorUtil.getSecondaryTextColor(context, true);
- } else {
- return ColorUtil.getPrimaryTextColor(context, false);
- }
- }
-
- private static void setToolbarIconColor(@NonNull final Context context, @Nullable final Toolbar toolbar, @ColorInt final int color) {
- if (toolbar == null) return;
- toolbar.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
- @Override
- public void onGlobalLayout() {
- toolbar.getViewTreeObserver().removeOnGlobalLayoutListener(this);
-
- final ArrayList outViews = new ArrayList<>();
- final String overflowDescription = context.getString(R.string.abc_action_menu_overflow_description);
- toolbar.findViewsWithText(outViews, overflowDescription, View.FIND_VIEWS_WITH_CONTENT_DESCRIPTION);
- if (!outViews.isEmpty()) {
- try {
- ImageView overflowButton = (ImageView) outViews.get(0);
- overflowButton.setColorFilter(color, PorterDuff.Mode.SRC_IN);
- } catch (ClassCastException e) {
- Log.e("setToolbarIconColor", "overflow button is not an ImageView", e);
- }
- }
-
- Menu menu = toolbar.getMenu();
- for (int i = 0; i < menu.size(); i++) {
- MenuItem item = menu.getItem(i);
- if (item.getIcon() != null) {
- item.getIcon().mutate().setColorFilter(color, PorterDuff.Mode.SRC_IN);
- }
- }
-
- Drawable navigationIcon = toolbar.getNavigationIcon();
- if (navigationIcon != null) {
- navigationIcon = navigationIcon.mutate();
- navigationIcon.setColorFilter(color, PorterDuff.Mode.SRC_IN);
- toolbar.setNavigationIcon(navigationIcon);
- }
- }
- });
- }
-
public static boolean hitTest(View v, int x, int y) {
final int tx = (int) (ViewCompat.getTranslationX(v) + 0.5f);
final int ty = (int) (ViewCompat.getTranslationY(v) + 0.5f);
diff --git a/app/src/main/java/com/kabouzeid/gramophone/views/ColorView.java b/app/src/main/java/com/kabouzeid/gramophone/views/ColorView.java
deleted file mode 100644
index 2d93379f..00000000
--- a/app/src/main/java/com/kabouzeid/gramophone/views/ColorView.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package com.kabouzeid.gramophone.views;
-
-import android.content.Context;
-import android.graphics.Canvas;
-import android.graphics.Paint;
-import android.support.annotation.NonNull;
-import android.util.AttributeSet;
-import android.widget.FrameLayout;
-
-import com.kabouzeid.gramophone.R;
-import com.kabouzeid.gramophone.util.ColorUtil;
-
-public class ColorView extends FrameLayout {
-
- private final Paint paint;
- private final Paint paintBorder;
- private final int borderWidth;
-
- public ColorView(@NonNull Context context) {
- this(context, null, 0);
- }
-
- public ColorView(@NonNull Context context, AttributeSet attrs) {
- this(context, attrs, 0);
- }
-
- public ColorView(@NonNull Context context, AttributeSet attrs, int defStyleAttr) {
- super(context, attrs, defStyleAttr);
- borderWidth = getResources().getDimensionPixelSize(R.dimen.color_view_border);
-
- paint = new Paint();
- paint.setAntiAlias(true);
-
- paintBorder = new Paint();
- paintBorder.setAntiAlias(true);
-
- setWillNotDraw(false);
- }
-
- public void setColor(int color) {
- paint.setColor(color);
- paintBorder.setColor(ColorUtil.shiftColorDown(color));
- requestLayout();
- invalidate();
- }
-
- @Override
- protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
- int widthMode = MeasureSpec.getMode(widthMeasureSpec);
- int heightMode = MeasureSpec.getMode(heightMeasureSpec);
- if (widthMode == MeasureSpec.EXACTLY && heightMode != MeasureSpec.EXACTLY) {
- int width = MeasureSpec.getSize(widthMeasureSpec);
- //noinspection SuspiciousNameCombination
- int height = width;
- if (heightMode == MeasureSpec.AT_MOST) {
- height = Math.min(height, MeasureSpec.getSize(heightMeasureSpec));
- }
- setMeasuredDimension(width, height);
- } else {
- super.onMeasure(widthMeasureSpec, heightMeasureSpec);
- }
- }
-
- @Override
- protected void onDraw(@NonNull Canvas canvas) {
- super.onDraw(canvas);
-
- int canvasSize = canvas.getWidth();
- if (canvas.getHeight() < canvasSize)
- canvasSize = canvas.getHeight();
-
- int circleCenter = (canvasSize - (borderWidth * 2)) / 2;
- canvas.drawCircle(circleCenter + borderWidth, circleCenter + borderWidth, ((canvasSize - (borderWidth * 2)) / 2) + borderWidth - 4.0f, paintBorder);
- canvas.drawCircle(circleCenter + borderWidth, circleCenter + borderWidth, ((canvasSize - (borderWidth * 2)) / 2) - 4.0f, paint);
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/kabouzeid/gramophone/views/DynamicCheckBox.java b/app/src/main/java/com/kabouzeid/gramophone/views/DynamicCheckBox.java
deleted file mode 100644
index 7a5ff47b..00000000
--- a/app/src/main/java/com/kabouzeid/gramophone/views/DynamicCheckBox.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package com.kabouzeid.gramophone.views;
-
-import android.content.Context;
-import android.support.v7.widget.AppCompatCheckBox;
-import android.util.AttributeSet;
-
-import com.afollestad.materialdialogs.internal.MDTintHelper;
-import com.afollestad.materialdialogs.internal.ThemeSingleton;
-
-/**
- * @author Aidan Follestad (afollestad)
- */
-public class DynamicCheckBox extends AppCompatCheckBox {
-
- public DynamicCheckBox(Context context) {
- super(context);
- init();
- }
-
- public DynamicCheckBox(Context context, AttributeSet attrs) {
- super(context, attrs);
- init();
- }
-
- public DynamicCheckBox(Context context, AttributeSet attrs, int defStyleAttr) {
- super(context, attrs, defStyleAttr);
- init();
- }
-
- private void init() {
- final int color = ThemeSingleton.get().positiveColor.getDefaultColor();
- MDTintHelper.setTint(this, color);
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/kabouzeid/gramophone/views/DynamicEditText.java b/app/src/main/java/com/kabouzeid/gramophone/views/DynamicEditText.java
deleted file mode 100644
index 70d927cd..00000000
--- a/app/src/main/java/com/kabouzeid/gramophone/views/DynamicEditText.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package com.kabouzeid.gramophone.views;
-
-import android.content.Context;
-import android.support.v7.widget.AppCompatEditText;
-import android.util.AttributeSet;
-
-import com.afollestad.materialdialogs.internal.MDTintHelper;
-import com.afollestad.materialdialogs.internal.ThemeSingleton;
-
-/**
- * @author Aidan Follestad (afollestad)
- */
-public class DynamicEditText extends AppCompatEditText {
-
- public DynamicEditText(Context context) {
- super(context);
- init();
- }
-
- public DynamicEditText(Context context, AttributeSet attrs) {
- super(context, attrs);
- init();
- }
-
- public DynamicEditText(Context context, AttributeSet attrs, int defStyleAttr) {
- super(context, attrs, defStyleAttr);
- init();
- }
-
- private void init() {
- final int color = ThemeSingleton.get().positiveColor.getDefaultColor();
- MDTintHelper.setTint(this, color);
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/kabouzeid/gramophone/views/FastScroller.java b/app/src/main/java/com/kabouzeid/gramophone/views/FastScroller.java
deleted file mode 100644
index 993223dc..00000000
--- a/app/src/main/java/com/kabouzeid/gramophone/views/FastScroller.java
+++ /dev/null
@@ -1,212 +0,0 @@
-package com.kabouzeid.gramophone.views;
-
-import android.animation.Animator;
-import android.animation.AnimatorListenerAdapter;
-import android.content.Context;
-import android.graphics.drawable.ColorDrawable;
-import android.graphics.drawable.Drawable;
-import android.graphics.drawable.InsetDrawable;
-import android.graphics.drawable.StateListDrawable;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.v7.widget.RecyclerView;
-import android.util.AttributeSet;
-import android.view.MotionEvent;
-import android.view.View;
-import android.view.ViewPropertyAnimator;
-import android.widget.FrameLayout;
-
-import com.kabouzeid.gramophone.R;
-import com.kabouzeid.gramophone.util.ColorUtil;
-import com.kabouzeid.gramophone.util.Util;
-
-import static android.support.v7.widget.RecyclerView.OnScrollListener;
-
-public class FastScroller extends FrameLayout {
- private static final int HANDLE_HIDE_DELAY = 1500;
- private static final int HANDLE_ANIMATION_DURATION = 300;
-
- private View handle;
- private View bar;
-
- private RecyclerView recyclerView;
-
- private final HandleHider handleHider = new HandleHider();
- private final ScrollListener scrollListener = new ScrollListener();
-
- private boolean isHidden;
- private int hideTranslationX;
-
- @Nullable
- private ViewPropertyAnimator currentAnimator = null;
-
- public FastScroller(@NonNull Context context, AttributeSet attrs) {
- super(context, attrs);
- initialise(context);
- }
-
- public FastScroller(@NonNull Context context, AttributeSet attrs, int defStyleAttr) {
- super(context, attrs, defStyleAttr);
- initialise(context);
- }
-
- private void initialise(@NonNull Context context) {
- hideTranslationX = getContext().getResources().getDimensionPixelSize(R.dimen.scrollbar_width) * (Util.isRTL(context) ? -1 : 1);
- setClipChildren(false);
- inflate(context, R.layout.vertical_recycler_fast_scroller_layout, this);
- handle = findViewById(R.id.scroll_handle);
- bar = findViewById(R.id.scroll_bar);
- handle.setEnabled(true);
- setPressedHandleColor(ColorUtil.resolveColor(getContext(), R.attr.colorControlActivated));
- setUpBarBackground();
- postDelayed(handleHider, HANDLE_HIDE_DELAY);
- }
-
- @Override
- public boolean onTouchEvent(@NonNull MotionEvent event) {
- if (event.getAction() == MotionEvent.ACTION_DOWN || event.getAction() == MotionEvent.ACTION_MOVE) {
- handle.setPressed(true);
- setRecyclerViewPosition(event.getY());
- showIfHidden();
- return true;
- } else if (event.getAction() == MotionEvent.ACTION_UP) {
- handle.setPressed(false);
- scheduleHide();
- return true;
- }
- return super.onTouchEvent(event);
- }
-
- public void setRecyclerView(@NonNull RecyclerView recyclerView) {
- this.recyclerView = recyclerView;
- recyclerView.addOnScrollListener(scrollListener);
- }
-
- private void setRecyclerViewPosition(float y) {
- if (recyclerView != null) {
- int itemCount = recyclerView.getAdapter().getItemCount();
- float proportion = y / (float) getHeightMinusPadding();
- int targetPos = getValueInRange(0, itemCount - 1, Math.round(proportion * (float) itemCount));
- recyclerView.scrollToPosition(targetPos);
- }
- }
-
- private int getValueInRange(int min, int max, int value) {
- int minimum = Math.max(min, value);
- return Math.min(minimum, max);
- }
-
- private void setHandlePosition(float y) {
- float position = y / getHeightMinusPadding();
- int handleHeight = handle.getHeight();
- handle.setY(getValueInRange(0, getHeightMinusPadding() - handleHeight, Math.round((getHeightMinusPadding() - handleHeight) * position)));
- }
-
- private void showImpl() {
- isHidden = false;
- if (currentAnimator != null) {
- currentAnimator.cancel();
- }
- currentAnimator = animate().translationX(0).setDuration(HANDLE_ANIMATION_DURATION);
- currentAnimator.start();
- }
-
- private void hideImpl() {
- isHidden = true;
- if (currentAnimator != null) {
- currentAnimator.cancel();
- }
- currentAnimator = animate().translationX(hideTranslationX).setDuration(HANDLE_ANIMATION_DURATION);
- currentAnimator.setListener(new AnimatorListenerAdapter() {
- @Override
- public void onAnimationEnd(Animator animation) {
- super.onAnimationEnd(animation);
- currentAnimator = null;
- }
-
- @Override
- public void onAnimationCancel(Animator animation) {
- super.onAnimationCancel(animation);
- currentAnimator = null;
- }
- });
- currentAnimator.start();
- }
-
- private class HandleHider implements Runnable {
- @Override
- public void run() {
- hideImpl();
- }
- }
-
- private void showIfHidden() {
- if (isHidden) {
- getHandler().removeCallbacks(handleHider);
- showImpl();
- }
- }
-
- private void scheduleHide() {
- getHandler().removeCallbacks(handleHider);
- getHandler().postDelayed(handleHider, HANDLE_HIDE_DELAY);
- }
-
- private int getHeightMinusPadding() {
- return getHeight() - getPaddingBottom() - getPaddingTop();
- }
-
- private float computeHandlePosition() {
- View firstVisibleView = recyclerView.getChildAt(0);
- int firstVisiblePosition = recyclerView.getChildAdapterPosition(firstVisibleView);
- int itemCount = recyclerView.getAdapter().getItemCount();
-
- float proportion = (float) firstVisiblePosition / (float) itemCount;
- return getHeightMinusPadding() * proportion + recyclerView.getChildCount() * proportion;
- }
-
- public void updateHandlePosition() {
- setHandlePosition(computeHandlePosition());
- }
-
- public void setPressedHandleColor(int accent) {
- StateListDrawable drawable = new StateListDrawable();
-
- int colorControlNormal = ColorUtil.resolveColor(getContext(), R.attr.colorControlNormal);
-
- if (!Util.isRTL(getContext())) {
- drawable.addState(View.PRESSED_ENABLED_STATE_SET,
- new InsetDrawable(new ColorDrawable(accent), getResources().getDimensionPixelSize(R.dimen.scrollbar_inset), 0, 0, 0));
- drawable.addState(View.EMPTY_STATE_SET,
- new InsetDrawable(new ColorDrawable(colorControlNormal), getResources().getDimensionPixelSize(R.dimen.scrollbar_inset), 0, 0, 0));
- } else {
- drawable.addState(View.PRESSED_ENABLED_STATE_SET,
- new InsetDrawable(new ColorDrawable(accent), 0, 0, getResources().getDimensionPixelSize(R.dimen.scrollbar_inset), 0));
- drawable.addState(View.EMPTY_STATE_SET,
- new InsetDrawable(new ColorDrawable(colorControlNormal), 0, 0, getResources().getDimensionPixelSize(R.dimen.scrollbar_inset), 0));
- }
- handle.setBackground(drawable);
- }
-
- private void setUpBarBackground() {
- Drawable drawable;
-
- int colorControlNormal = ColorUtil.resolveColor(getContext(), R.attr.colorControlNormal);
-
- if (!Util.isRTL(getContext())) {
- drawable = new InsetDrawable(new ColorDrawable(colorControlNormal), getResources().getDimensionPixelSize(R.dimen.scrollbar_inset), 0, 0, 0);
- } else {
- drawable = new InsetDrawable(new ColorDrawable(colorControlNormal), 0, 0, getResources().getDimensionPixelSize(R.dimen.scrollbar_inset), 0);
- }
- bar.setBackground(drawable);
- }
-
- private class ScrollListener extends OnScrollListener {
- @Override
- public void onScrolled(RecyclerView rv, int dx, int dy) {
- updateHandlePosition();
- showIfHidden();
- scheduleHide();
- }
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/kabouzeid/gramophone/views/SelectableColorView.java b/app/src/main/java/com/kabouzeid/gramophone/views/SelectableColorView.java
deleted file mode 100644
index adefd514..00000000
--- a/app/src/main/java/com/kabouzeid/gramophone/views/SelectableColorView.java
+++ /dev/null
@@ -1,157 +0,0 @@
-package com.kabouzeid.gramophone.views;
-
-import android.content.Context;
-import android.content.res.ColorStateList;
-import android.content.res.Resources;
-import android.graphics.Canvas;
-import android.graphics.Color;
-import android.graphics.Paint;
-import android.graphics.drawable.Drawable;
-import android.graphics.drawable.RippleDrawable;
-import android.graphics.drawable.ShapeDrawable;
-import android.graphics.drawable.StateListDrawable;
-import android.graphics.drawable.shapes.OvalShape;
-import android.os.Build;
-import android.support.annotation.ColorInt;
-import android.util.AttributeSet;
-import android.util.TypedValue;
-import android.widget.FrameLayout;
-
-import com.afollestad.materialdialogs.internal.ThemeSingleton;
-import com.kabouzeid.gramophone.util.ColorUtil;
-
-
-public class SelectableColorView extends FrameLayout {
-
- private boolean selected;
-
- private final int borderWidthExtraSmall;
- private final int borderWidthSmall;
- private final int borderWidthLarge;
-
- private Paint outerPaint;
- private Paint gapPaint;
- private Paint innerPaint;
-
- public SelectableColorView(Context context) {
- this(context, null, 0);
- }
-
- public SelectableColorView(Context context, AttributeSet attrs) {
- this(context, attrs, 0);
- }
-
- public SelectableColorView(Context context, AttributeSet attrs, int defStyleAttr) {
- super(context, attrs, defStyleAttr);
- final Resources r = getResources();
- borderWidthExtraSmall = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 1, r.getDisplayMetrics());
- borderWidthSmall = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 3, r.getDisplayMetrics());
- borderWidthLarge = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 5, r.getDisplayMetrics());
-
- gapPaint = new Paint();
- gapPaint.setAntiAlias(true);
- gapPaint.setColor(ThemeSingleton.get().darkTheme ? Color.parseColor("#444444") : Color.WHITE);
-
- innerPaint = new Paint();
- innerPaint.setAntiAlias(true);
-
- outerPaint = new Paint();
- outerPaint.setAntiAlias(true);
-
- setWillNotDraw(false);
- }
-
- private void updateColor(@ColorInt int color) {
- innerPaint.setColor(color);
- outerPaint.setColor(ColorUtil.shiftColorDown(color));
-
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
- int[][] states = new int[][]{
- new int[]{android.R.attr.state_pressed}
- };
- int[] colors = new int[]{createSelectedColor(color)};
- ColorStateList rippleColors = new ColorStateList(states, colors);
- Drawable mask = new ShapeDrawable(new OvalShape());
- RippleDrawable rippleDrawable = new RippleDrawable(rippleColors, null, mask);
-
- setForeground(rippleDrawable);
- } else {
- ShapeDrawable pressedDrawable = new ShapeDrawable(new OvalShape());
- pressedDrawable.getPaint().setColor(createSelectedColor(color));
- StateListDrawable stateListDrawable = new StateListDrawable();
- stateListDrawable.addState(new int[]{android.R.attr.state_pressed}, pressedDrawable);
-
- setForeground(stateListDrawable);
- }
- }
-
- @ColorInt
- private static int createSelectedColor(int color) {
- if (ColorUtil.useDarkTextColorOnBackground(color)) {
- return ColorUtil.shiftColor(color, 0.8f);
- } else {
- return ColorUtil.shiftColor(color, 1.2f);
- }
- }
-
- public void setColor(@ColorInt int color) {
- updateColor(color);
- requestLayout();
- invalidate();
- }
-
- @Override
- public void setSelected(boolean selected) {
- this.selected = selected;
- requestLayout();
- invalidate();
- }
-
- @Override
- protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
- int widthMode = MeasureSpec.getMode(widthMeasureSpec);
- int heightMode = MeasureSpec.getMode(heightMeasureSpec);
- if (widthMode == MeasureSpec.EXACTLY && heightMode != MeasureSpec.EXACTLY) {
- int width = MeasureSpec.getSize(widthMeasureSpec);
- //noinspection SuspiciousNameCombination
- int height = width;
- if (heightMode == MeasureSpec.AT_MOST)
- height = Math.min(height, MeasureSpec.getSize(heightMeasureSpec));
- setMeasuredDimension(width, height);
- } else {
- super.onMeasure(widthMeasureSpec, heightMeasureSpec);
- }
- }
-
- @Override
- protected void onDraw(Canvas canvas) {
- super.onDraw(canvas);
- final int outerRadius = getMeasuredWidth() / 2;
- if (selected) {
- final int whiteRadius = outerRadius - borderWidthLarge;
- final int innerRadius = whiteRadius - borderWidthSmall;
- canvas.drawCircle(getMeasuredWidth() / 2,
- getMeasuredHeight() / 2,
- outerRadius,
- outerPaint);
- canvas.drawCircle(getMeasuredWidth() / 2,
- getMeasuredHeight() / 2,
- whiteRadius,
- gapPaint);
- canvas.drawCircle(getMeasuredWidth() / 2,
- getMeasuredHeight() / 2,
- innerRadius,
- innerPaint);
- } else {
- final int innerRadius = outerRadius - borderWidthExtraSmall;
- canvas.drawCircle(getMeasuredWidth() / 2,
- getMeasuredHeight() / 2,
- outerRadius,
- outerPaint);
- canvas.drawCircle(getMeasuredWidth() / 2,
- getMeasuredHeight() / 2,
- innerRadius,
- innerPaint);
- }
- }
-}
diff --git a/app/src/main/res/drawable-nodpi/black.xml b/app/src/main/res/drawable-nodpi/black.xml
deleted file mode 100644
index d078e48b..00000000
--- a/app/src/main/res/drawable-nodpi/black.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_main_content.xml b/app/src/main/res/layout/activity_main_content.xml
index 4a80c27d..d69455fb 100644
--- a/app/src/main/res/layout/activity_main_content.xml
+++ b/app/src/main/res/layout/activity_main_content.xml
@@ -50,10 +50,7 @@
android:layout_width="match_parent"
android:layout_height="@dimen/tab_height"
app:tabContentStart="72dp"
- app:tabIndicatorColor="@color/primary_text_default_material_dark"
- app:tabMode="scrollable"
- app:tabSelectedTextColor="@color/primary_text_default_material_dark"
- app:tabTextColor="@color/secondary_text_default_material_dark" />
+ app:tabMode="scrollable" />
diff --git a/app/src/main/res/layout/activity_playlist_detail.xml b/app/src/main/res/layout/activity_playlist_detail.xml
index d94b68c7..cf474a15 100644
--- a/app/src/main/res/layout/activity_playlist_detail.xml
+++ b/app/src/main/res/layout/activity_playlist_detail.xml
@@ -1,7 +1,9 @@
+ android:layout_height="match_parent"
+ android:transitionGroup="true"
+ tools:ignore="UnusedAttribute">
+ android:focusable="false"
+ android:transitionName="@string/transition_mini_player"
+ tools:ignore="UnusedAttribute">
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/preference_color_widget.xml b/app/src/main/res/layout/preference_color_widget.xml
deleted file mode 100644
index 9a9ca8b7..00000000
--- a/app/src/main/res/layout/preference_color_widget.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/preference_custom.xml b/app/src/main/res/layout/preference_custom.xml
deleted file mode 100644
index 80fbffce..00000000
--- a/app/src/main/res/layout/preference_custom.xml
+++ /dev/null
@@ -1,70 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/preference_dynamic_checkbox.xml b/app/src/main/res/layout/preference_dynamic_checkbox.xml
deleted file mode 100644
index e6360855..00000000
--- a/app/src/main/res/layout/preference_dynamic_checkbox.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/vertical_recycler_fast_scroller_layout.xml b/app/src/main/res/layout/vertical_recycler_fast_scroller_layout.xml
deleted file mode 100644
index 765bbfaa..00000000
--- a/app/src/main/res/layout/vertical_recycler_fast_scroller_layout.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml
index 37ca797a..ee6258e6 100644
--- a/app/src/main/res/values-ar/strings.xml
+++ b/app/src/main/res/values-ar/strings.xml
@@ -1,21 +1,24 @@
ماذا تريد ان تشارك؟
- تستمع حاليا الى %1$s ل %2$s
+ تستمع حاليا إلى %1$s ل %2$s
ملف الصوت
هل تريد تعيين %1$s كنغمة رنين ؟
- %1$s تم تعيين كنغمة رنين
- "تم تعيين النغمة "
+ تعيين %1$s كنغمة رنين
+ تعيين كنغمة رنين
مشاركة
"الإعدادات"
- " عن التطبيق
-"
+ سماح
+ تم
+ تجاوز
+ عن التطبيق
+ أظهر التعريف
امسح قائمة التشغيل
قائمة الإنتظار
- "اضافة الى الاغاني المفضلة "
- "ازالة من الاغاني المفضلة "
+ إضافة إلى المفضلة
+ إزالة من المفضلة
بحث
- استمع لاحقاً
+ استمع للتالي
استمع
أضف إلى قائمة الإنتظار
أزل من قائمة الانتظار
@@ -27,7 +30,7 @@
الفنانون
الأغاني
قوائم التشغيل
- \u0639\u0630\u0631\u0627\u064b\u060c \u062d\u0635\u0644 \u062e\u0637\u0623 \u0623\u062b\u0646\u0627\u0621 \u0645\u062d\u0627\u0648\u0644\u0629 \u062a\u0634\u063a\u064a\u0644 \u0627\u0644\u0623\u063a\u0646\u064a\u0629
+ \u0639\u0630\u0631\u0627\u064b\u060c \u0644\u0645 \u0627\u0633\u062a\u0637\u0639 \u062a\u0634\u063a\u064a\u0644 \u0627\u0644\u0623\u063a\u0646\u064a\u0629
\u0639\u0630\u0631\u0627\u064b\u060c \u0644\u0645 \u064a\u062a\u0645 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0633\u064a\u0631\u0629 \u0630\u0627\u062a\u064a\u0629 \u0645\u0637\u0627\u0628\u0642\u0629 \u0644\u0647\u0630\u0627 \u0627\u0644\u0641\u0646\u0627\u0646
سيرة ذاتية
لم يتم منح التطبيق إذن Audio focus
@@ -37,118 +40,186 @@
فنان الألبوم
السنة
"المقطع "
- "الموسيقى (٢ للموسيقى ٢ أو ٣٠٠٤ للموسيقى ٤)"
- حقل نص اسم الألبوم أو اسم الفنان فارغ
+ "مقطع (2 للمقطع 2 أو 3004 لـCD3 للمقطع 4)"
+ حقل اسم الألبوم أو اسم الفنان فارغ
تتم كتابة الملف
يتم حفظ التغييرات...
التفاصيل
- إسم الملف
+ اسم الملف
مسار الملف
الحجم
نوع الملف
- الطول
- معدل البت
+ المدة
+ معدل bit
معدل أخذ العينات
- إذهب إلى الفنان
- إذهب إلى الألبوم
- قائمة الإنتظار
+ اذهب إلى الفنان
+ اذهب إلى الألبوم
+ قائمة الانتظار
حفظ كقائمة تشغيل
لا توجد نتائج
تحديث صورة الفنان
- تحديث صورة الفنان
+ تم تحديث صورة الفنان
\u062a\u0639\u0630\u0631 \u062a\u062d\u062f\u064a\u062b \u0635\u0648\u0631\u0629 \u0627\u0644\u0641\u0646\u0627\u0646
يتم التحديث...
"تمت الإضافة إلى قائمة الانتظار"
- اضف %1$d الى قائمة الانتطار
+ اضف %1$d إلى قائمة الانتطار
حذف من قائمة التشغيل
+ عدد الحقول
+ عدد الحقول (في الوضع الأفقي)
+ أضيفت %1$d أغنية إلى قائمة التشغيل %2$s
تم إنشاء قائمة التشغيل %1$s
تم حذف قائمة التشغيل %1$s
- حذف %1$d اغنية
+ حذف %1$d أغنية
\u0644\u0627 \u064a\u0645\u0643\u0646 \u0625\u0646\u0634\u0627\u0621 \u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u062a\u0634\u063a\u064a\u0644
%1$s ؟]]>
%1$s \u061f \u0647\u0630\u0627 \u0644\u0627 \u064a\u0645\u0643\u0646 \u0627\u0644\u062a\u0631\u0627\u062c\u0639 \u0639\u0646\u0647 !!]]>
- %1$d؟]]>
+ %1$d؟]]>
%1$s ؟]]>
%1$d ؟]]>
%1$s من قائمة التشغيل؟]]>
%1$d الأغاني من قائمة التشغيل؟]]>
حذف الأغنية
حذف الأغاني
- ازيلت الاغنية من قائمة التشغيل
- ازيلت الاغناتي من قائمة التشغيل
+ أزيلت الاغنية من قائمة التشغيل
+ أزيلت الاغنيات من قائمة التشغيل
إعادة تسمية قائمة التشغيل
حذف قائمة التشغيل
- احذف قائمة التشغيل
+ حذف قوائم التشغيل
مسح قائمة التشغيل
"إضافة إلى قائمة التشغيل"
- تشغيل عشوائي
- تشغيل الالبوم عشوائيا
- تشغيل اغاني الفنان عشوائيا
+ بعثرة الكل
+ بعثرة الألبوم
+ بعثرة مقطوعات الفنان
تشغيل قائمة التشغيل عشوائيا
+ مسح قوائم الانتظار
آخر ما تم فتحه
فاتح
داكن
+ أسود (شاشات AMOLED)
+ دائماً
+ فقط عبر Wi-Fi
+ لا للأبد
المعادل
- الالوان
- واجهة قائمة التشغيل
+ الألوان
+ تستمع إليه الآن
المنظر العام
الصوت
عام
+ الصور
قفل الشاشة
شريط تنقل ملون
- ضبط صفحة البدء
- "صورة الالبوم في قفل الشاشة "
- اشعار ملون
+ صفحة البدء
+ أظهر صورة الألبوم
+ حمل صور الفنانين تلقائياً
+ تغييم صورة الألبوم
+ إشعار ملون
+ تجاهل صور متاجر الوسائط
تشغيل مختصر
- اجبار صور الالبوم على ان تكون مربعة
+ صور ألبوم مربعة
شريط الادوات معتم
شريط الاشارات معتم
- شريط اكبر للعنوان
- بديل لشريط التحكم
- اظهار شريط تحت شريط التحكم
+ شريط أكبر للعنوان
+ شريط تحكم بديل
+ أظهر بطاقة تحت شريط التحكم
+ شريط تشغيل ملون
لا يوجد معدل صوت
- "لا يوجد audio id, شغل شيئا وحاول مرة أخرى."
+ "شغل مقطعاً، ثم حاول مجدداً"
حذف
مسح
حذف
إعادة التسمية
- انشاء
- %1$d المحددة
- إختيار
- إفتراضي
+ إنشاء
+ %1$d محددة
+ اختيار
+ افتراضي
اللون الأساسي
اللون الثانوي
- تحديد الأزرق النيلي كلون ثيم اساسي.
- تحديد الوردي كلون ثانوي.
+ تحديد لون أساسي. الأزرق النيلي هو اللون الافتراضي.
+ تحديد اللون الثانوي. الوردي هو اللون الثانوي الافتراضي.
تحديث الصورة
قائمة التشغيل فارغة
لا توجد قوائم تشغيل
لا توجد ألبومات
- لا اغاني
- لا فنانين
+ لا توجد أغاني
+ لا يوجد فنانون
فارغ
اسم قائمة التشغيل
الأغنية
- "متوفر في نظام التشغيل Lollipop."
- صورة الالبوم تظهر في شاشة القفل. قد تضطر إلى إعادة تشغيل البرنامج من أجل ان تصبح التغييرات نافذة المفعول.
+ "متوفر فقط في نظام التشغيل Lollipop."
+ تستخدم ألبوم الأغاني الحالية كخلفية لشاشة القفل
+ تغييم صورة الألبوم في شاشة القفل. قد تحدث مشاكل مع الواجهات المبوبة و تطبييقات الطرف الثالث
"\u062a\u0644\u0648\u064a\u0646 \u0627\u0644\u0627\u0634\u0639\u0627\u0631\u0627\u062a \u0628\u0644\u0648\u0646 \u063a\u0644\u0627\u0641 \u0627\u0644\u0623\u0644\u0628\u0648\u0645."
- "ازالة المقاطع التي الصامتة بين الاغنيتين. هذا يمكن ان يسبب مشاكل في التشغيل في بعض الاجهرة"
- صورة الالبوم في قائمة تشغيل تكون مجبرة على شكل المربع
- شريط الاشارات معتم ولا يغطي صورة الالبوم
- شريط الاشارات معتم ولا يغطي صورة الالبوم
- الشريط الذي يكون اسفل صورة الالبومالذي يحتوي على اسم الاغنية والفنان يصبح اكبر من حيث الارتفاع
+ "إزالة المقاطع التي الصامتة بين الاغنيتين. هذا يمكن ان يسبب مشاكل في التشغيل في بعض الاجهرة"
+ صورة الالبوم في قائمة تشغيل تجبر على أن تكون مربعة
+ تلون شريط الأدوات
+ تلون شريط الإشعارات
+ مربع العنوان يصبح مرتفعاً
استخدام شريط التحكم الذي لايغطي صورة الالبوم بدلا من الشريط الافتراضي
- اظهار شريط تحت وحدة التحكم بالتشغيل يحتوي على الازرار (تشغيل/ايقاف/التالي الخ.)
- في أي مشهد يتم تلوين شريط التنقل
- "\u0644\u0627 \u064a\u0645\u0643\u0646 \u062a\u062d\u0645\u064a\u0644 \u063a\u0644\u0627\u0641 \u0627\u0644\u0623\u0644\u0628\u0648\u0645 \u0645\u0637\u0627\u0628\u0642 ."
- البحث في المكتبة...
- إعادة تفحص الملفات...
+ اظهار بطاقة تحت وحدة التحكم بالتشغيل يحتوي على الازرار (تشغيل/ايقاف/التالي الخ.)
+ قد يرفع جودة صورة الألبوم ولكن يبطء من سرعة تحميلها. فعلها فقط إذا تواجه مشكلة في جودة صور الألبوم
+ \u062a\u0644\u0648\u064a\u0646 \u0623\u0632\u0631\u0627\u0631 \u0627\u0644\u062a\u0648\u062c\u064a\u0647 \u0641\u064a \u0634\u0631\u064a\u0637 \u0627\u0644\u062a\u062d\u0643\u0645 \u0628\u0644\u0648\u0646 \u0628\u0627\u0631\u0632
+ تلوين شريط التنقل باللون الأساسي
+ "\u0644\u0627 \u064a\u0645\u0643\u0646 \u062a\u062d\u0645\u064a\u0644 \u063a\u0644\u0627\u0641 \u0623\u0644\u0628\u0648\u0645 \u0645\u0637\u0627\u0628\u0642 ."
+ إبحث في مكتبتك...
+ إعادة تفحص الوسائط...
المفضلة
- اخرما اضيف
- افضل الاغاني
- ازالة الغلاف
+ آخر ما تمت إضافته
+ السجل
+ أفضل الأغاني
+ إزالة الغلاف
التنزيل من Last.fm
اختيار من التخزين الداخلي
البحث في الويب
+ مؤقت النوم
+ ضبط
+ إلغاء المؤقت الحالي
+ تم إلقاء مؤقت النوم
+ تم ضبط مؤقت النوم لـ %d دقيقة من الآن.
+ قائمة تشغيل جديدة ...
قائمة تشغيل جديدة
+ هوامش ملونة
+ شكر خاص إلى
+ سجل التغييرات
+ الرخص
+ أذونات مرفوضة
+ تم رفض الإذن للوصول إلى الذاكرة الخارجية
+ الخلف
+ دعم التطوير
+ شكراً لك!
+ استعادة المشتريات السابقة.
+ توضيح سوق بلاي بواسطة
+ النسخة
+ التطبيق
+ المؤلف
+ أضف إلى دوائر جوجل +
+ تابع في تويتر
+ Fork عن طريق Github
+ زر موقعنا
+ أبلغ عن وجود مشكلة
+ أبلغ عن وجود مشاكل أو طلب ميزات جديدة
+ انضم لمجموعة جوجل +
+ إذا كنت تحتاج إلى مساعدة أو لديك أسئلة؛ مجتمع Phonograph في جوجل+ هو المكان المناسب لطرحها
+ ترجمة
+ ساعدنا في ترجمة Phonograph إلى لغتك الأم
+ قيّم
+ اترك تقييماً إيجابياً في متجر جوجل بلاي إذا أعجبك التطبيق.
+ تبرع لنا
+ إذا كنت ترى أنني أستحق أن أحصل على جزاء مقابل عملي، يمكنك أن تكافئني ببضعة دولارات هنا.
+ من أجل محرك السمات وميزات جميلة أخرى
+ من أجل شعار التطبيق المطابق لفلسفة ماتيريال ديزاين
+ من أجل وضع توضيحات البرنامج المتواجدة على المتجر وأيضاً صورة الألبوم الإفتراضية
+ لمساعدتي في تصميم البرنامج
+ الموقع
+ يتم تحميل المنتجات...
+ التالي
+ تصميم قائمة \"تستمع الآن\"
+ المقدمة
+ اضغط زر الخلف مجدداً لتجاوز المقدمة
+ مرحباً في Phonograph، مشغل موسيقى خفيف وأنيق على منصة أندرويد.
+ الذاكرة.
+ اسحب البطاقة في شاشة \"تستمع الآن\" لإظهار جميع المقطوعات على قائمة الانتظار
+ إعادة ترتيب القائمة بواسطة سحب المقطوعة من رقمها
+ صلاحية الوصول إلى الذاكرة مطلوبة لجلب جميع مقاطع الصوت تلقائياً من الذاكرة
+ المكتبة
+ الملفات
diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml
index fc1e8d90..ce055e0e 100644
--- a/app/src/main/res/values-el/strings.xml
+++ b/app/src/main/res/values-el/strings.xml
@@ -1,31 +1,47 @@
+ Τι θα θέλατε να μοιραστείτε;
+ Ακούτε το %1$s από %2$s
+ Το αρχείο ήχου
+ Θα θέλατε να θέσετε το %1$s ως ήχο κλήσης σας;
+ Θέστε το %1$s ως τον ήχο κλήσης σας.
+ Ορισμός ως ήχος κλήσης
+ Μοιραστείτε
"Ρυθμίσεις "
+ Χορήγησε
+ Έγινε
+ Παράβλεψη
"Σχετικά "
+ Εμφάνιση καλωσορίσματος
+ Εκκαθάριση λίστας
Σειρά τραγουδιών
+ Προσθήκη στα αγαπημένα
+ Διαγραφή από τα αγαπημένα
Αναζήτηση
- Αναπαραγωγή επόμενου
+ Επόμενο
+ Αναπαραγωγή
Προσθήκη στη σειρά τραγουδιών
Διαγραφή από την σειρά τραγουδιών
Προσθήκη στην λίστα αναπαραγωγής
Επεξεργασία ετικετών
+ Οριστική διαγραφή
Λεπτομέρειες
- Δίσκοι
+ Άλμπουμ
Καλλιτέχνες
Τραγούδια
Λίστες αναπαραγωγής
\u03a3\u03c5\u03b3\u03b3\u03bd\u03ce\u03bc\u03b7 - \u03a5\u03c0\u03ae\u03c1\u03be\u03b5 \u03c3\u03c6\u03ac\u03bb\u03bc\u03b1 \u03c3\u03c4\u03b7\u03bd \u03c0\u03c1\u03bf\u03c3\u03c0\u03ac\u03b8\u03b5\u03b9\u03b1 \u03b1\u03bd\u03b1\u03c0\u03b1\u03c1\u03b1\u03b3\u03c9\u03b3\u03ae\u03c2
\u03a3\u03c5\u03b3\u03b3\u03bd\u03ce\u03bc\u03b7, \u03b4\u03b5\u03bd \u03b2\u03c1\u03ae\u03ba\u03b1\u03bc\u03b5 \u03c4\u03b7 \u03b2\u03b9\u03bf\u03b3\u03c1\u03b1\u03c6\u03af\u03b1 \u03b1\u03c5\u03c4\u03bf\u03cd \u03c4\u03bf\u03c5 \u03ba\u03b1\u03bb\u03bb\u03b9\u03c4\u03ad\u03c7\u03bd\u03b7
Βιογραφία
- Δεν μπορούμε να φέρουμε τον ήχο στο προσκήνιο.
- Δίσκος
+ Έγινε άρνηση εστίασης ήχου
+ Άλμπουμ
Καλλιτέχνης
Είδος
- Καλλιτέχνης του δίσκου
+ Καλλιτέχνης του άλμπουμ
Έτος
Κομμάτι
"Κομμάτι (2 για κομμάτι 2 ή 3004 από CD3 κομμάτι 4)"
- Το πεδιο \"τίτλος του δίσκου\" ή \"καλλιτέχνης του δίσκου\" είναι άδειο
+ Το πεδίο \"Τίτλος\" ή \"Καλλιτέχνης\" είναι άδειο
Γίνεται εγγραφή
Γίνεται αποθήκευση αλλαγών...
Λεπτομέρειες
@@ -37,17 +53,26 @@
Ποιότητα
Ρυθμός δειγματοληψίας
Πήγαινε στον καλλιτέχνη
- Πήγαινε στο δίσκο
- Σειρά αναπαραγωγής
- Αποθήκευση ως λίστα
+ Πήγαινε στο άλμπουμ
+ Ουρά αναπαραγωγής
+ Αποθήκευση ως λίστα αναπαραγωγής
Κανένα αποτέλεσμα
Ανανέωση εικόνας καλλιτέχνη
+ Ανανεώθηκε το πορτρέτο του καλλιτέχνη
+ \u0394\u03b5\u03bd \u03ae\u03c4\u03b1\u03bd \u03b4\u03c5\u03bd\u03b1\u03c4\u03ae \u03b7 \u03ad\u03c5\u03c1\u03b5\u03c3\u03b7 \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1\u03c2.
Γίνεται ανανέωση...
- "Προστέθηκε ένας τίτλος στη σειρά αναπαραγωγής"
+ "Προστέθηκε ένας τίτλος στην ουρά αναπαραγωγής"
Προστέθηκαν %1$d εικονίδια στην σειρά αναπαραγωγής
+ Αφαίρεση από την λίστα
+ Μέγεθος πλέγματος
+ Μέγεθος πλέγματος
+ Προστέθηκαν %1$d τραγούδια στην λίστα %2$s.
Δημιουργήθηκε η λίστα αναπαραγωγής %1$s
Διεγράφη η λίστα αναπαραγωγής %1$s
- %1$s;]]>
+ Διαγράφηκαν %1$d τραγούδια.
+ \u0394\u03b5\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 \u03b4\u03c5\u03bd\u03b1\u03c4\u03ae \u03b7 \u03b4\u03b7\u03bc\u03b9\u03bf\u03c5\u03c1\u03b3\u03af\u03b1 \u03bb\u03af\u03c3\u03c4\u03b1\u03c2
+ %1$s;]]>
+ %1$s ; (\u039c\u03b7 \u03b1\u03bd\u03b1\u03c3\u03c4\u03c1\u03ad\u03c8\u03b9\u03bc\u03bf!)]]>
%1$d λίστες αναπαραγωγής;
]]>
@@ -55,23 +80,56 @@
%1$d τραγούδια;]]>
Διαγραφή τραγουδιού
Διαγραφή τραγουδιών
+ Διαγραφή από την λίστα
+ Διαγραφή τραγουδιών από την λίστα
Μετονομασία λίστας αναπαραγωγής
Διαγραφή λίστας αναπαραγωγής
Διαγραφή λιστών αναπαραγωγής
+ Εκκαθάριση λίστας
"Προσθήκη στη λίστα αναπαραγωγής"
- Τελευταίο άνοιγμα
+ Τυχαία τραγούδια
+ Τυχαίο άλμπουμ
+ Τυχαίος καλλιτέχνης
+ Τυχαία λίστα
+ Εκκαθάριση της λίστας αναπαραγωγής
+ Τελευταίο
Ανοιχτό
Σκούρο
- Εξισωτής
+ Μαύρο (AMOLED οθόνη)
+ Πάντα
+ Μόνο σε Wi-Fi
+ Ποτέ
+ Ισοσταθμιστής
+ Χρώματα
+ Τώρα
Γενικό θέμα
Ήχος
Γενικά
+ Εικόνες
+ Οθόνη κλειδώματος
Έγχρωμη μπάρα πλοήγησης
Αρχική σελίδα
+ Εμφάνιση album art
+ Αυτόματο κατέβασμα πορτρέτων καλλιτεχνών
+ Θάμπωμα πορτρέτων καλλιτεχνών
+ Χρωματιστή πλοήγηση
+ Παράληψη των album art στην SD
+ Εναλλαγή χωρίς παύση
+ Τετράγωνο album art
+ \"Μουντή\" Εργαλιοθήκη
+ \"Μουντή\" Γραμμή ειδοποιήσεων
+ Μεγαλύτερος τίτλος
+ Εναλακτικός χρονοδείκτης
+ Εμφάνηση καρτέλας πίσω από τα κουμπιά αναπαραγωγής
+ Χρωματιστά κουμπιά αναπαραγωγής
Δε βρέθηκε ισοσταθμιστής
"Δε βρέθηκε ήχος, αναπαράξτε κάτι και δοκιμάστε ξανά."
Διαγραφή
+ Εκκαθάρηση
+ Αφαίρεση
Μετονομασία
+ Δημιουργία
+ Επιλέχθηκαν %1$d
Επιλογή
Προεπιλογή
Πρωτεύον χρώμα
@@ -79,11 +137,20 @@
Το πρωτεύον χρώμα θέματος είναι λουλακί.
Το χρώμα των χαρακτήρων του θέματος είναι ροζ.
Ανανέωση εικόνας
- Αυτή η λίστα είναι άδεια
+ Άδεια λίστα αναπαραγωγής
Καμία λίστα
+ Δεν υπάρχουν άλμπουμ
+ Δεν υπάρχουν τραγούδια
+ Δεν υπάρχουν καλλιτέχνες
+ Κενό
+ Όνομα λίστας
Τραγούδι
- "Διαθέσιμο μόνο σε Lollipop."
- Σε ποιές προβολές θα χρωματίζεται η μπάρα πλοήγησης.
+ "Διαθέσιμο μόνο σε (Android) Lollipop."
+ Εμφάνιση του album art στην οθόνη κλειδώματος.
+ Εμφανίζει,θωριασμένα, το album art στην οθόνη κλειδώματος.Μπορεί να δημιουργίσει πρόβλημα με εφαρμογές Τρίτων.
+ "\u03a7\u03c1\u03c9\u03bc\u03b1\u03c4\u03af\u03b6\u03b5\u03b9 \u03c4\u03b7\u03bd \u03bc\u03c0\u03ac\u03c1\u03b1 \u03b5\u03b9\u03b4\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03b5\u03c9\u03bd \u03c3\u03c4\u03bf \u03c7\u03c1\u03ce\u03bc\u03b1 \u03c4\u03bf\u03c5 album art \u03c4\u03bf\u03c5 \u03c4\u03c1\u03b1\u03b3\u03bf\u03c5\u03b4\u03b9\u03bf\u03cd"
+ "Μπορεί να δημιουργίσει θέματα αναπαραγωγής σε μερικές συσκευές."
+ Χρωματίζει την μπάρα πλοήγησης στο πρωτεύον χρώμα
Αναζήτηση στη βιβλιοθήκη...
Σάρωση αρχείων πολυμέσων...
Νέα λίστα αναπαραγωγής
diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml
index 9c79e71b..7605e25c 100644
--- a/app/src/main/res/values-es-rES/strings.xml
+++ b/app/src/main/res/values-es-rES/strings.xml
@@ -1,16 +1,16 @@
¿Qué quieres compartir?
- Reproduciendo %1$s de %2$s
+ Estás escuchando %1$s de %2$s
El archivo de audio
- ¿Quieres establecer %1$s como tono de llamada?
- %1$s se ha establecido como tono de llamada.
+ ¿Te gustaría establecer %1$s como tono de llamada?
+ %1$s se estableció como tono de llamada
Establecer como tono de llamada
Compartir
"Ajustes"
Otorgar
Hecho
- Saltar
+ Omitir
Acerca de
Mostrar introducción
Limpiar lista de reproducción
@@ -23,7 +23,7 @@
Añadir a cola de reproducción
Eliminar de la cola de reproducción
Añadir a la lista de reproducción...
- Editor de etiquetas
+ Editor de información
Eliminar del dispositivo
Detalles
Álbumes
@@ -42,7 +42,7 @@
Pista
"Pista (2 para pista 2 o 3004 para CD3 pista 4)"
El título o artista está vacío.
- Escribiendo archivo...
+ Editando archivo
Guardando cambios...
Detalles
Nombre del archivo
diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml
index 3ac1bdd1..f3f02fd7 100644
--- a/app/src/main/res/values-fi/strings.xml
+++ b/app/src/main/res/values-fi/strings.xml
@@ -1,31 +1,47 @@
+ Mitä sinä haluat jakaa?
+ Kuunnellaan parhaillaan kappaletta {%1$s} artistilta {%2$s}.
+ Äänitiedosto
+ Haluatko asettaa kappaleen {%1$s} soittoääneksi?
+ Asetettiin {%1$s} soittoääneksesi.
+ Aseta soittoääneksi
+ Jaa
"Asetukset"
+ Myönnä
+ Valmis
+ Ohita
Tietoja
+ Näytä intro
+ Tyhjennä soittolista
Toistojono
+ Lisää suosikkeihin
+ Poista suosikeista
Etsi
Toista seuraavaksi
+ Toista
Lisää toistojonoon
- Poista jonosta
- Lisää soittolistaan
+ Poista toistojonosta
+ Lisää soittolistaan...
Tagieditori
+ Poista laitteesta
Yksityiskohdat
Albumit
Artistit
Kappaleet
Soittolistat
- Virhe toistettaessa kappaletta
- Biogtagiaa ei l\u00f6ytynyt t\u00e4lle artistille
- Biografia
- Ääntä ei voitu toistaa
- Albumit
- Artistit
- Tyylit
+ Virhe toistettaessa kappaletta.
+ El\u00e4m\u00e4nkertaa ei l\u00f6ytynyt t\u00e4lle artistille.
+ Elämänkerta
+ Ääntä ei voitu toistaa.
+ Albumi
+ Artisti
+ Tyylilajit
Albumin artisti
Vuosi
- Kappale
- "Kappale (2 kappale 2 tai 3004 CD3 kappale 4)"
- Artistialbumin nimi tai albumin artisti -kenttä on tyhjä
+ Raita
+ "Raita(2 raidalle 2 tai 3004 CD3 raidalle 4)"
+ Nimi tai artisti-kenttä on tyhjä.
Tiedostoa tallennetaan
Tallennetaan muutokset...
Yksityiskohdat
@@ -35,29 +51,175 @@
Tyyppi
Pituus
Bittinopeus
- Näytteenottotaajuus
+ Samplausnopeus
Näytä artisti
Näytä albumi
Toistojono
Tallenna soittolistana
Ei hakutulosta
Päivitä artistin kuva
+ Artistin kuva päivitetty.
+ Artistin kuvaa ei voitu p\u00e4ivitt\u00e4\u00e4.
Päivitetään...
- "Kappale lisätty jonoon"
- {%1$d} kappaletta lisättiin jonoon
- Soittolista {%1$s} luotu
- Soittolista {%1$s} poistettu
+ "Yksi kappale lisätty toistojonoon."
+ {%1$d} kappaletta lisättiin toistojonoon
+ Poista soittolistasta
+ Ruudukon koko
+ Ruudukon koko (vaaka)
+ Lisätty {%1$d} kappaletta soittolistaan {%2$s}.
+ Soittolista {%1$s} luotu.
+ Soittolista {%1$s} poistettu.
+ Poistettiin {%1$d} kappaletta.
+ Soittolistan luominen ep\u00e4onnistui.
}{%1$s}{}?]]>
+ }{%1$s}{}? T\u00e4t\u00e4 toimintoa ei voi perua!]]>
+ }{%1$d}{} soittolistaa?]]>
}{%1$s}{}?]]>
}{%1$d}{} kappaletta?]]>
- Poista Kappale
- Poista Kappaleet
- Nimeä Uudelleen Soittolista
- Poista Soittolista
- "Lisää Soittolistaan"
+ }{%1$s}{} soittolistasta?]]>
+ }{%1$d}{} kappaletta soittolistasta?]]>
+ Poista kappale
+ Poista kappaleet
+ Poista kappale soittolistasta
+ Poista kappaleita soittolistasta
+ Nimeä soittolista uudelleen
+ Poista soittolista
+ Poista soittolistat
+ Tyhjennä soittolistat
+ "Lisää soittolistaan"
+ Sekoita kaikki
+ Sekoita albumit
+ Sekoita artistit
+ Sekoita soittolistat
+ Tyhjennä toistojono
Viimeksi avattu
Vaalea
Tumma
- Taajuuskorjain
- Uusi Soittolista
+ Musta (AMOLED)
+ Aina
+ Vain Wi-Fi-yhteydellä
+ Ei koskaan
+ Ekvalisaattori
+ Värit
+ Toistetaan parhaillaan
+ Yleinen teema
+ Ääni
+ Yleinen
+ Kuvat
+ Lukitusnäyttö
+ Värillinen navigointipalkki
+ Aloitussivu
+ Näytä albumin kansi
+ Lataa automaattisesti artistien kuvat
+ Sumenna albumin kansi
+ Värillinen ilmoitus
+ Sivuuta Media Storen albumikannet
+ Kuiluton toisto
+ Neliömäinen albumin kansi
+ Läpikuultamaton työkalupalkki
+ Läpikuultamaton tilapalkki
+ Suurempi otsikkoruutu
+ Vaihtoehtoinen edistymispalkki
+ Näytä kortti toistonappien alapuolella
+ Värilliset toistonapit
+ Ekvalisaattoria ei löytynyt.
+ "Toista jokin kappale ensin, koita sitten uudelleen."
+ Poista
+ Tyhjennä
+ Poista
+ Nimeä uudelleen
+ Luo
+ {%1$d} valittu
+ Valitse
+ Oletus
+ Ensisijainen väri
+ Aksenttiväri
+ Ensisijainen teemaväri, oletuksena indigo.
+ Aksentti teemaväri, oletuksena pinkki.
+ Päivitä kuva
+ Tyhjennä soittolista
+ Ei soittolistoja
+ Ei albumeja
+ Ei kappaleita
+ Ei artisteja
+ Tyhjä
+ Soittolistan nimi
+ Kappale
+ "Saatavilla vain Lollipopilla."
+ Käyttää tämänhetkisten albumien kansia lukitusnäytön taustakuvana.
+ Sumentaa albumin kannen lukitusnäytöllä. Saattaa aiheuttaa ongelmia kolmannen osapuolen sovellusten ja widgettien kanssa.
+ "V\u00e4ritt\u00e4\u00e4 ilmoituksen albumin eloisalla v\u00e4rill\u00e4."
+ "Saattaa aiheuttaa toisto-ongelmia joillakin laitteilla."
+ Albumien kannet Toistetaan parhaillaan -näkymässä ovat aina neliömäisiä.
+ Värittää työkalupalkin.
+ Värittää tilapalkin.
+ Otsikkoruutu on korkeampi.
+ Käyttää edistymispalkkia, joka ei peitä albumin kantta, oletus edistymispalkin sijasta.
+ Näyttää kortin toista/pysäytä, ohita, kelaa takaisin, sekoita ja toista uudelleen -nappien alapuolella.
+ Saattaa nostaa albumin kannen laatua, mutta aiheuttaa hitaampaa kuvien latausaikaa. Käytä tätä vain, jos sinulla on ongelmia huonolaatuisten taideteosten kanssa.
+ V\u00e4ritt\u00e4\u00e4 toista/pys\u00e4yt\u00e4, sekoita ja toista uudelleen -napit, sek\u00e4 edistymispalkin albumin eloisalla v\u00e4rill\u00e4.
+ Värittää navigointipalkin ensisijaisella värillä.
+ "Ei voitu ladata vastaavaa albumin kantta."
+ Etsi kirjastostasi...
+ Uudelleenskannataan mediaa...
+ Suosikit
+ Viimeksi lisätyt
+ Historia
+ Eniten kuunnellut
+ Poista kansi
+ Lataa Last.fm-sivustolta
+ Valitse paikallisesta muistista
+ Web-haku
+ Ajastin
+ Aseta
+ Peru tämänhetkinen ajastin
+ Ajastin peruttu.
+ Ajastin asetettu {%d} minuutin päähän tästä hetkestä.
+ Uusi soittolista...
+ Uusi soittolista
+ Värilliset alatunnisteet
+ Erikoiskiitokset:
+ Muutosloki
+ Lisenssit
+ Sinulla ei ole oikeuksia tähän.
+ Oikeus päästä muistikortille evättu.
+ Takaisin
+ Tue kehitystä
+ Kiitos!
+ Palautetut edelliset ostokset.
+ Play Store kuvitus:
+ Versio
+ Sovellus
+ Luoja
+ Lisää Google Plus -piireihin
+ Seuraa Twitterissä
+ Seuraa GitHubissa
+ Vieraile verkkosivulla
+ Raportoi bugeja
+ Raportoi bugeja tai ehdota uusia ominaisuuksia.
+ Liity Google Plus -yhteisöön
+ Jos tarvitset apua tai sinulla on kysymyksiä, Phonographin Google Plus -yhteisö on hyvä paikka mennä.
+ Käännä
+ Auta kääntämään Phonograph sinun äidinkielellesi.
+ Arvostele
+ Jätä positiivinen arvostelu Google Play -kauppaan, jos pidät Phonographista.
+ Lahjoita
+ Jos sinun mielestäsi minun kuuluisi saada korvausta työstäni, voit antaa minulla muutaman dollarin täällä.
+ Teemamoottorista ja muista hienoista jutuista.
+ Hienosta material-ikonista.
+ Google Play kuvituksesta ja tyhjästä albumikannesta.
+ Sovelluksen desing suunnitteluavusta.
+ Verkkosivu
+ Ladataan tuotteita...
+ Seuraavaksi
+ Toistetaan parhaillaan layouttia
+ Esittely
+ Paina takaisin-nappia uudelleen ohittaaksesi esittelyn
+ "Tervetuloa Phonographiin, kauniiseen ja kevyeen musiikkisoittimeen Androidille. "
+ Tallennustila
+ Vedä korttia Toistetaan parhaillaan -ikkunassa ylös, nähdäksesi koko toistojonon.
+ Järjestä toistojonoa vetämällä kappaletta sen raitanumerosta.
+ Tallennustilan käytön oikeus vaaditaan Phonographin käyttöön, jotta voimme lukea sinun musiikkikirjastosi.
+ Kirjasto
+ Kansiot
diff --git a/app/src/main/res/values-he/strings.xml b/app/src/main/res/values-he/strings.xml
index 8e7ab474..54d5cbe3 100644
--- a/app/src/main/res/values-he/strings.xml
+++ b/app/src/main/res/values-he/strings.xml
@@ -1,21 +1,30 @@
- מה אתם רוצים לשתף?
- מאזינים כרגע ל-%1$s מאת %2$s.
+ מה תרצה/י לשתף?
+ כרגע מאזין ל%1$s מאת %2$s.
קובץ האודיו
- אתם רוצים לקבוע את %1$s בתור הצלצול שלכם?
- קביעת %1$s בתור בצלצול שלך.
+ תרצה/י לקבוע את %1$s בתור הצלצול שלך?
+ הגדר/י את %1$s בתור הצלצול שלך.
+ הגדרה כצלצול
שיתוף
"הגדרות"
+ הענק
+ בוצע
+ דלג
אודות
+ הצג את המסך הראשי
+ ניקוי רשימת השמעה
+ "מנגן "
הוספה למועדפים
הסרה מהמועדפים
חיפוש
- ניגון הבא
- ניגון
- הוספה לתור ההשמעה
- הסרה מתור ההשמעה
- הסרה מהמכשיר
+ ניגון השיר הבא
+ נגן
+ הסופה לרשימת ההשמעה
+ הסרה מרשימת ההשמעה
+ הוסף לרשימת השמעה...
+ עריכת תווית
+ מחק מהמכשיר
פרטים
אלבומים
אמנים
@@ -24,48 +33,69 @@
\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05e0\u05d2\u05df \u05e9\u05d9\u05e8 \u05d6\u05d4.
\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05de\u05e6\u05d5\u05d0 \u05d0\u05ea \u05d4\u05d1\u05d9\u05d5\u05d2\u05e8\u05e4\u05d9\u05d4 \u05e9\u05dc \u05d0\u05de\u05df \u05d6\u05d4.
ביוגרפיה
+ מיקוד שמע נדחה
אלבום
אמן
סגנון
+ אמן האלבום
שנה
- כתיבת קובץ
- שמירת שינויים...
+ שיר
+ "שיר (2 בשביל שיר 2 או 3004 בשביל דיסק 3 שיר 4)"
+ הכותרת או האמן ריקים
+ כותב קובץ
+ שומר שינויים...
פרטים
- שם קובץ
- נתיב הקובץ
+ שם הקובץ
+ מיקום הקובץ
גודל
- פורמט
+ תבנית
אורך
+ קצב נתונים
+ עיבוד אותות
מעבר לאמן
מעבר לאלבום
- ניגון תור
+ מנגן רשימת השמעה
שמירה כרשימת השמעה
אין תוצאות
- עדכון תמונת האמן
+ עדכן תמונת אמן
תמונת האמן עודכנה.
- עידכון...
+ \u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05e2\u05d3\u05db\u05df \u05d0\u05ea \u05ea\u05de\u05d5\u05e0\u05ea \u05d4\u05d0\u05de\u05df.
+ מעדכן...
+ "נוסף שיר אחד לתור "
+ נוספו %1$d שירים לתור
+ הסר מרשימת ההשמעה
+ גודל הרשת
+ גודל הרשת (קרקע)
+ הוכנסו %1$d שירים לתוך רשימת השמיעה %2$s
+ נוצרה רשימת השמיעה %1$s
+ נמחקה רשימת השמיעה %1$s
+ נמחקו %1$d שירים
+ \u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05d9\u05e6\u05d5\u05e8 \u05e8\u05e9\u05d9\u05de\u05ea \u05e9\u05de\u05d9\u05e2\u05d4.
+ %1$s?]]>
+ %1$s? \u05dc\u05d0\u05d7\u05e8 \u05ea\u05d4\u05dc\u05d9\u05da \u05d6\u05d4 \u05dc\u05d0 \u05ea\u05d5\u05db\u05dc/\u05d9 \u05dc\u05d4\u05d7\u05d6\u05d9\u05e8 \u05d0\u05ea \u05d4\u05de\u05e6\u05d1 \u05dc\u05e7\u05d3\u05de\u05d5\u05ea\u05d5!]]>
+ %1$d רשימות השמיעה?]]>
בהיר
כהה
שחור (AMOLED)
תמיד
רק עם WI-FI
אף פעם
- אקולייזר
+ אקוולייזר
צבעים
מנגן כעת
- אודיו
+ שמע
כללי
תמונות
מסך נעילה
סרגל ניווט צבעוני
- עמוד התחלה
- הצגת כיסוי אלבום
+ עמוד פתיחה
+ הצג עטיפת אלבום
הורדה אוטומטית של תמונות האמן
- טשטוש כיסוי האלבום
+ טשטוש עטיפת האלבום
התראה צבעונית
- ניגון ללא מרווחים
- כיסוי אלבום מרובע
- לא נמצא אקולייזר
+ ניגון ללא מרווחים בין השירים
+ עטיפת אלבום מרובעת
+ אקוולייזר לא נמצא
מחיקה
ניקוי
הסרה
@@ -76,21 +106,21 @@
ברירת מחדל
צבע ראשי
עדכון תמונה
- רשימת השמעה ריקה
+ רשימת שמע ריקה
אין אלבומים
אין שירים
אין אמנים
ריק
- שם רשימת השמעה
+ שם רשימת שמע
שיר
מועדפים
היסטוריה
- הסרת כיסוי
+ הסרת עטיפה
הורדה מ-Last.fm
חיפוש באינטרנט
קבע
- רשימת השמעה חדשה
- תודות מיוחדות
+ רשימת שמע חדשה
+ תודות מיוחדות ל
רשימת שינויים
רישיונות
הרשאות נדחו.
@@ -102,8 +132,8 @@
גרסה
אפליקציה
ביקור באתר
- דיווח באגים
- תרגום
+ דווח על באגים
+ תרגם
תרומה
אם אתם חושבים שמגיע לי לקבל תשלום על עבודתי, אתם יכולים להשאיר לי כמה שקלים כאן.
אתר
diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml
index 506c6c5e..3b3bbf15 100644
--- a/app/src/main/res/values-hu/strings.xml
+++ b/app/src/main/res/values-hu/strings.xml
@@ -113,6 +113,17 @@
Előadó képének automatikus letöltése
Albumborító elhomályosítása
Színezett értesítés
+ Média tárolt albumborítók figyelmen kívül hagyása
+ Áttűnéses lejátszás
+ Négyzet alakú albumkép
+ Áttetsző menüsáv
+ Átlátszatlan állapotsáv
+ Nagyobb címdoboz
+ Alternatív haladási csúszka
+ Kártya megjelenítése a lejátszást irányító gombok alatt
+ Színezett lejátszást irányító gombok
+ Equalizer nem található.
+ "Játszd le egy dalt, majd próbáld újra."
Töröl
Kiürít
Eltávolít
@@ -120,9 +131,62 @@
Létrehoz
%1$d kiválasztva
Kiválaszt
+ Alapértelmezett
+ Elsődleges szín
+ Másodlagos szín
+ Az alapértelmezett elsődleges szín, indigó.
+ Az alapértelmezett másodlagos szín, rózsaszín.
+ Kép frissítése
+ Üres lejátszási lista
+ Nincs lejátszási lista
+ Nincs album
+ Nincs dal
+ Nincs előadó
+ Üres
+ Lejátszási lista neve
+ Dal
+ "Csak Lollipoppon (Android 5.x) érhető el."
+ Jelenlegi dal albumborítójának használata a zárképernyő háttérképeként.
+ Albumborító elhomályosítása a zárképernyőn.Ez problémákat okozhat a harmadik féltől származó alkalmazásoknál és widgeteknél.
+ "\u00c9rtes\u00edt\u00e9sek sz\u00ednez\u00e9se az albumbor\u00edt\u00f3 vibr\u00e1l\u00f3 sz\u00edn\u00e9vel."
+ "Lejátszási problémákat okozhat néhány eszközön."
+ Az albumborító a most játszott nézetnél, mindig négyzet alakú legyen.
+ Az eszköztár színezése.
+ Az állapotsáv színezése.
+ A cím doboz magasabb.
+ Folyamatjelzősáv használata, amely nem takarja el az albumborítót az alapértelmezett folyamatjelző csúszka helyett.
+ Kártya megjelenítése a lejátszás/szünet, át ugor, visszateker, keverés és az ismétlés alatt gombok alatt.
+ Növelheti az album borító minőségét, de lassabban tölti be a képeket. Csak akkor engedélyezze, ha az albumborítók rossz minőségben jelenik meg.
+ Lej\u00e1tsz\u00e1s/sz\u00fcnet, kever\u00e9s \u00e9s ism\u00e9tl\u00e9s gombok sz\u00ednez\u00e9se, bele\u00e9rtve a halad\u00e1si cs\u00faszk\u00e1t az albumbor\u00edt\u00f3 vibr\u00e1l\u00f3 sz\u00edn\u00e9vel.
+ Navigációs sáv színezése az alapértelmezett színnel.
+ "Nem siker\u00fclt let\u00f6lteni a megfelel\u0151 albumbor\u00edt\u00f3t."
+ Keresés a könyvtáradban...
+ Média újraszkennelése...
+ Kedvencek
+ Utoljára hozzáadva
+ Előzmények
+ Az én top dalaim
+ Borító eltávolítása
+ Letöltés a Last.fm-ről
+ Felvétel a helyi tárhelyből
+ Internetes keresés
+ Elalvás időzítő
+ Beállít
+ Jelenlegi időzítő törlése
+ Elalvás időzítő törölve.
+ Elalvás időzítő beállítva, mostantól számított %d percre.
+ Új lejátszási lista...
+ Új lejátszási lista
+ Színes lábjegyzetek
+ Külön köszönet
+ Változások
+ Engedélyek
+ Jogosultságok megtagadva.
+ Jogosultságod a külső tárolóhoz megtagadva.
vissza
Fejlesztő támogatása
Köszönöm!
+ Korábbi vásárlások visszaállítása.
Play Áruház illusztrációt készítette
Verzió
Alkalmazás
@@ -132,9 +196,30 @@
Fork on GitHub
Weboldal meglátogatása
Hiba jelentése
+ Hiba jelentése vagy új funkció kérése.
+ Csatlakozz a Google Plus közösséghez
+ Ha segítségre lenne szükséged, a Phonograph közösség között biztos válaszra találsz.
Fordítás
Segíts lefordítani a Phonograph-ot a saját nyelvedre.
+ Értékeld
+ Értékeld a Phonograph-ot pozitívan a Google Play-en!
Adományoz
+ Ha szerinted megéri a munkám, adományozz egy csekély összeget nekem.
+ A téma alapjához és egyéb remek dolgokhoz.
+ A szép material alkalmazás ikonért.
+ A Play Store-os illusztrációért és az üres albumborítóért.
+ Azért, mert segített nekem a kinézetben.
+ Weboldal
+ Termékek betöltése...
+ Következő
+ Most játszott elrendezés
+ Bemutató
+ Nyomj a visszára megint, hogy átugord a bemutatót.
+ "Üdvözöl a Phonograph! Egy kisméretű, szép zenelejátszó Android-ra. "
+ Tárhely
+ Húzd fel a kártyát a most játszott képernyőnél, hogy megnyisd a lejátszási sort.
+ Rendezd át a lejátszási sort, azzal hogy megfogod a számokat a sorszámuknál fogva.
+ Engedélyezned kell a tárhely használatát, hogy a Phonograph meg tudja találni a zeneszámaidat.
Könyvtár
Mappa
diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml
index 8e7ab474..54d5cbe3 100644
--- a/app/src/main/res/values-iw/strings.xml
+++ b/app/src/main/res/values-iw/strings.xml
@@ -1,21 +1,30 @@
- מה אתם רוצים לשתף?
- מאזינים כרגע ל-%1$s מאת %2$s.
+ מה תרצה/י לשתף?
+ כרגע מאזין ל%1$s מאת %2$s.
קובץ האודיו
- אתם רוצים לקבוע את %1$s בתור הצלצול שלכם?
- קביעת %1$s בתור בצלצול שלך.
+ תרצה/י לקבוע את %1$s בתור הצלצול שלך?
+ הגדר/י את %1$s בתור הצלצול שלך.
+ הגדרה כצלצול
שיתוף
"הגדרות"
+ הענק
+ בוצע
+ דלג
אודות
+ הצג את המסך הראשי
+ ניקוי רשימת השמעה
+ "מנגן "
הוספה למועדפים
הסרה מהמועדפים
חיפוש
- ניגון הבא
- ניגון
- הוספה לתור ההשמעה
- הסרה מתור ההשמעה
- הסרה מהמכשיר
+ ניגון השיר הבא
+ נגן
+ הסופה לרשימת ההשמעה
+ הסרה מרשימת ההשמעה
+ הוסף לרשימת השמעה...
+ עריכת תווית
+ מחק מהמכשיר
פרטים
אלבומים
אמנים
@@ -24,48 +33,69 @@
\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05e0\u05d2\u05df \u05e9\u05d9\u05e8 \u05d6\u05d4.
\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05de\u05e6\u05d5\u05d0 \u05d0\u05ea \u05d4\u05d1\u05d9\u05d5\u05d2\u05e8\u05e4\u05d9\u05d4 \u05e9\u05dc \u05d0\u05de\u05df \u05d6\u05d4.
ביוגרפיה
+ מיקוד שמע נדחה
אלבום
אמן
סגנון
+ אמן האלבום
שנה
- כתיבת קובץ
- שמירת שינויים...
+ שיר
+ "שיר (2 בשביל שיר 2 או 3004 בשביל דיסק 3 שיר 4)"
+ הכותרת או האמן ריקים
+ כותב קובץ
+ שומר שינויים...
פרטים
- שם קובץ
- נתיב הקובץ
+ שם הקובץ
+ מיקום הקובץ
גודל
- פורמט
+ תבנית
אורך
+ קצב נתונים
+ עיבוד אותות
מעבר לאמן
מעבר לאלבום
- ניגון תור
+ מנגן רשימת השמעה
שמירה כרשימת השמעה
אין תוצאות
- עדכון תמונת האמן
+ עדכן תמונת אמן
תמונת האמן עודכנה.
- עידכון...
+ \u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05e2\u05d3\u05db\u05df \u05d0\u05ea \u05ea\u05de\u05d5\u05e0\u05ea \u05d4\u05d0\u05de\u05df.
+ מעדכן...
+ "נוסף שיר אחד לתור "
+ נוספו %1$d שירים לתור
+ הסר מרשימת ההשמעה
+ גודל הרשת
+ גודל הרשת (קרקע)
+ הוכנסו %1$d שירים לתוך רשימת השמיעה %2$s
+ נוצרה רשימת השמיעה %1$s
+ נמחקה רשימת השמיעה %1$s
+ נמחקו %1$d שירים
+ \u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05d9\u05e6\u05d5\u05e8 \u05e8\u05e9\u05d9\u05de\u05ea \u05e9\u05de\u05d9\u05e2\u05d4.
+ %1$s?]]>
+ %1$s? \u05dc\u05d0\u05d7\u05e8 \u05ea\u05d4\u05dc\u05d9\u05da \u05d6\u05d4 \u05dc\u05d0 \u05ea\u05d5\u05db\u05dc/\u05d9 \u05dc\u05d4\u05d7\u05d6\u05d9\u05e8 \u05d0\u05ea \u05d4\u05de\u05e6\u05d1 \u05dc\u05e7\u05d3\u05de\u05d5\u05ea\u05d5!]]>
+ %1$d רשימות השמיעה?]]>
בהיר
כהה
שחור (AMOLED)
תמיד
רק עם WI-FI
אף פעם
- אקולייזר
+ אקוולייזר
צבעים
מנגן כעת
- אודיו
+ שמע
כללי
תמונות
מסך נעילה
סרגל ניווט צבעוני
- עמוד התחלה
- הצגת כיסוי אלבום
+ עמוד פתיחה
+ הצג עטיפת אלבום
הורדה אוטומטית של תמונות האמן
- טשטוש כיסוי האלבום
+ טשטוש עטיפת האלבום
התראה צבעונית
- ניגון ללא מרווחים
- כיסוי אלבום מרובע
- לא נמצא אקולייזר
+ ניגון ללא מרווחים בין השירים
+ עטיפת אלבום מרובעת
+ אקוולייזר לא נמצא
מחיקה
ניקוי
הסרה
@@ -76,21 +106,21 @@
ברירת מחדל
צבע ראשי
עדכון תמונה
- רשימת השמעה ריקה
+ רשימת שמע ריקה
אין אלבומים
אין שירים
אין אמנים
ריק
- שם רשימת השמעה
+ שם רשימת שמע
שיר
מועדפים
היסטוריה
- הסרת כיסוי
+ הסרת עטיפה
הורדה מ-Last.fm
חיפוש באינטרנט
קבע
- רשימת השמעה חדשה
- תודות מיוחדות
+ רשימת שמע חדשה
+ תודות מיוחדות ל
רשימת שינויים
רישיונות
הרשאות נדחו.
@@ -102,8 +132,8 @@
גרסה
אפליקציה
ביקור באתר
- דיווח באגים
- תרגום
+ דווח על באגים
+ תרגם
תרומה
אם אתם חושבים שמגיע לי לקבל תשלום על עבודתי, אתם יכולים להשאיר לי כמה שקלים כאן.
אתר
diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml
index 97c893d5..e31bc232 100644
--- a/app/src/main/res/values-sv/strings.xml
+++ b/app/src/main/res/values-sv/strings.xml
@@ -1,7 +1,19 @@
+ Vad vill du dela?
+ Lyssnar just nu på %1$s av %2$s.
+ Ljudfilen
+ "Vill du lägga till %1$s som din ringsignal? "
+ "Lägg till %1$s som din ringsignal. "
+ "Lägg till som ringsignal. "
+ Dela
"Inställningar"
+ Tillåt
+ Färdig
+ Skippa
Om
+ Visa intro
+ "Rensa spellista "
Uppspelningskö
Sök
Spela nästa
@@ -24,7 +36,7 @@
Album artist
År
Låt
- "Låt"
+ "Spår"
Textfältet för albumtitel eller artist är tomt.
Skriver till fil
Sparar ändringar ...
diff --git a/app/src/main/res/values/strings_activity_settings.xml b/app/src/main/res/values/strings_activity_settings.xml
index 80c9fbe6..33eba14a 100644
--- a/app/src/main/res/values/strings_activity_settings.xml
+++ b/app/src/main/res/values/strings_activity_settings.xml
@@ -22,9 +22,9 @@
- - 0
- - 1
- - 2
+ - light
+ - dark
+ - black
diff --git a/app/src/main/res/values/styles_parents.xml b/app/src/main/res/values/styles_parents.xml
index eec8a3b1..b7f75c80 100644
--- a/app/src/main/res/values/styles_parents.xml
+++ b/app/src/main/res/values/styles_parents.xml
@@ -58,7 +58,7 @@