diff --git a/app/src/main/assets/changelog.html b/app/src/main/assets/changelog.html
index d8a41d15..a2048a69 100644
--- a/app/src/main/assets/changelog.html
+++ b/app/src/main/assets/changelog.html
@@ -28,6 +28,7 @@
Version 0.9.44 beta4
+ - NEW: Support for light colors. The appbar will now automatically change its text and icon color to be visible on light theme colors.
- FIX: Play/pause button offset too far to the right in landscape mode.
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 cc5b6ceb..6d77a661 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
@@ -51,7 +51,6 @@ import com.kabouzeid.gramophone.util.ColorUtil;
import com.kabouzeid.gramophone.util.MusicUtil;
import com.kabouzeid.gramophone.util.NavigationUtil;
import com.kabouzeid.gramophone.util.Util;
-import com.kabouzeid.gramophone.util.ViewUtil;
import com.kabouzeid.gramophone.views.SquareIfPlaceImageView;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
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 a23504d8..0b14aeac 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
@@ -14,7 +14,6 @@ import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
import android.provider.MediaStore;
-import android.support.annotation.ColorInt;
import android.support.annotation.LayoutRes;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
@@ -65,6 +64,7 @@ import com.kabouzeid.gramophone.model.Song;
import com.kabouzeid.gramophone.ui.activities.base.AbsSlidingMusicPanelActivity;
import com.kabouzeid.gramophone.ui.fragments.mainactivityfragments.AbsMainActivityFragment;
import com.kabouzeid.gramophone.ui.fragments.mainactivityfragments.AbsMainActivityRecyclerViewLayoutModeFragment;
+import com.kabouzeid.gramophone.util.ColorUtil;
import com.kabouzeid.gramophone.util.MusicUtil;
import com.kabouzeid.gramophone.util.NavigationUtil;
import com.kabouzeid.gramophone.util.PreferenceUtil;
@@ -75,8 +75,6 @@ import com.nostra13.universalimageloader.core.ImageLoader;
import com.sothree.slidinguppanel.SlidingUpPanelLayout;
import java.io.File;
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -154,7 +152,8 @@ public class MainActivity extends AbsSlidingMusicPanelActivity
navigationView.getMenu().getItem(startPosition).setChecked(true);
tabs.setupWithViewPager(pager);
- setUpTabStripColor(getThemeColorAccent() == Color.WHITE ? Color.WHITE : ThemeSingleton.get().positiveColor.getDefaultColor());
+ tabs.setTabTextColors(ColorUtil.getSecondaryTextColorForBackground(this, getThemeColorPrimary()), ColorUtil.getPrimaryTextColorForBackground(this, getThemeColorPrimary()));
+ tabs.setSelectedTabIndicatorColor(getThemeColorAccent() == Color.WHITE && !ColorUtil.useDarkTextColorOnBackground(getThemeColorPrimary()) ? Color.WHITE : ThemeSingleton.get().positiveColor.getDefaultColor());
pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
@@ -176,21 +175,6 @@ public class MainActivity extends AbsSlidingMusicPanelActivity
pager.setCurrentItem(startPosition);
}
- private void setUpTabStripColor(@ColorInt int color) {
- // use reflection to set the selected indicator color
- try {
- Field tabStripField = tabs.getClass().getDeclaredField("mTabStrip");
- tabStripField.setAccessible(true);
- Object tabStrip = tabStripField.get(tabs);
-
- Method setSelectedIndicatorColorMethod = tabStrip.getClass().getDeclaredMethod("setSelectedIndicatorColor", Integer.TYPE);
- setSelectedIndicatorColorMethod.setAccessible(true);
- setSelectedIndicatorColorMethod.invoke(tabStrip, color);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-
private void setUpToolbar() {
toolbar.setNavigationIcon(R.drawable.ic_menu_white_24dp);
setTitle(getResources().getString(R.string.app_name));
@@ -361,6 +345,7 @@ public class MainActivity extends AbsSlidingMusicPanelActivity
} else {
menu.removeItem(R.id.action_view_as);
}
+ ViewUtil.setToolbarContentColorForBackground(this, toolbar, getThemeColorPrimary());
return true;
}
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 b2dfc911..eb6ac6cc 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
@@ -25,8 +25,10 @@ import com.kabouzeid.gramophone.model.PlaylistSong;
import com.kabouzeid.gramophone.model.Song;
import com.kabouzeid.gramophone.model.smartplaylist.AbsSmartPlaylist;
import com.kabouzeid.gramophone.ui.activities.base.AbsSlidingMusicPanelActivity;
+import com.kabouzeid.gramophone.util.ColorUtil;
import com.kabouzeid.gramophone.util.NavigationUtil;
import com.kabouzeid.gramophone.util.PlaylistsUtil;
+import com.kabouzeid.gramophone.util.ViewUtil;
import java.util.ArrayList;
import java.util.List;
@@ -159,6 +161,7 @@ public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity impleme
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_playlist_detail, menu);
+ ViewUtil.setToolbarContentColorForBackground(this, toolbar, getThemeColorPrimary());
return true;
}
diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/SearchActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/SearchActivity.java
index 2c3ce8eb..e8092fde 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/SearchActivity.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/SearchActivity.java
@@ -1,28 +1,30 @@
package com.kabouzeid.gramophone.ui.activities;
import android.annotation.SuppressLint;
-import android.app.ActionBar;
-import android.graphics.Color;
import android.graphics.PorterDuff;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.support.annotation.NonNull;
-import android.support.v4.content.ContextCompat;
-import android.support.v4.view.MenuItemCompat;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
-import android.support.v7.widget.SearchView;
import android.support.v7.widget.Toolbar;
-import android.view.Menu;
+import android.text.Editable;
+import android.text.TextWatcher;
+import android.view.KeyEvent;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
+import android.view.inputmethod.EditorInfo;
+import android.widget.EditText;
+import android.widget.ImageView;
import android.widget.TextView;
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;
@@ -34,15 +36,16 @@ public class SearchActivity extends AbsMusicServiceActivity {
RecyclerView recyclerView;
@Bind(R.id.toolbar)
Toolbar toolbar;
+ @Bind(R.id.search_src_text)
+ EditText searchSrcText;
+ @Bind(R.id.search_close_btn)
+ ImageView searchCloseBtn;
@SuppressWarnings("ButterKnifeNoViewWithId")
@Bind(android.R.id.empty)
TextView empty;
- private SearchView searchView;
private SearchAdapter searchAdapter;
- private String searchQuery = "";
-
@SuppressLint("NewApi")
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -59,23 +62,75 @@ public class SearchActivity extends AbsMusicServiceActivity {
@Override
public boolean onTouch(View v, MotionEvent event) {
Util.hideSoftKeyboard(SearchActivity.this);
- if (searchView != null) {
- searchView.clearFocus();
- }
+ searchSrcText.clearFocus();
return false;
}
});
- toolbar.setBackgroundColor(getThemeColorPrimary());
- setSupportActionBar(toolbar);
- //noinspection ConstantConditions
- getSupportActionBar().setDisplayHomeAsUpEnabled(true);
+ setUpToolBar();
+ setUpSearchBar();
if (shouldColorNavigationBar())
setNavigationBarThemeColor();
setStatusBarThemeColor();
}
+ private void setUpToolBar() {
+ setSupportActionBar(toolbar);
+ //noinspection ConstantConditions
+ getSupportActionBar().setDisplayHomeAsUpEnabled(true);
+
+ toolbar.setBackgroundColor(getThemeColorPrimary());
+ Drawable navigationIcon = toolbar.getNavigationIcon();
+ if (navigationIcon != null) {
+ navigationIcon = navigationIcon.mutate();
+ navigationIcon.setColorFilter(ViewUtil.getToolbarIconColor(this, ColorUtil.useDarkTextColorOnBackground(getThemeColorPrimary())), PorterDuff.Mode.SRC_IN);
+ toolbar.setNavigationIcon(navigationIcon);
+ }
+ }
+
+ private void setUpSearchBar() {
+ searchCloseBtn.setColorFilter(ViewUtil.getToolbarIconColor(this, ColorUtil.useDarkTextColorOnBackground(getThemeColorPrimary())), PorterDuff.Mode.SRC_IN);
+ searchCloseBtn.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ searchSrcText.setText("");
+ }
+ });
+
+ searchSrcText.setTextColor(ColorUtil.getPrimaryTextColorForBackground(this, getThemeColorPrimary()));
+ searchSrcText.setHintTextColor(ColorUtil.getSecondaryTextColorForBackground(this, getThemeColorPrimary()));
+ searchSrcText.setHint(R.string.search_hint);
+
+ searchSrcText.addTextChangedListener(new TextWatcher() {
+ @Override
+ public void beforeTextChanged(CharSequence s, int start, int count, int after) {
+
+ }
+
+ @Override
+ public void onTextChanged(CharSequence s, int start, int before, int count) {
+
+ }
+
+ @Override
+ public void afterTextChanged(Editable s) {
+ search(searchSrcText.getText().toString());
+ }
+ });
+
+ searchSrcText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
+ @Override
+ public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
+ if (actionId == EditorInfo.IME_ACTION_SEARCH) {
+ search(searchSrcText.getText().toString());
+ return true;
+ }
+ return false;
+ }
+ });
+ }
+
@Override
public void enableViews() {
super.enableViews();
@@ -89,58 +144,14 @@ public class SearchActivity extends AbsMusicServiceActivity {
}
@Override
- public boolean onCreateOptionsMenu(@NonNull Menu menu) {
- getMenuInflater().inflate(R.menu.menu_search, menu);
-
- final MenuItem search = menu.findItem(R.id.action_search);
- searchView = (SearchView) MenuItemCompat.getActionView(search);
- searchView.setIconified(false);
- searchView.setIconifiedByDefault(false);
- searchView.setQueryHint(getString(R.string.search_hint));
-
- View searchViewPlate = searchView.findViewById(android.support.v7.appcompat.R.id.search_plate);
- Drawable drawable = ContextCompat.getDrawable(this, R.drawable.abc_textfield_search_activated_mtrl_alpha);
- drawable.setColorFilter(Color.TRANSPARENT, PorterDuff.Mode.SRC_IN);
- searchViewPlate.setBackground(drawable);
-
- ActionBar.LayoutParams params = new ActionBar.LayoutParams(ActionBar.LayoutParams.MATCH_PARENT, ActionBar.LayoutParams.MATCH_PARENT);
- searchView.setLayoutParams(params);
-
- searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
- @Override
- public boolean onQueryTextSubmit(@NonNull String query) {
- onQueryTextChange(query);
- Util.hideSoftKeyboard(SearchActivity.this);
- searchView.clearFocus();
- return true;
- }
-
- @Override
- public boolean onQueryTextChange(@NonNull String newText) {
- search(newText);
- return false;
- }
- });
-
- MenuItemCompat.setOnActionExpandListener(search, new MenuItemCompat.OnActionExpandListener() {
- @Override
- public boolean onMenuItemActionExpand(MenuItem item) {
- return true;
- }
-
- @Override
- public boolean onMenuItemActionCollapse(MenuItem item) {
- finish();
- return false;
- }
- });
-
- MenuItemCompat.expandActionView(search);
- return true;
+ public boolean onOptionsItemSelected(MenuItem item) {
+ if (item.getItemId() == android.R.id.home) {
+ super.onBackPressed();
+ }
+ return super.onOptionsItemSelected(item);
}
private void search(@NonNull String query) {
- searchQuery = query;
if (searchAdapter != null) {
searchAdapter.search(query);
empty.setVisibility(searchAdapter.getItemCount() < 1 ? View.VISIBLE : View.GONE);
@@ -150,6 +161,6 @@ public class SearchActivity extends AbsMusicServiceActivity {
@Override
public void onMediaStoreChanged() {
super.onMediaStoreChanged();
- search(searchQuery);
+ search(searchSrcText.getText().toString());
}
}
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 12615af3..a83388e4 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
@@ -14,6 +14,7 @@ import android.support.annotation.ColorInt;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v7.widget.Toolbar;
+import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
@@ -22,20 +23,28 @@ import com.kabouzeid.gramophone.dialogs.ColorChooserDialog;
import com.kabouzeid.gramophone.helper.ColorPalette;
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 com.nostra13.universalimageloader.core.ImageLoader;
+import butterknife.Bind;
+import butterknife.ButterKnife;
+
public class SettingsActivity extends AbsBaseActivity implements ColorChooserDialog.ColorCallback {
public static final String TAG = SettingsActivity.class.getSimpleName();
+ @Bind(R.id.toolbar)
+ Toolbar toolbar;
+
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_preferences);
setStatusBarTransparent();
+ ButterKnife.bind(this);
- Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.setBackgroundColor(getThemeColorPrimary());
setSupportActionBar(toolbar);
//noinspection ConstantConditions
@@ -71,6 +80,12 @@ public class SettingsActivity extends AbsBaseActivity implements ColorChooserDia
return super.onOptionsItemSelected(item);
}
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ ViewUtil.setToolbarContentColorForBackground(this, toolbar, getThemeColorPrimary());
+ return super.onCreateOptionsMenu(menu);
+ }
+
public static class SettingsFragment extends PreferenceFragment {
private static void setSummary(@NonNull Preference preference) {
diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsSlidingMusicPanelActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsSlidingMusicPanelActivity.java
index 1f6ba258..a1c05725 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsSlidingMusicPanelActivity.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsSlidingMusicPanelActivity.java
@@ -12,6 +12,7 @@ import android.content.res.ColorStateList;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.graphics.PorterDuff;
+import android.graphics.drawable.Drawable;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
@@ -846,8 +847,9 @@ public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivi
private void updatePlayerMenu() {
boolean isFavorite = MusicUtil.isFavorite(this, song);
+ Drawable favoriteIcon = Util.getTintedDrawable(this, isFavorite ? R.drawable.ic_favorite_white_24dp : R.drawable.ic_favorite_outline_white_24dp, ViewUtil.getToolbarIconColor(this, opaqueToolBar && ColorUtil.useDarkTextColorOnBackground(lastFooterColor)));
playerToolbar.getMenu().findItem(R.id.action_toggle_favorite)
- .setIcon(isFavorite ? R.drawable.ic_favorite_white_24dp : R.drawable.ic_favorite_outline_white_24dp)
+ .setIcon(favoriteIcon)
.setTitle(isFavorite ? getString(R.string.action_remove_from_favorites) : getString(R.string.action_add_to_favorites));
}
@@ -954,8 +956,10 @@ public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivi
if (opaqueToolBar) {
animatorSetBuilder.with(ViewUtil.createBackgroundColorTransition(playerToolbar, lastFooterColor, newColor));
+ ViewUtil.setToolbarContentColorForBackground(this, playerToolbar, newColor);
} else {
playerToolbar.setBackgroundColor(Color.TRANSPARENT);
+ ViewUtil.setToolbarContentDark(this, playerToolbar, false);
}
if (opaqueStatusBar) {
@@ -1159,7 +1163,7 @@ public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivi
@Override
public void set(FloatingActionButton object, Integer value) {
object.setBackgroundTintList(ColorStateList.valueOf(value));
- object.getDrawable().setColorFilter(ColorUtil.getFabDrawableColorForBackground(object.getContext(), value), PorterDuff.Mode.SRC_IN);
+ object.getDrawable().setColorFilter(ColorUtil.getPrimaryTextColorForBackground(object.getContext(), value), PorterDuff.Mode.SRC_IN);
}
@Override
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 2c9a433a..6dd82839 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
@@ -17,6 +17,7 @@ import android.support.design.widget.FloatingActionButton;
import android.support.v7.graphics.Palette;
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;
@@ -32,6 +33,7 @@ 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 com.nostra13.universalimageloader.core.ImageLoader;
import org.jaudiotagger.audio.AudioFile;
@@ -192,7 +194,7 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity {
});
int fabColor = getThemeColorAccent();
- int fabDrawableColor = ColorUtil.getFabDrawableColorForBackground(this, fabColor);
+ int fabDrawableColor = ColorUtil.getPrimaryTextColorForBackground(this, fabColor);
fab.setBackgroundTintList(ColorStateList.valueOf(fabColor));
fab.getDrawable().setColorFilter(fabDrawableColor, PorterDuff.Mode.SRC_IN);
}
@@ -206,6 +208,7 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity {
if (shouldColorNavigationBar())
setNavigationBarColor(paletteColorPrimary);
header.setBackgroundColor(paletteColorPrimary);
+ ViewUtil.setToolbarContentColorForBackground(this, toolbar, paletteColorPrimary);
notifyTaskColorChange(paletteColorPrimary);
}
@@ -245,6 +248,11 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity {
return super.onOptionsItemSelected(item);
}
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ ViewUtil.setToolbarContentColorForBackground(this, toolbar, paletteColorPrimary);
+ return super.onCreateOptionsMenu(menu);
+ }
protected void setNoImageMode() {
isInNoImageMode = true;
@@ -305,6 +313,7 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity {
setNavigationBarColor(paletteColorPrimary);
setStatusBarColor(paletteColorPrimary);
header.setBackgroundColor(paletteColorPrimary);
+ ViewUtil.setToolbarContentColorForBackground(AbsTagEditorActivity.this, toolbar, paletteColorPrimary);
notifyTaskColorChange(paletteColorPrimary);
} else {
resetColors();
diff --git a/app/src/main/java/com/kabouzeid/gramophone/util/ColorUtil.java b/app/src/main/java/com/kabouzeid/gramophone/util/ColorUtil.java
index bb355b83..93f660d5 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/util/ColorUtil.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/util/ColorUtil.java
@@ -109,11 +109,7 @@ public class ColorUtil {
}
public static boolean useDarkTextColorOnBackground(@ColorInt int backgroundColor) {
- return getLuminance(backgroundColor) > (255f / 2f);
- }
-
- public static boolean useDarkFabDrawableOnBackground(@ColorInt int backgroundColor) {
- return getLuminance(backgroundColor) > (255f / 1.3f);
+ return getLuminance(backgroundColor) > (255f / 1.5f);
}
@ColorInt
@@ -125,9 +121,4 @@ public class ColorUtil {
public static int getSecondaryTextColorForBackground(final Context context, @ColorInt int backgroundColor) {
return getSecondaryTextColor(context, useDarkTextColorOnBackground(backgroundColor));
}
-
- @ColorInt
- public static int getFabDrawableColorForBackground(final Context context, @ColorInt int backgroundColor) {
- return getPrimaryTextColor(context, useDarkFabDrawableOnBackground(backgroundColor));
- }
}
diff --git a/app/src/main/java/com/kabouzeid/gramophone/util/ViewUtil.java b/app/src/main/java/com/kabouzeid/gramophone/util/ViewUtil.java
index c718f670..7254dcfc 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/util/ViewUtil.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/util/ViewUtil.java
@@ -3,7 +3,11 @@ 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.v7.internal.view.menu.ListMenuItemView;
@@ -11,20 +15,25 @@ import android.support.v7.internal.view.menu.MenuPopupHelper;
import android.support.v7.widget.ActionMenuPresenter;
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.EditText;
+import android.widget.ImageView;
import android.widget.ListView;
import android.widget.RadioButton;
import android.widget.TextView;
import com.afollestad.materialdialogs.ThemeSingleton;
import com.afollestad.materialdialogs.internal.MDTintHelper;
+import com.kabouzeid.gramophone.R;
import java.lang.reflect.Field;
+import java.util.ArrayList;
/**
* @author Karim Abou Zeid (kabouzeid)
@@ -62,7 +71,8 @@ public class ViewUtil {
*
* @param toolbar the toolbar to apply the tint on
*/
- public static void invalidateToolbarPopupMenuTint(@NonNull final Toolbar toolbar) {
+ public static void invalidateToolbarPopupMenuTint(@Nullable final Toolbar toolbar) {
+ if (toolbar == null) return;
toolbar.post(new Runnable() {
@Override
public void run() {
@@ -92,49 +102,106 @@ public class ViewUtil {
}
public static void setTintForMenuPopupHelper(@Nullable MenuPopupHelper menuPopupHelper) {
- if (menuPopupHelper != null) {
- 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);
+ 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;
+ 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);
- }
+ 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);
- }
+ 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);
}
+ } 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);
+ }
+ }
+ });
+ }
+
+ 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));
+ }
+
+ public static int getToolbarIconColor(Context context, boolean dark) {
+ if (dark) {
+ return ColorUtil.getSecondaryTextColor(context, true);
+ } else {
+ return ColorUtil.getPrimaryTextColor(context, false);
}
}
+
+ public static void setToolbarIconColor(@NonNull final Context context, @Nullable final Toolbar toolbar, @ColorInt final int color) {
+ if (toolbar == null) return;
+ toolbar.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
+ @Override
+ public void onGlobalLayout() {
+ toolbar.getViewTreeObserver().removeOnGlobalLayoutListener(this);
+
+ final ArrayList outViews = new ArrayList<>();
+ final String overflowDescription = context.getString(R.string.abc_action_menu_overflow_description);
+ toolbar.findViewsWithText(outViews, overflowDescription, View.FIND_VIEWS_WITH_CONTENT_DESCRIPTION);
+ if (!outViews.isEmpty()) {
+ try {
+ ImageView overflowButton = (ImageView) outViews.get(0);
+ overflowButton.setColorFilter(color, PorterDuff.Mode.SRC_IN);
+ } catch (ClassCastException e) {
+ Log.e("setToolbarIconColor", "overflow button is not an ImageView", e);
+ }
+ }
+
+ Menu menu = toolbar.getMenu();
+ for (int i = 0; i < menu.size(); i++) {
+ MenuItem item = menu.getItem(i);
+ if (item.getIcon() != null) {
+ item.getIcon().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);
+ }
+ }
+ });
+ }
}
\ 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 5bb2ee0a..10424356 100644
--- a/app/src/main/res/layout/activity_search.xml
+++ b/app/src/main/res/layout/activity_search.xml
@@ -7,7 +7,10 @@
+ style="@style/Toolbar">
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/menu/menu_search.xml b/app/src/main/res/menu/menu_search.xml
deleted file mode 100644
index c5cddfef..00000000
--- a/app/src/main/res/menu/menu_search.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-
diff --git a/app/src/main/res/values/styles_parents.xml b/app/src/main/res/values/styles_parents.xml
index 8fb6d07b..56f760fa 100644
--- a/app/src/main/res/values/styles_parents.xml
+++ b/app/src/main/res/values/styles_parents.xml
@@ -23,8 +23,11 @@
- @style/ThemeOverlay.AppCompat
-
+
- @android:color/white
+
+
+ - @style/Widget.ActionButton.Overflow
+
+
+
\ No newline at end of file