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>
|
<h3>Version 0.9.44 beta4</h3>
|
||||||
|
|
||||||
<ol>
|
<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>
|
<li><b>FIX:</b> Play/pause button offset too far to the right in landscape mode.</li>
|
||||||
</ol>
|
</ol>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -51,7 +51,6 @@ import com.kabouzeid.gramophone.util.ColorUtil;
|
||||||
import com.kabouzeid.gramophone.util.MusicUtil;
|
import com.kabouzeid.gramophone.util.MusicUtil;
|
||||||
import com.kabouzeid.gramophone.util.NavigationUtil;
|
import com.kabouzeid.gramophone.util.NavigationUtil;
|
||||||
import com.kabouzeid.gramophone.util.Util;
|
import com.kabouzeid.gramophone.util.Util;
|
||||||
import com.kabouzeid.gramophone.util.ViewUtil;
|
|
||||||
import com.kabouzeid.gramophone.views.SquareIfPlaceImageView;
|
import com.kabouzeid.gramophone.views.SquareIfPlaceImageView;
|
||||||
import com.nostra13.universalimageloader.core.DisplayImageOptions;
|
import com.nostra13.universalimageloader.core.DisplayImageOptions;
|
||||||
import com.nostra13.universalimageloader.core.ImageLoader;
|
import com.nostra13.universalimageloader.core.ImageLoader;
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,6 @@ import android.os.Bundle;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.IBinder;
|
import android.os.IBinder;
|
||||||
import android.provider.MediaStore;
|
import android.provider.MediaStore;
|
||||||
import android.support.annotation.ColorInt;
|
|
||||||
import android.support.annotation.LayoutRes;
|
import android.support.annotation.LayoutRes;
|
||||||
import android.support.annotation.NonNull;
|
import android.support.annotation.NonNull;
|
||||||
import android.support.annotation.Nullable;
|
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.activities.base.AbsSlidingMusicPanelActivity;
|
||||||
import com.kabouzeid.gramophone.ui.fragments.mainactivityfragments.AbsMainActivityFragment;
|
import com.kabouzeid.gramophone.ui.fragments.mainactivityfragments.AbsMainActivityFragment;
|
||||||
import com.kabouzeid.gramophone.ui.fragments.mainactivityfragments.AbsMainActivityRecyclerViewLayoutModeFragment;
|
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.MusicUtil;
|
||||||
import com.kabouzeid.gramophone.util.NavigationUtil;
|
import com.kabouzeid.gramophone.util.NavigationUtil;
|
||||||
import com.kabouzeid.gramophone.util.PreferenceUtil;
|
import com.kabouzeid.gramophone.util.PreferenceUtil;
|
||||||
|
|
@ -75,8 +75,6 @@ import com.nostra13.universalimageloader.core.ImageLoader;
|
||||||
import com.sothree.slidinguppanel.SlidingUpPanelLayout;
|
import com.sothree.slidinguppanel.SlidingUpPanelLayout;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.lang.reflect.Field;
|
|
||||||
import java.lang.reflect.Method;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
@ -154,7 +152,8 @@ public class MainActivity extends AbsSlidingMusicPanelActivity
|
||||||
navigationView.getMenu().getItem(startPosition).setChecked(true);
|
navigationView.getMenu().getItem(startPosition).setChecked(true);
|
||||||
|
|
||||||
tabs.setupWithViewPager(pager);
|
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() {
|
pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -176,21 +175,6 @@ public class MainActivity extends AbsSlidingMusicPanelActivity
|
||||||
pager.setCurrentItem(startPosition);
|
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() {
|
private void setUpToolbar() {
|
||||||
toolbar.setNavigationIcon(R.drawable.ic_menu_white_24dp);
|
toolbar.setNavigationIcon(R.drawable.ic_menu_white_24dp);
|
||||||
setTitle(getResources().getString(R.string.app_name));
|
setTitle(getResources().getString(R.string.app_name));
|
||||||
|
|
@ -361,6 +345,7 @@ public class MainActivity extends AbsSlidingMusicPanelActivity
|
||||||
} else {
|
} else {
|
||||||
menu.removeItem(R.id.action_view_as);
|
menu.removeItem(R.id.action_view_as);
|
||||||
}
|
}
|
||||||
|
ViewUtil.setToolbarContentColorForBackground(this, toolbar, getThemeColorPrimary());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -25,8 +25,10 @@ import com.kabouzeid.gramophone.model.PlaylistSong;
|
||||||
import com.kabouzeid.gramophone.model.Song;
|
import com.kabouzeid.gramophone.model.Song;
|
||||||
import com.kabouzeid.gramophone.model.smartplaylist.AbsSmartPlaylist;
|
import com.kabouzeid.gramophone.model.smartplaylist.AbsSmartPlaylist;
|
||||||
import com.kabouzeid.gramophone.ui.activities.base.AbsSlidingMusicPanelActivity;
|
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.NavigationUtil;
|
||||||
import com.kabouzeid.gramophone.util.PlaylistsUtil;
|
import com.kabouzeid.gramophone.util.PlaylistsUtil;
|
||||||
|
import com.kabouzeid.gramophone.util.ViewUtil;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
@ -159,6 +161,7 @@ public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity impleme
|
||||||
@Override
|
@Override
|
||||||
public boolean onCreateOptionsMenu(Menu menu) {
|
public boolean onCreateOptionsMenu(Menu menu) {
|
||||||
getMenuInflater().inflate(R.menu.menu_playlist_detail, menu);
|
getMenuInflater().inflate(R.menu.menu_playlist_detail, menu);
|
||||||
|
ViewUtil.setToolbarContentColorForBackground(this, toolbar, getThemeColorPrimary());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,28 +1,30 @@
|
||||||
package com.kabouzeid.gramophone.ui.activities;
|
package com.kabouzeid.gramophone.ui.activities;
|
||||||
|
|
||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
||||||
import android.app.ActionBar;
|
|
||||||
import android.graphics.Color;
|
|
||||||
import android.graphics.PorterDuff;
|
import android.graphics.PorterDuff;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.annotation.NonNull;
|
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.LinearLayoutManager;
|
||||||
import android.support.v7.widget.RecyclerView;
|
import android.support.v7.widget.RecyclerView;
|
||||||
import android.support.v7.widget.SearchView;
|
|
||||||
import android.support.v7.widget.Toolbar;
|
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.MenuItem;
|
||||||
import android.view.MotionEvent;
|
import android.view.MotionEvent;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
import android.view.inputmethod.EditorInfo;
|
||||||
|
import android.widget.EditText;
|
||||||
|
import android.widget.ImageView;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import com.kabouzeid.gramophone.R;
|
import com.kabouzeid.gramophone.R;
|
||||||
import com.kabouzeid.gramophone.adapter.SearchAdapter;
|
import com.kabouzeid.gramophone.adapter.SearchAdapter;
|
||||||
import com.kabouzeid.gramophone.ui.activities.base.AbsMusicServiceActivity;
|
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.Util;
|
||||||
|
import com.kabouzeid.gramophone.util.ViewUtil;
|
||||||
|
|
||||||
import butterknife.Bind;
|
import butterknife.Bind;
|
||||||
import butterknife.ButterKnife;
|
import butterknife.ButterKnife;
|
||||||
|
|
@ -34,15 +36,16 @@ public class SearchActivity extends AbsMusicServiceActivity {
|
||||||
RecyclerView recyclerView;
|
RecyclerView recyclerView;
|
||||||
@Bind(R.id.toolbar)
|
@Bind(R.id.toolbar)
|
||||||
Toolbar toolbar;
|
Toolbar toolbar;
|
||||||
|
@Bind(R.id.search_src_text)
|
||||||
|
EditText searchSrcText;
|
||||||
|
@Bind(R.id.search_close_btn)
|
||||||
|
ImageView searchCloseBtn;
|
||||||
@SuppressWarnings("ButterKnifeNoViewWithId")
|
@SuppressWarnings("ButterKnifeNoViewWithId")
|
||||||
@Bind(android.R.id.empty)
|
@Bind(android.R.id.empty)
|
||||||
TextView empty;
|
TextView empty;
|
||||||
|
|
||||||
private SearchView searchView;
|
|
||||||
private SearchAdapter searchAdapter;
|
private SearchAdapter searchAdapter;
|
||||||
|
|
||||||
private String searchQuery = "";
|
|
||||||
|
|
||||||
@SuppressLint("NewApi")
|
@SuppressLint("NewApi")
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
|
|
@ -59,23 +62,75 @@ public class SearchActivity extends AbsMusicServiceActivity {
|
||||||
@Override
|
@Override
|
||||||
public boolean onTouch(View v, MotionEvent event) {
|
public boolean onTouch(View v, MotionEvent event) {
|
||||||
Util.hideSoftKeyboard(SearchActivity.this);
|
Util.hideSoftKeyboard(SearchActivity.this);
|
||||||
if (searchView != null) {
|
searchSrcText.clearFocus();
|
||||||
searchView.clearFocus();
|
|
||||||
}
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
toolbar.setBackgroundColor(getThemeColorPrimary());
|
setUpToolBar();
|
||||||
setSupportActionBar(toolbar);
|
setUpSearchBar();
|
||||||
//noinspection ConstantConditions
|
|
||||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
|
||||||
|
|
||||||
if (shouldColorNavigationBar())
|
if (shouldColorNavigationBar())
|
||||||
setNavigationBarThemeColor();
|
setNavigationBarThemeColor();
|
||||||
setStatusBarThemeColor();
|
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
|
@Override
|
||||||
public void enableViews() {
|
public void enableViews() {
|
||||||
super.enableViews();
|
super.enableViews();
|
||||||
|
|
@ -89,58 +144,14 @@ public class SearchActivity extends AbsMusicServiceActivity {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onCreateOptionsMenu(@NonNull Menu menu) {
|
public boolean onOptionsItemSelected(MenuItem item) {
|
||||||
getMenuInflater().inflate(R.menu.menu_search, menu);
|
if (item.getItemId() == android.R.id.home) {
|
||||||
|
super.onBackPressed();
|
||||||
final MenuItem search = menu.findItem(R.id.action_search);
|
}
|
||||||
searchView = (SearchView) MenuItemCompat.getActionView(search);
|
return super.onOptionsItemSelected(item);
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void search(@NonNull String query) {
|
private void search(@NonNull String query) {
|
||||||
searchQuery = query;
|
|
||||||
if (searchAdapter != null) {
|
if (searchAdapter != null) {
|
||||||
searchAdapter.search(query);
|
searchAdapter.search(query);
|
||||||
empty.setVisibility(searchAdapter.getItemCount() < 1 ? View.VISIBLE : View.GONE);
|
empty.setVisibility(searchAdapter.getItemCount() < 1 ? View.VISIBLE : View.GONE);
|
||||||
|
|
@ -150,6 +161,6 @@ public class SearchActivity extends AbsMusicServiceActivity {
|
||||||
@Override
|
@Override
|
||||||
public void onMediaStoreChanged() {
|
public void onMediaStoreChanged() {
|
||||||
super.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.NonNull;
|
||||||
import android.support.annotation.Nullable;
|
import android.support.annotation.Nullable;
|
||||||
import android.support.v7.widget.Toolbar;
|
import android.support.v7.widget.Toolbar;
|
||||||
|
import android.view.Menu;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
|
||||||
|
|
@ -22,20 +23,28 @@ import com.kabouzeid.gramophone.dialogs.ColorChooserDialog;
|
||||||
import com.kabouzeid.gramophone.helper.ColorPalette;
|
import com.kabouzeid.gramophone.helper.ColorPalette;
|
||||||
import com.kabouzeid.gramophone.prefs.ColorChooserPreference;
|
import com.kabouzeid.gramophone.prefs.ColorChooserPreference;
|
||||||
import com.kabouzeid.gramophone.ui.activities.base.AbsBaseActivity;
|
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.NavigationUtil;
|
||||||
import com.kabouzeid.gramophone.util.PreferenceUtil;
|
import com.kabouzeid.gramophone.util.PreferenceUtil;
|
||||||
|
import com.kabouzeid.gramophone.util.ViewUtil;
|
||||||
import com.nostra13.universalimageloader.core.ImageLoader;
|
import com.nostra13.universalimageloader.core.ImageLoader;
|
||||||
|
|
||||||
|
import butterknife.Bind;
|
||||||
|
import butterknife.ButterKnife;
|
||||||
|
|
||||||
public class SettingsActivity extends AbsBaseActivity implements ColorChooserDialog.ColorCallback {
|
public class SettingsActivity extends AbsBaseActivity implements ColorChooserDialog.ColorCallback {
|
||||||
public static final String TAG = SettingsActivity.class.getSimpleName();
|
public static final String TAG = SettingsActivity.class.getSimpleName();
|
||||||
|
|
||||||
|
@Bind(R.id.toolbar)
|
||||||
|
Toolbar toolbar;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
setContentView(R.layout.activity_preferences);
|
setContentView(R.layout.activity_preferences);
|
||||||
setStatusBarTransparent();
|
setStatusBarTransparent();
|
||||||
|
ButterKnife.bind(this);
|
||||||
|
|
||||||
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
|
|
||||||
toolbar.setBackgroundColor(getThemeColorPrimary());
|
toolbar.setBackgroundColor(getThemeColorPrimary());
|
||||||
setSupportActionBar(toolbar);
|
setSupportActionBar(toolbar);
|
||||||
//noinspection ConstantConditions
|
//noinspection ConstantConditions
|
||||||
|
|
@ -71,6 +80,12 @@ public class SettingsActivity extends AbsBaseActivity implements ColorChooserDia
|
||||||
return super.onOptionsItemSelected(item);
|
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 {
|
public static class SettingsFragment extends PreferenceFragment {
|
||||||
|
|
||||||
private static void setSummary(@NonNull Preference preference) {
|
private static void setSummary(@NonNull Preference preference) {
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@ import android.content.res.ColorStateList;
|
||||||
import android.graphics.Bitmap;
|
import android.graphics.Bitmap;
|
||||||
import android.graphics.Color;
|
import android.graphics.Color;
|
||||||
import android.graphics.PorterDuff;
|
import android.graphics.PorterDuff;
|
||||||
|
import android.graphics.drawable.Drawable;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
|
|
@ -846,8 +847,9 @@ public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivi
|
||||||
|
|
||||||
private void updatePlayerMenu() {
|
private void updatePlayerMenu() {
|
||||||
boolean isFavorite = MusicUtil.isFavorite(this, song);
|
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)
|
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));
|
.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) {
|
if (opaqueToolBar) {
|
||||||
animatorSetBuilder.with(ViewUtil.createBackgroundColorTransition(playerToolbar, lastFooterColor, newColor));
|
animatorSetBuilder.with(ViewUtil.createBackgroundColorTransition(playerToolbar, lastFooterColor, newColor));
|
||||||
|
ViewUtil.setToolbarContentColorForBackground(this, playerToolbar, newColor);
|
||||||
} else {
|
} else {
|
||||||
playerToolbar.setBackgroundColor(Color.TRANSPARENT);
|
playerToolbar.setBackgroundColor(Color.TRANSPARENT);
|
||||||
|
ViewUtil.setToolbarContentDark(this, playerToolbar, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (opaqueStatusBar) {
|
if (opaqueStatusBar) {
|
||||||
|
|
@ -1159,7 +1163,7 @@ public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivi
|
||||||
@Override
|
@Override
|
||||||
public void set(FloatingActionButton object, Integer value) {
|
public void set(FloatingActionButton object, Integer value) {
|
||||||
object.setBackgroundTintList(ColorStateList.valueOf(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
|
@Override
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,7 @@ import android.support.design.widget.FloatingActionButton;
|
||||||
import android.support.v7.graphics.Palette;
|
import android.support.v7.graphics.Palette;
|
||||||
import android.support.v7.widget.Toolbar;
|
import android.support.v7.widget.Toolbar;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
import android.view.Menu;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.animation.OvershootInterpolator;
|
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.ColorUtil;
|
||||||
import com.kabouzeid.gramophone.util.MusicUtil;
|
import com.kabouzeid.gramophone.util.MusicUtil;
|
||||||
import com.kabouzeid.gramophone.util.Util;
|
import com.kabouzeid.gramophone.util.Util;
|
||||||
|
import com.kabouzeid.gramophone.util.ViewUtil;
|
||||||
import com.nostra13.universalimageloader.core.ImageLoader;
|
import com.nostra13.universalimageloader.core.ImageLoader;
|
||||||
|
|
||||||
import org.jaudiotagger.audio.AudioFile;
|
import org.jaudiotagger.audio.AudioFile;
|
||||||
|
|
@ -192,7 +194,7 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity {
|
||||||
});
|
});
|
||||||
|
|
||||||
int fabColor = getThemeColorAccent();
|
int fabColor = getThemeColorAccent();
|
||||||
int fabDrawableColor = ColorUtil.getFabDrawableColorForBackground(this, fabColor);
|
int fabDrawableColor = ColorUtil.getPrimaryTextColorForBackground(this, fabColor);
|
||||||
fab.setBackgroundTintList(ColorStateList.valueOf(fabColor));
|
fab.setBackgroundTintList(ColorStateList.valueOf(fabColor));
|
||||||
fab.getDrawable().setColorFilter(fabDrawableColor, PorterDuff.Mode.SRC_IN);
|
fab.getDrawable().setColorFilter(fabDrawableColor, PorterDuff.Mode.SRC_IN);
|
||||||
}
|
}
|
||||||
|
|
@ -206,6 +208,7 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity {
|
||||||
if (shouldColorNavigationBar())
|
if (shouldColorNavigationBar())
|
||||||
setNavigationBarColor(paletteColorPrimary);
|
setNavigationBarColor(paletteColorPrimary);
|
||||||
header.setBackgroundColor(paletteColorPrimary);
|
header.setBackgroundColor(paletteColorPrimary);
|
||||||
|
ViewUtil.setToolbarContentColorForBackground(this, toolbar, paletteColorPrimary);
|
||||||
notifyTaskColorChange(paletteColorPrimary);
|
notifyTaskColorChange(paletteColorPrimary);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -245,6 +248,11 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity {
|
||||||
return super.onOptionsItemSelected(item);
|
return super.onOptionsItemSelected(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onCreateOptionsMenu(Menu menu) {
|
||||||
|
ViewUtil.setToolbarContentColorForBackground(this, toolbar, paletteColorPrimary);
|
||||||
|
return super.onCreateOptionsMenu(menu);
|
||||||
|
}
|
||||||
|
|
||||||
protected void setNoImageMode() {
|
protected void setNoImageMode() {
|
||||||
isInNoImageMode = true;
|
isInNoImageMode = true;
|
||||||
|
|
@ -305,6 +313,7 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity {
|
||||||
setNavigationBarColor(paletteColorPrimary);
|
setNavigationBarColor(paletteColorPrimary);
|
||||||
setStatusBarColor(paletteColorPrimary);
|
setStatusBarColor(paletteColorPrimary);
|
||||||
header.setBackgroundColor(paletteColorPrimary);
|
header.setBackgroundColor(paletteColorPrimary);
|
||||||
|
ViewUtil.setToolbarContentColorForBackground(AbsTagEditorActivity.this, toolbar, paletteColorPrimary);
|
||||||
notifyTaskColorChange(paletteColorPrimary);
|
notifyTaskColorChange(paletteColorPrimary);
|
||||||
} else {
|
} else {
|
||||||
resetColors();
|
resetColors();
|
||||||
|
|
|
||||||
|
|
@ -109,11 +109,7 @@ public class ColorUtil {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean useDarkTextColorOnBackground(@ColorInt int backgroundColor) {
|
public static boolean useDarkTextColorOnBackground(@ColorInt int backgroundColor) {
|
||||||
return getLuminance(backgroundColor) > (255f / 2f);
|
return getLuminance(backgroundColor) > (255f / 1.5f);
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean useDarkFabDrawableOnBackground(@ColorInt int backgroundColor) {
|
|
||||||
return getLuminance(backgroundColor) > (255f / 1.3f);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ColorInt
|
@ColorInt
|
||||||
|
|
@ -125,9 +121,4 @@ public class ColorUtil {
|
||||||
public static int getSecondaryTextColorForBackground(final Context context, @ColorInt int backgroundColor) {
|
public static int getSecondaryTextColorForBackground(final Context context, @ColorInt int backgroundColor) {
|
||||||
return getSecondaryTextColor(context, useDarkTextColorOnBackground(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.Animator;
|
||||||
import android.animation.ArgbEvaluator;
|
import android.animation.ArgbEvaluator;
|
||||||
import android.animation.ObjectAnimator;
|
import android.animation.ObjectAnimator;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.graphics.PorterDuff;
|
||||||
|
import android.graphics.drawable.Drawable;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
|
import android.support.annotation.ColorInt;
|
||||||
import android.support.annotation.NonNull;
|
import android.support.annotation.NonNull;
|
||||||
import android.support.annotation.Nullable;
|
import android.support.annotation.Nullable;
|
||||||
import android.support.v7.internal.view.menu.ListMenuItemView;
|
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.ActionMenuPresenter;
|
||||||
import android.support.v7.widget.ActionMenuView;
|
import android.support.v7.widget.ActionMenuView;
|
||||||
import android.support.v7.widget.Toolbar;
|
import android.support.v7.widget.Toolbar;
|
||||||
|
import android.util.Log;
|
||||||
import android.view.Menu;
|
import android.view.Menu;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewTreeObserver;
|
import android.view.ViewTreeObserver;
|
||||||
import android.view.animation.PathInterpolator;
|
import android.view.animation.PathInterpolator;
|
||||||
import android.widget.CheckBox;
|
import android.widget.CheckBox;
|
||||||
|
import android.widget.EditText;
|
||||||
|
import android.widget.ImageView;
|
||||||
import android.widget.ListView;
|
import android.widget.ListView;
|
||||||
import android.widget.RadioButton;
|
import android.widget.RadioButton;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import com.afollestad.materialdialogs.ThemeSingleton;
|
import com.afollestad.materialdialogs.ThemeSingleton;
|
||||||
import com.afollestad.materialdialogs.internal.MDTintHelper;
|
import com.afollestad.materialdialogs.internal.MDTintHelper;
|
||||||
|
import com.kabouzeid.gramophone.R;
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Karim Abou Zeid (kabouzeid)
|
* @author Karim Abou Zeid (kabouzeid)
|
||||||
|
|
@ -62,7 +71,8 @@ public class ViewUtil {
|
||||||
*
|
*
|
||||||
* @param toolbar the toolbar to apply the tint on
|
* @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() {
|
toolbar.post(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
|
|
@ -92,49 +102,106 @@ public class ViewUtil {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setTintForMenuPopupHelper(@Nullable MenuPopupHelper menuPopupHelper) {
|
public static void setTintForMenuPopupHelper(@Nullable MenuPopupHelper menuPopupHelper) {
|
||||||
if (menuPopupHelper != null) {
|
if (menuPopupHelper == null) return;
|
||||||
final ListView listView = menuPopupHelper.getPopup().getListView();
|
final ListView listView = menuPopupHelper.getPopup().getListView();
|
||||||
listView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
|
listView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onGlobalLayout() {
|
public void onGlobalLayout() {
|
||||||
try {
|
try {
|
||||||
Field checkboxField = ListMenuItemView.class.getDeclaredField("mCheckBox");
|
Field checkboxField = ListMenuItemView.class.getDeclaredField("mCheckBox");
|
||||||
checkboxField.setAccessible(true);
|
checkboxField.setAccessible(true);
|
||||||
Field radioButtonField = ListMenuItemView.class.getDeclaredField("mRadioButton");
|
Field radioButtonField = ListMenuItemView.class.getDeclaredField("mRadioButton");
|
||||||
radioButtonField.setAccessible(true);
|
radioButtonField.setAccessible(true);
|
||||||
|
|
||||||
for (int i = 0; i < listView.getChildCount(); i++) {
|
for (int i = 0; i < listView.getChildCount(); i++) {
|
||||||
View v = listView.getChildAt(i);
|
View v = listView.getChildAt(i);
|
||||||
if (!(v instanceof ListMenuItemView)) continue;
|
if (!(v instanceof ListMenuItemView)) continue;
|
||||||
ListMenuItemView iv = (ListMenuItemView) v;
|
ListMenuItemView iv = (ListMenuItemView) v;
|
||||||
|
|
||||||
CheckBox check = (CheckBox) checkboxField.get(iv);
|
CheckBox check = (CheckBox) checkboxField.get(iv);
|
||||||
if (check != null) {
|
if (check != null) {
|
||||||
MDTintHelper.setTint(check, ThemeSingleton.get().positiveColor.getDefaultColor());
|
MDTintHelper.setTint(check, ThemeSingleton.get().positiveColor.getDefaultColor());
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||||
check.setBackground(null);
|
check.setBackground(null);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
RadioButton radioButton = (RadioButton) radioButtonField.get(iv);
|
RadioButton radioButton = (RadioButton) radioButtonField.get(iv);
|
||||||
if (radioButton != null) {
|
if (radioButton != null) {
|
||||||
MDTintHelper.setTint(radioButton, ThemeSingleton.get().positiveColor.getDefaultColor());
|
MDTintHelper.setTint(radioButton, ThemeSingleton.get().positiveColor.getDefaultColor());
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||||
radioButton.setBackground(null);
|
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.support.v7.widget.Toolbar
|
||||||
android:id="@+id/toolbar"
|
android:id="@+id/toolbar"
|
||||||
style="@style/Toolbar" />
|
style="@style/Toolbar">
|
||||||
|
|
||||||
|
<include layout="@layout/search_bar" />
|
||||||
|
</android.support.v7.widget.Toolbar>
|
||||||
|
|
||||||
<FrameLayout
|
<FrameLayout
|
||||||
android:layout_width="match_parent"
|
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>
|
<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>
|
<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>
|
||||||
|
|
||||||
<style name="Theme.MaterialMusic.Base.Light" parent="Theme.AppCompat.Light.NoActionBar">
|
<style name="Theme.MaterialMusic.Base.Light" parent="Theme.AppCompat.Light.NoActionBar">
|
||||||
|
|
@ -48,8 +51,11 @@
|
||||||
|
|
||||||
<item name="toolbarPopupTheme">@style/ThemeOverlay.AppCompat.Light</item>
|
<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>
|
<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>
|
||||||
|
|
||||||
<style name="PlayPauseFabParent">
|
<style name="PlayPauseFabParent">
|
||||||
|
|
@ -83,4 +89,9 @@
|
||||||
<item name="android:focusableInTouchMode">false</item>
|
<item name="android:focusableInTouchMode">false</item>
|
||||||
<item name="android:focusable">false</item>
|
<item name="android:focusable">false</item>
|
||||||
</style>
|
</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>
|
</resources>
|
||||||
Loading…
Add table
Add a link
Reference in a new issue