From 2d822cdbc96ed499c03cddcb656100607922b754 Mon Sep 17 00:00:00 2001 From: Aidan Follestad Date: Sat, 18 Apr 2015 02:19:59 -0500 Subject: [PATCH] More fixes for translucent UI with newer correct status bar coloring implementation on Lollipop. The status bar color is still slightly miscolored in the artist and album viewer since the translucent status bar darkens it . --- app/build.gradle | 1 + .../ui/activities/AlbumDetailActivity.java | 9 ++++++--- .../ui/activities/ArtistDetailActivity.java | 9 ++++++--- .../activities/MusicControllerActivity.java | 5 +++++ .../ui/activities/base/ThemeBaseActivity.java | 15 +++++++++++++-- .../tageditor/AbsTagEditorActivity.java | 18 ++++++++---------- .../main/res/layout/activity_album_detail.xml | 19 +++++++++---------- .../res/layout/activity_artist_detail.xml | 13 +++++++------ .../res/layout/activity_music_controller.xml | 1 + 9 files changed, 56 insertions(+), 34 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 7afa026f..eadaf138 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -71,4 +71,5 @@ dependencies { compile 'com.jpardogo.materialtabstrip:library:1.0.9' compile 'com.android.support:support-v4:22.0.0' compile 'com.koushikdutta.ion:ion:2.1.3' + compile 'com.readystatesoftware.systembartint:systembartint:1.0.3' } diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AlbumDetailActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AlbumDetailActivity.java index 30b77327..4cc159e2 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AlbumDetailActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AlbumDetailActivity.java @@ -22,6 +22,7 @@ import com.kabouzeid.gramophone.App; import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.adapter.songadapter.AlbumSongAdapter; import com.kabouzeid.gramophone.comparator.SongTrackNumberComparator; +import com.kabouzeid.gramophone.dialogs.ColorChooserDialog; import com.kabouzeid.gramophone.helper.MusicPlayerRemote; import com.kabouzeid.gramophone.interfaces.PaletteColorHolder; import com.kabouzeid.gramophone.loader.AlbumLoader; @@ -56,7 +57,6 @@ public class AlbumDetailActivity extends AbsFabActivity implements PaletteColorH private Album album; private ObservableRecyclerView recyclerView; - private View statusBar; private ImageView albumArtImageView; private View songsBackgroundView; private TextView albumTitleView; @@ -82,7 +82,10 @@ public class AlbumDetailActivity extends AbsFabActivity implements PaletteColorH // Change alpha of overlay float alpha = Math.max(0, Math.min(1, (float) scrollY / flexibleRange)); ViewUtil.setBackgroundAlpha(toolbar, alpha, toolbarColor); - ViewUtil.setBackgroundAlpha(statusBar, alpha, toolbarColor); + // Status bar color is a darker shade of the toolbar color with equal opacity + int a = Math.min(255, Math.max(0, (int) (alpha * 255))) << 24; + int rgb = 0x00ffffff & ColorChooserDialog.shiftColorDown(toolbarColor); + setStatusBarColor(a + rgb, true); // Translate name text int maxTitleTranslationY = albumArtViewHeight; @@ -154,7 +157,7 @@ public class AlbumDetailActivity extends AbsFabActivity implements PaletteColorH recyclerView = (ObservableRecyclerView) findViewById(R.id.list); albumTitleView = (TextView) findViewById(R.id.album_title); songsBackgroundView = findViewById(R.id.list_background); - statusBar = findViewById(R.id.statusBar); +// statusBar = findViewById(R.id.statusBar); } private void setUpObservableListViewParams() { diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/ArtistDetailActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/ArtistDetailActivity.java index a535a5ea..1573438e 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/ArtistDetailActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/ArtistDetailActivity.java @@ -28,6 +28,7 @@ import com.kabouzeid.gramophone.App; import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.adapter.ArtistAlbumAdapter; import com.kabouzeid.gramophone.adapter.songadapter.ArtistSongAdapter; +import com.kabouzeid.gramophone.dialogs.ColorChooserDialog; import com.kabouzeid.gramophone.helper.MusicPlayerRemote; import com.kabouzeid.gramophone.interfaces.PaletteColorHolder; import com.kabouzeid.gramophone.lastfm.artist.LastFMArtistBiographyLoader; @@ -65,7 +66,6 @@ public class ArtistDetailActivity extends AbsFabActivity implements PaletteColor private Artist artist; private ObservableListView songListView; - private View statusBar; private ImageView artistImage; private View songsBackgroundView; private TextView artistNameTv; @@ -95,7 +95,10 @@ public class ArtistDetailActivity extends AbsFabActivity implements PaletteColor // Change alpha of overlay float alpha = Math.max(0, Math.min(1, (float) scrollY / flexibleRange)); ViewUtil.setBackgroundAlpha(toolbar, alpha, toolbarColor); - ViewUtil.setBackgroundAlpha(statusBar, alpha, toolbarColor); + // Status bar color is a darker shade of the toolbar color with equal opacity + int a = Math.min(255, Math.max(0, (int) (alpha * 255))) << 24; + int rgb = 0x00ffffff & ColorChooserDialog.shiftColorDown(toolbarColor); + setStatusBarColor(a + rgb, true); // Translate name text int maxTitleTranslationY = artistImageViewHeight; @@ -160,7 +163,7 @@ public class ArtistDetailActivity extends AbsFabActivity implements PaletteColor songListView = (ObservableListView) findViewById(R.id.list); artistNameTv = (TextView) findViewById(R.id.artist_name); songsBackgroundView = findViewById(R.id.list_background); - statusBar = findViewById(R.id.statusBar); +// statusBar = findViewById(R.id.statusBar); songListHeader = LayoutInflater.from(this).inflate(R.layout.artist_detail_header, songListView, false); albumRecyclerView = (RecyclerView) songListHeader.findViewById(R.id.recycler_view); diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MusicControllerActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MusicControllerActivity.java index dacbb200..5938db51 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MusicControllerActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MusicControllerActivity.java @@ -94,6 +94,11 @@ public class MusicControllerActivity extends AbsFabActivity { getSupportActionBar().setDisplayHomeAsUpEnabled(true); } + @Override + protected boolean translucentStatusBarOnLollipop() { + return true; + } + @Override protected boolean shouldColorStatusBar() { return false; // let other code handle this below diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/ThemeBaseActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/ThemeBaseActivity.java index 4c165975..4d2360d1 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/ThemeBaseActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/ThemeBaseActivity.java @@ -12,6 +12,7 @@ import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.interfaces.KabViewsDisableAble; import com.kabouzeid.gramophone.util.PreferenceUtils; import com.kabouzeid.gramophone.util.Util; +import com.readystatesoftware.systembartint.SystemBarTintManager; /** * @author Aidan Follestad (afollestad) @@ -34,12 +35,12 @@ public abstract class ThemeBaseActivity extends ActionBarActivity implements Kab // Apply colors to system UI if necessary final int primaryDark = PreferenceUtils.getInstance(this).getThemeColorPrimaryDarker(); if (Util.hasLollipopSDK()) { - if (shouldColorStatusBar()) - getWindow().setStatusBarColor(primaryDark); if (shouldColorNavBar()) getWindow().setNavigationBarColor(primaryDark); } + setStatusBarColor(primaryDark, false); + // Persist current values so the Activity knows if they change // mLastDarkTheme = PreferenceUtils.getInstance(this).getGeneralTheme() == 1; // mLastPrimary = PreferenceUtils.getInstance(this).getThemeColorPrimary(); @@ -94,4 +95,14 @@ public abstract class ThemeBaseActivity extends ActionBarActivity implements Kab protected abstract boolean shouldColorStatusBar(); protected abstract boolean shouldColorNavBar(); + + protected final void setStatusBarColor(int color, boolean forceSystemBarTint) { + if (!forceSystemBarTint && Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + getWindow().setStatusBarColor(color); + } else { + SystemBarTintManager tintManager = new SystemBarTintManager(this); + tintManager.setStatusBarTintEnabled(true); + tintManager.setStatusBarTintColor(color); + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/tageditor/AbsTagEditorActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/tageditor/AbsTagEditorActivity.java index f966aecb..3e2c577b 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/tageditor/AbsTagEditorActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/tageditor/AbsTagEditorActivity.java @@ -203,10 +203,9 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity { final int vibrantColor = DialogUtils.resolveColor(this, R.attr.colorPrimary); paletteColorPrimary = vibrantColor; observableScrollViewCallbacks.onScrollChanged(scrollView.getCurrentScrollY(), false, false); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - getWindow().setStatusBarColor(ColorChooserDialog.shiftColorDown(vibrantColor)); + setStatusBarColor(ColorChooserDialog.shiftColorDown(vibrantColor), false); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) getWindow().setNavigationBarColor(vibrantColor); - } } private void getIntentExtras() { @@ -254,11 +253,11 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity { PreferenceUtils.getInstance(this).getThemeColorPrimary()); toolBar.setBackgroundColor(primary); header.setBackgroundColor(primary); - if (Util.hasLollipopSDK()) { - int primaryDark = ColorChooserDialog.shiftColorDown(primary); - getWindow().setStatusBarColor(primaryDark); + + int primaryDark = ColorChooserDialog.shiftColorDown(primary); + setStatusBarColor(primaryDark, false); + if (Util.hasLollipopSDK()) getWindow().setNavigationBarColor(primaryDark); - } } protected void dataChanged() { @@ -295,10 +294,9 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity { final int vibrantColor = palette.getVibrantColor(DialogUtils.resolveColor(AbsTagEditorActivity.this, R.attr.default_bar_color)); paletteColorPrimary = vibrantColor; observableScrollViewCallbacks.onScrollChanged(scrollView.getCurrentScrollY(), false, false); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - getWindow().setStatusBarColor(ColorChooserDialog.shiftColorDown(vibrantColor)); + setStatusBarColor(ColorChooserDialog.shiftColorDown(vibrantColor), false); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) getWindow().setNavigationBarColor(vibrantColor); - } } }); } else { diff --git a/app/src/main/res/layout/activity_album_detail.xml b/app/src/main/res/layout/activity_album_detail.xml index 8039b31a..379c00c0 100644 --- a/app/src/main/res/layout/activity_album_detail.xml +++ b/app/src/main/res/layout/activity_album_detail.xml @@ -30,9 +30,7 @@ + android:orientation="vertical"> - + + + + + + diff --git a/app/src/main/res/layout/activity_artist_detail.xml b/app/src/main/res/layout/activity_artist_detail.xml index a6afa08e..b251dd38 100644 --- a/app/src/main/res/layout/activity_artist_detail.xml +++ b/app/src/main/res/layout/activity_artist_detail.xml @@ -60,16 +60,17 @@ android:layout_height="wrap_content" android:orientation="vertical"> - + + + + + + diff --git a/app/src/main/res/layout/activity_music_controller.xml b/app/src/main/res/layout/activity_music_controller.xml index fa5df2ab..2619b141 100644 --- a/app/src/main/res/layout/activity_music_controller.xml +++ b/app/src/main/res/layout/activity_music_controller.xml @@ -201,6 +201,7 @@