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:
parent
6773342198
commit
1be0d305b1
14 changed files with 271 additions and 146 deletions
|
|
@ -28,6 +28,7 @@
|
|||
<h3>Version 0.9.44 beta4</h3>
|
||||
|
||||
<ol>
|
||||
<li><b>NEW:</b> Support for light colors. The appbar will now automatically change its text and icon color to be visible on light theme colors.</li>
|
||||
<li><b>FIX:</b> Play/pause button offset too far to the right in landscape mode.</li>
|
||||
</ol>
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<View> outViews = new ArrayList<>();
|
||||
final String overflowDescription = context.getString(R.string.abc_action_menu_overflow_description);
|
||||
toolbar.findViewsWithText(outViews, overflowDescription, View.FIND_VIEWS_WITH_CONTENT_DESCRIPTION);
|
||||
if (!outViews.isEmpty()) {
|
||||
try {
|
||||
ImageView overflowButton = (ImageView) outViews.get(0);
|
||||
overflowButton.setColorFilter(color, PorterDuff.Mode.SRC_IN);
|
||||
} catch (ClassCastException e) {
|
||||
Log.e("setToolbarIconColor", "overflow button is not an ImageView", e);
|
||||
}
|
||||
}
|
||||
|
||||
Menu menu = toolbar.getMenu();
|
||||
for (int i = 0; i < menu.size(); i++) {
|
||||
MenuItem item = menu.getItem(i);
|
||||
if (item.getIcon() != null) {
|
||||
item.getIcon().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);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
@ -7,7 +7,10 @@
|
|||
|
||||
<android.support.v7.widget.Toolbar
|
||||
android:id="@+id/toolbar"
|
||||
style="@style/Toolbar" />
|
||||
style="@style/Toolbar">
|
||||
|
||||
<include layout="@layout/search_bar" />
|
||||
</android.support.v7.widget.Toolbar>
|
||||
|
||||
<FrameLayout
|
||||
android:layout_width="match_parent"
|
||||
|
|
|
|||
37
app/src/main/res/layout/search_bar.xml
Normal file
37
app/src/main/res/layout/search_bar.xml
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<EditText
|
||||
android:id="@+id/search_src_text"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="36dip"
|
||||
android:layout_gravity="bottom"
|
||||
android:layout_weight="1"
|
||||
android:background="@null"
|
||||
android:ellipsize="end"
|
||||
android:imeOptions="actionSearch"
|
||||
android:inputType="text|textAutoComplete|textNoSuggestions"
|
||||
android:minWidth="@dimen/abc_search_view_text_min_width"
|
||||
android:paddingLeft="@dimen/abc_dropdownitem_text_padding_left"
|
||||
android:paddingRight="@dimen/abc_dropdownitem_text_padding_right"
|
||||
android:singleLine="true"
|
||||
android:textCursorDrawable="@null"
|
||||
tools:ignore="RtlHardcoded" />
|
||||
|
||||
<android.support.v7.internal.widget.TintImageView
|
||||
android:id="@+id/search_close_btn"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:background="?attr/selectableItemBackgroundBorderless"
|
||||
android:contentDescription="@string/abc_searchview_description_clear"
|
||||
android:focusable="true"
|
||||
android:paddingLeft="8dip"
|
||||
android:paddingRight="8dip"
|
||||
android:src="@drawable/ic_close_white_24dp" />
|
||||
</LinearLayout>
|
||||
|
|
@ -1,11 +0,0 @@
|
|||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
tools:context="com.kabouzeid.gramophone.ui.activities.SearchActivity">
|
||||
<item
|
||||
android:id="@+id/action_search"
|
||||
android:icon="@drawable/abc_ic_search_api_mtrl_alpha"
|
||||
android:title="@string/action_search"
|
||||
app:actionViewClass="android.support.v7.widget.SearchView"
|
||||
app:showAsAction="ifRoom|collapseActionView" />
|
||||
</menu>
|
||||
|
|
@ -23,8 +23,11 @@
|
|||
|
||||
<item name="toolbarPopupTheme">@style/ThemeOverlay.AppCompat</item>
|
||||
|
||||
<!-- FOR EVERYWHERE WE CANT OVERRIDE THE ACCENT COLOR-->
|
||||
<!-- just in case-->
|
||||
<item name="colorAccent">@android:color/white</item>
|
||||
|
||||
<!-- necessary to find the overflow button later in the layout-->
|
||||
<item name="android:actionOverflowButtonStyle">@style/Widget.ActionButton.Overflow</item>
|
||||
</style>
|
||||
|
||||
<style name="Theme.MaterialMusic.Base.Light" parent="Theme.AppCompat.Light.NoActionBar">
|
||||
|
|
@ -48,8 +51,11 @@
|
|||
|
||||
<item name="toolbarPopupTheme">@style/ThemeOverlay.AppCompat.Light</item>
|
||||
|
||||
<!-- FOR EVERYWHERE WE CANT OVERRIDE THE ACCENT COLOR-->
|
||||
<!-- just in case-->
|
||||
<item name="colorAccent">@android:color/black</item>
|
||||
|
||||
<!-- necessary to find the overflow button later in the layout-->
|
||||
<item name="android:actionOverflowButtonStyle">@style/Widget.ActionButton.Overflow</item>
|
||||
</style>
|
||||
|
||||
<style name="PlayPauseFabParent">
|
||||
|
|
@ -83,4 +89,9 @@
|
|||
<item name="android:focusableInTouchMode">false</item>
|
||||
<item name="android:focusable">false</item>
|
||||
</style>
|
||||
|
||||
<!-- content description is necessary to find the overflow button later in the layout-->
|
||||
<style name="Widget.ActionButton.Overflow" parent="Widget.AppCompat.ActionButton.Overflow">
|
||||
<item name="android:contentDescription">@string/abc_action_menu_overflow_description</item>
|
||||
</style>
|
||||
</resources>
|
||||
Loading…
Add table
Add a link
Reference in a new issue