From 31926d7983ec5aac25d7ce6ebce18d49064a037f Mon Sep 17 00:00:00 2001 From: Karim Abou Zeid Date: Sat, 30 May 2015 22:51:17 +0200 Subject: [PATCH] Makes full use of the Android Support Design Library. A lot of small things fixed or improved. Added dozens of new colors. --- app/build.gradle | 3 +- .../gramophone/adapter/AlbumAdapter.java | 8 +- .../adapter/NavigationDrawerItemAdapter.java | 119 ------- .../dialogs/ColorChooserDialog.java | 35 +-- .../model/UIPreferenceChangedEvent.java | 1 - .../prefs/ColorChooserPreference.java | 5 +- .../ui/activities/AlbumDetailActivity.java | 12 +- .../ui/activities/ArtistDetailActivity.java | 11 +- .../ui/activities/MainActivity.java | 36 +-- .../activities/MusicControllerActivity.java | 13 +- .../ui/activities/PlaylistDetailActivity.java | 1 + .../ui/activities/SettingsActivity.java | 8 - .../ui/activities/base/AbsFabActivity.java | 3 +- .../ui/activities/base/ThemeBaseActivity.java | 42 ++- .../tageditor/AbsTagEditorActivity.java | 5 +- .../fragments/NavigationDrawerFragment.java | 182 ----------- .../AbsMainActivityFragment.java | 5 +- .../gramophone/util/PreferenceUtils.java | 8 +- .../com/kabouzeid/gramophone/util/Util.java | 34 +- .../views/{CircleView.java => ColorView.java} | 19 +- ...ckbox_marked_circle_outline_white_24dp.png | Bin 0 -> 645 bytes ...ckbox_marked_circle_outline_white_24dp.png | Bin 0 -> 439 bytes ...ckbox_marked_circle_outline_white_24dp.png | Bin 0 -> 785 bytes ...ckbox_marked_circle_outline_white_24dp.png | Bin 0 -> 1182 bytes ...ckbox_marked_circle_outline_white_24dp.png | Bin 0 -> 1651 bytes app/src/main/res/drawable/slider_thumb.xml | 2 +- .../main/res/layout/activity_album_detail.xml | 7 +- .../res/layout/activity_artist_detail.xml | 7 +- app/src/main/res/layout/activity_main.xml | 54 ++-- .../res/layout/activity_music_controller.xml | 9 +- .../res/layout/activity_playlist_detail.xml | 4 +- app/src/main/res/layout/activity_search.xml | 3 +- .../main/res/layout/dialog_color_chooser.xml | 2 +- .../res/layout/griditem_color_chooser.xml | 8 +- app/src/main/res/layout/item_grid_album.xml | 2 +- .../res/layout/item_navigation_drawer.xml | 53 ---- app/src/main/res/layout/preference_custom.xml | 2 +- app/src/main/res/layout/status_bar.xml | 7 + app/src/main/res/values-v21/styles.xml | 2 - app/src/main/res/values/arrays.xml | 294 +++++++++++++++--- app/src/main/res/values/attrs.xml | 8 +- app/src/main/res/values/materialcolors.xml | 4 +- app/src/main/res/values/strings.xml | 2 - app/src/main/res/values/styles_parents.xml | 18 +- app/src/main/res/xml/pref_ui.xml | 8 - 45 files changed, 447 insertions(+), 599 deletions(-) delete mode 100644 app/src/main/java/com/kabouzeid/gramophone/adapter/NavigationDrawerItemAdapter.java delete mode 100644 app/src/main/java/com/kabouzeid/gramophone/ui/fragments/NavigationDrawerFragment.java rename app/src/main/java/com/kabouzeid/gramophone/views/{CircleView.java => ColorView.java} (88%) create mode 100644 app/src/main/res/drawable-hdpi/ic_checkbox_marked_circle_outline_white_24dp.png create mode 100644 app/src/main/res/drawable-mdpi/ic_checkbox_marked_circle_outline_white_24dp.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_checkbox_marked_circle_outline_white_24dp.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_checkbox_marked_circle_outline_white_24dp.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_checkbox_marked_circle_outline_white_24dp.png delete mode 100644 app/src/main/res/layout/item_navigation_drawer.xml create mode 100644 app/src/main/res/layout/status_bar.xml diff --git a/app/build.gradle b/app/build.gradle index 8d7823d6..b597e35a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -28,7 +28,7 @@ android { minSdkVersion 16 targetSdkVersion 22 versionCode 29 - versionName "0.9.13b DEV" + versionName "0.9.13b DEV-2" } compileOptions { @@ -75,6 +75,5 @@ dependencies { compile 'com.afollestad:material-dialogs:0.7.4.2' compile 'com.afollestad:material-cab:0.1.2' - compile 'com.jpardogo.materialtabstrip:library:1.0.9' compile 'com.readystatesoftware.systembartint:systembartint:1.0.3' } diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/AlbumAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/AlbumAdapter.java index 346234d4..cd9f06b0 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/adapter/AlbumAdapter.java +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/AlbumAdapter.java @@ -203,8 +203,8 @@ public class AlbumAdapter extends AbsMultiSelectAdapter implements View.OnClickListener { - - // per the Material design guidelines - @SuppressWarnings("FieldCanBeLocal") - private final int ALPHA_ACTIVATED = 255; - @SuppressWarnings("FieldCanBeLocal") - private final int ALPHA_ICON = 138; - @SuppressWarnings("FieldCanBeLocal") - private final int ALPHA_TEXT = 222; - - @Override - public void onClick(View v) { - int index = (Integer) v.getTag(); - if (mCallback != null) - mCallback.onItemSelected(index); - } - - public static class ShortcutViewHolder extends RecyclerView.ViewHolder { - - public ShortcutViewHolder(View itemView) { - super(itemView); - divider = itemView.findViewById(R.id.divider); - container = itemView.findViewById(R.id.container); - title = (TextView) itemView.findViewById(R.id.title); - icon = (ImageView) itemView.findViewById(R.id.icon); - } - - final TextView title; - final ImageView icon; - final View divider; - final View container; - } - - private int currentChecked = -1; - private int navIconColor; - private final ArrayList mItems; - private final Callback mCallback; - - public interface Callback { - void onItemSelected(int index); - } - - public NavigationDrawerItemAdapter(Context context, ArrayList objects, Callback callback) { - navIconColor = DialogUtils.resolveColor(context, R.attr.nav_drawer_icon_color); - if (DialogUtils.isColorDark(navIconColor)) - navIconColor = ColorChooserDialog.shiftColorUp(navIconColor); - mItems = objects; - mCallback = callback; - } - - public void setChecked(int position) { -// int oldPosition = currentChecked; - currentChecked = position; - notifyDataSetChanged(); - } - - @Override - public ShortcutViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_navigation_drawer, parent, false); - return new ShortcutViewHolder(view); - } - - @Override - public void onBindViewHolder(ShortcutViewHolder holder, int position) { - NavigationDrawerItem item = mItems.get(position); - - holder.title.setText(item.title); - holder.icon.setImageResource(item.imageRes); - holder.divider.setVisibility(position == NavigationDrawerFragment.SETTINGS_INDEX ? - View.VISIBLE : View.GONE); - - final boolean selected = position == currentChecked; - final int iconColor = selected ? ThemeSingleton.get().positiveColor : navIconColor; - final int textColor = selected ? ThemeSingleton.get().positiveColor : navIconColor; - - holder.title.setTextColor(textColor); - holder.title.setAlpha(selected ? ALPHA_ACTIVATED : ALPHA_TEXT); - holder.icon.setColorFilter(iconColor, PorterDuff.Mode.SRC_ATOP); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { - holder.icon.setImageAlpha(selected ? ALPHA_ACTIVATED : ALPHA_ICON); - } else { - // noinspection deprecation - holder.icon.setAlpha(selected ? ALPHA_ACTIVATED : ALPHA_ICON); - } - - holder.container.setActivated(selected); - holder.container.setTag(position); - holder.container.setOnClickListener(this); - } - - @Override - public int getItemCount() { - return mItems.size(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/kabouzeid/gramophone/dialogs/ColorChooserDialog.java b/app/src/main/java/com/kabouzeid/gramophone/dialogs/ColorChooserDialog.java index 7238f0fa..8928c24b 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/dialogs/ColorChooserDialog.java +++ b/app/src/main/java/com/kabouzeid/gramophone/dialogs/ColorChooserDialog.java @@ -21,9 +21,8 @@ import android.widget.BaseAdapter; import android.widget.GridView; import com.afollestad.materialdialogs.MaterialDialog; -import com.afollestad.materialdialogs.ThemeSingleton; import com.kabouzeid.gramophone.R; -import com.kabouzeid.gramophone.views.CircleView; +import com.kabouzeid.gramophone.views.ColorView; /** * @author Aidan Follestad (afollestad) @@ -95,7 +94,10 @@ public class ColorChooserDialog extends DialogFragment implements View.OnClickLi mColors[i] = ta.getColor(i, 0); ta.recycle(); mGrid = (GridView) dialog.getCustomView(); - invalidateGrid(); + if (mGrid != null) { + mGrid.setNumColumns(primary ? 7 : 4); + invalidateGrid(); + } return dialog; } @@ -130,13 +132,12 @@ public class ColorChooserDialog extends DialogFragment implements View.OnClickLi public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) convertView = LayoutInflater.from(getActivity()).inflate(R.layout.griditem_color_chooser, parent, false); - final boolean dark = ThemeSingleton.get().darkTheme; - CircleView child = (CircleView) convertView; - child.setActivated(getArguments().getInt("preselect") == mColors[position]); - child.setBackgroundColor(mColors[position]); - child.setBorderColor(dark ? Color.WHITE : Color.BLACK); - child.setTag(position); - child.setOnClickListener(this); + + final ColorView colorView = (ColorView) convertView; + colorView.setActivated(getArguments().getInt("preselect") == mColors[position]); + colorView.setBackgroundColor(mColors[position]); + colorView.setTag(position); + colorView.setOnClickListener(this); Drawable selector = createSelector(mColors[position]); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { @@ -147,9 +148,9 @@ public class ColorChooserDialog extends DialogFragment implements View.OnClickLi shiftColorDown(mColors[position]) }; ColorStateList rippleColors = new ColorStateList(states, colors); - child.setForeground(new RippleDrawable(rippleColors, selector, null)); + colorView.setForeground(new RippleDrawable(rippleColors, selector, null)); } else { - child.setForeground(selector); + colorView.setForeground(selector); } return convertView; } @@ -162,20 +163,14 @@ public class ColorChooserDialog extends DialogFragment implements View.OnClickLi } } - public static int shiftColorDown(int color) { + @SuppressWarnings("ResourceType") + private static int shiftColorDown(int color) { float[] hsv = new float[3]; Color.colorToHSV(color, hsv); hsv[2] *= 0.9f; // value component return Color.HSVToColor(hsv); } - public static int shiftColorUp(int color) { - float[] hsv = new float[3]; - Color.colorToHSV(color, hsv); - hsv[2] *= 1.1f; // value component - return Color.HSVToColor(hsv); - } - private static int translucentColor(int color) { final float factor = 0.7f; int alpha = Math.round(Color.alpha(color) * factor); diff --git a/app/src/main/java/com/kabouzeid/gramophone/model/UIPreferenceChangedEvent.java b/app/src/main/java/com/kabouzeid/gramophone/model/UIPreferenceChangedEvent.java index 202306c1..b1fea376 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/model/UIPreferenceChangedEvent.java +++ b/app/src/main/java/com/kabouzeid/gramophone/model/UIPreferenceChangedEvent.java @@ -13,7 +13,6 @@ public class UIPreferenceChangedEvent { public static final int COLORED_NAVIGATION_BAR_CURRENT_PLAYING_CHANGED = 6; public static final int COLORED_NAVIGATION_BAR_CHANGED = 10; public static final int COLORED_NAVIGATION_BAR_OTHER_SCREENS_CHANGED = 7; - public static final int TOOLBAR_TRANSPARENT_CHANGED = 8; private final int action; private final Object value; diff --git a/app/src/main/java/com/kabouzeid/gramophone/prefs/ColorChooserPreference.java b/app/src/main/java/com/kabouzeid/gramophone/prefs/ColorChooserPreference.java index 60b1d7f2..9748b77d 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/prefs/ColorChooserPreference.java +++ b/app/src/main/java/com/kabouzeid/gramophone/prefs/ColorChooserPreference.java @@ -7,7 +7,7 @@ import android.util.AttributeSet; import android.view.View; import com.kabouzeid.gramophone.R; -import com.kabouzeid.gramophone.views.CircleView; +import com.kabouzeid.gramophone.views.ColorView; public class ColorChooserPreference extends Preference { @@ -43,11 +43,10 @@ public class ColorChooserPreference extends Preference { private void invalidateColor() { if (mView != null) { - CircleView circle = (CircleView) mView.findViewById(R.id.circle); + ColorView circle = (ColorView) mView.findViewById(R.id.circle); if (this.color != 0) { circle.setVisibility(View.VISIBLE); circle.setBackgroundColor(color); - circle.setBorderColor(border); } else { circle.setVisibility(View.GONE); } diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AlbumDetailActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AlbumDetailActivity.java index 53cd573a..b173e8d4 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AlbumDetailActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AlbumDetailActivity.java @@ -69,7 +69,6 @@ public class AlbumDetailActivity extends AbsFabActivity implements PaletteColorH private ObservableRecyclerView recyclerView; private AlbumSongAdapter adapter; private ArrayList songs; - private View statusBar; private ImageView albumArtImageView; private ImageView albumArtBackground; private View songsBackgroundView; @@ -99,7 +98,7 @@ public class AlbumDetailActivity extends AbsFabActivity implements PaletteColorH // Change alpha of overlay toolbarAlpha = Math.max(0, Math.min(1, (float) scrollY / flexibleRange)); ViewUtil.setBackgroundAlpha(toolbar, toolbarAlpha, toolbarColor); - ViewUtil.setBackgroundAlpha(statusBar, cab != null && cab.isActive() ? 1 : toolbarAlpha, toolbarColor); + setStatusBarColor(Util.getColorWithAlpha(cab != null && cab.isActive() ? 1 : toolbarAlpha, toolbarColor)); // Translate name text int maxTitleTranslationY = albumArtViewHeight; @@ -112,6 +111,7 @@ public class AlbumDetailActivity extends AbsFabActivity implements PaletteColorH @Override protected void onCreate(Bundle savedInstanceState) { + setStatusBarTransparent(); super.onCreate(savedInstanceState); setContentView(R.layout.activity_album_detail); @@ -174,7 +174,7 @@ public class AlbumDetailActivity extends AbsFabActivity implements PaletteColorH recyclerView = (ObservableRecyclerView) findViewById(R.id.list); albumTitleView = (TextView) findViewById(R.id.album_title); songsBackgroundView = findViewById(R.id.list_background); - statusBar = findViewById(R.id.status_bar); +// statusBar = findViewById(R.id.status_bar); } private void setUpObservableListViewParams() { @@ -237,7 +237,7 @@ public class AlbumDetailActivity extends AbsFabActivity implements PaletteColorH if (vibrantSwatch != null) { toolbarColor = vibrantSwatch.getRgb(); albumTitleView.setBackgroundColor(toolbarColor); - albumTitleView.setTextColor(vibrantSwatch.getTitleTextColor()); + albumTitleView.setTextColor(Util.getOpaqueColor(vibrantSwatch.getTitleTextColor())); if (Util.isAtLeastLollipop() && PreferenceUtils.getInstance(AlbumDetailActivity.this).coloredNavigationBarAlbumEnabled()) setNavigationBarColor(toolbarColor); notifyTaskColorChange(toolbarColor); @@ -411,7 +411,7 @@ public class AlbumDetailActivity extends AbsFabActivity implements PaletteColorH .start(new MaterialCab.Callback() { @Override public boolean onCabCreated(MaterialCab materialCab, Menu menu) { - ViewUtil.setBackgroundAlpha(statusBar, 1, toolbarColor); + setStatusBarColor(Util.getOpaqueColor(toolbarColor)); return callback.onCabCreated(materialCab, menu); } @@ -422,7 +422,7 @@ public class AlbumDetailActivity extends AbsFabActivity implements PaletteColorH @Override public boolean onCabFinished(MaterialCab materialCab) { - ViewUtil.setBackgroundAlpha(statusBar, toolbarAlpha, toolbarColor); + setStatusBarColor(Util.getColorWithAlpha(toolbarAlpha, toolbarColor)); return callback.onCabFinished(materialCab); } }); diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/ArtistDetailActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/ArtistDetailActivity.java index c0540d53..8a159012 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/ArtistDetailActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/ArtistDetailActivity.java @@ -74,7 +74,6 @@ public class ArtistDetailActivity extends AbsFabActivity implements PaletteColor private Artist artist; private ObservableListView songListView; - private View statusBar; private ImageView artistImage; private ImageView artistImageBackground; private View songsBackgroundView; @@ -112,7 +111,7 @@ public class ArtistDetailActivity extends AbsFabActivity implements PaletteColor // Change alpha of overlay toolbarAlpha = Math.max(0, Math.min(1, (float) scrollY / flexibleRange)); ViewUtil.setBackgroundAlpha(toolbar, toolbarAlpha, toolbarColor); - ViewUtil.setBackgroundAlpha(statusBar, cab != null && cab.isActive() ? 1 : toolbarAlpha, toolbarColor); + setStatusBarColor(Util.getColorWithAlpha(cab != null && cab.isActive() ? 1 : toolbarAlpha, toolbarColor)); // Translate name text int maxTitleTranslationY = artistImageViewHeight; @@ -127,6 +126,7 @@ public class ArtistDetailActivity extends AbsFabActivity implements PaletteColor @Override protected void onCreate(Bundle savedInstanceState) { + setStatusBarTransparent(); super.onCreate(savedInstanceState); setContentView(R.layout.activity_artist_detail); @@ -183,7 +183,6 @@ public class ArtistDetailActivity extends AbsFabActivity implements PaletteColor songListView = (ObservableListView) findViewById(R.id.list); artistNameTv = (TextView) findViewById(R.id.artist_name); songsBackgroundView = findViewById(R.id.list_background); - statusBar = findViewById(R.id.status_bar); songListHeader = LayoutInflater.from(this).inflate(R.layout.artist_detail_header, songListView, false); albumRecyclerView = (RecyclerView) songListHeader.findViewById(R.id.recycler_view); @@ -318,7 +317,7 @@ public class ArtistDetailActivity extends AbsFabActivity implements PaletteColor if (vibrantSwatch != null) { toolbarColor = vibrantSwatch.getRgb(); artistNameTv.setBackgroundColor(vibrantSwatch.getRgb()); - artistNameTv.setTextColor(vibrantSwatch.getTitleTextColor()); + artistNameTv.setTextColor(Util.getOpaqueColor(vibrantSwatch.getTitleTextColor())); if (Util.isAtLeastLollipop() && PreferenceUtils.getInstance(ArtistDetailActivity.this).coloredNavigationBarArtistEnabled()) setNavigationBarColor(vibrantSwatch.getRgb()); notifyTaskColorChange(toolbarColor); @@ -497,7 +496,7 @@ public class ArtistDetailActivity extends AbsFabActivity implements PaletteColor .start(new MaterialCab.Callback() { @Override public boolean onCabCreated(MaterialCab materialCab, Menu menu) { - ViewUtil.setBackgroundAlpha(statusBar, 1, toolbarColor); + setStatusBarColor(Util.getOpaqueColor(toolbarColor)); return callback.onCabCreated(materialCab, menu); } @@ -508,7 +507,7 @@ public class ArtistDetailActivity extends AbsFabActivity implements PaletteColor @Override public boolean onCabFinished(MaterialCab materialCab) { - ViewUtil.setBackgroundAlpha(statusBar, toolbarAlpha, toolbarColor); + setStatusBarColor(Util.getColorWithAlpha(toolbarAlpha, toolbarColor)); return callback.onCabFinished(materialCab); } }); diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MainActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MainActivity.java index edf8fd39..b28529ba 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MainActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MainActivity.java @@ -10,6 +10,7 @@ import android.os.Handler; import android.provider.MediaStore; import android.support.annotation.NonNull; import android.support.design.widget.NavigationView; +import android.support.design.widget.TabLayout; import android.support.v4.util.Pair; import android.support.v4.view.ViewPager; import android.support.v4.widget.DrawerLayout; @@ -30,7 +31,6 @@ import android.widget.TextView; import com.afollestad.materialcab.MaterialCab; import com.afollestad.materialdialogs.ThemeSingleton; -import com.astuetz.PagerSlidingTabStrip; import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.adapter.PagerAdapter; import com.kabouzeid.gramophone.dialogs.AboutDialog; @@ -70,7 +70,7 @@ public class MainActivity extends AbsFabActivity private Toolbar toolbar; private PagerAdapter pagerAdapter; private ViewPager viewPager; - private PagerSlidingTabStrip slidingTabLayout; + private TabLayout tabLayout; private int currentPage = -1; private MaterialCab cab; private NavigationView navigationView; @@ -105,34 +105,34 @@ public class MainActivity extends AbsFabActivity int startPosition = PreferenceUtils.getInstance(this).getDefaultStartPage(); startPosition = startPosition == -1 ? PreferenceUtils.getInstance(this).getLastStartPage() : startPosition; currentPage = startPosition; - viewPager.setCurrentItem(startPosition); navigationView.getMenu().getItem(startPosition).setChecked(true); - slidingTabLayout.setIndicatorColor(ThemeSingleton.get().positiveColor); - slidingTabLayout.setViewPager(viewPager); - - slidingTabLayout.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { + tabLayout.setupWithViewPager(viewPager); + viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override - public void onPageSelected(final int position) { + public void onPageSelected(int position) { navigationView.getMenu().getItem(position).setChecked(true); currentPage = position; } @Override public void onPageScrollStateChanged(int state) { + } }); + + viewPager.setCurrentItem(startPosition); } private void initViews() { viewPager = (ViewPager) findViewById(R.id.pager); - slidingTabLayout = (PagerSlidingTabStrip) findViewById(R.id.tabs); + tabLayout = (TabLayout) findViewById(R.id.tabs); drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); navigationView = (NavigationView) findViewById(R.id.nav_view); } @@ -140,16 +140,15 @@ public class MainActivity extends AbsFabActivity private void setUpToolBar() { setTitle(getResources().getString(R.string.app_name)); toolbar = (Toolbar) findViewById(R.id.toolbar); - setToolBarTransparent(PreferenceUtils.getInstance(this).transparentToolbar()); + setToolBarColor(); setSupportActionBar(toolbar); setUpDrawerToggle(); } - private void setToolBarTransparent(boolean transparent) { - float alpha = transparent ? 0.9f : 1f; - final int colorPrimary = PreferenceUtils.getInstance(this).getThemeColorPrimary(); - ViewUtil.setBackgroundAlpha(toolbar, alpha, colorPrimary); - ViewUtil.setBackgroundAlpha(slidingTabLayout, alpha, colorPrimary); + private void setToolBarColor() { + final int colorPrimary = getThemeColorPrimary(); + toolbar.setBackgroundColor(colorPrimary); + tabLayout.setBackgroundColor(colorPrimary); } private void setUpNavigationView() { @@ -163,7 +162,7 @@ public class MainActivity extends AbsFabActivity new int[]{ // 0, colorAccent, - Color.argb(222, 0, 0, 0) + ThemeSingleton.get().darkTheme ? Color.argb(222, 255, 255, 255) : Color.argb(222, 0, 0, 0) } )); navigationView.setItemIconTintList(new ColorStateList( @@ -175,7 +174,7 @@ public class MainActivity extends AbsFabActivity new int[]{ // 0, colorAccent, - Color.argb(138, 0, 0, 0) + ThemeSingleton.get().darkTheme ? Color.argb(138, 255, 255, 255) : Color.argb(138, 0, 0, 0) } )); navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { @@ -369,9 +368,6 @@ public class MainActivity extends AbsFabActivity public void onUIPreferenceChangedEvent(UIPreferenceChangedEvent event) { super.onUIPreferenceChangedEvent(event); switch (event.getAction()) { - case UIPreferenceChangedEvent.TOOLBAR_TRANSPARENT_CHANGED: - setToolBarTransparent((boolean) event.getValue()); - break; case UIPreferenceChangedEvent.COLORED_NAVIGATION_BAR_OTHER_SCREENS_CHANGED: if ((boolean) event.getValue()) setNavigationBarThemeColor(); else resetNavigationBarColor(); diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MusicControllerActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MusicControllerActivity.java index d1e003aa..48c12114 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MusicControllerActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MusicControllerActivity.java @@ -81,6 +81,7 @@ public class MusicControllerActivity extends AbsFabActivity { @Override protected void onCreate(Bundle savedInstanceState) { + setStatusBarTransparent(); super.onCreate(savedInstanceState); setContentView(R.layout.activity_music_controller); @@ -218,7 +219,7 @@ public class MusicControllerActivity extends AbsFabActivity { switch (MusicPlayerRemote.getShuffleMode()) { case MusicService.SHUFFLE_MODE_SHUFFLE: shuffleButton.setImageDrawable(Util.getTintedDrawable(this, R.drawable.ic_shuffle_white_48dp, - ThemeSingleton.get().positiveColor)); + getThemeColorAccent() == Color.WHITE ? Color.BLACK : getThemeColorAccent())); break; default: shuffleButton.setImageDrawable(Util.getTintedDrawable(this, R.drawable.ic_shuffle_white_48dp, @@ -245,11 +246,11 @@ public class MusicControllerActivity extends AbsFabActivity { break; case MusicService.REPEAT_MODE_ALL: repeatButton.setImageDrawable(Util.getTintedDrawable(this, R.drawable.ic_repeat_white_48dp, - ThemeSingleton.get().positiveColor)); + getThemeColorAccent() == Color.WHITE ? Color.BLACK : getThemeColorAccent())); break; default: repeatButton.setImageDrawable(Util.getTintedDrawable(this, R.drawable.ic_repeat_one_white_48dp, - ThemeSingleton.get().positiveColor)); + getThemeColorAccent() == Color.WHITE ? Color.BLACK : getThemeColorAccent())); break; } } @@ -320,7 +321,7 @@ public class MusicControllerActivity extends AbsFabActivity { if (vibrantSwatch != null) { final int swatchRgb = vibrantSwatch.getRgb(); animateColorChange(swatchRgb); - animateTextColorChange(Util.getColorWithoutAlpha(vibrantSwatch.getTitleTextColor())); + animateTextColorChange(Util.getOpaqueColor(vibrantSwatch.getTitleTextColor())); notifyTaskColorChange(swatchRgb); } else { resetColors(); @@ -333,7 +334,7 @@ public class MusicControllerActivity extends AbsFabActivity { } private void resetColors() { - final int textColor = Util.getColorWithoutAlpha(DialogUtils.resolveColor(this, R.attr.title_text_color)); + final int textColor = Util.getOpaqueColor(DialogUtils.resolveColor(this, R.attr.title_text_color)); final int defaultBarColor = DialogUtils.resolveColor(this, R.attr.default_bar_color); animateColorChange(defaultBarColor); @@ -360,7 +361,7 @@ public class MusicControllerActivity extends AbsFabActivity { else toolbar.setBackgroundColor(Color.TRANSPARENT); } - setTint(progressSlider, PreferenceUtils.getInstance(this).getThemeColorAccent()); + setTint(progressSlider, !ThemeSingleton.get().darkTheme && getThemeColorAccent() == Color.WHITE ? Color.BLACK : getThemeColorAccent()); if (opaqueToolBar) setStatusBarColor(newColor); else setStatusBarColor(Color.TRANSPARENT); diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/PlaylistDetailActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/PlaylistDetailActivity.java index d3cdbcec..81b80c1f 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/PlaylistDetailActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/PlaylistDetailActivity.java @@ -79,6 +79,7 @@ public class PlaylistDetailActivity extends AbsFabActivity implements CabHolder if (PreferenceUtils.getInstance(this).coloredNavigationBarPlaylistEnabled()) setNavigationBarThemeColor(); + setStatusBarThemeColor(); App.bus.register(this); } diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/SettingsActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/SettingsActivity.java index 879f9514..e04bd5c9 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/SettingsActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/SettingsActivity.java @@ -113,14 +113,6 @@ public class SettingsActivity extends AbsBaseActivity implements ColorChooserDia } }); - findPreference("transparent_toolbar").setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { - @Override - public boolean onPreferenceChange(Preference preference, Object o) { - App.bus.post(new UIPreferenceChangedEvent(UIPreferenceChangedEvent.TOOLBAR_TRANSPARENT_CHANGED, o)); - return true; - } - }); - findPreference("colored_album_footers").setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object o) { diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsFabActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsFabActivity.java index 464f305c..8ff515a9 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsFabActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsFabActivity.java @@ -19,6 +19,7 @@ import com.kabouzeid.gramophone.misc.SmallOnGestureListener; import com.kabouzeid.gramophone.model.MusicRemoteEvent; import com.kabouzeid.gramophone.model.Song; import com.kabouzeid.gramophone.util.NavigationUtil; +import com.kabouzeid.gramophone.util.Util; import com.kabouzeid.gramophone.views.PlayPauseDrawable; import com.squareup.otto.Subscribe; @@ -54,7 +55,7 @@ public abstract class AbsFabActivity extends AbsBaseActivity { getFab().setImageDrawable(playPauseDrawable); final int accentColor = ThemeSingleton.get().positiveColor; - getFab().setRippleColor(accentColor); + getFab().setBackgroundTintList(Util.getEmptyColorStateList(accentColor)); if (accentColor == Color.WHITE) { getFab().getDrawable().setColorFilter(Color.BLACK, PorterDuff.Mode.SRC_IN); } else { diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/ThemeBaseActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/ThemeBaseActivity.java index ad2e1f0d..a4fd4d8b 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/ThemeBaseActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/ThemeBaseActivity.java @@ -5,6 +5,7 @@ import android.graphics.BitmapFactory; import android.os.Build; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; +import android.view.View; import com.afollestad.materialdialogs.ThemeSingleton; import com.kabouzeid.gramophone.R; @@ -17,6 +18,9 @@ import com.kabouzeid.gramophone.util.Util; */ public abstract class ThemeBaseActivity extends AppCompatActivity implements KabViewsDisableAble { + private int colorPrimary; + private int colorPrimaryDarker; + private int colorAccent; @Override protected void onCreate(Bundle savedInstanceState) { @@ -27,7 +31,11 @@ public abstract class ThemeBaseActivity extends AppCompatActivity implements Kab private void setupTheme() { - ThemeSingleton.get().positiveColor = PreferenceUtils.getInstance(this).getThemeColorAccent(); + colorPrimary = PreferenceUtils.getInstance(this).getThemeColorPrimary(); + colorPrimaryDarker = Util.shiftColorDown(colorPrimary); + colorAccent = PreferenceUtils.getInstance(this).getThemeColorAccent(); + + ThemeSingleton.get().positiveColor = colorAccent; ThemeSingleton.get().negativeColor = ThemeSingleton.get().positiveColor; ThemeSingleton.get().neutralColor = ThemeSingleton.get().positiveColor; ThemeSingleton.get().widgetColor = ThemeSingleton.get().positiveColor; @@ -49,27 +57,45 @@ public abstract class ThemeBaseActivity extends AppCompatActivity implements Kab } } - protected void setStatusBarTranslucent(boolean statusBarTranslucent) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) - Util.setStatusBarTranslucent(getWindow(), statusBarTranslucent); + public int getThemeColorPrimary() { + return colorPrimary; + } + + public int getThemeColorPrimaryDarker() { + return colorPrimaryDarker; + } + + public int getThemeColorAccent() { + return colorAccent; + } + + protected void setStatusBarTransparent() { + 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(), true); } protected final void setNavigationBarColor(int color) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) - getWindow().setNavigationBarColor(color); + getWindow().setNavigationBarColor(Util.shiftColorDown(color)); } protected final void setStatusBarColor(int color) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) - getWindow().setStatusBarColor(color); + getWindow().setStatusBarColor(Util.shiftColorDown(color)); + else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { + final View statusBar = getWindow().getDecorView().getRootView().findViewById(R.id.status_bar); + if (statusBar != null) statusBar.setBackgroundColor(color); + } } protected final void setNavigationBarThemeColor() { - setNavigationBarColor(PreferenceUtils.getInstance(this).getThemeColorPrimaryDarker()); + setNavigationBarColor(colorPrimary); } protected final void setStatusBarThemeColor() { - setStatusBarColor(PreferenceUtils.getInstance(this).getThemeColorPrimaryDarker()); + setStatusBarColor(colorPrimary); } protected final void resetNavigationBarColor() { diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/tageditor/AbsTagEditorActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/tageditor/AbsTagEditorActivity.java index 4430f6b9..840680e0 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/tageditor/AbsTagEditorActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/tageditor/AbsTagEditorActivity.java @@ -24,7 +24,6 @@ import com.afollestad.materialdialogs.util.DialogUtils; import com.github.ksoichiro.android.observablescrollview.ObservableScrollView; import com.kabouzeid.gramophone.App; import com.kabouzeid.gramophone.R; -import com.kabouzeid.gramophone.dialogs.ColorChooserDialog; import com.kabouzeid.gramophone.misc.AppKeys; import com.kabouzeid.gramophone.misc.SmallObservableScrollViewCallbacks; import com.kabouzeid.gramophone.model.DataBaseChangedEvent; @@ -255,8 +254,8 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity { header.setBackgroundColor(paletteColorPrimary); setStatusBarColor(paletteColorPrimary); - if (Util.isAtLeastLollipop() && PreferenceUtils.getInstance(this).coloredNavigationBarTagEditorEnabled()) - setNavigationBarColor(ColorChooserDialog.shiftColorDown(paletteColorPrimary)); + if (PreferenceUtils.getInstance(this).coloredNavigationBarTagEditorEnabled()) + setNavigationBarColor(paletteColorPrimary); } protected void dataChanged() { diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/NavigationDrawerFragment.java b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/NavigationDrawerFragment.java deleted file mode 100644 index 4d73790e..00000000 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/NavigationDrawerFragment.java +++ /dev/null @@ -1,182 +0,0 @@ -package com.kabouzeid.gramophone.ui.fragments; - -import android.app.Activity; -import android.app.Fragment; -import android.os.Bundle; -import android.preference.PreferenceManager; -import android.support.v4.view.GravityCompat; -import android.support.v4.widget.DrawerLayout; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.view.Gravity; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ImageView; -import android.widget.TextView; - -import com.kabouzeid.gramophone.R; -import com.kabouzeid.gramophone.adapter.NavigationDrawerItemAdapter; -import com.kabouzeid.gramophone.misc.AppKeys; -import com.kabouzeid.gramophone.model.NavigationDrawerItem; - -import java.util.ArrayList; - -public class NavigationDrawerFragment extends Fragment { - - public static final int NAVIGATION_DRAWER_HEADER = -1; - public static final int ABOUT_INDEX = 5; - public static final int SETTINGS_INDEX = 4; - private static final String STATE_SELECTED_POSITION = "selected_navigation_drawer_position"; - - public View fragmentRootView; - private NavigationDrawerCallbacks callbacks; - private NavigationDrawerItemAdapter drawerAdapter; - private DrawerLayout drawerLayout; - private RecyclerView drawerRecyclerView; - - private View headerButton; - private ImageView albumArt; - private TextView songTitle; - private TextView songArtist; - - private boolean fromSavedInstanceState; - private boolean userLearnedDrawer; - - private int checkedPosition = 0; - - public NavigationDrawerFragment() { - } - - public boolean isDrawerOpen() { - return drawerLayout != null && drawerLayout.isDrawerOpen(Gravity.START); - } - - public void setUp(final DrawerLayout drawerLayout) { - this.drawerLayout = drawerLayout; - this.drawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START); - - if (!userLearnedDrawer && !fromSavedInstanceState) { - this.drawerLayout.openDrawer(Gravity.START); - userLearnedDrawer = true; - PreferenceManager.getDefaultSharedPreferences(getActivity()).edit().putBoolean(AppKeys.SP_USER_LEARNED_DRAWER, true).apply(); - } - } - - public TextView getSongArtist() { - return songArtist; - } - - public ImageView getAlbumArtImageView() { - return albumArt; - } - - public TextView getSongTitle() { - return songTitle; - } - - @Override - public void onAttach(Activity activity) { - super.onAttach(activity); - try { - callbacks = (NavigationDrawerCallbacks) activity; - } catch (ClassCastException e) { - throw new ClassCastException("Activity must implement NavigationDrawerCallbacks."); - } - } - - @Override - public void onCreate(Bundle savedInstanceState) { - userLearnedDrawer = PreferenceManager.getDefaultSharedPreferences(getActivity()).getBoolean(AppKeys.SP_USER_LEARNED_DRAWER, false); - if (savedInstanceState != null) { - setItemChecked(savedInstanceState.getInt(STATE_SELECTED_POSITION)); - fromSavedInstanceState = true; - } - super.onCreate(savedInstanceState); - } - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - return inflater.inflate(R.layout.navigation_drawer_header, container, false); - } - - @Override - public void onViewCreated(View view, Bundle savedInstanceState) { - fragmentRootView = view; - super.onViewCreated(view, savedInstanceState); - initViews(); - setUpViews(); - } - - private void initViews() { -// drawerRecyclerView = (RecyclerView) fragmentRootView.findViewById(R.id.navigation_drawer_list); -// final View drawerHeader = fragmentRootView.findViewById(R.id.header); -// headerButton = (View) drawerHeader.findViewById(R.id.header_clickable); -// albumArt = (ImageView) drawerHeader.findViewById(R.id.album_art); -// songTitle = (TextView) drawerHeader.findViewById(R.id.song_title); -// songArtist = (TextView) drawerHeader.findViewById(R.id.song_artist); - } - - private void setUpViews() { - headerButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - selectItem(NAVIGATION_DRAWER_HEADER); - } - }); - setUpListView(); - } - - private void setUpListView() { - final ArrayList navigationDrawerItems = new ArrayList<>(); - navigationDrawerItems.add(new NavigationDrawerItem(getString(R.string.songs), R.drawable.ic_audiotrack_white_24dp)); - navigationDrawerItems.add(new NavigationDrawerItem(getString(R.string.albums), R.drawable.ic_album_white_24dp)); - navigationDrawerItems.add(new NavigationDrawerItem(getString(R.string.artists), R.drawable.ic_person_white_24dp)); - navigationDrawerItems.add(new NavigationDrawerItem(getString(R.string.playlists), R.drawable.ic_queue_music_white_24dp)); - navigationDrawerItems.add(new NavigationDrawerItem(getString(R.string.action_settings), R.drawable.ic_settings_white_24dp)); - navigationDrawerItems.add(new NavigationDrawerItem(getString(R.string.action_about), R.drawable.ic_help_white_24dp)); - - drawerAdapter = new NavigationDrawerItemAdapter(getActivity(), navigationDrawerItems, new NavigationDrawerItemAdapter.Callback() { - @Override - public void onItemSelected(int index) { - selectItem(index); - } - }); - drawerRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); - drawerRecyclerView.setAdapter(drawerAdapter); - } - - private void selectItem(final int position) { - if (position != NAVIGATION_DRAWER_HEADER && - position != ABOUT_INDEX && position != SETTINGS_INDEX) { - setItemChecked(position); - if (drawerLayout != null) - drawerLayout.closeDrawers(); - } - if (callbacks != null) - callbacks.onNavigationDrawerItemSelected(position); - } - - @Override - public void onSaveInstanceState(Bundle outState) { - super.onSaveInstanceState(outState); - outState.putInt(STATE_SELECTED_POSITION, checkedPosition); - } - - @Override - public void onDetach() { - super.onDetach(); - callbacks = null; - } - - public void setItemChecked(final int position) { - if (drawerAdapter != null) { - drawerAdapter.setChecked(position); - checkedPosition = position; - } - } - - public interface NavigationDrawerCallbacks { - void onNavigationDrawerItemSelected(int position); - } -} diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AbsMainActivityFragment.java b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AbsMainActivityFragment.java index ce0cafb5..4dbad6ed 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AbsMainActivityFragment.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AbsMainActivityFragment.java @@ -6,7 +6,6 @@ import android.support.v4.app.Fragment; import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.interfaces.KabViewsDisableAble; import com.kabouzeid.gramophone.ui.activities.MainActivity; -import com.kabouzeid.gramophone.util.Util; /** * @author Karim Abou Zeid (kabouzeid) @@ -15,9 +14,7 @@ public abstract class AbsMainActivityFragment extends Fragment implements KabVie private boolean areViewsEnabled; protected int getTopPadding() { - return Util.getActionBarSize(getActivity()) + - getResources().getDimensionPixelSize(R.dimen.tab_height) + - getResources().getDimensionPixelSize(R.dimen.list_padding_vertical); + return getResources().getDimensionPixelSize(R.dimen.list_padding_vertical); } protected int getBottomPadding() { diff --git a/app/src/main/java/com/kabouzeid/gramophone/util/PreferenceUtils.java b/app/src/main/java/com/kabouzeid/gramophone/util/PreferenceUtils.java index be0c68e9..41af08b1 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/util/PreferenceUtils.java +++ b/app/src/main/java/com/kabouzeid/gramophone/util/PreferenceUtils.java @@ -6,7 +6,6 @@ import android.content.SharedPreferences; import android.preference.PreferenceManager; import com.kabouzeid.gramophone.R; -import com.kabouzeid.gramophone.dialogs.ColorChooserDialog; import java.util.HashSet; import java.util.Set; @@ -33,7 +32,6 @@ public final class PreferenceUtils { public static final String COLORED_NAVIGATION_BAR_PLAYIST = "colored_navigation_bar_playlist"; public static final String COLORED_NAVIGATION_BAR_TAG_EDITOR = "colored_navigation_bar_tag_editor"; public static final String COLORED_NAVIGATION_BAR_OTHER_SCREENS = "colored_navigation_bar_other_screens"; - public static final String TRANSPARENT_TOOLBAR = "transparent_toolbar"; public static final String ALBUM_GRID_COLUMNS = "album_grid_columns"; public static final String ALBUM_GRID_COLUMNS_LAND = "album_grid_columns_land"; public static final String OPAQUE_TOOLBAR_NOW_PLAYING = "opaque_toolbar_now_playing"; @@ -72,7 +70,7 @@ public final class PreferenceUtils { } public int getThemeColorPrimaryDarker() { - return ColorChooserDialog.shiftColorDown(getThemeColorPrimary()); + return Util.shiftColorDown(getThemeColorPrimary()); } @SuppressLint("CommitPrefEdits") @@ -161,10 +159,6 @@ public final class PreferenceUtils { // mPreferences.edit().putBoolean(COLORED_NAVIGATION_BAR_OTHER_SCREENS, coloredNavbar).commit(); // } - public final boolean transparentToolbar() { - return mPreferences.getBoolean(TRANSPARENT_TOOLBAR, false); - } - public final boolean opaqueToolbarNowPlaying() { return mPreferences.getBoolean(OPAQUE_TOOLBAR_NOW_PLAYING, false); } diff --git a/app/src/main/java/com/kabouzeid/gramophone/util/Util.java b/app/src/main/java/com/kabouzeid/gramophone/util/Util.java index c1b095f9..d883e4db 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/util/Util.java +++ b/app/src/main/java/com/kabouzeid/gramophone/util/Util.java @@ -3,8 +3,10 @@ package com.kabouzeid.gramophone.util; import android.annotation.TargetApi; import android.app.Activity; import android.content.Context; +import android.content.res.ColorStateList; import android.content.res.Configuration; import android.content.res.TypedArray; +import android.graphics.Color; import android.graphics.PorterDuff; import android.graphics.drawable.Drawable; import android.os.Build; @@ -107,6 +109,12 @@ public class Util { WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS); } + public static void setAllowDrawUnderStatusBar(Window window) { + window.getDecorView().setSystemUiVisibility( + View.SYSTEM_UI_FLAG_LAYOUT_STABLE + | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN); + } + // public static boolean isOnline(final Context context) { // if (context == null) // return false; @@ -203,7 +211,31 @@ public class Util { return drawable; } - public static int getColorWithoutAlpha(@ColorInt int color) { + public static int getOpaqueColor(@ColorInt int color) { return color | 0xFF000000; } + + public static int getColorWithAlpha(float alpha, int baseColor) { + int a = Math.min(255, Math.max(0, (int) (alpha * 255))) << 24; + int rgb = 0x00ffffff & baseColor; + return a + rgb; + } + + @SuppressWarnings("ResourceType") + public static int shiftColorDown(int color) { + int alpha = Color.alpha(color); + float[] hsv = new float[3]; + Color.colorToHSV(color, hsv); + hsv[2] *= 0.9f; // value component + return (alpha << 24) + (0x00ffffff & Color.HSVToColor(hsv)); + } + + public static ColorStateList getEmptyColorStateList(int color) { + return new ColorStateList( + new int[][]{ + new int[]{} + }, + new int[]{color} + ); + } } \ No newline at end of file diff --git a/app/src/main/java/com/kabouzeid/gramophone/views/CircleView.java b/app/src/main/java/com/kabouzeid/gramophone/views/ColorView.java similarity index 88% rename from app/src/main/java/com/kabouzeid/gramophone/views/CircleView.java rename to app/src/main/java/com/kabouzeid/gramophone/views/ColorView.java index cb57978d..89e7976e 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/views/CircleView.java +++ b/app/src/main/java/com/kabouzeid/gramophone/views/ColorView.java @@ -13,8 +13,9 @@ import android.util.AttributeSet; import android.widget.FrameLayout; import com.kabouzeid.gramophone.R; +import com.kabouzeid.gramophone.util.Util; -public class CircleView extends FrameLayout { +public class ColorView extends FrameLayout { private final Bitmap mCheck; private final Paint paint; @@ -22,19 +23,19 @@ public class CircleView extends FrameLayout { private Paint paintCheck; private final int borderWidth; - public CircleView(Context context) { + public ColorView(Context context) { this(context, null, 0); } - public CircleView(Context context, AttributeSet attrs) { + public ColorView(Context context, AttributeSet attrs) { this(context, attrs, 0); } - public CircleView(Context context, AttributeSet attrs, int defStyleAttr) { + public ColorView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); final int checkSize = (int) context.getResources().getDimension(R.dimen.circle_view_check); mCheck = getResizedBitmap(BitmapFactory.decodeResource(context.getResources(), - R.drawable.ic_check_white_24dp), checkSize, checkSize); + R.drawable.ic_checkbox_marked_circle_outline_white_24dp), checkSize, checkSize); borderWidth = (int) getResources().getDimension(R.dimen.circle_view_border); paint = new Paint(); @@ -42,7 +43,6 @@ public class CircleView extends FrameLayout { paintBorder = new Paint(); paintBorder.setAntiAlias(true); - paintBorder.setColor(Color.BLACK); setWillNotDraw(false); } @@ -64,12 +64,7 @@ public class CircleView extends FrameLayout { @Override public void setBackgroundColor(int color) { paint.setColor(color); - requestLayout(); - invalidate(); - } - - public void setBorderColor(int color) { - paintBorder.setColor(color); + paintBorder.setColor(Util.shiftColorDown(color)); requestLayout(); invalidate(); } diff --git a/app/src/main/res/drawable-hdpi/ic_checkbox_marked_circle_outline_white_24dp.png b/app/src/main/res/drawable-hdpi/ic_checkbox_marked_circle_outline_white_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..d8ec2d08a0244251cd159931c89882963eee940c GIT binary patch literal 645 zcmeAS@N?(olHy`uVBq!ia0y~yU{C>J4mJh`hKCF@W-u@?uqAoByD)&kPv_nB3=9mM z1s;*b3=9k&VC;4>+YTgHR^XTp(hJ5F?9%-V3`_!^E{-7)hu_XH%oBDLY5QLqq|znx zl*z-yO1JHdpj) znmzNYMDvvJwcqyszn`C;UVd*)iTM9Wk(Epdu9uWO&#Tx@`{HnE+7fNgc$Hq&+6iC6 zF8yAlQK#1;6T!~c`2NUImWoXpGngNk2&J%Hj%4v*e!+P8LDTaC(h2+(962{Q?lI3} zS{q#x{`!E(0Z)ccyf3a9{ds$v&5r4NaO+-%W&9@3Wj>k}WY#GsScmP9w^^3FV4@(~ zgJKbZ4Qz8*l{d>s2+LbO3{NPYX`p?eRk(aQTQZxjy4~pyW>?z{Cx@SV@HHs$OvVEr zEAuDwncwbbN={2o-y-}Z?$*!KMl04Bq*)ZE`Igt6KBL)uiZ7ToW#?O?6(JG}US_Fp zm5XG((tTwjV_D4K9ji7J1xz}dwP!f?3F#w=Jl7FbtTSWVlQrH30N7Ox#pWdME_pDbMtv8eQ~~|?#b*~ j>v_2KZ_bYHdeu6{c8k{Fy^6=~fs&J_tDnm{r-UW|TgeE* literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/ic_checkbox_marked_circle_outline_white_24dp.png b/app/src/main/res/drawable-mdpi/ic_checkbox_marked_circle_outline_white_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..1f4969a063ea4d1bea160bbdfc8a9493420f2397 GIT binary patch literal 439 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJo*pj^6T^PXNr}OT51_lPs z0*}aI1_lNXFm^kcZ3hx8D{xE)=>_8opQXzf7#N*AT^vI^j^CZ?=yljZq%B@5YQiPq z4({ne=Jy;HR(mRb;VZp3&tca&+ecwGo!qRtZ{7Ad7A_XCGyi`;NA0A^SvPqWqtE}o z|J9#-=E$3Pb_0f@2aFZW`%3mQs}>aV)Ntjj=;ME|hu4CYi~kFkPJ^KVi(dox1CxMi z$>awQ?jMl7(4CXR_NFm(uEysFlbPq;I=Iq=;n#t%MU~47IEy>u8ny)QII^_m^tp#x z5#Bc6p1o_ld9gtBZHU38A5o9@=3nBHGrDl+lzCGpg^W+=Vq4Yql~R5Gr^mP&=FB zv)hj60)N?}CMWGXdDe54vEZ}blIx1ULk?#MpZ&vQe%{$oSmka<Q zQT=@Ea+%GXN%I)0MA>zh>$-IOw7h&KX*-W&uJkOXzkQ4EE`Jj?O=|m;zP!_0Hr-h5 z6!Lo6J(JnXCLU$o5HfYcwq#M``=>8PbF0ezJSg_^LhZE0mwO%UHZ692{7zze_hNy( zaE(_F*L~c&){Osn>W>=Nbnac38SEQs9|&$>x}zM+cmDQ!(dupax!o67(-zMvZ#uH$ z!HL6`8|;i8`*lc!`!Ij$T`l--P0fS}-ur@A^GZ#6y(4YvlKEciBkjGa^j}V0vORf! f+T5hBdWL$&qZNkIZKq3BKuO!v)z4*}Q$iB}@n>P; literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/ic_checkbox_marked_circle_outline_white_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_checkbox_marked_circle_outline_white_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..d948a7c23f80079fa95052dcf8df65bf1a35e608 GIT binary patch literal 1182 zcmeAS@N?(olHy`uVBq!ia0y~yVDJE84mJh`hS0a0-5D4d*pj^6T^PXNr}OT51_lPs z0*}aIkTNiKJDF_<5-cllOa}{q%s5y1ft7)QMbp#8F{I+w+c^ibMZ#r{@4wu@s>~T0 zb7EnWz?Ib=v*o%x^_uD%eyVp(=#bmvD#+hBFNigNZ^nADqN_r|In^3FXKhEY*g-Jkz+bi|>3GjGnU%)dA5=b^Z^+Wqgp*OryvJ2U%xSk~25p{v8zwuO3TI6qji zBwsalLW$cYOHWzPcn_(qKJQiEdQ>TAI$w&P^l!qK=t(N_v)Z09d$C6_gf+&V%I1$? zUdJ?d+3!&H8JP*JH`X&8T^fGiG z4{i>w6k)cT{$=ly_iP#8!Y=7gs+<1B>5{hfH^)mIOCEolHQ~$DCF@mdH8b@*C+&A; zTE&&lQxWyyay`2abFhQ(bn!(07Y95O_A<<CdR&xO*Ybaqa^*nWr@* z`!-rKEMINCkGG$}zvw{@)AQLZj~gyu&7HsOd(i_Mwqr_dm#;43zr0h%g1=#+VneXK z!lmv5Z+Q;?_HEAO>65fSWANwag}UN16=sJEl0D8@);*Z=<$ny{!f`C*(jlkc-F(Is1?IfAYf=scLFe5JF;%-B*^i$$}_LhO?15&4su+h<(f z=;PtcxSVT&)`XhFigW$nFTZPalH>UF{tPloJl`;vAuSc zp8B!R$@0xlgwGkCzU8l7D&g|?!3KwaOMCu^zc%Xpb+Op(-REf==U;ne(pC4-Y5tky zX=j(-+{L>%{@0c};sqk>K*V z#d6P6c8e={l$>txbYFdTj*q{FL2OL;fHk z-`9RCx%_txb4YBx&W3DLF^(_CnGFA#wod6wyY1z^P25ZV&0o!z*Ht|2+RohpXW1y; a<^R}uo9mV`Yvexzl{22MelF{r5}E+XDI4_w literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxxhdpi/ic_checkbox_marked_circle_outline_white_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_checkbox_marked_circle_outline_white_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..fdd58427861abb7e3520d9528f6e631100263ffd GIT binary patch literal 1651 zcmeAS@N?(olHy`uVBq!ia0y~yU`POA4mJh`hDS5XEf^RW*pj^6T^PXNr}OT51_lPs z0*}aI1_lNXFm^kcZ3hx8D{xE)=>_A8+c&>3FtGmfba4!+xb=4K`D`(FnPcIo(LFywweEa_Stu5-t=5q6}mcXZPeDR ztE)m+Z(VlemV-TGv}&zNX8V%wcfXgb>{ZQ-xHMbuu>GWY-c_nE^*z6<{8fBe?rE>; z`DuIUw5uU2nHZ#1YSmr_d(QXxWzck7)pNhcFUL#UC++i_^ki%4wNo4(4Ymh#KFoRa zmFI`h3>K}gj5^YPsvc;3SitgP@0V6nX6+Bs4Z;VKl|N)l{hRVoz3%NH_G1l|$se-C z{xK$8oK+M0P`pf>Va@as$4eU-XICk`bobov^~?9A?Y~98t5jdwd**xJ(#QOF`;8y0Rr;{bv_FV7hyC4?hJQjc7|SBl zIZjxx$ZY*~@$?P92Z3%Mx(}FaIC`r-;h5rsU7zdj-8x^Cy!gO;$piX~;hx8gepV+o^en^|PG zwarwHe){k|ze(9CskFYFsqOnGZcuz`nLWdDQ>gSl<4T(YH)<0$n_lSInZ;Od`)}qN z)mdLBg!2A4_hKSL@#bp|#%Zf~{~U>p`t?$B!&#}UHlMEz@6Y(LNzB>SHcQdJ_JQ@` za2vLGro-0~m^WYH`^Wa6_4pIk>TtPYU!_m| z)XjH4zx%#kJg~*>K)It{bdaI z&2P?KxYl^yHa0D%#}9S~@Y^aLW4is4#pz^di`${{gY&AIdR+7zo++7#?c@G_OE@jI zZQCO8g%>|0iz}1~u6a0l9oL)X2jkmSFR5yP_}2W&^X%pyd!cg5{^1PQ6-+hHlh0g! ze^_F!%WmG@z?M}9%Kw#D|BCCl=y`>GBZun>mYU~(CoKP;z0d3($BXClop<-J^X&6DPe-%}Ol7oJ+1)=kUc^G??&9@2)0HQm zK4-MP^YlIc>g1A;S1o56Ts2tteYSk}ag)oM@Aow-y^PWYy_(`E@%pEI)1!_q5Y(im0A3} zcOZcc%m3%{ASNMuGW(|_id$(MRpahYB^G5w3p zOmp^_I>x@~iOV*wU-|8%jrfG`j2kxUIQP~D?smTx+!*+wwY zOz*`vXRW?Hj2CQ5o{$}9({|D=FWlMcssvL#r$t8Ywm@k!Ms;TU5Qgb%{+gwoHcAjq zEVqumtMYi!7NxV-t1jDJYF{(q_n&oQCpIdqeIc;*_O?kSyS{2YoGue{EHL}tYSvXp zkF8x2t?fU#Hu$6a0l(~X`wFJs-8G{`Et~CsMVP@dY|Q; zx?PTr^$UG(?2Gg2-z-%Y|K9V~%94v$j(criFYhv4b?&OSC%r?SGqkUXV&RMU+#T9t zxT>(lbH%fbQgIqP1VSy2ET1nYP;BWb>T24zF>2-UbHR6(s)UMtW8eAkmz~$e%N?O& zPvuj8-1)k-ol7P)BQIg6#xnzd6CahJ*`?em=UB>wf9*w9rB+O9VWw*~#O*|6eE y#BFu2{*8NI@B2ST<>Z5W?QP(K7ghqR{N=ZJ{xA3a3)^f^<>Be-=d#Wzp$P!Rh8@@d literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/slider_thumb.xml b/app/src/main/res/drawable/slider_thumb.xml index 68f40df1..4c099c65 100644 --- a/app/src/main/res/drawable/slider_thumb.xml +++ b/app/src/main/res/drawable/slider_thumb.xml @@ -5,5 +5,5 @@ android:height="20dp" android:width="3dp" /> + android:color="@color/black" /> \ No newline at end of file diff --git a/app/src/main/res/layout/activity_album_detail.xml b/app/src/main/res/layout/activity_album_detail.xml index c0ebf5dd..5aabbe5d 100644 --- a/app/src/main/res/layout/activity_album_detail.xml +++ b/app/src/main/res/layout/activity_album_detail.xml @@ -4,6 +4,7 @@ android:layout_height="match_parent"> @@ -73,11 +74,7 @@ android:layout_height="wrap_content" android:orientation="vertical"> - + @@ -74,11 +75,7 @@ android:layout_height="wrap_content" android:orientation="vertical"> - + - - - - + android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> + android:elevation="0dp" + tools:ignore="UnusedAttribute"> @@ -43,42 +38,35 @@ - + app:tabContentStart="72dp" + app:tabIndicatorColor="#00000000" + app:tabMode="scrollable" /> - - - + + + android:layout_gravity="end|bottom" + android:layout_margin="16dp" /> - + diff --git a/app/src/main/res/layout/activity_music_controller.xml b/app/src/main/res/layout/activity_music_controller.xml index 4a8f47ee..90a87729 100644 --- a/app/src/main/res/layout/activity_music_controller.xml +++ b/app/src/main/res/layout/activity_music_controller.xml @@ -8,6 +8,7 @@ - + android:orientation="vertical"> + + - + diff --git a/app/src/main/res/layout/activity_playlist_detail.xml b/app/src/main/res/layout/activity_playlist_detail.xml index e6ce5528..390f1872 100644 --- a/app/src/main/res/layout/activity_playlist_detail.xml +++ b/app/src/main/res/layout/activity_playlist_detail.xml @@ -5,8 +5,7 @@ + android:orientation="vertical"> \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search.xml b/app/src/main/res/layout/activity_search.xml index 4bac50fd..475ec169 100644 --- a/app/src/main/res/layout/activity_search.xml +++ b/app/src/main/res/layout/activity_search.xml @@ -2,8 +2,7 @@ xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" - android:orientation="vertical" - android:paddingTop="@dimen/status_bar_padding"> + android:orientation="vertical"> - \ No newline at end of file + diff --git a/app/src/main/res/layout/item_grid_album.xml b/app/src/main/res/layout/item_grid_album.xml index 7dc7af73..b9645e3e 100644 --- a/app/src/main/res/layout/item_grid_album.xml +++ b/app/src/main/res/layout/item_grid_album.xml @@ -3,7 +3,7 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_margin="1dp"> + android:layout_margin="2dp"> - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/preference_custom.xml b/app/src/main/res/layout/preference_custom.xml index 1d25db71..c7097e48 100644 --- a/app/src/main/res/layout/preference_custom.xml +++ b/app/src/main/res/layout/preference_custom.xml @@ -66,7 +66,7 @@ android:gravity="center_vertical" android:orientation="vertical" /> - + \ No newline at end of file diff --git a/app/src/main/res/values-v21/styles.xml b/app/src/main/res/values-v21/styles.xml index 0b5dbac3..36592c5f 100644 --- a/app/src/main/res/values-v21/styles.xml +++ b/app/src/main/res/values-v21/styles.xml @@ -5,7 +5,6 @@ @drawable/rect_ripple_selector_dark @android:color/transparent - true