From 52c405120c44bb537458a5900ec5ecf618785893 Mon Sep 17 00:00:00 2001 From: Karim Abou Zeid Date: Wed, 12 Aug 2015 22:29:19 +0200 Subject: [PATCH] Optimized AbsThemeActivity recreate. Fixed wrong divider and overflow button colors on 4.1 devices. Replaced actionbar drawer toggle with a non moving menu drawable. --- .../ui/activities/MainActivity.java | 44 ++-------- .../base/AbsSlidingMusicPanelActivity.java | 75 ++++++++++++++---- .../ui/activities/base/AbsThemeActivity.java | 9 ++- .../res/drawable-hdpi/ic_menu_white_24dp.png | Bin 0 -> 116 bytes .../res/drawable-mdpi/ic_menu_white_24dp.png | Bin 0 -> 99 bytes .../res/drawable-xhdpi/ic_menu_white_24dp.png | Bin 0 -> 135 bytes .../drawable-xxhdpi/ic_menu_white_24dp.png | Bin 0 -> 183 bytes .../drawable-xxxhdpi/ic_menu_white_24dp.png | Bin 0 -> 235 bytes .../res/layout/activity_artist_detail.xml | 3 +- .../main/res/layout/artist_detail_header.xml | 4 +- app/src/main/res/layout/item_list.xml | 4 +- .../main/res/layout/item_list_single_row.xml | 4 +- app/src/main/res/values/attrs.xml | 3 + app/src/main/res/values/colors.xml | 4 +- app/src/main/res/values/styles.xml | 1 - app/src/main/res/values/styles_parents.xml | 10 ++- 16 files changed, 96 insertions(+), 65 deletions(-) create mode 100644 app/src/main/res/drawable-hdpi/ic_menu_white_24dp.png create mode 100644 app/src/main/res/drawable-mdpi/ic_menu_white_24dp.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_menu_white_24dp.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_menu_white_24dp.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_menu_white_24dp.png diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MainActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MainActivity.java index 6805de7f..867326c4 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MainActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MainActivity.java @@ -4,7 +4,6 @@ import android.annotation.SuppressLint; import android.content.ComponentName; import android.content.Intent; import android.content.res.ColorStateList; -import android.content.res.Configuration; import android.graphics.Color; import android.net.Uri; import android.os.Build; @@ -22,8 +21,6 @@ import android.support.design.widget.TabLayout; import android.support.v4.app.Fragment; import android.support.v4.view.ViewPager; import android.support.v4.widget.DrawerLayout; -import android.support.v7.app.ActionBar; -import android.support.v7.app.ActionBarDrawerToggle; import android.support.v7.widget.Toolbar; import android.util.Log; import android.view.Menu; @@ -88,7 +85,6 @@ public class MainActivity extends AbsSlidingMusicPanelActivity @Bind(R.id.drawer_layout) DrawerLayout drawerLayout; - private ActionBarDrawerToggle drawerToggle; private PagerAdapter pagerAdapter; private MaterialCab cab; @Nullable @@ -179,10 +175,10 @@ public class MainActivity extends AbsSlidingMusicPanelActivity } private void setUpToolbar() { + toolbar.setNavigationIcon(R.drawable.ic_menu_white_24dp); setTitle(getResources().getString(R.string.app_name)); setAppBarColor(); setSupportActionBar(toolbar); - setUpDrawerToggle(); } private void setAppBarColor() { @@ -258,22 +254,6 @@ public class MainActivity extends AbsSlidingMusicPanelActivity }); } - private void setUpDrawerToggle() { - drawerToggle = new ActionBarDrawerToggle( - this, - drawerLayout, - R.string.navigation_drawer_open, - R.string.navigation_drawer_close - ); - drawerLayout.post(new Runnable() { - @Override - public void run() { - drawerToggle.syncState(); - } - }); - drawerLayout.setDrawerListener(drawerToggle); - } - private void setUpDrawerLayout() { setUpNavigationView(); } @@ -344,14 +324,6 @@ public class MainActivity extends AbsSlidingMusicPanelActivity handlePlaybackIntent(getIntent()); } - public void restoreActionBar() { - ActionBar actionBar = getSupportActionBar(); - //noinspection ConstantConditions - actionBar.setDisplayShowTitleEnabled(true); - actionBar.setDisplayHomeAsUpEnabled(true); - actionBar.setHomeButtonEnabled(true); - } - @Override public boolean onCreateOptionsMenu(@NonNull Menu menu) { getMenuInflater().inflate(R.menu.menu_main, menu); @@ -364,7 +336,6 @@ public class MainActivity extends AbsSlidingMusicPanelActivity } else { menu.removeItem(R.id.action_view_as); } - restoreActionBar(); return true; } @@ -376,7 +347,12 @@ public class MainActivity extends AbsSlidingMusicPanelActivity @Override public boolean onOptionsItemSelected(@NonNull MenuItem item) { - if (drawerToggle.onOptionsItemSelected(item)) { + if (item.getItemId() == android.R.id.home) { + if (drawerLayout.isDrawerOpen(navigationView)) { + drawerLayout.closeDrawer(navigationView); + } else { + drawerLayout.openDrawer(navigationView); + } return true; } @@ -448,12 +424,6 @@ public class MainActivity extends AbsSlidingMusicPanelActivity return false; } - @Override - public void onConfigurationChanged(Configuration newConfig) { - drawerToggle.onConfigurationChanged(newConfig); - super.onConfigurationChanged(newConfig); - } - @Override public void onBackPressed() { if (drawerLayout.isDrawerOpen(navigationView)) drawerLayout.closeDrawers(); diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsSlidingMusicPanelActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsSlidingMusicPanelActivity.java index e557f8e2..3ef03e23 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsSlidingMusicPanelActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsSlidingMusicPanelActivity.java @@ -2,6 +2,7 @@ package com.kabouzeid.gramophone.ui.activities.base; import android.animation.Animator; import android.annotation.SuppressLint; +import android.content.SharedPreferences; import android.content.res.ColorStateList; import android.graphics.Bitmap; import android.graphics.Color; @@ -32,7 +33,6 @@ import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.SeekBar; import android.widget.TextView; -import android.widget.Toast; import com.afollestad.materialdialogs.ThemeSingleton; import com.afollestad.materialdialogs.util.DialogUtils; @@ -62,11 +62,11 @@ import butterknife.ButterKnife; /** * @author Karim Abou Zeid (kabouzeid) - *

+ *

* Do not use {@link #setContentView(int)} but wrap your layout with * {@link #wrapSlidingMusicPanelAndFab(int)} first and then return it in {@link #createContentView()} */ -public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivity implements SlidingUpPanelLayout.PanelSlideListener { +public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivity implements SlidingUpPanelLayout.PanelSlideListener, SharedPreferences.OnSharedPreferenceChangeListener { public static final String TAG = AbsSlidingMusicPanelActivity.class.getSimpleName(); private static final int FAB_CIRCULAR_REVEAL_ANIMATION_TIME = 1000; @@ -151,6 +151,7 @@ public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivi setUpSlidingPanel(); initAppearanceVarsFromSharedPrefs(); + PreferenceUtil.getInstance(this).registerOnSharedPreferenceChangedListener(this); initProgressSliderDependentViews(); moveSeekBarIntoPlace(); @@ -176,6 +177,12 @@ public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivi protected abstract View createContentView(); + @Override + protected void onDestroy() { + super.onDestroy(); + PreferenceUtil.getInstance(this).unregisterOnSharedPreferenceChangedListener(this); + } + @Override protected void onResume() { super.onResume(); @@ -206,6 +213,48 @@ public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivi updateShuffleState(); } + @Override + public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { + switch (key) { + case PreferenceUtil.OPAQUE_STATUSBAR_NOW_PLAYING: + opaqueStatusBar = PreferenceUtil.getInstance(this).opaqueStatusbarNowPlaying(); + // do not break here + case PreferenceUtil.OPAQUE_TOOLBAR_NOW_PLAYING: + opaqueToolBar = opaqueStatusBar && PreferenceUtil.getInstance(this).opaqueToolbarNowPlaying(); + if (lastFooterColor != -1) { + animateColorChange(lastFooterColor); + } + if (opaqueStatusBar) { + if (opaqueToolBar) { + alignAlbumArtToToolbar(); + } else { + alignAlbumArtToStatusBar(); + } + } else { + alignAlbumArtToTop(); + } + break; + case PreferenceUtil.FORCE_SQUARE_ALBUM_ART: + forceSquareAlbumArt = PreferenceUtil.getInstance(this).forceAlbumArtSquared(); + albumArt.forceSquare(forceSquareAlbumArt); + break; + case PreferenceUtil.LARGER_TITLE_BOX_NOW_PLAYING: + largerTitleBox = PreferenceUtil.getInstance(this).largerTitleBoxNowPlaying(); + adjustTitleBoxSize(); + break; + case PreferenceUtil.ALTERNATIVE_PROGRESS_SLIDER_NOW_PLAYING: + alternativeProgressSlider = PreferenceUtil.getInstance(this).alternativeProgressSliderNowPlaying(); + initProgressSliderDependentViews(); + moveSeekBarIntoPlace(); + setTint(seekBar, getThemeColorAccent()); + break; + case PreferenceUtil.PLAYBACK_CONTROLLER_CARD_NOW_PLAYING: + showPlaybackControllerCard = PreferenceUtil.getInstance(this).playbackControllerCardNowPlaying(); + setUpPlaybackControllerCard(); + break; + } + } + private void setUpPlayPauseButton() { updateFabState(false); @@ -233,8 +282,6 @@ public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivi } else { MusicPlayerRemote.resumePlaying(); } - } else { - Toast.makeText(AbsSlidingMusicPanelActivity.this, getResources().getString(R.string.playing_queue_empty), Toast.LENGTH_SHORT).show(); } } }); @@ -299,13 +346,13 @@ public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivi @Override public void onPanelSlide(View view, float slideOffset) { - miniPlayer.setAlpha(1 - slideOffset); - float xTranslation = (dummyFab.getX() + mediaControllerContainer.getX() + footerFrame.getX() - playPauseFab.getLeft()) * slideOffset; float yTranslation = (dummyFab.getY() + mediaControllerContainer.getY() + footerFrame.getY() - playPauseFab.getTop()) * slideOffset; playPauseFab.setTranslationX(xTranslation); playPauseFab.setTranslationY(yTranslation); + + miniPlayer.setAlpha(1 - slideOffset); } @Override @@ -324,7 +371,7 @@ public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivi int cy = (dummyFab.getTop() + dummyFab.getBottom()) / 2; int finalRadius = Math.max(mediaControllerContainer.getWidth(), mediaControllerContainer.getHeight()); - Animator animator = ViewAnimationUtils.createCircularReveal(mediaControllerContainer, cx, cy, dummyFab.getWidth() / 2, finalRadius); + final Animator animator = ViewAnimationUtils.createCircularReveal(mediaControllerContainer, cx, cy, dummyFab.getWidth() / 2, finalRadius); animator.setInterpolator(new DecelerateInterpolator()); animator.setDuration(FAB_CIRCULAR_REVEAL_ANIMATION_TIME); animator.start(); @@ -352,10 +399,6 @@ public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivi } } - public FloatingActionButton getPlayPauseFab() { - return playPauseFab; - } - public SlidingUpPanelLayout getSlidingUpPanelLayout() { return slidingUpPanelLayout; } @@ -425,6 +468,10 @@ public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivi songTotalTime = (TextView) findViewById(R.id.player_alternative_song_total_time); seekBar = (SeekBar) findViewById(R.id.player_alternative_progress_slider); } else { + findViewById(R.id.player_default_progress_container).setVisibility(View.VISIBLE); + findViewById(R.id.player_default_progress_slider).setVisibility(View.VISIBLE); + findViewById(R.id.player_alternative_progress_container).setVisibility(View.GONE); + songCurrentProgress = (TextView) findViewById(R.id.player_default_song_current_progress); songTotalTime = (TextView) findViewById(R.id.player_default_song_total_time); seekBar = (SeekBar) findViewById(R.id.player_default_progress_slider); @@ -742,9 +789,7 @@ public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivi } private void startUpdatingProgressViews() { - if (!progressViewsUpdateHandler.hasMessages(CMD_REFRESH_PROGRESS_VIEWS)) { - queueNextRefresh(0); - } + queueNextRefresh(1); } private void stopUpdatingProgressViews() { diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsThemeActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsThemeActivity.java index 6e6b198d..d42867f8 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsThemeActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsThemeActivity.java @@ -5,6 +5,7 @@ import android.content.res.ColorStateList; import android.graphics.Color; import android.os.Build; import android.os.Bundle; +import android.os.Handler; import android.support.annotation.ColorInt; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; @@ -41,7 +42,13 @@ public abstract class AbsThemeActivity extends AppCompatActivity implements KabV @Override protected void onResume() { super.onResume(); - recreateIfThemeChanged(); + // the handler is necessary to avoid "java.lang.RuntimeException: Performing pause of activity that is not resumed" + new Handler().postDelayed(new Runnable() { + @Override + public void run() { + recreateIfThemeChanged(); + } + }, 200); } private void setupTheme() { diff --git a/app/src/main/res/drawable-hdpi/ic_menu_white_24dp.png b/app/src/main/res/drawable-hdpi/ic_menu_white_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..8962cbd91f75a600915d7277a2f9867f9a6ebc89 GIT binary patch literal 116 zcmeAS@N?(olHy`uVBq!ia0y~yU{C>J4mJh`hKCF@W-u@?SbMrShE&{od*vV}g98Wi z!7ukq)^RwtNFV%fb7)zvUTs4|L&G=z3?8E_1=&lAvP?{u6lIOF6ciTpJMz!FCv&tl To@XWl0|SGntDnm{r-UW|JG~=~ literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/ic_menu_white_24dp.png b/app/src/main/res/drawable-mdpi/ic_menu_white_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..c62db8c865860add1df1b7335b5f70279390fdc5 GIT binary patch literal 99 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJov^-rLLn>}1|M>sko>|xM y@CsJt^GsQdjhhopCb=tDf{8755;MgZ801f>+Br|!yP1K3fx*+&&t;ucLK6Vz#2l~y literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/ic_menu_white_24dp.png b/app/src/main/res/drawable-xhdpi/ic_menu_white_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..36859f094a65ce6c7160049049367832dd46176d GIT binary patch literal 135 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4mJh`hH$2z?FO5T>Ln>~)z2V5qV8FrR z_-D4ANWy~|YS{^PB5EgJ@G&VkG%zqSv2aWPlL8Cc9p3T_fCNpMB|kHJN z7#J8C6c`v-7#bKD1Q-~Y7#yI23sf1N*)kwN z49f&x31meLvp0N{<~jgVai@h9#f*m88_t8AfsoftLYR)l%D-zF!%hUhH+YhD9;C<9 L)z4*}Q$iB}JBToq literal 0 HcmV?d00001 diff --git a/app/src/main/res/layout/activity_artist_detail.xml b/app/src/main/res/layout/activity_artist_detail.xml index 6699c8ab..dc4f01a4 100644 --- a/app/src/main/res/layout/activity_artist_detail.xml +++ b/app/src/main/res/layout/activity_artist_detail.xml @@ -13,7 +13,8 @@ android:id="@+id/artist_image_background" android:layout_width="match_parent" android:layout_height="match_parent" - android:scaleType="centerCrop" /> + android:scaleType="centerCrop" + tools:ignore="ContentDescription" /> + android:background="?divider_color" /> \ No newline at end of file diff --git a/app/src/main/res/layout/item_list.xml b/app/src/main/res/layout/item_list.xml index a3f28269..76f805d8 100644 --- a/app/src/main/res/layout/item_list.xml +++ b/app/src/main/res/layout/item_list.xml @@ -86,7 +86,7 @@ android:layout_width="match_parent" android:layout_height="1dp" android:layout_gravity="bottom" - android:background="?dividerHorizontal" + android:background="?divider_color" android:visibility="gone" /> + android:background="?divider_color" /> \ No newline at end of file diff --git a/app/src/main/res/layout/item_list_single_row.xml b/app/src/main/res/layout/item_list_single_row.xml index dd0085c3..32f12016 100644 --- a/app/src/main/res/layout/item_list_single_row.xml +++ b/app/src/main/res/layout/item_list_single_row.xml @@ -72,7 +72,7 @@ android:layout_width="match_parent" android:layout_height="1dp" android:layout_gravity="bottom" - android:background="?dividerHorizontal" + android:background="?divider_color" android:visibility="gone" /> + android:background="?divider_color" /> \ No newline at end of file diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml index 61b22709..4e44979f 100644 --- a/app/src/main/res/values/attrs.xml +++ b/app/src/main/res/values/attrs.xml @@ -10,4 +10,7 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 767f3e34..021cff8e 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -2,11 +2,11 @@ - @android:color/white + @color/cardview_light_background @color/grey_700 - @color/grey_800 + @color/cardview_dark_background @color/grey_900 \ No newline at end of file diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 841aafba..60fcaf49 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -34,7 +34,6 @@ match_parent ?attr/actionBarSize @style/ThemeOverlay.AppCompat.Dark.ActionBar - @dimen/abc_action_bar_default_height_material ?toolbarPopupTheme @dimen/toolbar_elevation toolbar diff --git a/app/src/main/res/values/styles_parents.xml b/app/src/main/res/values/styles_parents.xml index e4ff2783..0b903a21 100644 --- a/app/src/main/res/values/styles_parents.xml +++ b/app/src/main/res/values/styles_parents.xml @@ -18,6 +18,9 @@ @color/default_bar_color_dark + @color/md_divider_white + @color/secondary_text_default_material_dark + @style/ThemeOverlay.AppCompat @@ -40,6 +43,9 @@ @color/default_bar_color + @color/md_divider_black + @color/secondary_text_default_material_light + @style/ThemeOverlay.AppCompat.Light @@ -67,12 +73,12 @@