diff --git a/src/org/lineageos/eleven/adapters/PlaylistAdapter.java b/src/org/lineageos/eleven/adapters/PlaylistAdapter.java index 364c3e70a349996cd263aabd9e354439c0780a31..b94be9b39430f25110317814218bd1563b0eb044 100644 --- a/src/org/lineageos/eleven/adapters/PlaylistAdapter.java +++ b/src/org/lineageos/eleven/adapters/PlaylistAdapter.java @@ -14,6 +14,7 @@ package org.lineageos.eleven.adapters; import android.content.Context; +import android.support.v4.graphics.drawable.DrawableCompat; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -25,6 +26,7 @@ import org.lineageos.eleven.cache.ImageFetcher; import org.lineageos.eleven.model.Playlist; import org.lineageos.eleven.ui.MusicHolder; import org.lineageos.eleven.ui.MusicHolder.DataHolder; +import org.lineageos.eleven.ui.activities.HomeActivity; import org.lineageos.eleven.ui.fragments.PlaylistFragment; import org.lineageos.eleven.utils.MusicUtils; import org.lineageos.eleven.widgets.IPopupMenuCallback; @@ -127,7 +129,7 @@ public class PlaylistAdapter extends ArrayAdapter implements IPopupMen dataHolder.mItemId, holder.mImage.get()); } - + DrawableCompat.setTint(DrawableCompat.wrap(holder.mImage.get().getDrawable()), HomeActivity.accentColor); return convertView; } diff --git a/src/org/lineageos/eleven/ui/activities/BaseActivity.java b/src/org/lineageos/eleven/ui/activities/BaseActivity.java index 9c2a2a6220353df78486a617bf66fd4845ac7c1b..b2cca7e15785fa29ec3ca14929ee07f4c6a5e96b 100644 --- a/src/org/lineageos/eleven/ui/activities/BaseActivity.java +++ b/src/org/lineageos/eleven/ui/activities/BaseActivity.java @@ -25,13 +25,19 @@ import android.content.ServiceConnection; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.media.AudioManager; +import android.os.Build; import android.os.Bundle; import android.os.IBinder; +import android.support.annotation.ColorInt; import android.support.v4.app.FragmentActivity; +import android.support.v7.view.ContextThemeWrapper; +import android.util.Log; import android.util.TypedValue; import android.view.Menu; import android.view.MenuItem; import android.view.View; +import android.view.Window; +import android.view.WindowManager; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; @@ -72,7 +78,7 @@ public abstract class BaseActivity extends FragmentActivity implements ServiceCo private Toolbar mToolBar; private int mActionBarHeight; - + private int accentColor; /** * The service token */ @@ -136,15 +142,19 @@ public abstract class BaseActivity extends FragmentActivity implements ServiceCo setActionBar(mToolBar); setActionBarTitle(getString(R.string.app_name)); - + mToolBar.setTitleTextColor(getResources().getColor(R.color.white)); // set the background on the root view - getWindow().getDecorView().getRootView().setBackgroundColor( - getResources().getColor(R.color.background_color)); + // getWindow().getDecorView().getRootView().setBackgroundColor( + // getResources().getColor(R.color.background_color)); // Initialze the bottom action bar initBottomActionBar(); // listen to changes to the cache status ImageFetcher.getInstance(this).addCacheListener(this); + accentColor=fetchAccentColor(this); + + mToolBar.setBackgroundColor(accentColor); + } /** @@ -283,7 +293,7 @@ public abstract class BaseActivity extends FragmentActivity implements ServiceCo if (mActionBarBackground == null) { final int actionBarColor = getResources().getColor(R.color.header_action_bar_color); mActionBarBackground = new ColorDrawable(actionBarColor); - mToolBar.setBackgroundDrawable(mActionBarBackground); + // mToolBar.setBackgroundDrawable(mActionBarBackground); } } @@ -488,4 +498,43 @@ public abstract class BaseActivity extends FragmentActivity implements ServiceCo * handle pending playback requests */ public abstract void handlePendingPlaybackRequests(); + + /* + * get Accent color from OS + * */ + private int fetchAccentColor(Context context) { + + TypedValue typedValue = new TypedValue(); + ContextThemeWrapper contextThemeWrapper = new ContextThemeWrapper(this, + android.R.style.Theme_DeviceDefault); + contextThemeWrapper.getTheme().resolveAttribute(android.R.attr.colorAccent, + typedValue, true); + int color_accent = typedValue.data; + Log.e("TAG", "accent Colour #"+Integer.toHexString(color_accent)); + + + //change toolbar color +// getSupportActionBar().setBackgroundDrawable( +// new ColorDrawable(color_accent)); +// + + //change status bar color + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + Window window = getWindow(); + window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + + window.setStatusBarColor(darkenColor(color_accent)); + } + + return color_accent; + } + + @ColorInt + int darkenColor(@ColorInt int color) { + float[] hsv = new float[3]; + android.graphics.Color.colorToHSV(color, hsv); + hsv[2] *= 0.8f; + return android.graphics.Color.HSVToColor(hsv); + } + } diff --git a/src/org/lineageos/eleven/ui/activities/HomeActivity.java b/src/org/lineageos/eleven/ui/activities/HomeActivity.java index 4ad5a4921e0ea632aeea52b67889673712d80e55..5f40d0550461dc7aee8aa08033b5ba7f8e4d21b5 100644 --- a/src/org/lineageos/eleven/ui/activities/HomeActivity.java +++ b/src/org/lineageos/eleven/ui/activities/HomeActivity.java @@ -18,6 +18,7 @@ package org.lineageos.eleven.ui.activities; import android.Manifest; import android.animation.ArgbEvaluator; import android.animation.ObjectAnimator; +import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.graphics.Bitmap; @@ -28,13 +29,17 @@ import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.provider.MediaStore; +import android.support.annotation.ColorInt; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; +import android.support.v7.view.ContextThemeWrapper; import android.text.TextUtils; import android.util.Log; +import android.util.TypedValue; import android.view.MenuItem; import android.view.Window; +import android.view.WindowManager; import org.lineageos.eleven.Config; import org.lineageos.eleven.R; @@ -79,7 +84,7 @@ public class HomeActivity extends SlidingPanelActivity implements private boolean mHasPendingPlaybackRequest = false; private Handler mHandler = new Handler(); private boolean mBrowsePanelActive = true; - + public static int accentColor; /** * Used by the up action to determine how to handle this */ @@ -94,6 +99,7 @@ public class HomeActivity extends SlidingPanelActivity implements if (!needRequestStoragePermission()) { init(); } + accentColor=fetchAccentColor(this); } private void init() { @@ -133,7 +139,7 @@ public class HomeActivity extends SlidingPanelActivity implements // figure which panel we are on and update the status bar mBrowsePanelActive = (getCurrentPanel() == Panel.Browse); - updateStatusBarColor(); + // updateStatusBarColor(); } // if intent wasn't UI related, process it as a audio playback request @@ -534,4 +540,42 @@ public class HomeActivity extends SlidingPanelActivity implements return true; } + /* + * get Accent color from OS + * */ + private int fetchAccentColor(Context context) { + + TypedValue typedValue = new TypedValue(); + ContextThemeWrapper contextThemeWrapper = new ContextThemeWrapper(this, + android.R.style.Theme_DeviceDefault); + contextThemeWrapper.getTheme().resolveAttribute(android.R.attr.colorAccent, + typedValue, true); + int color_accent = typedValue.data; + Log.e("TAG", "accent Colour #"+Integer.toHexString(color_accent)); + + + //change toolbar color +// getSupportActionBar().setBackgroundDrawable( +// new ColorDrawable(color_accent)); +// + + //change status bar color + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + Window window = getWindow(); + window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + + window.setStatusBarColor(darkenColor(color_accent)); + } + + return color_accent; + } + + @ColorInt + int darkenColor(@ColorInt int color) { + float[] hsv = new float[3]; + android.graphics.Color.colorToHSV(color, hsv); + hsv[2] *= 0.8f; + return android.graphics.Color.HSVToColor(hsv); + } + } diff --git a/src/org/lineageos/eleven/ui/activities/SearchActivity.java b/src/org/lineageos/eleven/ui/activities/SearchActivity.java index 0f767c82c9aa369ff8358bade32c2a0d5bc575f8..9acc2dacf734315c4ce865c4432b97c1dac5458f 100644 --- a/src/org/lineageos/eleven/ui/activities/SearchActivity.java +++ b/src/org/lineageos/eleven/ui/activities/SearchActivity.java @@ -20,20 +20,28 @@ import android.content.Context; import android.content.Intent; import android.content.ServiceConnection; import android.database.Cursor; +import android.graphics.drawable.ColorDrawable; import android.media.AudioManager; +import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.IBinder; import android.provider.BaseColumns; import android.provider.MediaStore; +import android.support.annotation.ColorInt; import android.support.v4.app.FragmentActivity; import android.support.v4.app.LoaderManager.LoaderCallbacks; import android.support.v4.content.Loader; +import android.support.v7.view.ContextThemeWrapper; import android.text.TextUtils; +import android.util.Log; +import android.util.TypedValue; import android.view.Menu; import android.view.MenuItem; import android.view.MotionEvent; import android.view.View; +import android.view.Window; +import android.view.WindowManager; import android.view.inputmethod.InputMethodManager; import android.widget.AbsListView; import android.widget.AbsListView.OnScrollListener; @@ -348,6 +356,8 @@ public class SearchActivity extends FragmentActivity implements // Start the loader for the search history getSupportLoaderManager().initLoader(HISTORY_LOADER, null, mSearchHistoryCallback); } + + actionBar.setBackgroundDrawable(new ColorDrawable(fetchAccentColor(this))); } /** @@ -978,4 +988,35 @@ public class SearchActivity extends FragmentActivity implements hideInputManager(); return false; } + /* + * get Accent color from OS + * */ + private int fetchAccentColor(Context context) { + + TypedValue typedValue = new TypedValue(); + ContextThemeWrapper contextThemeWrapper = new ContextThemeWrapper(this, + android.R.style.Theme_DeviceDefault); + contextThemeWrapper.getTheme().resolveAttribute(android.R.attr.colorAccent, + typedValue, true); + int color_accent = typedValue.data; + Log.e("TAG", "accent Colour #"+Integer.toHexString(color_accent)); + + //change status bar color + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + Window window = getWindow(); + window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + window.setStatusBarColor(darkenColor(color_accent)); + } + + return color_accent; + } + + @ColorInt + int darkenColor(@ColorInt int color) { + float[] hsv = new float[3]; + android.graphics.Color.colorToHSV(color, hsv); + hsv[2] *= 0.8f; + return android.graphics.Color.HSVToColor(hsv); + } + } diff --git a/src/org/lineageos/eleven/ui/activities/SettingsActivity.java b/src/org/lineageos/eleven/ui/activities/SettingsActivity.java index 982922fbb0dcb3a059a86b30263c553dc9781bf6..1ba541163b8f3b702d12bf49ec47d04c83cd6953 100644 --- a/src/org/lineageos/eleven/ui/activities/SettingsActivity.java +++ b/src/org/lineageos/eleven/ui/activities/SettingsActivity.java @@ -14,16 +14,25 @@ package org.lineageos.eleven.ui.activities; import android.app.AlertDialog; +import android.content.Context; import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; import android.content.SharedPreferences; import android.content.SharedPreferences.OnSharedPreferenceChangeListener; import android.content.pm.PackageManager; +import android.graphics.drawable.ColorDrawable; +import android.os.Build; import android.os.Bundle; import android.preference.Preference; import android.preference.Preference.OnPreferenceClickListener; import android.preference.PreferenceActivity; +import android.support.annotation.ColorInt; +import android.support.v7.view.ContextThemeWrapper; +import android.util.Log; +import android.util.TypedValue; import android.view.MenuItem; +import android.view.Window; +import android.view.WindowManager; import org.lineageos.eleven.R; import org.lineageos.eleven.cache.ImageFetcher; @@ -63,7 +72,7 @@ public class SettingsActivity extends PreferenceActivity implements OnSharedPref findPreference(BUILD_VERSION).setSummary(versionName); } catch (PackageManager.NameNotFoundException e) { } - + getActionBar().setBackgroundDrawable(new ColorDrawable(fetchAccentColor(this))); } @@ -123,4 +132,35 @@ public class SettingsActivity extends PreferenceActivity implements OnSharedPref MusicUtils.setShowAlbumArtOnLockscreen(sharedPreferences.getBoolean(key, true)); } } + + /* + * get Accent color from OS + * */ + private int fetchAccentColor(Context context) { + + TypedValue typedValue = new TypedValue(); + ContextThemeWrapper contextThemeWrapper = new ContextThemeWrapper(this, + android.R.style.Theme_DeviceDefault); + contextThemeWrapper.getTheme().resolveAttribute(android.R.attr.colorAccent, + typedValue, true); + int color_accent = typedValue.data; + Log.e("TAG", "accent Colour #"+Integer.toHexString(color_accent)); + + //change status bar color + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + Window window = getWindow(); + window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + window.setStatusBarColor(darkenColor(color_accent)); + } + + return color_accent; + } + + @ColorInt + int darkenColor(@ColorInt int color) { + float[] hsv = new float[3]; + android.graphics.Color.colorToHSV(color, hsv); + hsv[2] *= 0.8f; + return android.graphics.Color.HSVToColor(hsv); + } } diff --git a/src/org/lineageos/eleven/ui/activities/SlidingPanelActivity.java b/src/org/lineageos/eleven/ui/activities/SlidingPanelActivity.java index 0417d3691c6e24d790641af7132b224d7a446481..a4f573817a72c8b20bc1d710f8c8487a6570f26b 100644 --- a/src/org/lineageos/eleven/ui/activities/SlidingPanelActivity.java +++ b/src/org/lineageos/eleven/ui/activities/SlidingPanelActivity.java @@ -13,11 +13,19 @@ package org.lineageos.eleven.ui.activities; +import android.content.Context; import android.graphics.Color; +import android.os.Build; import android.os.Bundle; +import android.support.annotation.ColorInt; import android.support.v4.app.Fragment; import android.support.v4.view.ViewPager; +import android.support.v7.view.ContextThemeWrapper; +import android.util.Log; +import android.util.TypedValue; import android.view.View; +import android.view.Window; +import android.view.WindowManager; import android.widget.LinearLayout; import org.lineageos.eleven.R; @@ -50,7 +58,7 @@ public abstract class SlidingPanelActivity extends BaseActivity { private SlidingUpPanelLayout mFirstPanel; private SlidingUpPanelLayout mSecondPanel; protected Panel mTargetNavigatePanel; - + private int accentColor; private final ShowPanelClickListener mShowBrowse = new ShowPanelClickListener(Panel.Browse); private final ShowPanelClickListener mShowMusicPlayer = new ShowPanelClickListener(Panel.MusicPlayer); @@ -83,6 +91,10 @@ public abstract class SlidingPanelActivity extends BaseActivity { // Display the now playing screen or shuffle if this isn't anything // playing bottomActionBar.setOnClickListener(mOpenNowPlaying); + + accentColor= fetchAccentColor(this); + bottomActionBar.setBackgroundColor(accentColor); + } /** @@ -123,6 +135,7 @@ public abstract class SlidingPanelActivity extends BaseActivity { private void setupFirstPanel() { mFirstPanel = (SlidingUpPanelLayout)findViewById(R.id.sliding_layout); + mFirstPanel.setBackgroundColor(accentColor); mFirstPanel.setPanelSlideListener(new SimplePanelSlideListener() { @Override public void onPanelSlide(View panel, float slideOffset) { @@ -143,6 +156,7 @@ public abstract class SlidingPanelActivity extends BaseActivity { private void setupSecondPanel() { mSecondPanel = (SlidingUpPanelLayout)findViewById(R.id.sliding_layout2); + mSecondPanel.setBackgroundColor(accentColor); mSecondPanel.setPanelSlideListener(new SimplePanelSlideListener() { @Override public void onPanelSlide(View panel, float slideOffset) { @@ -300,10 +314,10 @@ public abstract class SlidingPanelActivity extends BaseActivity { final HeaderBar headerBar = (HeaderBar) findViewById(containerId); headerBar.setFragment(getQueueFragment()); headerBar.setTitleText(textId); - headerBar.setBackgroundColor(Color.TRANSPARENT); + // headerBar.setBackgroundColor(Color.TRANSPARENT); headerBar.setBackListener(mShowBrowse); headerBar.setHeaderClickListener(headerClickListener); - + headerBar.setBackgroundColor(accentColor); return headerBar; } @@ -320,4 +334,37 @@ public abstract class SlidingPanelActivity extends BaseActivity { showPanel(mTargetPanel); } } + + /* + * get Accent color from OS + * */ + private int fetchAccentColor(Context context) { + + TypedValue typedValue = new TypedValue(); + ContextThemeWrapper contextThemeWrapper = new ContextThemeWrapper(this, + android.R.style.Theme_DeviceDefault); + contextThemeWrapper.getTheme().resolveAttribute(android.R.attr.colorAccent, + typedValue, true); + int color_accent = typedValue.data; + Log.e("TAG", "accent Colour #"+Integer.toHexString(color_accent)); + + //change status bar color + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + Window window = getWindow(); + window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + + window.setStatusBarColor(darkenColor(color_accent)); + } + + return color_accent; + } + + @ColorInt + int darkenColor(@ColorInt int color) { + float[] hsv = new float[3]; + android.graphics.Color.colorToHSV(color, hsv); + hsv[2] *= 0.8f; + return android.graphics.Color.HSVToColor(hsv); + } + } diff --git a/src/org/lineageos/eleven/ui/fragments/phone/MusicBrowserPhoneFragment.java b/src/org/lineageos/eleven/ui/fragments/phone/MusicBrowserPhoneFragment.java index a93a85d66b1b64887b0bc9731c5b23eb83d2ff65..06ac9d59ca7e9808cfe503f66a36b078da22d701 100644 --- a/src/org/lineageos/eleven/ui/fragments/phone/MusicBrowserPhoneFragment.java +++ b/src/org/lineageos/eleven/ui/fragments/phone/MusicBrowserPhoneFragment.java @@ -13,12 +13,20 @@ package org.lineageos.eleven.ui.fragments.phone; +import android.content.Context; +import android.os.Build; import android.os.Bundle; +import android.support.annotation.ColorInt; import android.support.v4.app.Fragment; import android.support.v4.view.ViewPager; +import android.support.v7.view.ContextThemeWrapper; +import android.util.Log; +import android.util.TypedValue; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; +import android.view.Window; +import android.view.WindowManager; import org.lineageos.eleven.R; import org.lineageos.eleven.adapters.PagerAdapter; @@ -58,10 +66,12 @@ public class MusicBrowserPhoneFragment extends BaseFragment { private PreferenceUtils mPreferences; + private int ACCENT_COLOR; /** * A pre-defined page index to navigate to */ private int mDefaultPageIdx = INVALID_PAGE_INDEX; + private ViewPagerTabs tabs; /** * Empty constructor as per the {@link Fragment} documentation @@ -87,6 +97,14 @@ public class MusicBrowserPhoneFragment extends BaseFragment { super.onCreate(savedInstanceState); // Get the preferences mPreferences = PreferenceUtils.getInstance(getActivity()); + + ACCENT_COLOR=fetchAccentColor(getActivity()); + } + + @Override + public void onResume() { + super.onResume(); + tabs.setBackgroundColor(ACCENT_COLOR); } @Override @@ -109,7 +127,7 @@ public class MusicBrowserPhoneFragment extends BaseFragment { mViewPager.setOffscreenPageLimit(mPagerAdapter.getCount() - 1); // Initialize the tab strip - final ViewPagerTabs tabs = (ViewPagerTabs) + tabs = (ViewPagerTabs) mRootView.findViewById(R.id.fragment_home_phone_pager_titles); // Attach the ViewPager tabs.setViewPager(mViewPager); @@ -318,4 +336,36 @@ public class MusicBrowserPhoneFragment extends BaseFragment { private boolean isPlaylistPage() { return mViewPager.getCurrentItem() == MusicFragments.PLAYLIST.ordinal(); } + /* + * get Accent color from OS + * */ + private int fetchAccentColor(Context context) { + + TypedValue typedValue = new TypedValue(); + ContextThemeWrapper contextThemeWrapper = new ContextThemeWrapper(getActivity(), + android.R.style.Theme_DeviceDefault); + contextThemeWrapper.getTheme().resolveAttribute(android.R.attr.colorAccent, + typedValue, true); + int color_accent = typedValue.data; + Log.e("TAG", "accent Colour #"+Integer.toHexString(color_accent)); + + //change status bar color + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + Window window = getActivity().getWindow(); + window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + + window.setStatusBarColor(darkenColor(color_accent)); + } + + return color_accent; + } + + @ColorInt + int darkenColor(@ColorInt int color) { + float[] hsv = new float[3]; + android.graphics.Color.colorToHSV(color, hsv); + hsv[2] *= 0.8f; + return android.graphics.Color.HSVToColor(hsv); + } + } diff --git a/src/org/lineageos/eleven/widgets/ViewPagerTabs.java b/src/org/lineageos/eleven/widgets/ViewPagerTabs.java index 10a78230a7f40b71b0fa3df562da14ecaffd85b2..20c84d117abc33c3d4178f3afe23863c4b674deb 100644 --- a/src/org/lineageos/eleven/widgets/ViewPagerTabs.java +++ b/src/org/lineageos/eleven/widgets/ViewPagerTabs.java @@ -33,6 +33,7 @@ import android.widget.TextView; import android.widget.Toast; import org.lineageos.eleven.R; +import org.lineageos.eleven.ui.activities.HomeActivity; /** * Lightweight implementation of ViewPager tabs. This looks similar to traditional actionBar tabs, @@ -127,6 +128,7 @@ public class ViewPagerTabs extends HorizontalScrollView implements ViewPager.OnP mTextAllCaps = a.getBoolean(3, false); mTabStrip = new ViewPagerTabStrip(context); + mTabStrip.setBackgroundColor(HomeActivity.accentColor); addView(mTabStrip, new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT)); a.recycle();