Implemented app-theme-helper. Needs to be cleaned up.
This commit is contained in:
parent
178c15dafb
commit
8b98a9be85
39 changed files with 275 additions and 1370 deletions
|
|
@ -138,4 +138,5 @@ dependencies {
|
||||||
compile 'com.github.kabouzeid:AppIntro:3.3.0k'
|
compile 'com.github.kabouzeid:AppIntro:3.3.0k'
|
||||||
compile 'com.github.bumptech.glide:glide:3.6.1'
|
compile 'com.github.bumptech.glide:glide:3.6.1'
|
||||||
compile 'com.github.kabouzeid:RecyclerView-FastScroll:v1.2-kmod'
|
compile 'com.github.kabouzeid:RecyclerView-FastScroll:v1.2-kmod'
|
||||||
|
compile 'com.github.kabouzeid:app-theme-helper:0.7.8kmod'
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
|
||||||
import com.afollestad.materialdialogs.internal.ThemeSingleton;
|
import com.kabouzeid.appthemehelper.ThemeStore;
|
||||||
import com.kabouzeid.gramophone.R;
|
import com.kabouzeid.gramophone.R;
|
||||||
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
||||||
import com.kabouzeid.gramophone.interfaces.CabHolder;
|
import com.kabouzeid.gramophone.interfaces.CabHolder;
|
||||||
|
|
@ -71,9 +71,10 @@ public class ShuffleButtonSongAdapter extends SongAdapter {
|
||||||
@Override
|
@Override
|
||||||
public void onBindViewHolder(@NonNull final SongAdapter.ViewHolder holder, int position) {
|
public void onBindViewHolder(@NonNull final SongAdapter.ViewHolder holder, int position) {
|
||||||
if (holder.getItemViewType() == SHUFFLE_BUTTON) {
|
if (holder.getItemViewType() == SHUFFLE_BUTTON) {
|
||||||
|
int accentColor = ThemeStore.accentColor(activity);
|
||||||
if (holder.title != null) {
|
if (holder.title != null) {
|
||||||
holder.title.setText(activity.getResources().getString(R.string.action_shuffle_all).toUpperCase());
|
holder.title.setText(activity.getResources().getString(R.string.action_shuffle_all).toUpperCase());
|
||||||
holder.title.setTextColor(ThemeSingleton.get().positiveColor);
|
holder.title.setTextColor(accentColor);
|
||||||
holder.title.setTypeface(Typeface.create("sans-serif-medium", Typeface.NORMAL));
|
holder.title.setTypeface(Typeface.create("sans-serif-medium", Typeface.NORMAL));
|
||||||
}
|
}
|
||||||
if (holder.text != null) {
|
if (holder.text != null) {
|
||||||
|
|
@ -85,7 +86,7 @@ public class ShuffleButtonSongAdapter extends SongAdapter {
|
||||||
if (holder.image != null) {
|
if (holder.image != null) {
|
||||||
final int padding = activity.getResources().getDimensionPixelSize(R.dimen.default_item_margin) / 2;
|
final int padding = activity.getResources().getDimensionPixelSize(R.dimen.default_item_margin) / 2;
|
||||||
holder.image.setPadding(padding, padding, padding, padding);
|
holder.image.setPadding(padding, padding, padding, padding);
|
||||||
holder.image.setColorFilter(ThemeSingleton.get().positiveColor.getDefaultColor());
|
holder.image.setColorFilter(accentColor);
|
||||||
holder.image.setImageResource(R.drawable.ic_shuffle_white_24dp);
|
holder.image.setImageResource(R.drawable.ic_shuffle_white_24dp);
|
||||||
}
|
}
|
||||||
if (holder.separator != null) {
|
if (holder.separator != 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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -8,7 +8,6 @@ import android.os.Bundle;
|
||||||
import android.support.annotation.NonNull;
|
import android.support.annotation.NonNull;
|
||||||
import android.support.v7.widget.AppCompatButton;
|
import android.support.v7.widget.AppCompatButton;
|
||||||
import android.support.v7.widget.Toolbar;
|
import android.support.v7.widget.Toolbar;
|
||||||
import android.view.Menu;
|
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
|
|
@ -16,12 +15,12 @@ import android.widget.LinearLayout;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import com.afollestad.materialdialogs.internal.ThemeSingleton;
|
import com.afollestad.materialdialogs.internal.ThemeSingleton;
|
||||||
|
import com.kabouzeid.appthemehelper.ThemeStore;
|
||||||
import com.kabouzeid.gramophone.R;
|
import com.kabouzeid.gramophone.R;
|
||||||
import com.kabouzeid.gramophone.dialogs.ChangelogDialog;
|
import com.kabouzeid.gramophone.dialogs.ChangelogDialog;
|
||||||
import com.kabouzeid.gramophone.dialogs.DonationDialog;
|
import com.kabouzeid.gramophone.dialogs.DonationDialog;
|
||||||
import com.kabouzeid.gramophone.ui.activities.base.AbsBaseActivity;
|
import com.kabouzeid.gramophone.ui.activities.base.AbsBaseActivity;
|
||||||
import com.kabouzeid.gramophone.util.ColorUtil;
|
import com.kabouzeid.gramophone.util.ColorUtil;
|
||||||
import com.kabouzeid.gramophone.util.ViewUtil;
|
|
||||||
|
|
||||||
import butterknife.Bind;
|
import butterknife.Bind;
|
||||||
import butterknife.ButterKnife;
|
import butterknife.ButterKnife;
|
||||||
|
|
@ -127,14 +126,14 @@ public class AboutActivity extends AbsBaseActivity implements View.OnClickListen
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
setContentView(R.layout.activity_about);
|
setContentView(R.layout.activity_about);
|
||||||
setStatusBarTransparent();
|
setDrawUnderStatusbar(true);
|
||||||
ButterKnife.bind(this);
|
ButterKnife.bind(this);
|
||||||
|
|
||||||
setUpViews();
|
setStatusbarColorAuto();
|
||||||
|
setNavigationbarColorAuto();
|
||||||
|
setTaskDescriptionColorAuto();
|
||||||
|
|
||||||
if (shouldColorNavigationBar())
|
setUpViews();
|
||||||
setNavigationBarThemeColor();
|
|
||||||
setStatusBarThemeColor();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setUpViews() {
|
private void setUpViews() {
|
||||||
|
|
@ -145,7 +144,7 @@ public class AboutActivity extends AbsBaseActivity implements View.OnClickListen
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setUpToolbar() {
|
private void setUpToolbar() {
|
||||||
toolbar.setBackgroundColor(getThemeColorPrimary());
|
toolbar.setBackgroundColor(ThemeStore.primaryColor(this));
|
||||||
setSupportActionBar(toolbar);
|
setSupportActionBar(toolbar);
|
||||||
//noinspection ConstantConditions
|
//noinspection ConstantConditions
|
||||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||||
|
|
@ -273,12 +272,4 @@ public class AboutActivity extends AbsBaseActivity implements View.OnClickListen
|
||||||
.build()
|
.build()
|
||||||
.showAppCompat();
|
.showAppCompat();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onCreateOptionsMenu(Menu menu) {
|
|
||||||
boolean darkContent = ColorUtil.useDarkTextColorOnBackground(getThemeColorPrimary());
|
|
||||||
ViewUtil.setToolbarContentDark(this, toolbar, darkContent);
|
|
||||||
setUseDarkStatusBarIcons(darkContent);
|
|
||||||
return super.onCreateOptionsMenu(menu);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -76,14 +76,11 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
setStatusBarTransparent();
|
setDrawUnderStatusbar(true);
|
||||||
ButterKnife.bind(this);
|
ButterKnife.bind(this);
|
||||||
|
|
||||||
supportPostponeEnterTransition();
|
supportPostponeEnterTransition();
|
||||||
|
|
||||||
if (shouldColorNavigationBar())
|
|
||||||
setNavigationBarColor(DialogUtils.resolveColor(this, R.attr.default_bar_color));
|
|
||||||
|
|
||||||
getAlbumFromIntentExtras();
|
getAlbumFromIntentExtras();
|
||||||
setUpObservableListViewParams();
|
setUpObservableListViewParams();
|
||||||
setUpToolBar();
|
setUpToolBar();
|
||||||
|
|
@ -110,7 +107,7 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements
|
||||||
// Change alpha of overlay
|
// Change alpha of overlay
|
||||||
toolbarAlpha = Math.max(0, Math.min(1, (float) scrollY / flexibleRange));
|
toolbarAlpha = Math.max(0, Math.min(1, (float) scrollY / flexibleRange));
|
||||||
toolbar.setBackgroundColor(ColorUtil.getColorWithAlpha(toolbarAlpha, toolbarColor));
|
toolbar.setBackgroundColor(ColorUtil.getColorWithAlpha(toolbarAlpha, toolbarColor));
|
||||||
setStatusBarColor(ColorUtil.getColorWithAlpha(cab != null && cab.isActive() ? 1 : toolbarAlpha, toolbarColor));
|
setStatusbarColor(ColorUtil.getColorWithAlpha(cab != null && cab.isActive() ? 1 : toolbarAlpha, toolbarColor));
|
||||||
|
|
||||||
// Translate name text
|
// Translate name text
|
||||||
int maxTitleTranslationY = albumArtViewHeight;
|
int maxTitleTranslationY = albumArtViewHeight;
|
||||||
|
|
@ -179,15 +176,8 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements
|
||||||
albumTitleView.setBackgroundColor(color);
|
albumTitleView.setBackgroundColor(color);
|
||||||
albumTitleView.setTextColor(ColorUtil.getPrimaryTextColorForBackground(this, color));
|
albumTitleView.setTextColor(ColorUtil.getPrimaryTextColorForBackground(this, color));
|
||||||
|
|
||||||
if (shouldColorNavigationBar())
|
setNavigationbarColor(color);
|
||||||
setNavigationBarColor(color);
|
setTaskDescriptionColor(color);
|
||||||
|
|
||||||
notifyTaskColorChange(color);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected boolean overridesTaskColor() {
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -309,7 +299,7 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements
|
||||||
.start(new MaterialCab.Callback() {
|
.start(new MaterialCab.Callback() {
|
||||||
@Override
|
@Override
|
||||||
public boolean onCabCreated(MaterialCab materialCab, Menu menu) {
|
public boolean onCabCreated(MaterialCab materialCab, Menu menu) {
|
||||||
setStatusBarColor(ColorUtil.getOpaqueColor(toolbarColor));
|
setStatusbarColor(ColorUtil.getOpaqueColor(toolbarColor));
|
||||||
return callback.onCabCreated(materialCab, menu);
|
return callback.onCabCreated(materialCab, menu);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -320,7 +310,7 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onCabFinished(MaterialCab materialCab) {
|
public boolean onCabFinished(MaterialCab materialCab) {
|
||||||
setStatusBarColor(ColorUtil.getColorWithAlpha(toolbarAlpha, toolbarColor));
|
setStatusbarColor(ColorUtil.getColorWithAlpha(toolbarAlpha, toolbarColor));
|
||||||
return callback.onCabFinished(materialCab);
|
return callback.onCabFinished(materialCab);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
@ -341,4 +331,10 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements
|
||||||
super.onMediaStoreChanged();
|
super.onMediaStoreChanged();
|
||||||
refresh();
|
refresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setStatusbarColor(int color) {
|
||||||
|
super.setStatusbarColor(color);
|
||||||
|
setLightStatusbar(false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -100,12 +100,9 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
setStatusBarTransparent();
|
setDrawUnderStatusbar(true);
|
||||||
ButterKnife.bind(this);
|
ButterKnife.bind(this);
|
||||||
|
|
||||||
if (shouldColorNavigationBar())
|
|
||||||
setNavigationBarColor(DialogUtils.resolveColor(this, R.attr.default_bar_color));
|
|
||||||
|
|
||||||
lastFMRestClient = new LastFMRestClient(this);
|
lastFMRestClient = new LastFMRestClient(this);
|
||||||
|
|
||||||
getArtistFromIntentExtras();
|
getArtistFromIntentExtras();
|
||||||
|
|
@ -135,7 +132,7 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
|
||||||
// Change alpha of overlay
|
// Change alpha of overlay
|
||||||
toolbarAlpha = Math.max(0, Math.min(1, (float) scrollY / flexibleRange));
|
toolbarAlpha = Math.max(0, Math.min(1, (float) scrollY / flexibleRange));
|
||||||
toolbar.setBackgroundColor(ColorUtil.getColorWithAlpha(toolbarAlpha, toolbarColor));
|
toolbar.setBackgroundColor(ColorUtil.getColorWithAlpha(toolbarAlpha, toolbarColor));
|
||||||
setStatusBarColor(ColorUtil.getColorWithAlpha(cab != null && cab.isActive() ? 1 : toolbarAlpha, toolbarColor));
|
setStatusbarColor(ColorUtil.getColorWithAlpha(cab != null && cab.isActive() ? 1 : toolbarAlpha, toolbarColor));
|
||||||
|
|
||||||
// Translate name text
|
// Translate name text
|
||||||
int maxTitleTranslationY = artistImageViewHeight;
|
int maxTitleTranslationY = artistImageViewHeight;
|
||||||
|
|
@ -287,11 +284,6 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
protected boolean overridesTaskColor() {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||||
super.onActivityResult(requestCode, resultCode, data);
|
super.onActivityResult(requestCode, resultCode, data);
|
||||||
|
|
@ -309,11 +301,8 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
|
||||||
toolbarColor = vibrantColor;
|
toolbarColor = vibrantColor;
|
||||||
artistName.setBackgroundColor(vibrantColor);
|
artistName.setBackgroundColor(vibrantColor);
|
||||||
artistName.setTextColor(ColorUtil.getPrimaryTextColorForBackground(this, vibrantColor));
|
artistName.setTextColor(ColorUtil.getPrimaryTextColorForBackground(this, vibrantColor));
|
||||||
|
setNavigationbarColor(vibrantColor);
|
||||||
if (shouldColorNavigationBar())
|
setTaskDescriptionColor(vibrantColor);
|
||||||
setNavigationBarColor(vibrantColor);
|
|
||||||
|
|
||||||
notifyTaskColorChange(vibrantColor);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void getArtistFromIntentExtras() {
|
private void getArtistFromIntentExtras() {
|
||||||
|
|
@ -395,7 +384,7 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
|
||||||
.start(new MaterialCab.Callback() {
|
.start(new MaterialCab.Callback() {
|
||||||
@Override
|
@Override
|
||||||
public boolean onCabCreated(MaterialCab materialCab, Menu menu) {
|
public boolean onCabCreated(MaterialCab materialCab, Menu menu) {
|
||||||
setStatusBarColor(ColorUtil.getOpaqueColor(toolbarColor));
|
setStatusbarColor(ColorUtil.getOpaqueColor(toolbarColor));
|
||||||
return callback.onCabCreated(materialCab, menu);
|
return callback.onCabCreated(materialCab, menu);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -406,7 +395,7 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onCabFinished(MaterialCab materialCab) {
|
public boolean onCabFinished(MaterialCab materialCab) {
|
||||||
setStatusBarColor(ColorUtil.getColorWithAlpha(toolbarAlpha, toolbarColor));
|
setStatusbarColor(ColorUtil.getColorWithAlpha(toolbarAlpha, toolbarColor));
|
||||||
return callback.onCabFinished(materialCab);
|
return callback.onCabFinished(materialCab);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
@ -427,4 +416,10 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
|
||||||
super.onMediaStoreChanged();
|
super.onMediaStoreChanged();
|
||||||
reloadDataSets();
|
reloadDataSets();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setStatusbarColor(int color) {
|
||||||
|
super.setStatusbarColor(color);
|
||||||
|
setLightStatusbar(false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -5,8 +5,6 @@ import android.content.ComponentName;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.pm.PackageInfo;
|
import android.content.pm.PackageInfo;
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
import android.content.res.ColorStateList;
|
|
||||||
import android.graphics.Color;
|
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
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.NavigationView;
|
||||||
import android.support.design.widget.TabLayout;
|
import android.support.design.widget.TabLayout;
|
||||||
import android.support.v4.app.Fragment;
|
import android.support.v4.app.Fragment;
|
||||||
import android.support.v4.content.ContextCompat;
|
|
||||||
import android.support.v4.view.ViewPager;
|
import android.support.v4.view.ViewPager;
|
||||||
import android.support.v4.widget.DrawerLayout;
|
import android.support.v4.widget.DrawerLayout;
|
||||||
import android.support.v7.widget.Toolbar;
|
import android.support.v7.widget.Toolbar;
|
||||||
|
|
@ -34,8 +31,11 @@ import android.widget.ImageView;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import com.afollestad.materialcab.MaterialCab;
|
import com.afollestad.materialcab.MaterialCab;
|
||||||
import com.afollestad.materialdialogs.internal.ThemeSingleton;
|
|
||||||
import com.bumptech.glide.Glide;
|
import com.bumptech.glide.Glide;
|
||||||
|
import com.kabouzeid.appthemehelper.ThemeStore;
|
||||||
|
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.R;
|
||||||
import com.kabouzeid.gramophone.adapter.PagerAdapter;
|
import com.kabouzeid.gramophone.adapter.PagerAdapter;
|
||||||
import com.kabouzeid.gramophone.dialogs.ChangelogDialog;
|
import com.kabouzeid.gramophone.dialogs.ChangelogDialog;
|
||||||
|
|
@ -60,7 +60,6 @@ import com.kabouzeid.gramophone.util.ColorUtil;
|
||||||
import com.kabouzeid.gramophone.util.NavigationUtil;
|
import com.kabouzeid.gramophone.util.NavigationUtil;
|
||||||
import com.kabouzeid.gramophone.util.PreferenceUtil;
|
import com.kabouzeid.gramophone.util.PreferenceUtil;
|
||||||
import com.kabouzeid.gramophone.util.Util;
|
import com.kabouzeid.gramophone.util.Util;
|
||||||
import com.kabouzeid.gramophone.util.ViewUtil;
|
|
||||||
import com.sothree.slidinguppanel.SlidingUpPanelLayout;
|
import com.sothree.slidinguppanel.SlidingUpPanelLayout;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
|
@ -107,14 +106,14 @@ public class MainActivity extends AbsSlidingMusicPanelActivity
|
||||||
findViewById(R.id.drawer_content_container).setFitsSystemWindows(false);
|
findViewById(R.id.drawer_content_container).setFitsSystemWindows(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setStatusbarColorAuto();
|
||||||
|
setNavigationbarColorAuto();
|
||||||
|
setTaskDescriptionColorAuto();
|
||||||
|
|
||||||
setUpDrawerLayout();
|
setUpDrawerLayout();
|
||||||
setUpToolbar();
|
setUpToolbar();
|
||||||
setUpViewPager();
|
setUpViewPager();
|
||||||
|
|
||||||
if (shouldColorNavigationBar())
|
|
||||||
setNavigationBarThemeColor();
|
|
||||||
setStatusBarThemeColor();
|
|
||||||
|
|
||||||
checkChangelog();
|
checkChangelog();
|
||||||
|
|
||||||
if (!PreferenceUtil.getInstance(this).introShown()) {
|
if (!PreferenceUtil.getInstance(this).introShown()) {
|
||||||
|
|
@ -160,8 +159,8 @@ public class MainActivity extends AbsSlidingMusicPanelActivity
|
||||||
pager.setOffscreenPageLimit(pagerAdapter.getCount() - 1); // => all
|
pager.setOffscreenPageLimit(pagerAdapter.getCount() - 1); // => all
|
||||||
|
|
||||||
tabs.setupWithViewPager(pager);
|
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();
|
int startPosition = PreferenceUtil.getInstance(this).getDefaultStartPage();
|
||||||
startPosition = startPosition == -1 ? PreferenceUtil.getInstance(this).getLastStartPage() : startPosition;
|
startPosition = startPosition == -1 ? PreferenceUtil.getInstance(this).getLastStartPage() : startPosition;
|
||||||
|
|
@ -169,43 +168,21 @@ public class MainActivity extends AbsSlidingMusicPanelActivity
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setUpToolbar() {
|
private void setUpToolbar() {
|
||||||
|
int primaryColor = ThemeStore.primaryColor(this);
|
||||||
|
appbar.setBackgroundColor(primaryColor);
|
||||||
|
toolbar.setBackgroundColor(primaryColor);
|
||||||
toolbar.setNavigationIcon(R.drawable.ic_menu_white_24dp);
|
toolbar.setNavigationIcon(R.drawable.ic_menu_white_24dp);
|
||||||
setTitle(getResources().getString(R.string.app_name));
|
setTitle(getResources().getString(R.string.app_name));
|
||||||
setAppBarColor();
|
|
||||||
setSupportActionBar(toolbar);
|
setSupportActionBar(toolbar);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setAppBarColor() {
|
|
||||||
appbar.setBackgroundColor(getThemeColorPrimary());
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setUpNavigationView() {
|
private void setUpNavigationView() {
|
||||||
navigationView.setCheckedItem(R.id.nav_library);
|
navigationView.setCheckedItem(R.id.nav_library);
|
||||||
final int colorAccent = ThemeSingleton.get().positiveColor.getDefaultColor();
|
|
||||||
navigationView.setItemTextColor(new ColorStateList(
|
int accentColor = ThemeStore.accentColor(this);
|
||||||
new int[][]{
|
NavigationViewUtil.setItemIconColors(navigationView, ThemeStore.textColorSecondary(this), accentColor);
|
||||||
//{-android.R.attr.state_enabled}, // disabled
|
NavigationViewUtil.setItemTextColors(navigationView, ThemeStore.textColorPrimary(this), accentColor);
|
||||||
{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)
|
|
||||||
}
|
|
||||||
));
|
|
||||||
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
|
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
|
||||||
@Override
|
@Override
|
||||||
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
|
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
|
||||||
|
|
@ -334,16 +311,7 @@ public class MainActivity extends AbsSlidingMusicPanelActivity
|
||||||
menu.removeItem(R.id.action_grid_size);
|
menu.removeItem(R.id.action_grid_size);
|
||||||
menu.removeItem(R.id.action_colored_footers);
|
menu.removeItem(R.id.action_colored_footers);
|
||||||
}
|
}
|
||||||
boolean darkContent = ColorUtil.useDarkTextColorOnBackground(getThemeColorPrimary());
|
return super.onCreateOptionsMenu(menu);
|
||||||
ViewUtil.setToolbarContentDark(this, toolbar, darkContent);
|
|
||||||
setUseDarkStatusBarIcons(darkContent);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onPrepareOptionsMenu(Menu menu) {
|
|
||||||
ViewUtil.invalidateToolbarPopupMenuTint(toolbar);
|
|
||||||
return super.onPrepareOptionsMenu(menu);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -357,8 +325,6 @@ public class MainActivity extends AbsSlidingMusicPanelActivity
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
ViewUtil.invalidateToolbarPopupMenuTint(toolbar);
|
|
||||||
|
|
||||||
Fragment currentFragment = getCurrentFragment();
|
Fragment currentFragment = getCurrentFragment();
|
||||||
if (currentFragment instanceof AbsMainActivityRecyclerViewCustomGridSizeFragment) {
|
if (currentFragment instanceof AbsMainActivityRecyclerViewCustomGridSizeFragment) {
|
||||||
AbsMainActivityRecyclerViewCustomGridSizeFragment absMainActivityRecyclerViewCustomGridSizeFragment = (AbsMainActivityRecyclerViewCustomGridSizeFragment) currentFragment;
|
AbsMainActivityRecyclerViewCustomGridSizeFragment absMainActivityRecyclerViewCustomGridSizeFragment = (AbsMainActivityRecyclerViewCustomGridSizeFragment) currentFragment;
|
||||||
|
|
@ -571,7 +537,7 @@ public class MainActivity extends AbsSlidingMusicPanelActivity
|
||||||
cab = new MaterialCab(this, R.id.cab_stub)
|
cab = new MaterialCab(this, R.id.cab_stub)
|
||||||
.setMenu(menu)
|
.setMenu(menu)
|
||||||
.setCloseDrawableRes(R.drawable.ic_close_white_24dp)
|
.setCloseDrawableRes(R.drawable.ic_close_white_24dp)
|
||||||
.setBackgroundColor(ColorUtil.shiftBackgroundColorForLightText(getThemeColorPrimary()))
|
.setBackgroundColor(ColorUtil.shiftBackgroundColorForLightText(ThemeStore.primaryColor(this)))
|
||||||
.start(callback);
|
.start(callback);
|
||||||
return cab;
|
return cab;
|
||||||
}
|
}
|
||||||
|
|
@ -619,12 +585,12 @@ public class MainActivity extends AbsSlidingMusicPanelActivity
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDrawerOpened(View drawerView) {
|
public void onDrawerOpened(View drawerView) {
|
||||||
setUseDarkStatusBarIcons(false);
|
setLightStatusbar(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDrawerClosed(View drawerView) {
|
public void onDrawerClosed(View drawerView) {
|
||||||
setUseDarkStatusBarIcons(ColorUtil.useDarkTextColorOnBackground(getThemeColorPrimary()));
|
setLightStatusbarAuto(ThemeStore.primaryColor(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,7 @@ import com.h6ah4i.android.widget.advrecyclerview.animator.GeneralItemAnimator;
|
||||||
import com.h6ah4i.android.widget.advrecyclerview.animator.RefactoredDefaultItemAnimator;
|
import com.h6ah4i.android.widget.advrecyclerview.animator.RefactoredDefaultItemAnimator;
|
||||||
import com.h6ah4i.android.widget.advrecyclerview.draggable.RecyclerViewDragDropManager;
|
import com.h6ah4i.android.widget.advrecyclerview.draggable.RecyclerViewDragDropManager;
|
||||||
import com.h6ah4i.android.widget.advrecyclerview.utils.WrapperAdapterUtils;
|
import com.h6ah4i.android.widget.advrecyclerview.utils.WrapperAdapterUtils;
|
||||||
|
import com.kabouzeid.appthemehelper.ThemeStore;
|
||||||
import com.kabouzeid.gramophone.R;
|
import com.kabouzeid.gramophone.R;
|
||||||
import com.kabouzeid.gramophone.adapter.song.PlaylistSongAdapter;
|
import com.kabouzeid.gramophone.adapter.song.PlaylistSongAdapter;
|
||||||
import com.kabouzeid.gramophone.adapter.song.SmartPlaylistSongAdapter;
|
import com.kabouzeid.gramophone.adapter.song.SmartPlaylistSongAdapter;
|
||||||
|
|
@ -31,7 +32,6 @@ import com.kabouzeid.gramophone.ui.activities.base.AbsSlidingMusicPanelActivity;
|
||||||
import com.kabouzeid.gramophone.util.ColorUtil;
|
import com.kabouzeid.gramophone.util.ColorUtil;
|
||||||
import com.kabouzeid.gramophone.util.NavigationUtil;
|
import com.kabouzeid.gramophone.util.NavigationUtil;
|
||||||
import com.kabouzeid.gramophone.util.PlaylistsUtil;
|
import com.kabouzeid.gramophone.util.PlaylistsUtil;
|
||||||
import com.kabouzeid.gramophone.util.ViewUtil;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
@ -63,9 +63,13 @@ public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity impleme
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
setStatusBarTransparent();
|
setDrawUnderStatusbar(true);
|
||||||
ButterKnife.bind(this);
|
ButterKnife.bind(this);
|
||||||
|
|
||||||
|
setStatusbarColorAuto();
|
||||||
|
setNavigationbarColorAuto();
|
||||||
|
setTaskDescriptionColorAuto();
|
||||||
|
|
||||||
getIntentExtras();
|
getIntentExtras();
|
||||||
|
|
||||||
setUpRecyclerView();
|
setUpRecyclerView();
|
||||||
|
|
@ -73,10 +77,6 @@ public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity impleme
|
||||||
checkIsEmpty();
|
checkIsEmpty();
|
||||||
|
|
||||||
setUpToolBar();
|
setUpToolBar();
|
||||||
|
|
||||||
if (shouldColorNavigationBar())
|
|
||||||
setNavigationBarThemeColor();
|
|
||||||
setStatusBarThemeColor();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -137,7 +137,7 @@ public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity impleme
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setUpToolBar() {
|
private void setUpToolBar() {
|
||||||
toolbar.setBackgroundColor(getThemeColorPrimary());
|
toolbar.setBackgroundColor(ThemeStore.primaryColor(this));
|
||||||
setSupportActionBar(toolbar);
|
setSupportActionBar(toolbar);
|
||||||
//noinspection ConstantConditions
|
//noinspection ConstantConditions
|
||||||
getSupportActionBar().setTitle(playlist.name);
|
getSupportActionBar().setTitle(playlist.name);
|
||||||
|
|
@ -159,10 +159,7 @@ public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity impleme
|
||||||
@Override
|
@Override
|
||||||
public boolean onCreateOptionsMenu(Menu menu) {
|
public boolean onCreateOptionsMenu(Menu menu) {
|
||||||
getMenuInflater().inflate(R.menu.menu_playlist_detail, menu);
|
getMenuInflater().inflate(R.menu.menu_playlist_detail, menu);
|
||||||
boolean darkContent = ColorUtil.useDarkTextColorOnBackground(getThemeColorPrimary());
|
return super.onCreateOptionsMenu(menu);
|
||||||
ViewUtil.setToolbarContentDark(this, toolbar, darkContent);
|
|
||||||
setUseDarkStatusBarIcons(darkContent);
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -191,7 +188,7 @@ public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity impleme
|
||||||
cab = new MaterialCab(this, R.id.cab_stub)
|
cab = new MaterialCab(this, R.id.cab_stub)
|
||||||
.setMenu(menu)
|
.setMenu(menu)
|
||||||
.setCloseDrawableRes(R.drawable.ic_close_white_24dp)
|
.setCloseDrawableRes(R.drawable.ic_close_white_24dp)
|
||||||
.setBackgroundColor(ColorUtil.shiftBackgroundColorForLightText(getThemeColorPrimary()))
|
.setBackgroundColor(ColorUtil.shiftBackgroundColorForLightText(ThemeStore.primaryColor(this)))
|
||||||
.start(callback);
|
.start(callback);
|
||||||
return cab;
|
return cab;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,6 @@ import android.support.v7.widget.Toolbar;
|
||||||
import android.text.Editable;
|
import android.text.Editable;
|
||||||
import android.text.TextWatcher;
|
import android.text.TextWatcher;
|
||||||
import android.view.KeyEvent;
|
import android.view.KeyEvent;
|
||||||
import android.view.Menu;
|
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import android.view.MotionEvent;
|
import android.view.MotionEvent;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
|
@ -19,12 +18,12 @@ import android.widget.EditText;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import com.kabouzeid.appthemehelper.ThemeStore;
|
||||||
|
import com.kabouzeid.appthemehelper.util.ToolbarContentTintHelper;
|
||||||
import com.kabouzeid.gramophone.R;
|
import com.kabouzeid.gramophone.R;
|
||||||
import com.kabouzeid.gramophone.adapter.SearchAdapter;
|
import com.kabouzeid.gramophone.adapter.SearchAdapter;
|
||||||
import com.kabouzeid.gramophone.ui.activities.base.AbsMusicServiceActivity;
|
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.Util;
|
||||||
import com.kabouzeid.gramophone.util.ViewUtil;
|
|
||||||
|
|
||||||
import butterknife.Bind;
|
import butterknife.Bind;
|
||||||
import butterknife.ButterKnife;
|
import butterknife.ButterKnife;
|
||||||
|
|
@ -51,9 +50,13 @@ public class SearchActivity extends AbsMusicServiceActivity {
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
setContentView(R.layout.activity_search);
|
setContentView(R.layout.activity_search);
|
||||||
setStatusBarTransparent();
|
setDrawUnderStatusbar(true);
|
||||||
ButterKnife.bind(this);
|
ButterKnife.bind(this);
|
||||||
|
|
||||||
|
setStatusbarColorAuto();
|
||||||
|
setNavigationbarColorAuto();
|
||||||
|
setTaskDescriptionColorAuto();
|
||||||
|
|
||||||
recyclerView.setLayoutManager(new LinearLayoutManager(this));
|
recyclerView.setLayoutManager(new LinearLayoutManager(this));
|
||||||
searchAdapter = new SearchAdapter(this);
|
searchAdapter = new SearchAdapter(this);
|
||||||
recyclerView.setAdapter(searchAdapter);
|
recyclerView.setAdapter(searchAdapter);
|
||||||
|
|
@ -68,29 +71,17 @@ public class SearchActivity extends AbsMusicServiceActivity {
|
||||||
|
|
||||||
setUpToolBar();
|
setUpToolBar();
|
||||||
setUpSearchBar();
|
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() {
|
private void setUpToolBar() {
|
||||||
toolbar.setBackgroundColor(getThemeColorPrimary());
|
toolbar.setBackgroundColor(ThemeStore.primaryColor(this));
|
||||||
setSupportActionBar(toolbar);
|
setSupportActionBar(toolbar);
|
||||||
//noinspection ConstantConditions
|
//noinspection ConstantConditions
|
||||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setUpSearchBar() {
|
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() {
|
searchCloseBtn.setOnClickListener(new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
|
|
@ -98,8 +89,8 @@ public class SearchActivity extends AbsMusicServiceActivity {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
searchSrcText.setTextColor(ColorUtil.getPrimaryTextColorForBackground(this, getThemeColorPrimary()));
|
searchSrcText.setTextColor(ToolbarContentTintHelper.toolbarTitleColor(this, ThemeStore.primaryColor(this)));
|
||||||
searchSrcText.setHintTextColor(ColorUtil.getSecondaryTextColorForBackground(this, getThemeColorPrimary()));
|
searchSrcText.setHintTextColor(ToolbarContentTintHelper.toolbarSubtitleColor(this, ThemeStore.primaryColor(this)));
|
||||||
searchSrcText.setHint(R.string.search_hint);
|
searchSrcText.setHint(R.string.search_hint);
|
||||||
|
|
||||||
searchSrcText.addTextChangedListener(new TextWatcher() {
|
searchSrcText.addTextChangedListener(new TextWatcher() {
|
||||||
|
|
|
||||||
|
|
@ -13,19 +13,19 @@ import android.preference.PreferenceManager;
|
||||||
import android.support.annotation.ColorInt;
|
import android.support.annotation.ColorInt;
|
||||||
import android.support.annotation.NonNull;
|
import android.support.annotation.NonNull;
|
||||||
import android.support.annotation.Nullable;
|
import android.support.annotation.Nullable;
|
||||||
|
import android.support.annotation.StyleRes;
|
||||||
import android.support.v7.widget.Toolbar;
|
import android.support.v7.widget.Toolbar;
|
||||||
import android.view.Menu;
|
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
|
||||||
import com.afollestad.materialdialogs.color.ColorChooserDialog;
|
import com.afollestad.materialdialogs.color.ColorChooserDialog;
|
||||||
|
import com.kabouzeid.appthemehelper.ThemeStore;
|
||||||
|
import com.kabouzeid.appthemehelper.common.prefs.ATEColorPreference;
|
||||||
|
import com.kabouzeid.appthemehelper.common.prefs.ATESwitchPreference;
|
||||||
|
import com.kabouzeid.appthemehelper.util.ColorUtil;
|
||||||
import com.kabouzeid.gramophone.R;
|
import com.kabouzeid.gramophone.R;
|
||||||
import com.kabouzeid.gramophone.prefs.ColorChooserPreference;
|
|
||||||
import com.kabouzeid.gramophone.ui.activities.base.AbsBaseActivity;
|
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.NavigationUtil;
|
||||||
import com.kabouzeid.gramophone.util.PreferenceUtil;
|
|
||||||
import com.kabouzeid.gramophone.util.ViewUtil;
|
|
||||||
|
|
||||||
import butterknife.Bind;
|
import butterknife.Bind;
|
||||||
import butterknife.ButterKnife;
|
import butterknife.ButterKnife;
|
||||||
|
|
@ -40,33 +40,37 @@ public class SettingsActivity extends AbsBaseActivity implements ColorChooserDia
|
||||||
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
setContentView(R.layout.activity_preferences);
|
setContentView(R.layout.activity_preferences);
|
||||||
setStatusBarTransparent();
|
setDrawUnderStatusbar(true);
|
||||||
ButterKnife.bind(this);
|
ButterKnife.bind(this);
|
||||||
|
|
||||||
toolbar.setBackgroundColor(getThemeColorPrimary());
|
setStatusbarColorAuto();
|
||||||
|
setNavigationbarColorAuto();
|
||||||
|
setTaskDescriptionColorAuto();
|
||||||
|
|
||||||
|
toolbar.setBackgroundColor(ThemeStore.primaryColor(this));
|
||||||
setSupportActionBar(toolbar);
|
setSupportActionBar(toolbar);
|
||||||
//noinspection ConstantConditions
|
//noinspection ConstantConditions
|
||||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||||
|
|
||||||
if (savedInstanceState == null)
|
if (savedInstanceState == null)
|
||||||
getFragmentManager().beginTransaction().replace(R.id.content_frame, new SettingsFragment()).commit();
|
getFragmentManager().beginTransaction().replace(R.id.content_frame, new SettingsFragment()).commit();
|
||||||
|
|
||||||
if (shouldColorNavigationBar())
|
|
||||||
setNavigationBarThemeColor();
|
|
||||||
setStatusBarThemeColor();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onColorSelection(@NonNull ColorChooserDialog dialog, @ColorInt int selectedColor) {
|
public void onColorSelection(@NonNull ColorChooserDialog dialog, @ColorInt int selectedColor) {
|
||||||
switch (dialog.getTitle()) {
|
switch (dialog.getTitle()) {
|
||||||
case R.string.primary_color:
|
case R.string.primary_color:
|
||||||
PreferenceUtil.getInstance(this).setThemeColorPrimary(selectedColor);
|
ThemeStore.editTheme(this)
|
||||||
|
.primaryColor(selectedColor)
|
||||||
|
.commit();
|
||||||
break;
|
break;
|
||||||
case R.string.accent_color:
|
case R.string.accent_color:
|
||||||
PreferenceUtil.getInstance(this).setThemeColorAccent(selectedColor);
|
ThemeStore.editTheme(this)
|
||||||
|
.accentColor(selectedColor)
|
||||||
|
.commit();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
recreateIfThemeChanged();
|
recreate();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -78,14 +82,6 @@ public class SettingsActivity extends AbsBaseActivity implements ColorChooserDia
|
||||||
return super.onOptionsItemSelected(item);
|
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 {
|
public static class SettingsFragment extends PreferenceFragment {
|
||||||
|
|
||||||
private static void setSummary(@NonNull Preference preference) {
|
private static void setSummary(@NonNull Preference preference) {
|
||||||
|
|
@ -142,8 +138,10 @@ public class SettingsActivity extends AbsBaseActivity implements ColorChooserDia
|
||||||
@Override
|
@Override
|
||||||
public boolean onPreferenceChange(Preference preference, @NonNull Object o) {
|
public boolean onPreferenceChange(Preference preference, @NonNull Object o) {
|
||||||
setSummary(generalTheme, o);
|
setSummary(generalTheme, o);
|
||||||
PreferenceUtil.getInstance(getActivity()).setGeneralTheme(getActivity(), (String) o);
|
ThemeStore.editTheme(getActivity())
|
||||||
((SettingsActivity) getActivity()).recreateIfThemeChanged();
|
.activityTheme(getThemeResFromPrefValue((String) o))
|
||||||
|
.commit();
|
||||||
|
getActivity().recreate();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
@ -158,46 +156,51 @@ public class SettingsActivity extends AbsBaseActivity implements ColorChooserDia
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
ColorChooserPreference primaryColor = (ColorChooserPreference) findPreference("primary_color");
|
ATEColorPreference primaryColorPref = (ATEColorPreference) findPreference("primary_color");
|
||||||
primaryColor.setColor(PreferenceUtil.getInstance(getActivity()).getThemeColorPrimary(getActivity()));
|
final int primaryColor = ThemeStore.primaryColor(getActivity());
|
||||||
primaryColor.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
|
primaryColorPref.setColor(primaryColor, ColorUtil.darkenColor(primaryColor));
|
||||||
|
primaryColorPref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public boolean onPreferenceClick(@NonNull Preference preference) {
|
public boolean onPreferenceClick(@NonNull Preference preference) {
|
||||||
new ColorChooserDialog.Builder(((SettingsActivity) getActivity()), R.string.primary_color)
|
new ColorChooserDialog.Builder(((SettingsActivity) getActivity()), R.string.primary_color)
|
||||||
.accentMode(false)
|
.accentMode(false)
|
||||||
.allowUserColorInput(true)
|
.allowUserColorInput(true)
|
||||||
.allowUserColorInputAlpha(false)
|
.allowUserColorInputAlpha(false)
|
||||||
.preselect(PreferenceUtil.getInstance(getActivity()).getThemeColorPrimary(getActivity()))
|
.preselect(primaryColor)
|
||||||
.show();
|
.show();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
ColorChooserPreference accentColor = (ColorChooserPreference) findPreference("accent_color");
|
ATEColorPreference accentColorPref = (ATEColorPreference) findPreference("accent_color");
|
||||||
accentColor.setColor(PreferenceUtil.getInstance(getActivity()).getThemeColorAccent(getActivity()));
|
final int accentColor = ThemeStore.accentColor(getActivity());
|
||||||
accentColor.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
|
accentColorPref.setColor(accentColor, ColorUtil.darkenColor(accentColor));
|
||||||
|
accentColorPref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public boolean onPreferenceClick(@NonNull Preference preference) {
|
public boolean onPreferenceClick(@NonNull Preference preference) {
|
||||||
new ColorChooserDialog.Builder(((SettingsActivity) getActivity()), R.string.accent_color)
|
new ColorChooserDialog.Builder(((SettingsActivity) getActivity()), R.string.accent_color)
|
||||||
.accentMode(true)
|
.accentMode(true)
|
||||||
.allowUserColorInput(true)
|
.allowUserColorInput(true)
|
||||||
.allowUserColorInputAlpha(false)
|
.allowUserColorInputAlpha(false)
|
||||||
.preselect(PreferenceUtil.getInstance(getActivity()).getThemeColorAccent(getActivity()))
|
.preselect(accentColor)
|
||||||
.show();
|
.show();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
Preference colorNavBar = findPreference("should_color_navigation_bar");
|
ATESwitchPreference colorNavBar = (ATESwitchPreference) findPreference("should_color_navigation_bar");
|
||||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
|
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
|
||||||
colorNavBar.setEnabled(false);
|
colorNavBar.setEnabled(false);
|
||||||
colorNavBar.setSummary(R.string.pref_only_lollipop);
|
colorNavBar.setSummary(R.string.pref_only_lollipop);
|
||||||
} else {
|
} else {
|
||||||
|
colorNavBar.setChecked(ThemeStore.coloredNavigationBar(getActivity()));
|
||||||
colorNavBar.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
colorNavBar.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
||||||
@Override
|
@Override
|
||||||
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||||
PreferenceUtil.getInstance(getActivity()).setColoredNavigationBar((boolean) newValue);
|
ThemeStore.editTheme(getActivity())
|
||||||
((SettingsActivity) getActivity()).recreateIfThemeChanged();
|
.coloredNavigationBar((Boolean) newValue)
|
||||||
|
.commit();
|
||||||
|
getActivity().recreate();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
@ -223,5 +226,18 @@ public class SettingsActivity extends AbsBaseActivity implements ColorChooserDia
|
||||||
ResolveInfo ri = pm.resolveActivity(effects, 0);
|
ResolveInfo ri = pm.resolveActivity(effects, 0);
|
||||||
return ri != null;
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,6 @@ import android.media.AudioManager;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Handler;
|
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
import android.support.annotation.NonNull;
|
import android.support.annotation.NonNull;
|
||||||
import android.support.annotation.Nullable;
|
import android.support.annotation.Nullable;
|
||||||
|
|
@ -16,7 +15,7 @@ import android.support.v4.app.ActivityCompat;
|
||||||
import android.view.KeyEvent;
|
import android.view.KeyEvent;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
|
||||||
import com.afollestad.materialdialogs.internal.ThemeSingleton;
|
import com.kabouzeid.appthemehelper.ThemeStore;
|
||||||
import com.kabouzeid.gramophone.R;
|
import com.kabouzeid.gramophone.R;
|
||||||
import com.kabouzeid.gramophone.interfaces.KabViewsDisableAble;
|
import com.kabouzeid.gramophone.interfaces.KabViewsDisableAble;
|
||||||
|
|
||||||
|
|
@ -66,18 +65,9 @@ public abstract class AbsBaseActivity extends AbsThemeActivity implements KabVie
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void onPermissionsChanged() {
|
protected void onPermissionsChanged() {
|
||||||
postRecreate();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void postRecreate() {
|
|
||||||
if (!recreating) {
|
if (!recreating) {
|
||||||
recreating = true;
|
recreating = true;
|
||||||
new Handler().postDelayed(new Runnable() {
|
postRecreate();
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
recreate();
|
|
||||||
}
|
|
||||||
}, 200);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -165,7 +155,7 @@ public abstract class AbsBaseActivity extends AbsThemeActivity implements KabVie
|
||||||
requestPermissions();
|
requestPermissions();
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.setActionTextColor(ThemeSingleton.get().positiveColor)
|
.setActionTextColor(ThemeStore.accentColor(this))
|
||||||
.show();
|
.show();
|
||||||
} else {
|
} else {
|
||||||
// User has deny permission and checked never show permission dialog so you can redirect to Application settings page
|
// 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);
|
startActivity(intent);
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.setActionTextColor(ThemeSingleton.get().positiveColor)
|
.setActionTextColor(ThemeStore.accentColor(this))
|
||||||
.show();
|
.show();
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
|
|
||||||
|
|
@ -33,9 +33,9 @@ public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivi
|
||||||
@Bind(R.id.sliding_layout)
|
@Bind(R.id.sliding_layout)
|
||||||
SlidingUpPanelLayout slidingUpPanelLayout;
|
SlidingUpPanelLayout slidingUpPanelLayout;
|
||||||
|
|
||||||
private int navigationBarColor;
|
private int navigationbarColor;
|
||||||
private int taskColor;
|
private int taskColor;
|
||||||
private boolean useDarkStatusBarIcons;
|
private boolean lightStatusbar;
|
||||||
|
|
||||||
private AbsPlayerFragment playerFragment;
|
private AbsPlayerFragment playerFragment;
|
||||||
private MiniPlayerFragment miniPlayerFragment;
|
private MiniPlayerFragment miniPlayerFragment;
|
||||||
|
|
@ -100,11 +100,11 @@ public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivi
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onPanelCollapsed(View view) {
|
public void onPanelCollapsed(View view) {
|
||||||
super.setUseDarkStatusBarIcons(useDarkStatusBarIcons);
|
// restore values
|
||||||
super.notifyTaskColorChange(taskColor);
|
super.setLightStatusbar(lightStatusbar);
|
||||||
if (shouldColorNavigationBar()) {
|
super.setTaskDescriptionColor(taskColor);
|
||||||
super.setNavigationBarColor(navigationBarColor);
|
super.setNavigationbarColor(navigationbarColor);
|
||||||
}
|
|
||||||
playerFragment.setMenuVisibility(false);
|
playerFragment.setMenuVisibility(false);
|
||||||
playerFragment.setUserVisibleHint(false);
|
playerFragment.setUserVisibleHint(false);
|
||||||
playerFragment.onHide();
|
playerFragment.onHide();
|
||||||
|
|
@ -112,12 +112,12 @@ public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivi
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onPanelExpanded(View view) {
|
public void onPanelExpanded(View view) {
|
||||||
super.setUseDarkStatusBarIcons(false);
|
// setting fragments values
|
||||||
int playerFragmentColor = playerFragment.getPaletteColor();
|
int playerFragmentColor = playerFragment.getPaletteColor();
|
||||||
super.notifyTaskColorChange(playerFragmentColor);
|
super.setLightStatusbar(false);
|
||||||
if (shouldColorNavigationBar()) {
|
super.setTaskDescriptionColor(playerFragmentColor);
|
||||||
super.setNavigationBarColor(playerFragmentColor);
|
super.setNavigationbarColor(playerFragmentColor);
|
||||||
}
|
|
||||||
playerFragment.setMenuVisibility(true);
|
playerFragment.setMenuVisibility(true);
|
||||||
playerFragment.setUserVisibleHint(true);
|
playerFragment.setUserVisibleHint(true);
|
||||||
playerFragment.onShow();
|
playerFragment.onShow();
|
||||||
|
|
@ -182,38 +182,36 @@ public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivi
|
||||||
super.onBackPressed();
|
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
|
@Override
|
||||||
public void onPaletteColorChanged() {
|
public void onPaletteColorChanged() {
|
||||||
if (getPanelState() == SlidingUpPanelLayout.PanelState.EXPANDED) {
|
if (getPanelState() == SlidingUpPanelLayout.PanelState.EXPANDED) {
|
||||||
int playerFragmentColor = playerFragment.getPaletteColor();
|
int playerFragmentColor = playerFragment.getPaletteColor();
|
||||||
super.notifyTaskColorChange(playerFragmentColor);
|
super.setTaskDescriptionColor(playerFragmentColor);
|
||||||
if (shouldColorNavigationBar()) {
|
super.setNavigationbarColor(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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,192 +1,94 @@
|
||||||
package com.kabouzeid.gramophone.ui.activities.base;
|
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.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Handler;
|
|
||||||
import android.support.annotation.ColorInt;
|
import android.support.annotation.ColorInt;
|
||||||
import android.support.annotation.Nullable;
|
|
||||||
import android.support.v7.app.AppCompatActivity;
|
|
||||||
import android.view.View;
|
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.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;
|
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 {
|
public abstract class AbsThemeActivity extends ATHToolbarActivity {
|
||||||
private int colorPrimary;
|
|
||||||
private int colorPrimaryDarker;
|
|
||||||
private int colorAccent;
|
|
||||||
private int theme;
|
|
||||||
private boolean coloredNavigationBar;
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
private ActivityManager.TaskDescription taskDescription;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
theme = PreferenceUtil.getInstance(this).getGeneralTheme();
|
// default theme
|
||||||
setTheme(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);
|
super.onCreate(savedInstanceState);
|
||||||
setupTheme();
|
MaterialDialogsUtil.updateMaterialDialogsThemeSingleton(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
// TODO see "materialize" library for setting window flags
|
||||||
protected void onResume() {
|
protected void setDrawUnderStatusbar(boolean drawUnderStatusbar) {
|
||||||
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() {
|
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
|
||||||
Util.setAllowDrawUnderStatusBar(getWindow());
|
Util.setAllowDrawUnderStatusBar(getWindow());
|
||||||
else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)
|
else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)
|
||||||
Util.setStatusBarTranslucent(getWindow());
|
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.
|
* 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.
|
* 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)
|
* @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) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
|
||||||
final View statusBar = getWindow().getDecorView().getRootView().findViewById(R.id.status_bar);
|
final View statusBar = getWindow().getDecorView().getRootView().findViewById(R.id.status_bar);
|
||||||
if (statusBar != null) {
|
if (statusBar != null) {
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||||
statusBar.setBackgroundColor(ColorUtil.shiftColorDown(color));
|
statusBar.setBackgroundColor(ColorUtil.darkenColor(color));
|
||||||
|
ATH.setLightStatusbarAuto(this, color);
|
||||||
} else {
|
} else {
|
||||||
statusBar.setBackgroundColor(color);
|
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 {
|
} else {
|
||||||
getWindow().getDecorView().setSystemUiVisibility(systemUiVisibility & ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
|
ATH.setStatusbarColor(this, ColorUtil.darkenColor(color));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected final void setNavigationBarThemeColor() {
|
public void setStatusbarColorAuto() {
|
||||||
setNavigationBarColor(colorPrimary);
|
// 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() {
|
public void setTaskDescriptionColor(@ColorInt int color) {
|
||||||
setStatusBarColor(colorPrimary);
|
ATH.setTaskDescriptionColor(this, color);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected final void resetNavigationBarColor() {
|
public void setTaskDescriptionColorAuto() {
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
|
setTaskDescriptionColor(ThemeStore.primaryColor(this));
|
||||||
setNavigationBarColor(ColorUtil.resolveColor(this, android.R.attr.navigationBarColor));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected final void resetStatusBarColor() {
|
public void setNavigationbarColor(int color) {
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
|
ATH.setNavigationbarColor(this, color);
|
||||||
setStatusBarColor(ColorUtil.resolveColor(this, android.R.attr.statusBarColor));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean overridesTaskColor() {
|
public void setNavigationbarColorAuto() {
|
||||||
return false;
|
setNavigationbarColor(ThemeStore.navigationBarColor(this));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLightStatusbar(boolean enabled) {
|
||||||
|
ATH.setLightStatusbar(this, enabled);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLightStatusbarAuto(int bgColor) {
|
||||||
|
setLightStatusbar(ColorUtil.isColorLight(bgColor));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -16,7 +16,6 @@ import android.support.annotation.Nullable;
|
||||||
import android.support.design.widget.FloatingActionButton;
|
import android.support.design.widget.FloatingActionButton;
|
||||||
import android.support.v7.widget.Toolbar;
|
import android.support.v7.widget.Toolbar;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.Menu;
|
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.animation.OvershootInterpolator;
|
import android.view.animation.OvershootInterpolator;
|
||||||
|
|
@ -25,13 +24,13 @@ import android.widget.LinearLayout;
|
||||||
|
|
||||||
import com.afollestad.materialdialogs.MaterialDialog;
|
import com.afollestad.materialdialogs.MaterialDialog;
|
||||||
import com.github.ksoichiro.android.observablescrollview.ObservableScrollView;
|
import com.github.ksoichiro.android.observablescrollview.ObservableScrollView;
|
||||||
|
import com.kabouzeid.appthemehelper.ThemeStore;
|
||||||
import com.kabouzeid.gramophone.R;
|
import com.kabouzeid.gramophone.R;
|
||||||
import com.kabouzeid.gramophone.misc.SimpleObservableScrollViewCallbacks;
|
import com.kabouzeid.gramophone.misc.SimpleObservableScrollViewCallbacks;
|
||||||
import com.kabouzeid.gramophone.ui.activities.base.AbsBaseActivity;
|
import com.kabouzeid.gramophone.ui.activities.base.AbsBaseActivity;
|
||||||
import com.kabouzeid.gramophone.util.ColorUtil;
|
import com.kabouzeid.gramophone.util.ColorUtil;
|
||||||
import com.kabouzeid.gramophone.util.MusicUtil;
|
import com.kabouzeid.gramophone.util.MusicUtil;
|
||||||
import com.kabouzeid.gramophone.util.Util;
|
import com.kabouzeid.gramophone.util.Util;
|
||||||
import com.kabouzeid.gramophone.util.ViewUtil;
|
|
||||||
|
|
||||||
import org.jaudiotagger.audio.AudioFile;
|
import org.jaudiotagger.audio.AudioFile;
|
||||||
import org.jaudiotagger.audio.AudioFileIO;
|
import org.jaudiotagger.audio.AudioFileIO;
|
||||||
|
|
@ -189,9 +188,9 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
int fabColor = getThemeColorAccent();
|
int accentColor = ThemeStore.accentColor(this);
|
||||||
int fabDrawableColor = ColorUtil.getPrimaryTextColorForBackground(this, fabColor);
|
int fabDrawableColor = ColorUtil.getPrimaryTextColorForBackground(this, accentColor);
|
||||||
fab.setBackgroundTintList(ColorStateList.valueOf(fabColor));
|
fab.setBackgroundTintList(ColorStateList.valueOf(accentColor));
|
||||||
fab.getDrawable().setColorFilter(fabDrawableColor, PorterDuff.Mode.SRC_IN);
|
fab.getDrawable().setColorFilter(fabDrawableColor, PorterDuff.Mode.SRC_IN);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -233,14 +232,6 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity {
|
||||||
return super.onOptionsItemSelected(item);
|
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() {
|
protected void setNoImageMode() {
|
||||||
isInNoImageMode = true;
|
isInNoImageMode = true;
|
||||||
image.setVisibility(View.GONE);
|
image.setVisibility(View.GONE);
|
||||||
|
|
@ -248,14 +239,13 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity {
|
||||||
observableScrollView.setPadding(0, Util.getActionBarSize(this), 0, 0);
|
observableScrollView.setPadding(0, Util.getActionBarSize(this), 0, 0);
|
||||||
observableScrollViewCallbacks.onScrollChanged(observableScrollView.getCurrentScrollY(), false, false);
|
observableScrollViewCallbacks.onScrollChanged(observableScrollView.getCurrentScrollY(), false, false);
|
||||||
|
|
||||||
paletteColorPrimary = getIntent().getIntExtra(EXTRA_PALETTE,
|
paletteColorPrimary = getIntent().getIntExtra(EXTRA_PALETTE, ThemeStore.primaryColor(this));
|
||||||
getThemeColorPrimary());
|
|
||||||
toolbar.setBackgroundColor(paletteColorPrimary);
|
toolbar.setBackgroundColor(paletteColorPrimary);
|
||||||
header.setBackgroundColor(paletteColorPrimary);
|
header.setBackgroundColor(paletteColorPrimary);
|
||||||
|
|
||||||
if (shouldColorNavigationBar())
|
setStatusbarColor(paletteColorPrimary);
|
||||||
setNavigationBarColor(paletteColorPrimary);
|
setNavigationbarColor(paletteColorPrimary);
|
||||||
setStatusBarColor(paletteColorPrimary);
|
setTaskDescriptionColor(paletteColorPrimary);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void dataChanged() {
|
protected void dataChanged() {
|
||||||
|
|
@ -284,19 +274,10 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity {
|
||||||
private void setColors(int color) {
|
private void setColors(int color) {
|
||||||
paletteColorPrimary = color;
|
paletteColorPrimary = color;
|
||||||
observableScrollViewCallbacks.onScrollChanged(observableScrollView.getCurrentScrollY(), false, false);
|
observableScrollViewCallbacks.onScrollChanged(observableScrollView.getCurrentScrollY(), false, false);
|
||||||
if (shouldColorNavigationBar())
|
|
||||||
setNavigationBarColor(paletteColorPrimary);
|
|
||||||
setStatusBarColor(paletteColorPrimary);
|
|
||||||
header.setBackgroundColor(paletteColorPrimary);
|
header.setBackgroundColor(paletteColorPrimary);
|
||||||
boolean darkContent = ColorUtil.useDarkTextColorOnBackground(paletteColorPrimary);
|
setStatusbarColor(paletteColorPrimary);
|
||||||
ViewUtil.setToolbarContentDark(AbsTagEditorActivity.this, toolbar, darkContent);
|
setNavigationbarColor(paletteColorPrimary);
|
||||||
setUseDarkStatusBarIcons(darkContent);
|
setTaskDescriptionColor(paletteColorPrimary);
|
||||||
notifyTaskColorChange(paletteColorPrimary);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected boolean overridesTaskColor() {
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void writeValuesToFiles(@NonNull final Map<FieldKey, String> fieldKeyValueMap) {
|
protected void writeValuesToFiles(@NonNull final Map<FieldKey, String> fieldKeyValueMap) {
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import com.afollestad.materialdialogs.internal.ThemeSingleton;
|
import com.kabouzeid.appthemehelper.ThemeStore;
|
||||||
import com.kabouzeid.gramophone.R;
|
import com.kabouzeid.gramophone.R;
|
||||||
import com.kabouzeid.gramophone.interfaces.MusicServiceEventListener;
|
import com.kabouzeid.gramophone.interfaces.MusicServiceEventListener;
|
||||||
import com.kabouzeid.gramophone.util.ColorUtil;
|
import com.kabouzeid.gramophone.util.ColorUtil;
|
||||||
|
|
@ -61,7 +61,7 @@ public abstract class AbsMainActivityRecyclerViewFragment<A extends RecyclerView
|
||||||
|
|
||||||
private void setUpRecyclerView() {
|
private void setUpRecyclerView() {
|
||||||
if (recyclerView instanceof FastScrollRecyclerView) {
|
if (recyclerView instanceof FastScrollRecyclerView) {
|
||||||
int accentColor = ThemeSingleton.get().positiveColor.getDefaultColor();
|
int accentColor = ThemeStore.accentColor(getActivity());
|
||||||
((FastScrollRecyclerView) recyclerView).setPopupBgColor(accentColor);
|
((FastScrollRecyclerView) recyclerView).setPopupBgColor(accentColor);
|
||||||
((FastScrollRecyclerView) recyclerView).setPopupTextColor(ColorUtil.getPrimaryTextColorForBackground(getActivity(), accentColor));
|
((FastScrollRecyclerView) recyclerView).setPopupTextColor(ColorUtil.getPrimaryTextColorForBackground(getActivity(), accentColor));
|
||||||
((FastScrollRecyclerView) recyclerView).setThumbColor(accentColor);
|
((FastScrollRecyclerView) recyclerView).setThumbColor(accentColor);
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
package com.kabouzeid.gramophone.ui.fragments.player;
|
package com.kabouzeid.gramophone.ui.fragments.player;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.content.res.ColorStateList;
|
||||||
import android.graphics.PorterDuff;
|
import android.graphics.PorterDuff;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.annotation.Nullable;
|
import android.support.annotation.Nullable;
|
||||||
|
|
@ -13,7 +14,7 @@ import android.view.ViewGroup;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import com.afollestad.materialdialogs.internal.ThemeSingleton;
|
import com.kabouzeid.appthemehelper.ThemeStore;
|
||||||
import com.kabouzeid.gramophone.R;
|
import com.kabouzeid.gramophone.R;
|
||||||
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
||||||
import com.kabouzeid.gramophone.helper.MusicProgressViewUpdateHelper;
|
import com.kabouzeid.gramophone.helper.MusicProgressViewUpdateHelper;
|
||||||
|
|
@ -99,7 +100,7 @@ public class MiniPlayerFragment extends Fragment implements MusicServiceEventLis
|
||||||
ColorUtil.resolveColor(activity, android.R.attr.textColorSecondary)));
|
ColorUtil.resolveColor(activity, android.R.attr.textColorSecondary)));
|
||||||
setUpPlayPauseButton();
|
setUpPlayPauseButton();
|
||||||
|
|
||||||
progressBar.setProgressTintList(ThemeSingleton.get().positiveColor);
|
progressBar.setProgressTintList(ColorStateList.valueOf(ThemeStore.accentColor(activity)));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setMiniPlayerColor(int color) {
|
public void setMiniPlayerColor(int color) {
|
||||||
|
|
|
||||||
|
|
@ -2,10 +2,12 @@ package com.kabouzeid.gramophone.ui.fragments.player;
|
||||||
|
|
||||||
import android.animation.Animator;
|
import android.animation.Animator;
|
||||||
import android.animation.AnimatorSet;
|
import android.animation.AnimatorSet;
|
||||||
|
import android.graphics.Color;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.annotation.ColorInt;
|
import android.support.annotation.ColorInt;
|
||||||
|
import android.support.v4.content.ContextCompat;
|
||||||
import android.support.v7.app.AppCompatActivity;
|
import android.support.v7.app.AppCompatActivity;
|
||||||
import android.support.v7.widget.CardView;
|
import android.support.v7.widget.CardView;
|
||||||
import android.support.v7.widget.RecyclerView;
|
import android.support.v7.widget.RecyclerView;
|
||||||
|
|
@ -19,11 +21,13 @@ import android.view.ViewTreeObserver;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import com.afollestad.materialdialogs.internal.ThemeSingleton;
|
|
||||||
import com.h6ah4i.android.widget.advrecyclerview.animator.GeneralItemAnimator;
|
import com.h6ah4i.android.widget.advrecyclerview.animator.GeneralItemAnimator;
|
||||||
import com.h6ah4i.android.widget.advrecyclerview.animator.RefactoredDefaultItemAnimator;
|
import com.h6ah4i.android.widget.advrecyclerview.animator.RefactoredDefaultItemAnimator;
|
||||||
import com.h6ah4i.android.widget.advrecyclerview.draggable.RecyclerViewDragDropManager;
|
import com.h6ah4i.android.widget.advrecyclerview.draggable.RecyclerViewDragDropManager;
|
||||||
import com.h6ah4i.android.widget.advrecyclerview.utils.WrapperAdapterUtils;
|
import com.h6ah4i.android.widget.advrecyclerview.utils.WrapperAdapterUtils;
|
||||||
|
import com.kabouzeid.appthemehelper.util.ATHUtil;
|
||||||
|
import com.kabouzeid.appthemehelper.util.TintHelper;
|
||||||
|
import com.kabouzeid.appthemehelper.util.ToolbarContentTintHelper;
|
||||||
import com.kabouzeid.gramophone.R;
|
import com.kabouzeid.gramophone.R;
|
||||||
import com.kabouzeid.gramophone.adapter.base.MediaEntryViewHolder;
|
import com.kabouzeid.gramophone.adapter.base.MediaEntryViewHolder;
|
||||||
import com.kabouzeid.gramophone.adapter.song.PlayingQueueAdapter;
|
import com.kabouzeid.gramophone.adapter.song.PlayingQueueAdapter;
|
||||||
|
|
@ -225,7 +229,9 @@ public class PlayerFragment extends AbsPlayerFragment implements PlayerAlbumCove
|
||||||
|
|
||||||
private void updateIsFavorite() {
|
private void updateIsFavorite() {
|
||||||
boolean isFavorite = MusicUtil.isFavorite(getActivity(), MusicPlayerRemote.getCurrentSong());
|
boolean isFavorite = MusicUtil.isFavorite(getActivity(), MusicPlayerRemote.getCurrentSong());
|
||||||
Drawable favoriteIcon = Util.getTintedDrawable(getActivity(), isFavorite ? R.drawable.ic_favorite_white_24dp : R.drawable.ic_favorite_outline_white_24dp, ViewUtil.getToolbarIconColor(getActivity(), false));
|
int res = isFavorite ? R.drawable.ic_favorite_white_24dp : R.drawable.ic_favorite_outline_white_24dp;
|
||||||
|
|
||||||
|
Drawable favoriteIcon = TintHelper.tintDrawable(ContextCompat.getDrawable(getActivity(), res), ToolbarContentTintHelper.toolbarContentColor(getActivity(), Color.TRANSPARENT));
|
||||||
toolbar.getMenu().findItem(R.id.action_toggle_favorite)
|
toolbar.getMenu().findItem(R.id.action_toggle_favorite)
|
||||||
.setIcon(favoriteIcon)
|
.setIcon(favoriteIcon)
|
||||||
.setTitle(isFavorite ? getString(R.string.action_remove_from_favorites) : getString(R.string.action_add_to_favorites));
|
.setTitle(isFavorite ? getString(R.string.action_remove_from_favorites) : getString(R.string.action_add_to_favorites));
|
||||||
|
|
@ -347,7 +353,7 @@ public class PlayerFragment extends AbsPlayerFragment implements PlayerAlbumCove
|
||||||
|
|
||||||
animatorSet.play(backgroundAnimator);
|
animatorSet.play(backgroundAnimator);
|
||||||
|
|
||||||
Animator subHeaderAnimator = ThemeSingleton.get().darkTheme ? null : ViewUtil.createTextColorTransition(fragment.playerQueueSubHeader, fragment.lastColor, newColor);
|
Animator subHeaderAnimator = ATHUtil.isWindowBackgroundDark(fragment.getActivity()) ? null : ViewUtil.createTextColorTransition(fragment.playerQueueSubHeader, fragment.lastColor, newColor);
|
||||||
if (subHeaderAnimator != null) {
|
if (subHeaderAnimator != null) {
|
||||||
animatorSet.play(subHeaderAnimator);
|
animatorSet.play(subHeaderAnimator);
|
||||||
}
|
}
|
||||||
|
|
@ -358,7 +364,7 @@ public class PlayerFragment extends AbsPlayerFragment implements PlayerAlbumCove
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void animateColorChange(PlayerFragment fragment, int newColor) {
|
public void animateColorChange(PlayerFragment fragment, int newColor) {
|
||||||
if (ThemeSingleton.get().darkTheme) {
|
if (ATHUtil.isWindowBackgroundDark(fragment.getActivity())) {
|
||||||
fragment.playerQueueSubHeader.setTextColor(ColorUtil.getSecondaryTextColor(fragment.getActivity(), false));
|
fragment.playerQueueSubHeader.setTextColor(ColorUtil.getSecondaryTextColor(fragment.getActivity(), false));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,42 +3,19 @@ package com.kabouzeid.gramophone.util;
|
||||||
import android.animation.Animator;
|
import android.animation.Animator;
|
||||||
import android.animation.ArgbEvaluator;
|
import android.animation.ArgbEvaluator;
|
||||||
import android.animation.ObjectAnimator;
|
import android.animation.ObjectAnimator;
|
||||||
import android.content.Context;
|
|
||||||
import android.graphics.PorterDuff;
|
|
||||||
import android.graphics.drawable.Drawable;
|
|
||||||
import android.os.Build;
|
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.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.View;
|
||||||
import android.view.ViewTreeObserver;
|
|
||||||
import android.view.animation.PathInterpolator;
|
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 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)
|
* @author Karim Abou Zeid (kabouzeid)
|
||||||
*/
|
*/
|
||||||
public class ViewUtil {
|
public class ViewUtil {
|
||||||
|
|
||||||
|
public final static int PHONOGRAPH_ANIM_TIME = 1000;
|
||||||
|
|
||||||
public static Animator createBackgroundColorTransition(final View v, final int startColor, final int endColor) {
|
public static Animator createBackgroundColorTransition(final View v, final int startColor, final int endColor) {
|
||||||
return createColorAnimator(v, "backgroundColor", startColor, endColor);
|
return createColorAnimator(v, "backgroundColor", startColor, endColor);
|
||||||
}
|
}
|
||||||
|
|
@ -47,8 +24,6 @@ public class ViewUtil {
|
||||||
return createColorAnimator(v, "textColor", startColor, endColor);
|
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) {
|
private static Animator createColorAnimator(Object target, String propertyName, int startColor, int endColor) {
|
||||||
ObjectAnimator animator;
|
ObjectAnimator animator;
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||||
|
|
@ -65,149 +40,6 @@ public class ViewUtil {
|
||||||
return animator;
|
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<View> 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) {
|
public static boolean hitTest(View v, int x, int y) {
|
||||||
final int tx = (int) (ViewCompat.getTranslationX(v) + 0.5f);
|
final int tx = (int) (ViewCompat.getTranslationX(v) + 0.5f);
|
||||||
final int ty = (int) (ViewCompat.getTranslationY(v) + 0.5f);
|
final int ty = (int) (ViewCompat.getTranslationY(v) + 0.5f);
|
||||||
|
|
|
||||||
|
|
@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,5 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
android:shape="rectangle">
|
|
||||||
<solid android:color="@android:color/black" />
|
|
||||||
</shape>
|
|
||||||
|
|
@ -50,10 +50,7 @@
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="@dimen/tab_height"
|
android:layout_height="@dimen/tab_height"
|
||||||
app:tabContentStart="72dp"
|
app:tabContentStart="72dp"
|
||||||
app:tabIndicatorColor="@color/primary_text_default_material_dark"
|
app:tabMode="scrollable" />
|
||||||
app:tabMode="scrollable"
|
|
||||||
app:tabSelectedTextColor="@color/primary_text_default_material_dark"
|
|
||||||
app:tabTextColor="@color/secondary_text_default_material_dark" />
|
|
||||||
|
|
||||||
</android.support.design.widget.AppBarLayout>
|
</android.support.design.widget.AppBarLayout>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,24 +0,0 @@
|
||||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:paddingLeft="16dip"
|
|
||||||
android:paddingRight="16dip"
|
|
||||||
android:paddingTop="16dp"
|
|
||||||
android:gravity="start|center_vertical"
|
|
||||||
android:layout_gravity="start|center_vertical"
|
|
||||||
tools:ignore="UnusedAttribute">
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@android:id/title"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:textColor="?colorAccent"
|
|
||||||
android:fontFamily="@string/font_fontFamily_medium"
|
|
||||||
android:textStyle="@integer/font_textStyle_medium"
|
|
||||||
android:textSize="14sp"
|
|
||||||
android:gravity="start|center_vertical"
|
|
||||||
android:layout_gravity="start|center_vertical"
|
|
||||||
android:textAlignment="viewStart" />
|
|
||||||
|
|
||||||
</FrameLayout>
|
|
||||||
|
|
@ -1,7 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<com.kabouzeid.gramophone.views.ColorView
|
|
||||||
android:id="@+id/circle"
|
|
||||||
android:layout_width="32dp"
|
|
||||||
android:layout_height="32dp"
|
|
||||||
android:layout_gravity="center_vertical|end"
|
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android" />
|
|
||||||
|
|
@ -1,70 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:gravity="center_vertical"
|
|
||||||
android:minHeight="?android:attr/listPreferredItemHeight"
|
|
||||||
android:paddingEnd="?android:attr/scrollbarSize"
|
|
||||||
android:paddingRight="?android:attr/scrollbarSize"
|
|
||||||
tools:ignore="RtlSymmetry,UnusedAttribute"
|
|
||||||
android:baselineAligned="false">
|
|
||||||
|
|
||||||
<RelativeLayout
|
|
||||||
android:layout_width="0dp"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginBottom="12dip"
|
|
||||||
android:layout_marginEnd="6dip"
|
|
||||||
android:layout_marginLeft="16dip"
|
|
||||||
android:layout_marginRight="6dip"
|
|
||||||
android:layout_marginStart="16dip"
|
|
||||||
android:layout_marginTop="12dip"
|
|
||||||
android:layout_weight="1">
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@android:id/title"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_alignParentLeft="true"
|
|
||||||
android:layout_alignParentStart="true"
|
|
||||||
android:ellipsize="marquee"
|
|
||||||
android:fadingEdge="horizontal"
|
|
||||||
android:fontFamily="sans-serif"
|
|
||||||
android:gravity="start"
|
|
||||||
android:singleLine="true"
|
|
||||||
android:textAlignment="viewStart"
|
|
||||||
android:textColor="?android:textColorPrimary"
|
|
||||||
android:textSize="16sp"
|
|
||||||
tools:text="Title" />
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@android:id/summary"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_alignLeft="@android:id/title"
|
|
||||||
android:layout_alignParentLeft="true"
|
|
||||||
android:layout_alignParentStart="true"
|
|
||||||
android:layout_alignStart="@android:id/title"
|
|
||||||
android:layout_below="@android:id/title"
|
|
||||||
android:layout_marginTop="2dp"
|
|
||||||
android:fontFamily="sans-serif"
|
|
||||||
android:gravity="start"
|
|
||||||
android:maxLines="6"
|
|
||||||
android:textAlignment="viewStart"
|
|
||||||
android:textColor="?android:textColorSecondary"
|
|
||||||
android:textSize="14sp"
|
|
||||||
tools:text="Summary" />
|
|
||||||
|
|
||||||
</RelativeLayout>
|
|
||||||
|
|
||||||
<!-- Preference should place its actual preference widget here. -->
|
|
||||||
<LinearLayout
|
|
||||||
android:id="@android:id/widget_frame"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:layout_marginLeft="10dp"
|
|
||||||
android:layout_marginStart="10dp"
|
|
||||||
android:gravity="center_vertical"
|
|
||||||
android:orientation="vertical" />
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
@ -1,8 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<com.kabouzeid.gramophone.views.DynamicCheckBox xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
android:id="@+android:id/checkbox"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:focusable="false"
|
|
||||||
android:focusableInTouchMode="false"
|
|
||||||
android:clickable="false" />
|
|
||||||
|
|
@ -1,21 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
|
||||||
android:layout_width="@dimen/scrollbar_width_plus_inset"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
tools:layout_gravity="end">
|
|
||||||
|
|
||||||
<View
|
|
||||||
android:id="@+id/scroll_bar"
|
|
||||||
android:layout_width="@dimen/scrollbar_width_plus_inset"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:layout_gravity="end"
|
|
||||||
android:alpha="0.3" />
|
|
||||||
|
|
||||||
<View
|
|
||||||
android:id="@+id/scroll_handle"
|
|
||||||
android:layout_width="@dimen/scrollbar_width_plus_inset"
|
|
||||||
android:layout_height="48dp"
|
|
||||||
android:layout_gravity="end" />
|
|
||||||
|
|
||||||
</FrameLayout>
|
|
||||||
|
|
@ -22,9 +22,9 @@
|
||||||
</string-array>
|
</string-array>
|
||||||
|
|
||||||
<string-array name="pref_general_theme_list_values">
|
<string-array name="pref_general_theme_list_values">
|
||||||
<item>0</item>
|
<item>light</item>
|
||||||
<item>1</item>
|
<item>dark</item>
|
||||||
<item>2</item>
|
<item>black</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
|
|
||||||
<string-array name="pref_auto_download_images_titles">
|
<string-array name="pref_auto_download_images_titles">
|
||||||
|
|
|
||||||
|
|
@ -58,7 +58,7 @@
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="Theme.Phonograph.Base.Black" parent="@style/Theme.Phonograph.Base">
|
<style name="Theme.Phonograph.Base.Black" parent="@style/Theme.Phonograph.Base">
|
||||||
<item name="android:windowBackground">@drawable/black</item>
|
<item name="android:windowBackground">@android:color/black</item>
|
||||||
<item name="divider_color">#18FFFFFF</item>
|
<item name="divider_color">#18FFFFFF</item>
|
||||||
<item name="default_bar_color">@color/grey_800</item>
|
<item name="default_bar_color">@color/grey_800</item>
|
||||||
<item name="cardBackgroundColor">@color/grey_900</item>
|
<item name="cardBackgroundColor">@color/grey_900</item>
|
||||||
|
|
|
||||||
|
|
@ -1,21 +1,18 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
|
||||||
<com.kabouzeid.gramophone.prefs.DynamicPreferenceCategory android:title="@string/pref_header_audio">
|
<com.kabouzeid.appthemehelper.common.prefs.ATEPreferenceCategory android:title="@string/pref_header_audio">
|
||||||
|
|
||||||
<CheckBoxPreference
|
<com.kabouzeid.appthemehelper.common.prefs.ATESwitchPreference
|
||||||
android:defaultValue="false"
|
android:defaultValue="false"
|
||||||
android:key="gapless_playback"
|
android:key="gapless_playback"
|
||||||
android:layout="@layout/preference_custom"
|
|
||||||
android:summary="@string/pref_summary_gapless_playback"
|
android:summary="@string/pref_summary_gapless_playback"
|
||||||
android:title="@string/pref_title_gapless_playback"
|
android:title="@string/pref_title_gapless_playback" />
|
||||||
android:widgetLayout="@layout/preference_dynamic_checkbox" />
|
|
||||||
|
|
||||||
<Preference
|
<com.kabouzeid.appthemehelper.common.prefs.ATEPreference
|
||||||
android:key="equalizer"
|
android:key="equalizer"
|
||||||
android:layout="@layout/preference_custom"
|
|
||||||
android:title="@string/equalizer" />
|
android:title="@string/equalizer" />
|
||||||
|
|
||||||
</com.kabouzeid.gramophone.prefs.DynamicPreferenceCategory>
|
</com.kabouzeid.appthemehelper.common.prefs.ATEPreferenceCategory>
|
||||||
|
|
||||||
</PreferenceScreen>
|
</PreferenceScreen>
|
||||||
|
|
@ -1,43 +1,32 @@
|
||||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
|
||||||
<com.kabouzeid.gramophone.prefs.DynamicPreferenceCategory android:title="@string/pref_header_colors">
|
<com.kabouzeid.appthemehelper.common.prefs.ATEPreferenceCategory android:title="@string/pref_header_colors">
|
||||||
|
|
||||||
<com.afollestad.materialdialogs.prefs.MaterialListPreference
|
<com.kabouzeid.appthemehelper.common.prefs.ATEColorPreference
|
||||||
android:defaultValue="0"
|
|
||||||
android:entries="@array/pref_general_theme_list_titles"
|
|
||||||
android:entryValues="@array/pref_general_theme_list_values"
|
|
||||||
android:key="general_theme"
|
|
||||||
android:layout="@layout/preference_custom"
|
|
||||||
android:negativeButtonText="@null"
|
|
||||||
android:positiveButtonText="@null"
|
|
||||||
android:title="@string/pref_title_general_theme" />
|
|
||||||
|
|
||||||
<com.kabouzeid.gramophone.prefs.ColorChooserPreference
|
|
||||||
android:key="primary_color"
|
android:key="primary_color"
|
||||||
|
android:persistent="false"
|
||||||
android:summary="@string/primary_color_desc"
|
android:summary="@string/primary_color_desc"
|
||||||
android:title="@string/primary_color" />
|
android:title="@string/primary_color" />
|
||||||
|
|
||||||
<com.kabouzeid.gramophone.prefs.ColorChooserPreference
|
<com.kabouzeid.appthemehelper.common.prefs.ATEColorPreference
|
||||||
android:key="accent_color"
|
android:key="accent_color"
|
||||||
|
android:persistent="false"
|
||||||
android:summary="@string/accent_color_desc"
|
android:summary="@string/accent_color_desc"
|
||||||
android:title="@string/accent_color" />
|
android:title="@string/accent_color" />
|
||||||
|
|
||||||
<CheckBoxPreference
|
<com.kabouzeid.appthemehelper.common.prefs.ATESwitchPreference
|
||||||
android:defaultValue="true"
|
android:defaultValue="true"
|
||||||
android:key="colored_notification"
|
android:key="colored_notification"
|
||||||
android:layout="@layout/preference_custom"
|
|
||||||
android:summary="@string/pref_summary_colored_notification"
|
android:summary="@string/pref_summary_colored_notification"
|
||||||
android:title="@string/pref_title_colored_notification"
|
android:title="@string/pref_title_colored_notification" />
|
||||||
android:widgetLayout="@layout/preference_dynamic_checkbox" />
|
|
||||||
|
|
||||||
<CheckBoxPreference
|
<com.kabouzeid.appthemehelper.common.prefs.ATESwitchPreference
|
||||||
android:defaultValue="false"
|
android:defaultValue="false"
|
||||||
android:key="should_color_navigation_bar"
|
android:key="should_color_navigation_bar"
|
||||||
android:layout="@layout/preference_custom"
|
android:persistent="false"
|
||||||
android:summary="@string/pref_summary_colored_navigation_bar"
|
android:summary="@string/pref_summary_colored_navigation_bar"
|
||||||
android:title="@string/pref_title_navigation_bar"
|
android:title="@string/pref_title_navigation_bar" />
|
||||||
android:widgetLayout="@layout/preference_dynamic_checkbox" />
|
|
||||||
|
|
||||||
</com.kabouzeid.gramophone.prefs.DynamicPreferenceCategory>
|
</com.kabouzeid.appthemehelper.common.prefs.ATEPreferenceCategory>
|
||||||
|
|
||||||
</PreferenceScreen>
|
</PreferenceScreen>
|
||||||
|
|
|
||||||
|
|
@ -1,17 +1,25 @@
|
||||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
|
||||||
<com.kabouzeid.gramophone.prefs.DynamicPreferenceCategory android:title="@string/pref_header_general">
|
<com.kabouzeid.appthemehelper.common.prefs.ATEPreferenceCategory android:title="@string/pref_header_general">
|
||||||
|
|
||||||
<com.afollestad.materialdialogs.prefs.MaterialListPreference
|
<com.kabouzeid.appthemehelper.common.prefs.ATEListPreference
|
||||||
android:defaultValue="-1"
|
android:defaultValue="-1"
|
||||||
android:entries="@array/pref_start_page_list_titles"
|
android:entries="@array/pref_start_page_list_titles"
|
||||||
android:entryValues="@array/pref_start_page_list_values"
|
android:entryValues="@array/pref_start_page_list_values"
|
||||||
android:key="default_start_page"
|
android:key="default_start_page"
|
||||||
android:layout="@layout/preference_custom"
|
|
||||||
android:negativeButtonText="@null"
|
android:negativeButtonText="@null"
|
||||||
android:positiveButtonText="@null"
|
android:positiveButtonText="@null"
|
||||||
android:title="@string/pref_title_set_default_start_page" />
|
android:title="@string/pref_title_set_default_start_page" />
|
||||||
|
|
||||||
</com.kabouzeid.gramophone.prefs.DynamicPreferenceCategory>
|
<com.kabouzeid.appthemehelper.common.prefs.ATEListPreference
|
||||||
|
android:defaultValue="light"
|
||||||
|
android:entries="@array/pref_general_theme_list_titles"
|
||||||
|
android:entryValues="@array/pref_general_theme_list_values"
|
||||||
|
android:key="general_theme"
|
||||||
|
android:negativeButtonText="@null"
|
||||||
|
android:positiveButtonText="@null"
|
||||||
|
android:title="@string/pref_title_general_theme" />
|
||||||
|
|
||||||
|
</com.kabouzeid.appthemehelper.common.prefs.ATEPreferenceCategory>
|
||||||
|
|
||||||
</PreferenceScreen>
|
</PreferenceScreen>
|
||||||
|
|
|
||||||
|
|
@ -1,26 +1,23 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
|
||||||
<com.kabouzeid.gramophone.prefs.DynamicPreferenceCategory android:title="@string/pref_header_images">
|
<com.kabouzeid.appthemehelper.common.prefs.ATEPreferenceCategory android:title="@string/pref_header_images">
|
||||||
|
|
||||||
<CheckBoxPreference
|
<com.kabouzeid.appthemehelper.common.prefs.ATESwitchPreference
|
||||||
android:defaultValue="false"
|
android:defaultValue="false"
|
||||||
android:key="ignore_media_store_artwork"
|
android:key="ignore_media_store_artwork"
|
||||||
android:layout="@layout/preference_custom"
|
|
||||||
android:summary="@string/pref_summary_ignore_media_store_artwork"
|
android:summary="@string/pref_summary_ignore_media_store_artwork"
|
||||||
android:title="@string/pref_title_ignore_media_store_artwork"
|
android:title="@string/pref_title_ignore_media_store_artwork" />
|
||||||
android:widgetLayout="@layout/preference_dynamic_checkbox" />
|
|
||||||
|
|
||||||
<com.afollestad.materialdialogs.prefs.MaterialListPreference
|
<com.kabouzeid.appthemehelper.common.prefs.ATEListPreference
|
||||||
android:defaultValue="only_wifi"
|
android:defaultValue="only_wifi"
|
||||||
android:entries="@array/pref_auto_download_images_titles"
|
android:entries="@array/pref_auto_download_images_titles"
|
||||||
android:entryValues="@array/pref_auto_download_images_values"
|
android:entryValues="@array/pref_auto_download_images_values"
|
||||||
android:key="auto_download_images_policy"
|
android:key="auto_download_images_policy"
|
||||||
android:layout="@layout/preference_custom"
|
|
||||||
android:negativeButtonText="@null"
|
android:negativeButtonText="@null"
|
||||||
android:positiveButtonText="@null"
|
android:positiveButtonText="@null"
|
||||||
android:title="@string/pref_title_auto_download_artist_images" />
|
android:title="@string/pref_title_auto_download_artist_images" />
|
||||||
|
|
||||||
</com.kabouzeid.gramophone.prefs.DynamicPreferenceCategory>
|
</com.kabouzeid.appthemehelper.common.prefs.ATEPreferenceCategory>
|
||||||
|
|
||||||
</PreferenceScreen>
|
</PreferenceScreen>
|
||||||
|
|
@ -1,24 +1,20 @@
|
||||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
|
||||||
<com.kabouzeid.gramophone.prefs.DynamicPreferenceCategory android:title="@string/pref_header_lockscreen">
|
<com.kabouzeid.appthemehelper.common.prefs.ATEPreferenceCategory android:title="@string/pref_header_lockscreen">
|
||||||
|
|
||||||
<CheckBoxPreference
|
<com.kabouzeid.appthemehelper.common.prefs.ATESwitchPreference
|
||||||
android:defaultValue="true"
|
android:defaultValue="true"
|
||||||
android:key="album_art_on_lockscreen"
|
android:key="album_art_on_lockscreen"
|
||||||
android:layout="@layout/preference_custom"
|
|
||||||
android:summary="@string/pref_summary_album_art_on_lockscreen"
|
android:summary="@string/pref_summary_album_art_on_lockscreen"
|
||||||
android:title="@string/pref_title_album_art_on_lockscreen"
|
android:title="@string/pref_title_album_art_on_lockscreen" />
|
||||||
android:widgetLayout="@layout/preference_dynamic_checkbox" />
|
|
||||||
|
|
||||||
<CheckBoxPreference
|
<com.kabouzeid.appthemehelper.common.prefs.ATESwitchPreference
|
||||||
android:defaultValue="false"
|
android:defaultValue="false"
|
||||||
android:dependency="album_art_on_lockscreen"
|
android:dependency="album_art_on_lockscreen"
|
||||||
android:key="blurred_album_art"
|
android:key="blurred_album_art"
|
||||||
android:layout="@layout/preference_custom"
|
|
||||||
android:summary="@string/pref_summary_blurred_album_art"
|
android:summary="@string/pref_summary_blurred_album_art"
|
||||||
android:title="@string/pref_title_blurred_album_art"
|
android:title="@string/pref_title_blurred_album_art" />
|
||||||
android:widgetLayout="@layout/preference_dynamic_checkbox" />
|
|
||||||
|
|
||||||
</com.kabouzeid.gramophone.prefs.DynamicPreferenceCategory>
|
</com.kabouzeid.appthemehelper.common.prefs.ATEPreferenceCategory>
|
||||||
|
|
||||||
</PreferenceScreen>
|
</PreferenceScreen>
|
||||||
|
|
|
||||||
|
|
@ -1,17 +1,16 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
|
||||||
<com.kabouzeid.gramophone.prefs.DynamicPreferenceCategory android:title="@string/pref_header_now_playing_screen">
|
<com.kabouzeid.appthemehelper.common.prefs.ATEPreferenceCategory android:title="@string/pref_header_now_playing_screen">
|
||||||
|
|
||||||
<com.afollestad.materialdialogs.prefs.MaterialListPreference
|
<com.kabouzeid.appthemehelper.common.prefs.ATEListPreference
|
||||||
android:enabled="false"
|
android:enabled="false"
|
||||||
android:key="now_playing_layout"
|
android:key="now_playing_layout"
|
||||||
android:layout="@layout/preference_custom"
|
|
||||||
android:negativeButtonText="@null"
|
android:negativeButtonText="@null"
|
||||||
android:positiveButtonText="@null"
|
android:positiveButtonText="@null"
|
||||||
android:summary="Coming soon"
|
android:summary="Coming soon"
|
||||||
android:title="@string/pref_title_now_playing_layout" />
|
android:title="@string/pref_title_now_playing_layout" />
|
||||||
|
|
||||||
</com.kabouzeid.gramophone.prefs.DynamicPreferenceCategory>
|
</com.kabouzeid.appthemehelper.common.prefs.ATEPreferenceCategory>
|
||||||
|
|
||||||
</PreferenceScreen>
|
</PreferenceScreen>
|
||||||
Loading…
Add table
Add a link
Reference in a new issue