From 1117827957cef5af432d64ecb70345a9a895de1b Mon Sep 17 00:00:00 2001 From: Narinder Rana Date: Thu, 10 Sep 2020 17:13:24 +0530 Subject: [PATCH] get Accent color and impl on Home screen, tabs, bottom view, Search Activity, Setting Activity --- .../eleven/adapters/PlaylistAdapter.java | 4 +- .../eleven/ui/activities/BaseActivity.java | 59 +++++++++++++++++-- .../eleven/ui/activities/HomeActivity.java | 48 ++++++++++++++- .../eleven/ui/activities/SearchActivity.java | 41 +++++++++++++ .../ui/activities/SettingsActivity.java | 42 ++++++++++++- .../ui/activities/SlidingPanelActivity.java | 53 ++++++++++++++++- .../phone/MusicBrowserPhoneFragment.java | 52 +++++++++++++++- .../eleven/widgets/ViewPagerTabs.java | 2 + 8 files changed, 288 insertions(+), 13 deletions(-) diff --git a/src/org/lineageos/eleven/adapters/PlaylistAdapter.java b/src/org/lineageos/eleven/adapters/PlaylistAdapter.java index 364c3e70..b94be9b3 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 9c2a2a62..b2cca7e1 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 4ad5a492..5f40d055 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 0f767c82..9acc2dac 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 982922fb..1ba54116 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 0417d369..a4f57381 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 a93a85d6..06ac9d59 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 10a78230..20c84d11 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(); -- GitLab