Support for light colors. The appbar will now automatically change its text and icon color to be visible on light theme colors.

This commit is contained in:
Karim Abou Zeid 2015-08-27 16:43:31 +02:00
commit 1be0d305b1
14 changed files with 271 additions and 146 deletions

View file

@ -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;

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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());
}
}

View file

@ -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) {

View file

@ -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

View file

@ -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();