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
|
|
@ -9,7 +9,7 @@ import android.view.LayoutInflater;
|
|||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import com.afollestad.materialdialogs.internal.ThemeSingleton;
|
||||
import com.kabouzeid.appthemehelper.ThemeStore;
|
||||
import com.kabouzeid.gramophone.R;
|
||||
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
||||
import com.kabouzeid.gramophone.interfaces.CabHolder;
|
||||
|
|
@ -71,9 +71,10 @@ public class ShuffleButtonSongAdapter extends SongAdapter {
|
|||
@Override
|
||||
public void onBindViewHolder(@NonNull final SongAdapter.ViewHolder holder, int position) {
|
||||
if (holder.getItemViewType() == SHUFFLE_BUTTON) {
|
||||
int accentColor = ThemeStore.accentColor(activity);
|
||||
if (holder.title != null) {
|
||||
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));
|
||||
}
|
||||
if (holder.text != null) {
|
||||
|
|
@ -85,7 +86,7 @@ public class ShuffleButtonSongAdapter extends SongAdapter {
|
|||
if (holder.image != null) {
|
||||
final int padding = activity.getResources().getDimensionPixelSize(R.dimen.default_item_margin) / 2;
|
||||
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);
|
||||
}
|
||||
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.v7.widget.AppCompatButton;
|
||||
import android.support.v7.widget.Toolbar;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.widget.ImageView;
|
||||
|
|
@ -16,12 +15,12 @@ import android.widget.LinearLayout;
|
|||
import android.widget.TextView;
|
||||
|
||||
import com.afollestad.materialdialogs.internal.ThemeSingleton;
|
||||
import com.kabouzeid.appthemehelper.ThemeStore;
|
||||
import com.kabouzeid.gramophone.R;
|
||||
import com.kabouzeid.gramophone.dialogs.ChangelogDialog;
|
||||
import com.kabouzeid.gramophone.dialogs.DonationDialog;
|
||||
import com.kabouzeid.gramophone.ui.activities.base.AbsBaseActivity;
|
||||
import com.kabouzeid.gramophone.util.ColorUtil;
|
||||
import com.kabouzeid.gramophone.util.ViewUtil;
|
||||
|
||||
import butterknife.Bind;
|
||||
import butterknife.ButterKnife;
|
||||
|
|
@ -127,14 +126,14 @@ public class AboutActivity extends AbsBaseActivity implements View.OnClickListen
|
|||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_about);
|
||||
setStatusBarTransparent();
|
||||
setDrawUnderStatusbar(true);
|
||||
ButterKnife.bind(this);
|
||||
|
||||
setUpViews();
|
||||
setStatusbarColorAuto();
|
||||
setNavigationbarColorAuto();
|
||||
setTaskDescriptionColorAuto();
|
||||
|
||||
if (shouldColorNavigationBar())
|
||||
setNavigationBarThemeColor();
|
||||
setStatusBarThemeColor();
|
||||
setUpViews();
|
||||
}
|
||||
|
||||
private void setUpViews() {
|
||||
|
|
@ -145,7 +144,7 @@ public class AboutActivity extends AbsBaseActivity implements View.OnClickListen
|
|||
}
|
||||
|
||||
private void setUpToolbar() {
|
||||
toolbar.setBackgroundColor(getThemeColorPrimary());
|
||||
toolbar.setBackgroundColor(ThemeStore.primaryColor(this));
|
||||
setSupportActionBar(toolbar);
|
||||
//noinspection ConstantConditions
|
||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
|
|
@ -273,12 +272,4 @@ public class AboutActivity extends AbsBaseActivity implements View.OnClickListen
|
|||
.build()
|
||||
.showAppCompat();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCreateOptionsMenu(Menu menu) {
|
||||
boolean darkContent = ColorUtil.useDarkTextColorOnBackground(getThemeColorPrimary());
|
||||
ViewUtil.setToolbarContentDark(this, toolbar, darkContent);
|
||||
setUseDarkStatusBarIcons(darkContent);
|
||||
return super.onCreateOptionsMenu(menu);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -76,14 +76,11 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements
|
|||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setStatusBarTransparent();
|
||||
setDrawUnderStatusbar(true);
|
||||
ButterKnife.bind(this);
|
||||
|
||||
supportPostponeEnterTransition();
|
||||
|
||||
if (shouldColorNavigationBar())
|
||||
setNavigationBarColor(DialogUtils.resolveColor(this, R.attr.default_bar_color));
|
||||
|
||||
getAlbumFromIntentExtras();
|
||||
setUpObservableListViewParams();
|
||||
setUpToolBar();
|
||||
|
|
@ -110,7 +107,7 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements
|
|||
// Change alpha of overlay
|
||||
toolbarAlpha = Math.max(0, Math.min(1, (float) scrollY / flexibleRange));
|
||||
toolbar.setBackgroundColor(ColorUtil.getColorWithAlpha(toolbarAlpha, toolbarColor));
|
||||
setStatusBarColor(ColorUtil.getColorWithAlpha(cab != null && cab.isActive() ? 1 : toolbarAlpha, toolbarColor));
|
||||
setStatusbarColor(ColorUtil.getColorWithAlpha(cab != null && cab.isActive() ? 1 : toolbarAlpha, toolbarColor));
|
||||
|
||||
// Translate name text
|
||||
int maxTitleTranslationY = albumArtViewHeight;
|
||||
|
|
@ -179,15 +176,8 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements
|
|||
albumTitleView.setBackgroundColor(color);
|
||||
albumTitleView.setTextColor(ColorUtil.getPrimaryTextColorForBackground(this, color));
|
||||
|
||||
if (shouldColorNavigationBar())
|
||||
setNavigationBarColor(color);
|
||||
|
||||
notifyTaskColorChange(color);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean overridesTaskColor() {
|
||||
return true;
|
||||
setNavigationbarColor(color);
|
||||
setTaskDescriptionColor(color);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -309,7 +299,7 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements
|
|||
.start(new MaterialCab.Callback() {
|
||||
@Override
|
||||
public boolean onCabCreated(MaterialCab materialCab, Menu menu) {
|
||||
setStatusBarColor(ColorUtil.getOpaqueColor(toolbarColor));
|
||||
setStatusbarColor(ColorUtil.getOpaqueColor(toolbarColor));
|
||||
return callback.onCabCreated(materialCab, menu);
|
||||
}
|
||||
|
||||
|
|
@ -320,7 +310,7 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements
|
|||
|
||||
@Override
|
||||
public boolean onCabFinished(MaterialCab materialCab) {
|
||||
setStatusBarColor(ColorUtil.getColorWithAlpha(toolbarAlpha, toolbarColor));
|
||||
setStatusbarColor(ColorUtil.getColorWithAlpha(toolbarAlpha, toolbarColor));
|
||||
return callback.onCabFinished(materialCab);
|
||||
}
|
||||
});
|
||||
|
|
@ -341,4 +331,10 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements
|
|||
super.onMediaStoreChanged();
|
||||
refresh();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setStatusbarColor(int color) {
|
||||
super.setStatusbarColor(color);
|
||||
setLightStatusbar(false);
|
||||
}
|
||||
}
|
||||
|
|
@ -100,12 +100,9 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
|
|||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setStatusBarTransparent();
|
||||
setDrawUnderStatusbar(true);
|
||||
ButterKnife.bind(this);
|
||||
|
||||
if (shouldColorNavigationBar())
|
||||
setNavigationBarColor(DialogUtils.resolveColor(this, R.attr.default_bar_color));
|
||||
|
||||
lastFMRestClient = new LastFMRestClient(this);
|
||||
|
||||
getArtistFromIntentExtras();
|
||||
|
|
@ -135,7 +132,7 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
|
|||
// Change alpha of overlay
|
||||
toolbarAlpha = Math.max(0, Math.min(1, (float) scrollY / flexibleRange));
|
||||
toolbar.setBackgroundColor(ColorUtil.getColorWithAlpha(toolbarAlpha, toolbarColor));
|
||||
setStatusBarColor(ColorUtil.getColorWithAlpha(cab != null && cab.isActive() ? 1 : toolbarAlpha, toolbarColor));
|
||||
setStatusbarColor(ColorUtil.getColorWithAlpha(cab != null && cab.isActive() ? 1 : toolbarAlpha, toolbarColor));
|
||||
|
||||
// Translate name text
|
||||
int maxTitleTranslationY = artistImageViewHeight;
|
||||
|
|
@ -287,11 +284,6 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
|
|||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean overridesTaskColor() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
|
|
@ -309,11 +301,8 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
|
|||
toolbarColor = vibrantColor;
|
||||
artistName.setBackgroundColor(vibrantColor);
|
||||
artistName.setTextColor(ColorUtil.getPrimaryTextColorForBackground(this, vibrantColor));
|
||||
|
||||
if (shouldColorNavigationBar())
|
||||
setNavigationBarColor(vibrantColor);
|
||||
|
||||
notifyTaskColorChange(vibrantColor);
|
||||
setNavigationbarColor(vibrantColor);
|
||||
setTaskDescriptionColor(vibrantColor);
|
||||
}
|
||||
|
||||
private void getArtistFromIntentExtras() {
|
||||
|
|
@ -395,7 +384,7 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
|
|||
.start(new MaterialCab.Callback() {
|
||||
@Override
|
||||
public boolean onCabCreated(MaterialCab materialCab, Menu menu) {
|
||||
setStatusBarColor(ColorUtil.getOpaqueColor(toolbarColor));
|
||||
setStatusbarColor(ColorUtil.getOpaqueColor(toolbarColor));
|
||||
return callback.onCabCreated(materialCab, menu);
|
||||
}
|
||||
|
||||
|
|
@ -406,7 +395,7 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
|
|||
|
||||
@Override
|
||||
public boolean onCabFinished(MaterialCab materialCab) {
|
||||
setStatusBarColor(ColorUtil.getColorWithAlpha(toolbarAlpha, toolbarColor));
|
||||
setStatusbarColor(ColorUtil.getColorWithAlpha(toolbarAlpha, toolbarColor));
|
||||
return callback.onCabFinished(materialCab);
|
||||
}
|
||||
});
|
||||
|
|
@ -427,4 +416,10 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
|
|||
super.onMediaStoreChanged();
|
||||
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.pm.PackageInfo;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.res.ColorStateList;
|
||||
import android.graphics.Color;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
|
|
@ -20,7 +18,6 @@ import android.support.design.widget.AppBarLayout.OnOffsetChangedListener;
|
|||
import android.support.design.widget.NavigationView;
|
||||
import android.support.design.widget.TabLayout;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.support.v4.content.ContextCompat;
|
||||
import android.support.v4.view.ViewPager;
|
||||
import android.support.v4.widget.DrawerLayout;
|
||||
import android.support.v7.widget.Toolbar;
|
||||
|
|
@ -34,8 +31,11 @@ import android.widget.ImageView;
|
|||
import android.widget.TextView;
|
||||
|
||||
import com.afollestad.materialcab.MaterialCab;
|
||||
import com.afollestad.materialdialogs.internal.ThemeSingleton;
|
||||
import com.bumptech.glide.Glide;
|
||||
import com.kabouzeid.appthemehelper.ThemeStore;
|
||||
import com.kabouzeid.appthemehelper.util.NavigationViewUtil;
|
||||
import com.kabouzeid.appthemehelper.util.TabLayoutUtil;
|
||||
import com.kabouzeid.appthemehelper.util.ToolbarContentTintHelper;
|
||||
import com.kabouzeid.gramophone.R;
|
||||
import com.kabouzeid.gramophone.adapter.PagerAdapter;
|
||||
import com.kabouzeid.gramophone.dialogs.ChangelogDialog;
|
||||
|
|
@ -60,7 +60,6 @@ import com.kabouzeid.gramophone.util.ColorUtil;
|
|||
import com.kabouzeid.gramophone.util.NavigationUtil;
|
||||
import com.kabouzeid.gramophone.util.PreferenceUtil;
|
||||
import com.kabouzeid.gramophone.util.Util;
|
||||
import com.kabouzeid.gramophone.util.ViewUtil;
|
||||
import com.sothree.slidinguppanel.SlidingUpPanelLayout;
|
||||
|
||||
import java.io.File;
|
||||
|
|
@ -107,14 +106,14 @@ public class MainActivity extends AbsSlidingMusicPanelActivity
|
|||
findViewById(R.id.drawer_content_container).setFitsSystemWindows(false);
|
||||
}
|
||||
|
||||
setStatusbarColorAuto();
|
||||
setNavigationbarColorAuto();
|
||||
setTaskDescriptionColorAuto();
|
||||
|
||||
setUpDrawerLayout();
|
||||
setUpToolbar();
|
||||
setUpViewPager();
|
||||
|
||||
if (shouldColorNavigationBar())
|
||||
setNavigationBarThemeColor();
|
||||
setStatusBarThemeColor();
|
||||
|
||||
checkChangelog();
|
||||
|
||||
if (!PreferenceUtil.getInstance(this).introShown()) {
|
||||
|
|
@ -160,8 +159,8 @@ public class MainActivity extends AbsSlidingMusicPanelActivity
|
|||
pager.setOffscreenPageLimit(pagerAdapter.getCount() - 1); // => all
|
||||
|
||||
tabs.setupWithViewPager(pager);
|
||||
tabs.setTabTextColors(ColorUtil.getSecondaryTextColorForBackground(this, getThemeColorPrimary()), ColorUtil.getPrimaryTextColorForBackground(this, getThemeColorPrimary()));
|
||||
tabs.setSelectedTabIndicatorColor(getThemeColorAccent() == Color.WHITE && !ColorUtil.useDarkTextColorOnBackground(getThemeColorPrimary()) ? Color.WHITE : ThemeSingleton.get().positiveColor.getDefaultColor());
|
||||
|
||||
TabLayoutUtil.setTabLayoutColors(tabs, ToolbarContentTintHelper.toolbarTitleColor(this, ThemeStore.primaryColor(this)), ThemeStore.accentColor(this));
|
||||
|
||||
int startPosition = PreferenceUtil.getInstance(this).getDefaultStartPage();
|
||||
startPosition = startPosition == -1 ? PreferenceUtil.getInstance(this).getLastStartPage() : startPosition;
|
||||
|
|
@ -169,43 +168,21 @@ public class MainActivity extends AbsSlidingMusicPanelActivity
|
|||
}
|
||||
|
||||
private void setUpToolbar() {
|
||||
int primaryColor = ThemeStore.primaryColor(this);
|
||||
appbar.setBackgroundColor(primaryColor);
|
||||
toolbar.setBackgroundColor(primaryColor);
|
||||
toolbar.setNavigationIcon(R.drawable.ic_menu_white_24dp);
|
||||
setTitle(getResources().getString(R.string.app_name));
|
||||
setAppBarColor();
|
||||
setSupportActionBar(toolbar);
|
||||
}
|
||||
|
||||
private void setAppBarColor() {
|
||||
appbar.setBackgroundColor(getThemeColorPrimary());
|
||||
}
|
||||
|
||||
private void setUpNavigationView() {
|
||||
navigationView.setCheckedItem(R.id.nav_library);
|
||||
final int colorAccent = ThemeSingleton.get().positiveColor.getDefaultColor();
|
||||
navigationView.setItemTextColor(new ColorStateList(
|
||||
new int[][]{
|
||||
//{-android.R.attr.state_enabled}, // disabled
|
||||
{android.R.attr.state_checked}, // checked
|
||||
{} // default
|
||||
},
|
||||
new int[]{
|
||||
// 0,
|
||||
colorAccent,
|
||||
ThemeSingleton.get().darkTheme ? ContextCompat.getColor(this, R.color.primary_text_default_material_dark) : ContextCompat.getColor(this, R.color.primary_text_default_material_light)
|
||||
}
|
||||
));
|
||||
navigationView.setItemIconTintList(new ColorStateList(
|
||||
new int[][]{
|
||||
//{-android.R.attr.state_enabled}, // disabled
|
||||
{android.R.attr.state_checked}, // checked
|
||||
{} // default
|
||||
},
|
||||
new int[]{
|
||||
// 0,
|
||||
colorAccent,
|
||||
ThemeSingleton.get().darkTheme ? ContextCompat.getColor(this, R.color.secondary_text_default_material_dark) : ContextCompat.getColor(this, R.color.secondary_text_default_material_light)
|
||||
}
|
||||
));
|
||||
|
||||
int accentColor = ThemeStore.accentColor(this);
|
||||
NavigationViewUtil.setItemIconColors(navigationView, ThemeStore.textColorSecondary(this), accentColor);
|
||||
NavigationViewUtil.setItemTextColors(navigationView, ThemeStore.textColorPrimary(this), accentColor);
|
||||
|
||||
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
|
||||
@Override
|
||||
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
|
||||
|
|
@ -334,16 +311,7 @@ public class MainActivity extends AbsSlidingMusicPanelActivity
|
|||
menu.removeItem(R.id.action_grid_size);
|
||||
menu.removeItem(R.id.action_colored_footers);
|
||||
}
|
||||
boolean darkContent = ColorUtil.useDarkTextColorOnBackground(getThemeColorPrimary());
|
||||
ViewUtil.setToolbarContentDark(this, toolbar, darkContent);
|
||||
setUseDarkStatusBarIcons(darkContent);
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onPrepareOptionsMenu(Menu menu) {
|
||||
ViewUtil.invalidateToolbarPopupMenuTint(toolbar);
|
||||
return super.onPrepareOptionsMenu(menu);
|
||||
return super.onCreateOptionsMenu(menu);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -357,8 +325,6 @@ public class MainActivity extends AbsSlidingMusicPanelActivity
|
|||
return true;
|
||||
}
|
||||
|
||||
ViewUtil.invalidateToolbarPopupMenuTint(toolbar);
|
||||
|
||||
Fragment currentFragment = getCurrentFragment();
|
||||
if (currentFragment instanceof AbsMainActivityRecyclerViewCustomGridSizeFragment) {
|
||||
AbsMainActivityRecyclerViewCustomGridSizeFragment absMainActivityRecyclerViewCustomGridSizeFragment = (AbsMainActivityRecyclerViewCustomGridSizeFragment) currentFragment;
|
||||
|
|
@ -571,7 +537,7 @@ public class MainActivity extends AbsSlidingMusicPanelActivity
|
|||
cab = new MaterialCab(this, R.id.cab_stub)
|
||||
.setMenu(menu)
|
||||
.setCloseDrawableRes(R.drawable.ic_close_white_24dp)
|
||||
.setBackgroundColor(ColorUtil.shiftBackgroundColorForLightText(getThemeColorPrimary()))
|
||||
.setBackgroundColor(ColorUtil.shiftBackgroundColorForLightText(ThemeStore.primaryColor(this)))
|
||||
.start(callback);
|
||||
return cab;
|
||||
}
|
||||
|
|
@ -619,12 +585,12 @@ public class MainActivity extends AbsSlidingMusicPanelActivity
|
|||
|
||||
@Override
|
||||
public void onDrawerOpened(View drawerView) {
|
||||
setUseDarkStatusBarIcons(false);
|
||||
setLightStatusbar(false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDrawerClosed(View drawerView) {
|
||||
setUseDarkStatusBarIcons(ColorUtil.useDarkTextColorOnBackground(getThemeColorPrimary()));
|
||||
setLightStatusbarAuto(ThemeStore.primaryColor(this));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -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.draggable.RecyclerViewDragDropManager;
|
||||
import com.h6ah4i.android.widget.advrecyclerview.utils.WrapperAdapterUtils;
|
||||
import com.kabouzeid.appthemehelper.ThemeStore;
|
||||
import com.kabouzeid.gramophone.R;
|
||||
import com.kabouzeid.gramophone.adapter.song.PlaylistSongAdapter;
|
||||
import com.kabouzeid.gramophone.adapter.song.SmartPlaylistSongAdapter;
|
||||
|
|
@ -31,7 +32,6 @@ import com.kabouzeid.gramophone.ui.activities.base.AbsSlidingMusicPanelActivity;
|
|||
import com.kabouzeid.gramophone.util.ColorUtil;
|
||||
import com.kabouzeid.gramophone.util.NavigationUtil;
|
||||
import com.kabouzeid.gramophone.util.PlaylistsUtil;
|
||||
import com.kabouzeid.gramophone.util.ViewUtil;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
|
@ -63,9 +63,13 @@ public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity impleme
|
|||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setStatusBarTransparent();
|
||||
setDrawUnderStatusbar(true);
|
||||
ButterKnife.bind(this);
|
||||
|
||||
setStatusbarColorAuto();
|
||||
setNavigationbarColorAuto();
|
||||
setTaskDescriptionColorAuto();
|
||||
|
||||
getIntentExtras();
|
||||
|
||||
setUpRecyclerView();
|
||||
|
|
@ -73,10 +77,6 @@ public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity impleme
|
|||
checkIsEmpty();
|
||||
|
||||
setUpToolBar();
|
||||
|
||||
if (shouldColorNavigationBar())
|
||||
setNavigationBarThemeColor();
|
||||
setStatusBarThemeColor();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -137,7 +137,7 @@ public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity impleme
|
|||
}
|
||||
|
||||
private void setUpToolBar() {
|
||||
toolbar.setBackgroundColor(getThemeColorPrimary());
|
||||
toolbar.setBackgroundColor(ThemeStore.primaryColor(this));
|
||||
setSupportActionBar(toolbar);
|
||||
//noinspection ConstantConditions
|
||||
getSupportActionBar().setTitle(playlist.name);
|
||||
|
|
@ -159,10 +159,7 @@ public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity impleme
|
|||
@Override
|
||||
public boolean onCreateOptionsMenu(Menu menu) {
|
||||
getMenuInflater().inflate(R.menu.menu_playlist_detail, menu);
|
||||
boolean darkContent = ColorUtil.useDarkTextColorOnBackground(getThemeColorPrimary());
|
||||
ViewUtil.setToolbarContentDark(this, toolbar, darkContent);
|
||||
setUseDarkStatusBarIcons(darkContent);
|
||||
return true;
|
||||
return super.onCreateOptionsMenu(menu);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -191,7 +188,7 @@ public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity impleme
|
|||
cab = new MaterialCab(this, R.id.cab_stub)
|
||||
.setMenu(menu)
|
||||
.setCloseDrawableRes(R.drawable.ic_close_white_24dp)
|
||||
.setBackgroundColor(ColorUtil.shiftBackgroundColorForLightText(getThemeColorPrimary()))
|
||||
.setBackgroundColor(ColorUtil.shiftBackgroundColorForLightText(ThemeStore.primaryColor(this)))
|
||||
.start(callback);
|
||||
return cab;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,7 +10,6 @@ import android.support.v7.widget.Toolbar;
|
|||
import android.text.Editable;
|
||||
import android.text.TextWatcher;
|
||||
import android.view.KeyEvent;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.View;
|
||||
|
|
@ -19,12 +18,12 @@ import android.widget.EditText;
|
|||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.kabouzeid.appthemehelper.ThemeStore;
|
||||
import com.kabouzeid.appthemehelper.util.ToolbarContentTintHelper;
|
||||
import com.kabouzeid.gramophone.R;
|
||||
import com.kabouzeid.gramophone.adapter.SearchAdapter;
|
||||
import com.kabouzeid.gramophone.ui.activities.base.AbsMusicServiceActivity;
|
||||
import com.kabouzeid.gramophone.util.ColorUtil;
|
||||
import com.kabouzeid.gramophone.util.Util;
|
||||
import com.kabouzeid.gramophone.util.ViewUtil;
|
||||
|
||||
import butterknife.Bind;
|
||||
import butterknife.ButterKnife;
|
||||
|
|
@ -51,9 +50,13 @@ public class SearchActivity extends AbsMusicServiceActivity {
|
|||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_search);
|
||||
setStatusBarTransparent();
|
||||
setDrawUnderStatusbar(true);
|
||||
ButterKnife.bind(this);
|
||||
|
||||
setStatusbarColorAuto();
|
||||
setNavigationbarColorAuto();
|
||||
setTaskDescriptionColorAuto();
|
||||
|
||||
recyclerView.setLayoutManager(new LinearLayoutManager(this));
|
||||
searchAdapter = new SearchAdapter(this);
|
||||
recyclerView.setAdapter(searchAdapter);
|
||||
|
|
@ -68,29 +71,17 @@ public class SearchActivity extends AbsMusicServiceActivity {
|
|||
|
||||
setUpToolBar();
|
||||
setUpSearchBar();
|
||||
|
||||
if (shouldColorNavigationBar())
|
||||
setNavigationBarThemeColor();
|
||||
setStatusBarThemeColor();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCreateOptionsMenu(Menu menu) {
|
||||
boolean darkContent = ColorUtil.useDarkTextColorOnBackground(getThemeColorPrimary());
|
||||
ViewUtil.setToolbarContentDark(this, toolbar, darkContent);
|
||||
setUseDarkStatusBarIcons(darkContent);
|
||||
return super.onCreateOptionsMenu(menu);
|
||||
}
|
||||
|
||||
private void setUpToolBar() {
|
||||
toolbar.setBackgroundColor(getThemeColorPrimary());
|
||||
toolbar.setBackgroundColor(ThemeStore.primaryColor(this));
|
||||
setSupportActionBar(toolbar);
|
||||
//noinspection ConstantConditions
|
||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
}
|
||||
|
||||
private void setUpSearchBar() {
|
||||
searchCloseBtn.setColorFilter(ViewUtil.getToolbarIconColor(this, ColorUtil.useDarkTextColorOnBackground(getThemeColorPrimary())), PorterDuff.Mode.SRC_IN);
|
||||
searchCloseBtn.setColorFilter(ToolbarContentTintHelper.toolbarContentColor(this, ThemeStore.primaryColor(this)), PorterDuff.Mode.SRC_IN);
|
||||
searchCloseBtn.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
|
|
@ -98,8 +89,8 @@ public class SearchActivity extends AbsMusicServiceActivity {
|
|||
}
|
||||
});
|
||||
|
||||
searchSrcText.setTextColor(ColorUtil.getPrimaryTextColorForBackground(this, getThemeColorPrimary()));
|
||||
searchSrcText.setHintTextColor(ColorUtil.getSecondaryTextColorForBackground(this, getThemeColorPrimary()));
|
||||
searchSrcText.setTextColor(ToolbarContentTintHelper.toolbarTitleColor(this, ThemeStore.primaryColor(this)));
|
||||
searchSrcText.setHintTextColor(ToolbarContentTintHelper.toolbarSubtitleColor(this, ThemeStore.primaryColor(this)));
|
||||
searchSrcText.setHint(R.string.search_hint);
|
||||
|
||||
searchSrcText.addTextChangedListener(new TextWatcher() {
|
||||
|
|
|
|||
|
|
@ -13,19 +13,19 @@ import android.preference.PreferenceManager;
|
|||
import android.support.annotation.ColorInt;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.annotation.StyleRes;
|
||||
import android.support.v7.widget.Toolbar;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
|
||||
import com.afollestad.materialdialogs.color.ColorChooserDialog;
|
||||
import com.kabouzeid.appthemehelper.ThemeStore;
|
||||
import com.kabouzeid.appthemehelper.common.prefs.ATEColorPreference;
|
||||
import com.kabouzeid.appthemehelper.common.prefs.ATESwitchPreference;
|
||||
import com.kabouzeid.appthemehelper.util.ColorUtil;
|
||||
import com.kabouzeid.gramophone.R;
|
||||
import com.kabouzeid.gramophone.prefs.ColorChooserPreference;
|
||||
import com.kabouzeid.gramophone.ui.activities.base.AbsBaseActivity;
|
||||
import com.kabouzeid.gramophone.util.ColorUtil;
|
||||
import com.kabouzeid.gramophone.util.NavigationUtil;
|
||||
import com.kabouzeid.gramophone.util.PreferenceUtil;
|
||||
import com.kabouzeid.gramophone.util.ViewUtil;
|
||||
|
||||
import butterknife.Bind;
|
||||
import butterknife.ButterKnife;
|
||||
|
|
@ -40,33 +40,37 @@ public class SettingsActivity extends AbsBaseActivity implements ColorChooserDia
|
|||
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_preferences);
|
||||
setStatusBarTransparent();
|
||||
setDrawUnderStatusbar(true);
|
||||
ButterKnife.bind(this);
|
||||
|
||||
toolbar.setBackgroundColor(getThemeColorPrimary());
|
||||
setStatusbarColorAuto();
|
||||
setNavigationbarColorAuto();
|
||||
setTaskDescriptionColorAuto();
|
||||
|
||||
toolbar.setBackgroundColor(ThemeStore.primaryColor(this));
|
||||
setSupportActionBar(toolbar);
|
||||
//noinspection ConstantConditions
|
||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
|
||||
if (savedInstanceState == null)
|
||||
getFragmentManager().beginTransaction().replace(R.id.content_frame, new SettingsFragment()).commit();
|
||||
|
||||
if (shouldColorNavigationBar())
|
||||
setNavigationBarThemeColor();
|
||||
setStatusBarThemeColor();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onColorSelection(@NonNull ColorChooserDialog dialog, @ColorInt int selectedColor) {
|
||||
switch (dialog.getTitle()) {
|
||||
case R.string.primary_color:
|
||||
PreferenceUtil.getInstance(this).setThemeColorPrimary(selectedColor);
|
||||
ThemeStore.editTheme(this)
|
||||
.primaryColor(selectedColor)
|
||||
.commit();
|
||||
break;
|
||||
case R.string.accent_color:
|
||||
PreferenceUtil.getInstance(this).setThemeColorAccent(selectedColor);
|
||||
ThemeStore.editTheme(this)
|
||||
.accentColor(selectedColor)
|
||||
.commit();
|
||||
break;
|
||||
}
|
||||
recreateIfThemeChanged();
|
||||
recreate();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -78,14 +82,6 @@ public class SettingsActivity extends AbsBaseActivity implements ColorChooserDia
|
|||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCreateOptionsMenu(Menu menu) {
|
||||
boolean darkContent = ColorUtil.useDarkTextColorOnBackground(getThemeColorPrimary());
|
||||
ViewUtil.setToolbarContentDark(this, toolbar, darkContent);
|
||||
setUseDarkStatusBarIcons(darkContent);
|
||||
return super.onCreateOptionsMenu(menu);
|
||||
}
|
||||
|
||||
public static class SettingsFragment extends PreferenceFragment {
|
||||
|
||||
private static void setSummary(@NonNull Preference preference) {
|
||||
|
|
@ -142,8 +138,10 @@ public class SettingsActivity extends AbsBaseActivity implements ColorChooserDia
|
|||
@Override
|
||||
public boolean onPreferenceChange(Preference preference, @NonNull Object o) {
|
||||
setSummary(generalTheme, o);
|
||||
PreferenceUtil.getInstance(getActivity()).setGeneralTheme(getActivity(), (String) o);
|
||||
((SettingsActivity) getActivity()).recreateIfThemeChanged();
|
||||
ThemeStore.editTheme(getActivity())
|
||||
.activityTheme(getThemeResFromPrefValue((String) o))
|
||||
.commit();
|
||||
getActivity().recreate();
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
|
@ -158,46 +156,51 @@ public class SettingsActivity extends AbsBaseActivity implements ColorChooserDia
|
|||
}
|
||||
});
|
||||
|
||||
ColorChooserPreference primaryColor = (ColorChooserPreference) findPreference("primary_color");
|
||||
primaryColor.setColor(PreferenceUtil.getInstance(getActivity()).getThemeColorPrimary(getActivity()));
|
||||
primaryColor.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
|
||||
ATEColorPreference primaryColorPref = (ATEColorPreference) findPreference("primary_color");
|
||||
final int primaryColor = ThemeStore.primaryColor(getActivity());
|
||||
primaryColorPref.setColor(primaryColor, ColorUtil.darkenColor(primaryColor));
|
||||
primaryColorPref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
|
||||
@Override
|
||||
public boolean onPreferenceClick(@NonNull Preference preference) {
|
||||
new ColorChooserDialog.Builder(((SettingsActivity) getActivity()), R.string.primary_color)
|
||||
.accentMode(false)
|
||||
.allowUserColorInput(true)
|
||||
.allowUserColorInputAlpha(false)
|
||||
.preselect(PreferenceUtil.getInstance(getActivity()).getThemeColorPrimary(getActivity()))
|
||||
.preselect(primaryColor)
|
||||
.show();
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
ColorChooserPreference accentColor = (ColorChooserPreference) findPreference("accent_color");
|
||||
accentColor.setColor(PreferenceUtil.getInstance(getActivity()).getThemeColorAccent(getActivity()));
|
||||
accentColor.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
|
||||
ATEColorPreference accentColorPref = (ATEColorPreference) findPreference("accent_color");
|
||||
final int accentColor = ThemeStore.accentColor(getActivity());
|
||||
accentColorPref.setColor(accentColor, ColorUtil.darkenColor(accentColor));
|
||||
accentColorPref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
|
||||
@Override
|
||||
public boolean onPreferenceClick(@NonNull Preference preference) {
|
||||
new ColorChooserDialog.Builder(((SettingsActivity) getActivity()), R.string.accent_color)
|
||||
.accentMode(true)
|
||||
.allowUserColorInput(true)
|
||||
.allowUserColorInputAlpha(false)
|
||||
.preselect(PreferenceUtil.getInstance(getActivity()).getThemeColorAccent(getActivity()))
|
||||
.preselect(accentColor)
|
||||
.show();
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
Preference colorNavBar = findPreference("should_color_navigation_bar");
|
||||
ATESwitchPreference colorNavBar = (ATESwitchPreference) findPreference("should_color_navigation_bar");
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
|
||||
colorNavBar.setEnabled(false);
|
||||
colorNavBar.setSummary(R.string.pref_only_lollipop);
|
||||
} else {
|
||||
colorNavBar.setChecked(ThemeStore.coloredNavigationBar(getActivity()));
|
||||
colorNavBar.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
||||
@Override
|
||||
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||
PreferenceUtil.getInstance(getActivity()).setColoredNavigationBar((boolean) newValue);
|
||||
((SettingsActivity) getActivity()).recreateIfThemeChanged();
|
||||
ThemeStore.editTheme(getActivity())
|
||||
.coloredNavigationBar((Boolean) newValue)
|
||||
.commit();
|
||||
getActivity().recreate();
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
|
@ -223,5 +226,18 @@ public class SettingsActivity extends AbsBaseActivity implements ColorChooserDia
|
|||
ResolveInfo ri = pm.resolveActivity(effects, 0);
|
||||
return ri != null;
|
||||
}
|
||||
|
||||
@StyleRes
|
||||
public int getThemeResFromPrefValue(String themePrefValue) {
|
||||
switch (themePrefValue) {
|
||||
case "dark":
|
||||
return R.style.Theme_Phonograph;
|
||||
case "black":
|
||||
return R.style.Theme_Phonograph_Black;
|
||||
case "light":
|
||||
default:
|
||||
return R.style.Theme_Phonograph_Light;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,7 +7,6 @@ import android.media.AudioManager;
|
|||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.provider.Settings;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
|
|
@ -16,7 +15,7 @@ import android.support.v4.app.ActivityCompat;
|
|||
import android.view.KeyEvent;
|
||||
import android.view.View;
|
||||
|
||||
import com.afollestad.materialdialogs.internal.ThemeSingleton;
|
||||
import com.kabouzeid.appthemehelper.ThemeStore;
|
||||
import com.kabouzeid.gramophone.R;
|
||||
import com.kabouzeid.gramophone.interfaces.KabViewsDisableAble;
|
||||
|
||||
|
|
@ -66,18 +65,9 @@ public abstract class AbsBaseActivity extends AbsThemeActivity implements KabVie
|
|||
}
|
||||
|
||||
protected void onPermissionsChanged() {
|
||||
postRecreate();
|
||||
}
|
||||
|
||||
protected void postRecreate() {
|
||||
if (!recreating) {
|
||||
recreating = true;
|
||||
new Handler().postDelayed(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
recreate();
|
||||
}
|
||||
}, 200);
|
||||
postRecreate();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -165,7 +155,7 @@ public abstract class AbsBaseActivity extends AbsThemeActivity implements KabVie
|
|||
requestPermissions();
|
||||
}
|
||||
})
|
||||
.setActionTextColor(ThemeSingleton.get().positiveColor)
|
||||
.setActionTextColor(ThemeStore.accentColor(this))
|
||||
.show();
|
||||
} else {
|
||||
// User has deny permission and checked never show permission dialog so you can redirect to Application settings page
|
||||
|
|
@ -181,7 +171,7 @@ public abstract class AbsBaseActivity extends AbsThemeActivity implements KabVie
|
|||
startActivity(intent);
|
||||
}
|
||||
})
|
||||
.setActionTextColor(ThemeSingleton.get().positiveColor)
|
||||
.setActionTextColor(ThemeStore.accentColor(this))
|
||||
.show();
|
||||
}
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -33,9 +33,9 @@ public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivi
|
|||
@Bind(R.id.sliding_layout)
|
||||
SlidingUpPanelLayout slidingUpPanelLayout;
|
||||
|
||||
private int navigationBarColor;
|
||||
private int navigationbarColor;
|
||||
private int taskColor;
|
||||
private boolean useDarkStatusBarIcons;
|
||||
private boolean lightStatusbar;
|
||||
|
||||
private AbsPlayerFragment playerFragment;
|
||||
private MiniPlayerFragment miniPlayerFragment;
|
||||
|
|
@ -100,11 +100,11 @@ public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivi
|
|||
|
||||
@Override
|
||||
public void onPanelCollapsed(View view) {
|
||||
super.setUseDarkStatusBarIcons(useDarkStatusBarIcons);
|
||||
super.notifyTaskColorChange(taskColor);
|
||||
if (shouldColorNavigationBar()) {
|
||||
super.setNavigationBarColor(navigationBarColor);
|
||||
}
|
||||
// restore values
|
||||
super.setLightStatusbar(lightStatusbar);
|
||||
super.setTaskDescriptionColor(taskColor);
|
||||
super.setNavigationbarColor(navigationbarColor);
|
||||
|
||||
playerFragment.setMenuVisibility(false);
|
||||
playerFragment.setUserVisibleHint(false);
|
||||
playerFragment.onHide();
|
||||
|
|
@ -112,12 +112,12 @@ public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivi
|
|||
|
||||
@Override
|
||||
public void onPanelExpanded(View view) {
|
||||
super.setUseDarkStatusBarIcons(false);
|
||||
// setting fragments values
|
||||
int playerFragmentColor = playerFragment.getPaletteColor();
|
||||
super.notifyTaskColorChange(playerFragmentColor);
|
||||
if (shouldColorNavigationBar()) {
|
||||
super.setNavigationBarColor(playerFragmentColor);
|
||||
}
|
||||
super.setLightStatusbar(false);
|
||||
super.setTaskDescriptionColor(playerFragmentColor);
|
||||
super.setNavigationbarColor(playerFragmentColor);
|
||||
|
||||
playerFragment.setMenuVisibility(true);
|
||||
playerFragment.setUserVisibleHint(true);
|
||||
playerFragment.onShow();
|
||||
|
|
@ -182,38 +182,36 @@ public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivi
|
|||
super.onBackPressed();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void setUseDarkStatusBarIcons(boolean useDarkIcons) {
|
||||
useDarkStatusBarIcons = useDarkIcons;
|
||||
if (getPanelState() == SlidingUpPanelLayout.PanelState.COLLAPSED) {
|
||||
super.setUseDarkStatusBarIcons(useDarkIcons);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void setNavigationBarColor(@ColorInt int color) {
|
||||
this.navigationBarColor = color;
|
||||
if (getPanelState() == SlidingUpPanelLayout.PanelState.COLLAPSED) {
|
||||
super.setNavigationBarColor(color);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void notifyTaskColorChange(@ColorInt int color) {
|
||||
this.taskColor = color;
|
||||
if (getPanelState() == null || getPanelState() == SlidingUpPanelLayout.PanelState.COLLAPSED) {
|
||||
super.notifyTaskColorChange(color);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPaletteColorChanged() {
|
||||
if (getPanelState() == SlidingUpPanelLayout.PanelState.EXPANDED) {
|
||||
int playerFragmentColor = playerFragment.getPaletteColor();
|
||||
super.notifyTaskColorChange(playerFragmentColor);
|
||||
if (shouldColorNavigationBar()) {
|
||||
super.setNavigationBarColor(playerFragmentColor);
|
||||
}
|
||||
super.setTaskDescriptionColor(playerFragmentColor);
|
||||
super.setNavigationbarColor(playerFragmentColor);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setLightStatusbar(boolean enabled) {
|
||||
lightStatusbar = enabled;
|
||||
if (getPanelState() == SlidingUpPanelLayout.PanelState.COLLAPSED) {
|
||||
super.setLightStatusbar(enabled);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setNavigationbarColor(int color) {
|
||||
this.navigationbarColor = color;
|
||||
if (getPanelState() == SlidingUpPanelLayout.PanelState.COLLAPSED) {
|
||||
super.setNavigationbarColor(color);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setTaskDescriptionColor(@ColorInt int color) {
|
||||
this.taskColor = color;
|
||||
if (getPanelState() == null || getPanelState() == SlidingUpPanelLayout.PanelState.COLLAPSED) {
|
||||
super.setTaskDescriptionColor(color);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,192 +1,94 @@
|
|||
package com.kabouzeid.gramophone.ui.activities.base;
|
||||
|
||||
import android.app.ActivityManager;
|
||||
import android.content.res.ColorStateList;
|
||||
import android.graphics.Color;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.support.annotation.ColorInt;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v7.app.AppCompatActivity;
|
||||
import android.view.View;
|
||||
|
||||
import com.afollestad.materialdialogs.internal.ThemeSingleton;
|
||||
import com.kabouzeid.appthemehelper.ATH;
|
||||
import com.kabouzeid.appthemehelper.ThemeStore;
|
||||
import com.kabouzeid.appthemehelper.common.ATHToolbarActivity;
|
||||
import com.kabouzeid.appthemehelper.util.ColorUtil;
|
||||
import com.kabouzeid.appthemehelper.util.MaterialDialogsUtil;
|
||||
import com.kabouzeid.gramophone.R;
|
||||
import com.kabouzeid.gramophone.interfaces.KabViewsDisableAble;
|
||||
import com.kabouzeid.gramophone.util.ColorUtil;
|
||||
import com.kabouzeid.gramophone.util.PreferenceUtil;
|
||||
import com.kabouzeid.gramophone.util.Util;
|
||||
|
||||
/**
|
||||
* @author Aidan Follestad (afollestad), Karim Abou Zeid (kabouzeid)
|
||||
* @author Karim Abou Zeid (kabouzeid)
|
||||
*/
|
||||
|
||||
public abstract class AbsThemeActivity extends AppCompatActivity implements KabViewsDisableAble {
|
||||
private int colorPrimary;
|
||||
private int colorPrimaryDarker;
|
||||
private int colorAccent;
|
||||
private int theme;
|
||||
private boolean coloredNavigationBar;
|
||||
|
||||
@Nullable
|
||||
private ActivityManager.TaskDescription taskDescription;
|
||||
public abstract class AbsThemeActivity extends ATHToolbarActivity {
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
theme = PreferenceUtil.getInstance(this).getGeneralTheme();
|
||||
setTheme(theme);
|
||||
// default theme
|
||||
if (!ThemeStore.isConfigured(this, 1)) {
|
||||
ThemeStore.editTheme(this)
|
||||
.activityTheme(R.style.Theme_Phonograph_Light)
|
||||
.primaryColorRes(R.color.indigo_500)
|
||||
.accentColorRes(R.color.pink_A400)
|
||||
.commit();
|
||||
}
|
||||
super.onCreate(savedInstanceState);
|
||||
setupTheme();
|
||||
MaterialDialogsUtil.updateMaterialDialogsThemeSingleton(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onResume() {
|
||||
super.onResume();
|
||||
// the handler is necessary to avoid "java.lang.RuntimeException: Performing pause of activity that is not resumed"
|
||||
new Handler().postDelayed(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
recreateIfThemeChanged();
|
||||
}
|
||||
}, 200);
|
||||
}
|
||||
|
||||
private void setupTheme() {
|
||||
boolean dark = theme != R.style.Theme_Phonograph_Light;
|
||||
|
||||
colorPrimary = PreferenceUtil.getInstance(this).getThemeColorPrimary(this);
|
||||
colorPrimaryDarker = ColorUtil.shiftColorDown(colorPrimary);
|
||||
colorAccent = PreferenceUtil.getInstance(this).getThemeColorAccent(this);
|
||||
coloredNavigationBar = PreferenceUtil.getInstance(this).shouldUseColoredNavigationBar();
|
||||
|
||||
final ColorStateList accentColorStateList;
|
||||
if (colorAccent == Color.WHITE && !dark) {
|
||||
accentColorStateList = ColorStateList.valueOf(Color.BLACK);
|
||||
} else if (colorAccent == Color.BLACK && dark) {
|
||||
accentColorStateList = ColorStateList.valueOf(Color.WHITE);
|
||||
} else {
|
||||
accentColorStateList = ColorStateList.valueOf(colorAccent);
|
||||
}
|
||||
|
||||
ThemeSingleton.get().positiveColor = accentColorStateList;
|
||||
ThemeSingleton.get().negativeColor = accentColorStateList;
|
||||
ThemeSingleton.get().neutralColor = accentColorStateList;
|
||||
ThemeSingleton.get().widgetColor = accentColorStateList.getDefaultColor();
|
||||
ThemeSingleton.get().darkTheme = dark;
|
||||
|
||||
|
||||
if (!overridesTaskColor()) {
|
||||
notifyTaskColorChange(getThemeColorPrimary());
|
||||
}
|
||||
}
|
||||
|
||||
protected void recreateIfThemeChanged() {
|
||||
if (didThemeChanged()) {
|
||||
recreate();
|
||||
}
|
||||
}
|
||||
|
||||
private boolean didThemeChanged() {
|
||||
return coloredNavigationBar != PreferenceUtil.getInstance(this).shouldUseColoredNavigationBar() ||
|
||||
colorPrimary != PreferenceUtil.getInstance(this).getThemeColorPrimary(this) ||
|
||||
colorAccent != PreferenceUtil.getInstance(this).getThemeColorAccent(this) ||
|
||||
theme != PreferenceUtil.getInstance(this).getGeneralTheme();
|
||||
}
|
||||
|
||||
protected void notifyTaskColorChange(@ColorInt int color) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||
// Sets color of entry in the system recents page
|
||||
if (taskDescription == null || taskDescription.getPrimaryColor() != color) {
|
||||
taskDescription = new ActivityManager.TaskDescription(
|
||||
null,
|
||||
null,
|
||||
ColorUtil.getOpaqueColor(color));
|
||||
setTaskDescription(taskDescription);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public int getThemeColorPrimary() {
|
||||
return colorPrimary;
|
||||
}
|
||||
|
||||
public int getThemeColorPrimaryDarker() {
|
||||
return colorPrimaryDarker;
|
||||
}
|
||||
|
||||
public int getThemeColorAccent() {
|
||||
return colorAccent;
|
||||
}
|
||||
|
||||
public boolean shouldColorNavigationBar() {
|
||||
return coloredNavigationBar;
|
||||
}
|
||||
|
||||
protected void setStatusBarTransparent() {
|
||||
// TODO see "materialize" library for setting window flags
|
||||
protected void setDrawUnderStatusbar(boolean drawUnderStatusbar) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
|
||||
Util.setAllowDrawUnderStatusBar(getWindow());
|
||||
else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)
|
||||
Util.setStatusBarTranslucent(getWindow());
|
||||
}
|
||||
|
||||
protected void setNavigationBarColor(@ColorInt int color) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
|
||||
getWindow().setNavigationBarColor(color);
|
||||
}
|
||||
|
||||
/**
|
||||
* This will set the color of the view with the id "status_bar" on KitKat and Lollipop.
|
||||
* On Lollipop if no such view is found it will set the statusbar color using the native method.
|
||||
*
|
||||
* @param color the new statusbar color (will be shifted down on Lollipop and above)
|
||||
*/
|
||||
protected final void setStatusBarColor(@ColorInt int color) {
|
||||
public void setStatusbarColor(int color) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
|
||||
final View statusBar = getWindow().getDecorView().getRootView().findViewById(R.id.status_bar);
|
||||
if (statusBar != null) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||
statusBar.setBackgroundColor(ColorUtil.shiftColorDown(color));
|
||||
statusBar.setBackgroundColor(ColorUtil.darkenColor(color));
|
||||
ATH.setLightStatusbarAuto(this, color);
|
||||
} else {
|
||||
statusBar.setBackgroundColor(color);
|
||||
}
|
||||
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||
getWindow().setStatusBarColor(ColorUtil.shiftColorDown(color));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
protected void setUseDarkStatusBarIcons(boolean useDarkIcons) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||
int systemUiVisibility = getWindow().getDecorView().getSystemUiVisibility();
|
||||
if (useDarkIcons) {
|
||||
getWindow().getDecorView().setSystemUiVisibility(systemUiVisibility | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
|
||||
} else {
|
||||
getWindow().getDecorView().setSystemUiVisibility(systemUiVisibility & ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
|
||||
ATH.setStatusbarColor(this, ColorUtil.darkenColor(color));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected final void setNavigationBarThemeColor() {
|
||||
setNavigationBarColor(colorPrimary);
|
||||
public void setStatusbarColorAuto() {
|
||||
// we don't want to use statusbar color because we are doing the color darkening on our own to support KitKat
|
||||
setStatusbarColor(ThemeStore.primaryColor(this));
|
||||
}
|
||||
|
||||
protected final void setStatusBarThemeColor() {
|
||||
setStatusBarColor(colorPrimary);
|
||||
public void setTaskDescriptionColor(@ColorInt int color) {
|
||||
ATH.setTaskDescriptionColor(this, color);
|
||||
}
|
||||
|
||||
protected final void resetNavigationBarColor() {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
|
||||
setNavigationBarColor(ColorUtil.resolveColor(this, android.R.attr.navigationBarColor));
|
||||
public void setTaskDescriptionColorAuto() {
|
||||
setTaskDescriptionColor(ThemeStore.primaryColor(this));
|
||||
}
|
||||
|
||||
protected final void resetStatusBarColor() {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
|
||||
setStatusBarColor(ColorUtil.resolveColor(this, android.R.attr.statusBarColor));
|
||||
public void setNavigationbarColor(int color) {
|
||||
ATH.setNavigationbarColor(this, color);
|
||||
}
|
||||
|
||||
protected boolean overridesTaskColor() {
|
||||
return false;
|
||||
public void setNavigationbarColorAuto() {
|
||||
setNavigationbarColor(ThemeStore.navigationBarColor(this));
|
||||
}
|
||||
|
||||
public void setLightStatusbar(boolean enabled) {
|
||||
ATH.setLightStatusbar(this, enabled);
|
||||
}
|
||||
|
||||
public void setLightStatusbarAuto(int bgColor) {
|
||||
setLightStatusbar(ColorUtil.isColorLight(bgColor));
|
||||
}
|
||||
}
|
||||
|
|
@ -16,7 +16,6 @@ import android.support.annotation.Nullable;
|
|||
import android.support.design.widget.FloatingActionButton;
|
||||
import android.support.v7.widget.Toolbar;
|
||||
import android.util.Log;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.view.animation.OvershootInterpolator;
|
||||
|
|
@ -25,13 +24,13 @@ import android.widget.LinearLayout;
|
|||
|
||||
import com.afollestad.materialdialogs.MaterialDialog;
|
||||
import com.github.ksoichiro.android.observablescrollview.ObservableScrollView;
|
||||
import com.kabouzeid.appthemehelper.ThemeStore;
|
||||
import com.kabouzeid.gramophone.R;
|
||||
import com.kabouzeid.gramophone.misc.SimpleObservableScrollViewCallbacks;
|
||||
import com.kabouzeid.gramophone.ui.activities.base.AbsBaseActivity;
|
||||
import com.kabouzeid.gramophone.util.ColorUtil;
|
||||
import com.kabouzeid.gramophone.util.MusicUtil;
|
||||
import com.kabouzeid.gramophone.util.Util;
|
||||
import com.kabouzeid.gramophone.util.ViewUtil;
|
||||
|
||||
import org.jaudiotagger.audio.AudioFile;
|
||||
import org.jaudiotagger.audio.AudioFileIO;
|
||||
|
|
@ -189,9 +188,9 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity {
|
|||
}
|
||||
});
|
||||
|
||||
int fabColor = getThemeColorAccent();
|
||||
int fabDrawableColor = ColorUtil.getPrimaryTextColorForBackground(this, fabColor);
|
||||
fab.setBackgroundTintList(ColorStateList.valueOf(fabColor));
|
||||
int accentColor = ThemeStore.accentColor(this);
|
||||
int fabDrawableColor = ColorUtil.getPrimaryTextColorForBackground(this, accentColor);
|
||||
fab.setBackgroundTintList(ColorStateList.valueOf(accentColor));
|
||||
fab.getDrawable().setColorFilter(fabDrawableColor, PorterDuff.Mode.SRC_IN);
|
||||
}
|
||||
|
||||
|
|
@ -233,14 +232,6 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity {
|
|||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCreateOptionsMenu(Menu menu) {
|
||||
boolean darkContent = ColorUtil.useDarkTextColorOnBackground(paletteColorPrimary);
|
||||
ViewUtil.setToolbarContentDark(this, toolbar, darkContent);
|
||||
setUseDarkStatusBarIcons(darkContent);
|
||||
return super.onCreateOptionsMenu(menu);
|
||||
}
|
||||
|
||||
protected void setNoImageMode() {
|
||||
isInNoImageMode = true;
|
||||
image.setVisibility(View.GONE);
|
||||
|
|
@ -248,14 +239,13 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity {
|
|||
observableScrollView.setPadding(0, Util.getActionBarSize(this), 0, 0);
|
||||
observableScrollViewCallbacks.onScrollChanged(observableScrollView.getCurrentScrollY(), false, false);
|
||||
|
||||
paletteColorPrimary = getIntent().getIntExtra(EXTRA_PALETTE,
|
||||
getThemeColorPrimary());
|
||||
paletteColorPrimary = getIntent().getIntExtra(EXTRA_PALETTE, ThemeStore.primaryColor(this));
|
||||
toolbar.setBackgroundColor(paletteColorPrimary);
|
||||
header.setBackgroundColor(paletteColorPrimary);
|
||||
|
||||
if (shouldColorNavigationBar())
|
||||
setNavigationBarColor(paletteColorPrimary);
|
||||
setStatusBarColor(paletteColorPrimary);
|
||||
setStatusbarColor(paletteColorPrimary);
|
||||
setNavigationbarColor(paletteColorPrimary);
|
||||
setTaskDescriptionColor(paletteColorPrimary);
|
||||
}
|
||||
|
||||
protected void dataChanged() {
|
||||
|
|
@ -284,19 +274,10 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity {
|
|||
private void setColors(int color) {
|
||||
paletteColorPrimary = color;
|
||||
observableScrollViewCallbacks.onScrollChanged(observableScrollView.getCurrentScrollY(), false, false);
|
||||
if (shouldColorNavigationBar())
|
||||
setNavigationBarColor(paletteColorPrimary);
|
||||
setStatusBarColor(paletteColorPrimary);
|
||||
header.setBackgroundColor(paletteColorPrimary);
|
||||
boolean darkContent = ColorUtil.useDarkTextColorOnBackground(paletteColorPrimary);
|
||||
ViewUtil.setToolbarContentDark(AbsTagEditorActivity.this, toolbar, darkContent);
|
||||
setUseDarkStatusBarIcons(darkContent);
|
||||
notifyTaskColorChange(paletteColorPrimary);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean overridesTaskColor() {
|
||||
return true;
|
||||
setStatusbarColor(paletteColorPrimary);
|
||||
setNavigationbarColor(paletteColorPrimary);
|
||||
setTaskDescriptionColor(paletteColorPrimary);
|
||||
}
|
||||
|
||||
protected void writeValuesToFiles(@NonNull final Map<FieldKey, String> fieldKeyValueMap) {
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ import android.view.View;
|
|||
import android.view.ViewGroup;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.afollestad.materialdialogs.internal.ThemeSingleton;
|
||||
import com.kabouzeid.appthemehelper.ThemeStore;
|
||||
import com.kabouzeid.gramophone.R;
|
||||
import com.kabouzeid.gramophone.interfaces.MusicServiceEventListener;
|
||||
import com.kabouzeid.gramophone.util.ColorUtil;
|
||||
|
|
@ -61,7 +61,7 @@ public abstract class AbsMainActivityRecyclerViewFragment<A extends RecyclerView
|
|||
|
||||
private void setUpRecyclerView() {
|
||||
if (recyclerView instanceof FastScrollRecyclerView) {
|
||||
int accentColor = ThemeSingleton.get().positiveColor.getDefaultColor();
|
||||
int accentColor = ThemeStore.accentColor(getActivity());
|
||||
((FastScrollRecyclerView) recyclerView).setPopupBgColor(accentColor);
|
||||
((FastScrollRecyclerView) recyclerView).setPopupTextColor(ColorUtil.getPrimaryTextColorForBackground(getActivity(), accentColor));
|
||||
((FastScrollRecyclerView) recyclerView).setThumbColor(accentColor);
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package com.kabouzeid.gramophone.ui.fragments.player;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.res.ColorStateList;
|
||||
import android.graphics.PorterDuff;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.Nullable;
|
||||
|
|
@ -13,7 +14,7 @@ import android.view.ViewGroup;
|
|||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.afollestad.materialdialogs.internal.ThemeSingleton;
|
||||
import com.kabouzeid.appthemehelper.ThemeStore;
|
||||
import com.kabouzeid.gramophone.R;
|
||||
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
||||
import com.kabouzeid.gramophone.helper.MusicProgressViewUpdateHelper;
|
||||
|
|
@ -99,7 +100,7 @@ public class MiniPlayerFragment extends Fragment implements MusicServiceEventLis
|
|||
ColorUtil.resolveColor(activity, android.R.attr.textColorSecondary)));
|
||||
setUpPlayPauseButton();
|
||||
|
||||
progressBar.setProgressTintList(ThemeSingleton.get().positiveColor);
|
||||
progressBar.setProgressTintList(ColorStateList.valueOf(ThemeStore.accentColor(activity)));
|
||||
}
|
||||
|
||||
public void setMiniPlayerColor(int color) {
|
||||
|
|
|
|||
|
|
@ -2,10 +2,12 @@ package com.kabouzeid.gramophone.ui.fragments.player;
|
|||
|
||||
import android.animation.Animator;
|
||||
import android.animation.AnimatorSet;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.ColorInt;
|
||||
import android.support.v4.content.ContextCompat;
|
||||
import android.support.v7.app.AppCompatActivity;
|
||||
import android.support.v7.widget.CardView;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
|
|
@ -19,11 +21,13 @@ import android.view.ViewTreeObserver;
|
|||
import android.widget.ImageView;
|
||||
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.RefactoredDefaultItemAnimator;
|
||||
import com.h6ah4i.android.widget.advrecyclerview.draggable.RecyclerViewDragDropManager;
|
||||
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.adapter.base.MediaEntryViewHolder;
|
||||
import com.kabouzeid.gramophone.adapter.song.PlayingQueueAdapter;
|
||||
|
|
@ -225,7 +229,9 @@ public class PlayerFragment extends AbsPlayerFragment implements PlayerAlbumCove
|
|||
|
||||
private void updateIsFavorite() {
|
||||
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)
|
||||
.setIcon(favoriteIcon)
|
||||
.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);
|
||||
|
||||
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) {
|
||||
animatorSet.play(subHeaderAnimator);
|
||||
}
|
||||
|
|
@ -358,7 +364,7 @@ public class PlayerFragment extends AbsPlayerFragment implements PlayerAlbumCove
|
|||
|
||||
@Override
|
||||
public void animateColorChange(PlayerFragment fragment, int newColor) {
|
||||
if (ThemeSingleton.get().darkTheme) {
|
||||
if (ATHUtil.isWindowBackgroundDark(fragment.getActivity())) {
|
||||
fragment.playerQueueSubHeader.setTextColor(ColorUtil.getSecondaryTextColor(fragment.getActivity(), false));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,42 +3,19 @@ package com.kabouzeid.gramophone.util;
|
|||
import android.animation.Animator;
|
||||
import android.animation.ArgbEvaluator;
|
||||
import android.animation.ObjectAnimator;
|
||||
import android.content.Context;
|
||||
import android.graphics.PorterDuff;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.os.Build;
|
||||
import android.support.annotation.ColorInt;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v4.view.ViewCompat;
|
||||
import android.support.v7.view.menu.ListMenuItemView;
|
||||
import android.support.v7.view.menu.MenuPopupHelper;
|
||||
import android.support.v7.widget.ActionMenuView;
|
||||
import android.support.v7.widget.Toolbar;
|
||||
import android.util.Log;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.view.ViewTreeObserver;
|
||||
import android.view.animation.PathInterpolator;
|
||||
import android.widget.CheckBox;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.ListView;
|
||||
import android.widget.RadioButton;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.afollestad.materialdialogs.internal.MDTintHelper;
|
||||
import com.afollestad.materialdialogs.internal.ThemeSingleton;
|
||||
import com.kabouzeid.gramophone.R;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.ArrayList;
|
||||
|
||||
/**
|
||||
* @author Karim Abou Zeid (kabouzeid)
|
||||
*/
|
||||
public class ViewUtil {
|
||||
|
||||
public final static int PHONOGRAPH_ANIM_TIME = 1000;
|
||||
|
||||
public static Animator createBackgroundColorTransition(final View v, final int startColor, final int endColor) {
|
||||
return createColorAnimator(v, "backgroundColor", startColor, endColor);
|
||||
}
|
||||
|
|
@ -47,8 +24,6 @@ public class ViewUtil {
|
|||
return createColorAnimator(v, "textColor", startColor, endColor);
|
||||
}
|
||||
|
||||
public final static int PHONOGRAPH_ANIM_TIME = 1000;
|
||||
|
||||
private static Animator createColorAnimator(Object target, String propertyName, int startColor, int endColor) {
|
||||
ObjectAnimator animator;
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||
|
|
@ -65,149 +40,6 @@ public class ViewUtil {
|
|||
return animator;
|
||||
}
|
||||
|
||||
/**
|
||||
* Should be called in {@link android.app.Activity#onPrepareOptionsMenu(Menu)} and {@link android.app.Activity#onOptionsItemSelected(MenuItem)}
|
||||
*
|
||||
* @param toolbar the toolbar to apply the tint on
|
||||
*/
|
||||
public static void invalidateToolbarPopupMenuTint(@Nullable final Toolbar toolbar) {
|
||||
if (toolbar == null) return;
|
||||
toolbar.post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
Field f1 = Toolbar.class.getDeclaredField("mMenuView");
|
||||
f1.setAccessible(true);
|
||||
ActionMenuView actionMenuView = (ActionMenuView) f1.get(toolbar);
|
||||
|
||||
Field f2 = ActionMenuView.class.getDeclaredField("mPresenter");
|
||||
f2.setAccessible(true);
|
||||
Object presenter = f2.get(actionMenuView); // ActionMenuPresenter is not a public class, so we use Object here
|
||||
|
||||
Field f3 = presenter.getClass().getDeclaredField("mOverflowPopup");
|
||||
f3.setAccessible(true);
|
||||
MenuPopupHelper overflowMenuPopupHelper = (MenuPopupHelper) f3.get(presenter);
|
||||
ViewUtil.setTintForMenuPopupHelper(overflowMenuPopupHelper);
|
||||
|
||||
Field f4 = presenter.getClass().getDeclaredField("mActionButtonPopup");
|
||||
f4.setAccessible(true);
|
||||
MenuPopupHelper subMenuPopupHelper = (MenuPopupHelper) f4.get(presenter);
|
||||
ViewUtil.setTintForMenuPopupHelper(subMenuPopupHelper);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public static void setTintForMenuPopupHelper(@Nullable MenuPopupHelper menuPopupHelper) {
|
||||
if (menuPopupHelper == null) return;
|
||||
final ListView listView = menuPopupHelper.getPopup().getListView();
|
||||
listView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
|
||||
@Override
|
||||
public void onGlobalLayout() {
|
||||
try {
|
||||
Field checkboxField = ListMenuItemView.class.getDeclaredField("mCheckBox");
|
||||
checkboxField.setAccessible(true);
|
||||
Field radioButtonField = ListMenuItemView.class.getDeclaredField("mRadioButton");
|
||||
radioButtonField.setAccessible(true);
|
||||
|
||||
for (int i = 0; i < listView.getChildCount(); i++) {
|
||||
View v = listView.getChildAt(i);
|
||||
if (!(v instanceof ListMenuItemView)) continue;
|
||||
ListMenuItemView iv = (ListMenuItemView) v;
|
||||
|
||||
CheckBox check = (CheckBox) checkboxField.get(iv);
|
||||
if (check != null) {
|
||||
MDTintHelper.setTint(check, ThemeSingleton.get().positiveColor.getDefaultColor());
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||
check.setBackground(null);
|
||||
}
|
||||
}
|
||||
|
||||
RadioButton radioButton = (RadioButton) radioButtonField.get(iv);
|
||||
if (radioButton != null) {
|
||||
MDTintHelper.setTint(radioButton, ThemeSingleton.get().positiveColor.getDefaultColor());
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||
radioButton.setBackground(null);
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (Throwable e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
|
||||
listView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
|
||||
} else {
|
||||
//noinspection deprecation
|
||||
listView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Call this in {@link android.app.Activity#onCreateOptionsMenu(Menu)} and everywhere where the toolbar color is changed.
|
||||
*/
|
||||
public static void setToolbarContentColorForBackground(@NonNull Context context, @Nullable Toolbar toolbar, @ColorInt final int backgroundColor) {
|
||||
ViewUtil.setToolbarContentDark(context, toolbar, ColorUtil.useDarkTextColorOnBackground(backgroundColor));
|
||||
}
|
||||
|
||||
public static void setToolbarContentDark(@NonNull Context context, @Nullable Toolbar toolbar, boolean dark) {
|
||||
if (toolbar == null) return;
|
||||
|
||||
toolbar.setTitleTextColor(ColorUtil.getPrimaryTextColor(context, dark));
|
||||
toolbar.setSubtitleTextColor(ColorUtil.getSecondaryTextColor(context, dark));
|
||||
|
||||
setToolbarIconColor(context, toolbar, getToolbarIconColor(context, dark));
|
||||
}
|
||||
|
||||
@ColorInt
|
||||
public static int getToolbarIconColor(Context context, boolean dark) {
|
||||
if (dark) {
|
||||
return ColorUtil.getSecondaryTextColor(context, true);
|
||||
} else {
|
||||
return ColorUtil.getPrimaryTextColor(context, false);
|
||||
}
|
||||
}
|
||||
|
||||
private static void setToolbarIconColor(@NonNull final Context context, @Nullable final Toolbar toolbar, @ColorInt final int color) {
|
||||
if (toolbar == null) return;
|
||||
toolbar.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
|
||||
@Override
|
||||
public void onGlobalLayout() {
|
||||
toolbar.getViewTreeObserver().removeOnGlobalLayoutListener(this);
|
||||
|
||||
final ArrayList<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) {
|
||||
final int tx = (int) (ViewCompat.getTranslationX(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_height="@dimen/tab_height"
|
||||
app:tabContentStart="72dp"
|
||||
app:tabIndicatorColor="@color/primary_text_default_material_dark"
|
||||
app:tabMode="scrollable"
|
||||
app:tabSelectedTextColor="@color/primary_text_default_material_dark"
|
||||
app:tabTextColor="@color/secondary_text_default_material_dark" />
|
||||
app:tabMode="scrollable" />
|
||||
|
||||
</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 name="pref_general_theme_list_values">
|
||||
<item>0</item>
|
||||
<item>1</item>
|
||||
<item>2</item>
|
||||
<item>light</item>
|
||||
<item>dark</item>
|
||||
<item>black</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="pref_auto_download_images_titles">
|
||||
|
|
|
|||
|
|
@ -58,7 +58,7 @@
|
|||
</style>
|
||||
|
||||
<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="default_bar_color">@color/grey_800</item>
|
||||
<item name="cardBackgroundColor">@color/grey_900</item>
|
||||
|
|
|
|||
|
|
@ -1,21 +1,18 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<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:key="gapless_playback"
|
||||
android:layout="@layout/preference_custom"
|
||||
android:summary="@string/pref_summary_gapless_playback"
|
||||
android:title="@string/pref_title_gapless_playback"
|
||||
android:widgetLayout="@layout/preference_dynamic_checkbox" />
|
||||
android:title="@string/pref_title_gapless_playback" />
|
||||
|
||||
<Preference
|
||||
<com.kabouzeid.appthemehelper.common.prefs.ATEPreference
|
||||
android:key="equalizer"
|
||||
android:layout="@layout/preference_custom"
|
||||
android:title="@string/equalizer" />
|
||||
|
||||
</com.kabouzeid.gramophone.prefs.DynamicPreferenceCategory>
|
||||
</com.kabouzeid.appthemehelper.common.prefs.ATEPreferenceCategory>
|
||||
|
||||
</PreferenceScreen>
|
||||
|
|
@ -1,43 +1,32 @@
|
|||
<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
|
||||
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
|
||||
<com.kabouzeid.appthemehelper.common.prefs.ATEColorPreference
|
||||
android:key="primary_color"
|
||||
android:persistent="false"
|
||||
android:summary="@string/primary_color_desc"
|
||||
android:title="@string/primary_color" />
|
||||
|
||||
<com.kabouzeid.gramophone.prefs.ColorChooserPreference
|
||||
<com.kabouzeid.appthemehelper.common.prefs.ATEColorPreference
|
||||
android:key="accent_color"
|
||||
android:persistent="false"
|
||||
android:summary="@string/accent_color_desc"
|
||||
android:title="@string/accent_color" />
|
||||
|
||||
<CheckBoxPreference
|
||||
<com.kabouzeid.appthemehelper.common.prefs.ATESwitchPreference
|
||||
android:defaultValue="true"
|
||||
android:key="colored_notification"
|
||||
android:layout="@layout/preference_custom"
|
||||
android:summary="@string/pref_summary_colored_notification"
|
||||
android:title="@string/pref_title_colored_notification"
|
||||
android:widgetLayout="@layout/preference_dynamic_checkbox" />
|
||||
android:title="@string/pref_title_colored_notification" />
|
||||
|
||||
<CheckBoxPreference
|
||||
<com.kabouzeid.appthemehelper.common.prefs.ATESwitchPreference
|
||||
android:defaultValue="false"
|
||||
android:key="should_color_navigation_bar"
|
||||
android:layout="@layout/preference_custom"
|
||||
android:persistent="false"
|
||||
android:summary="@string/pref_summary_colored_navigation_bar"
|
||||
android:title="@string/pref_title_navigation_bar"
|
||||
android:widgetLayout="@layout/preference_dynamic_checkbox" />
|
||||
android:title="@string/pref_title_navigation_bar" />
|
||||
|
||||
</com.kabouzeid.gramophone.prefs.DynamicPreferenceCategory>
|
||||
</com.kabouzeid.appthemehelper.common.prefs.ATEPreferenceCategory>
|
||||
|
||||
</PreferenceScreen>
|
||||
|
|
|
|||
|
|
@ -1,17 +1,25 @@
|
|||
<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:entries="@array/pref_start_page_list_titles"
|
||||
android:entryValues="@array/pref_start_page_list_values"
|
||||
android:key="default_start_page"
|
||||
android:layout="@layout/preference_custom"
|
||||
android:negativeButtonText="@null"
|
||||
android:positiveButtonText="@null"
|
||||
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>
|
||||
|
|
|
|||
|
|
@ -1,26 +1,23 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<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:key="ignore_media_store_artwork"
|
||||
android:layout="@layout/preference_custom"
|
||||
android:summary="@string/pref_summary_ignore_media_store_artwork"
|
||||
android:title="@string/pref_title_ignore_media_store_artwork"
|
||||
android:widgetLayout="@layout/preference_dynamic_checkbox" />
|
||||
android:title="@string/pref_title_ignore_media_store_artwork" />
|
||||
|
||||
<com.afollestad.materialdialogs.prefs.MaterialListPreference
|
||||
<com.kabouzeid.appthemehelper.common.prefs.ATEListPreference
|
||||
android:defaultValue="only_wifi"
|
||||
android:entries="@array/pref_auto_download_images_titles"
|
||||
android:entryValues="@array/pref_auto_download_images_values"
|
||||
android:key="auto_download_images_policy"
|
||||
android:layout="@layout/preference_custom"
|
||||
android:negativeButtonText="@null"
|
||||
android:positiveButtonText="@null"
|
||||
android:title="@string/pref_title_auto_download_artist_images" />
|
||||
|
||||
</com.kabouzeid.gramophone.prefs.DynamicPreferenceCategory>
|
||||
</com.kabouzeid.appthemehelper.common.prefs.ATEPreferenceCategory>
|
||||
|
||||
</PreferenceScreen>
|
||||
|
|
@ -1,24 +1,20 @@
|
|||
<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:key="album_art_on_lockscreen"
|
||||
android:layout="@layout/preference_custom"
|
||||
android:summary="@string/pref_summary_album_art_on_lockscreen"
|
||||
android:title="@string/pref_title_album_art_on_lockscreen"
|
||||
android:widgetLayout="@layout/preference_dynamic_checkbox" />
|
||||
android:title="@string/pref_title_album_art_on_lockscreen" />
|
||||
|
||||
<CheckBoxPreference
|
||||
<com.kabouzeid.appthemehelper.common.prefs.ATESwitchPreference
|
||||
android:defaultValue="false"
|
||||
android:dependency="album_art_on_lockscreen"
|
||||
android:key="blurred_album_art"
|
||||
android:layout="@layout/preference_custom"
|
||||
android:summary="@string/pref_summary_blurred_album_art"
|
||||
android:title="@string/pref_title_blurred_album_art"
|
||||
android:widgetLayout="@layout/preference_dynamic_checkbox" />
|
||||
android:title="@string/pref_title_blurred_album_art" />
|
||||
|
||||
</com.kabouzeid.gramophone.prefs.DynamicPreferenceCategory>
|
||||
</com.kabouzeid.appthemehelper.common.prefs.ATEPreferenceCategory>
|
||||
|
||||
</PreferenceScreen>
|
||||
|
|
|
|||
|
|
@ -1,17 +1,16 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<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:key="now_playing_layout"
|
||||
android:layout="@layout/preference_custom"
|
||||
android:negativeButtonText="@null"
|
||||
android:positiveButtonText="@null"
|
||||
android:summary="Coming soon"
|
||||
android:title="@string/pref_title_now_playing_layout" />
|
||||
|
||||
</com.kabouzeid.gramophone.prefs.DynamicPreferenceCategory>
|
||||
</com.kabouzeid.appthemehelper.common.prefs.ATEPreferenceCategory>
|
||||
|
||||
</PreferenceScreen>
|
||||
Loading…
Add table
Add a link
Reference in a new issue