Reorganized settings, added more options to customize the now playing screen, added gradients to make UI elements visible on light album covers, fixed a bug with cardview background, fixed typos, increased version code, synced strings,

This commit is contained in:
Karim Abou Zeid 2015-06-10 23:02:14 +02:00
commit a87320fcc9
43 changed files with 607 additions and 135 deletions

View file

@ -2,6 +2,7 @@ package com.kabouzeid.gramophone.ui.activities;
import android.animation.Animator;
import android.content.Intent;
import android.content.res.ColorStateList;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
@ -9,8 +10,10 @@ import android.graphics.PorterDuff;
import android.os.Build;
import android.os.Bundle;
import android.support.v7.graphics.Palette;
import android.support.v7.widget.CardView;
import android.support.v7.widget.Toolbar;
import android.transition.Transition;
import android.util.TypedValue;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
@ -71,31 +74,44 @@ public class MusicControllerActivity extends AbsFabActivity {
private ImageButton repeatButton;
private ImageButton shuffleButton;
private View mediaControllerContainer;
private CardView playbackControllerCard;
private Toolbar toolbar;
private int lastFooterColor = -1;
private int lastTextColor = -2;
private boolean killThreads = false;
private boolean opaqueToolBar = PreferenceUtils.getInstance(this).opaqueToolbarNowPlaying();
private boolean forceSquareAlbumArt = PreferenceUtils.getInstance(this).forceAlbumArtSquared();
private final boolean opaqueStatusBar = PreferenceUtils.getInstance(this).opaqueStatusbarNowPlaying();
private final boolean opaqueToolBar = opaqueStatusBar && PreferenceUtils.getInstance(this).opaqueToolbarNowPlaying();
private final boolean forceSquareAlbumArt = PreferenceUtils.getInstance(this).forceAlbumArtSquared();
private final boolean smallerTitleBox = PreferenceUtils.getInstance(this).smallerTitileBoxNowPlaying();
private final boolean traditionalProgressSlider = PreferenceUtils.getInstance(this).traditionalProgressSliderNowPlaying();
private final boolean showPlaybackControllerCard = PreferenceUtils.getInstance(this).playbackControllerCardNowPlaying();
@Override
protected void onCreate(Bundle savedInstanceState) {
setStatusBarTransparent();
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_music_controller);
setContentView(traditionalProgressSlider ? R.layout.activity_music_controller_traditional_progress_slider : R.layout.activity_music_controller);
initViews();
albumArtBackground.setAlpha(0.7f);
moveSeekBarIntoPlace();
adjustTitleBoxSize();
setUpPlaybackControllerCard();
setUpMusicControllers();
albumArtBackground.setAlpha(0.7f);
albumArt.forceSquare(forceSquareAlbumArt);
setToolbarOpaque(opaqueToolBar);
if (opaqueStatusBar) {
if (opaqueToolBar) {
alignAlbumArtToToolbar();
} else {
alignAlbumArtToStatusBar();
}
} else {
alignAlbumArtToTop();
}
setSupportActionBar(toolbar);
getSupportActionBar().setTitle(null);
@ -133,11 +149,29 @@ public class MusicControllerActivity extends AbsFabActivity {
private void moveSeekBarIntoPlace() {
// RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) progressSlider.getLayoutParams();
// progressSlider.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
// final int seekBarMarginLeftRight = getResources().getDimensionPixelSize(R.dimen.seek_bar_margin_left_right);
// lp.setMargins(seekBarMarginLeftRight, 0, seekBarMarginLeftRight, -(progressSlider.getMeasuredHeight() / 2));
// progressSlider.setLayoutParams(lp);
if (traditionalProgressSlider) {
RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) progressSlider.getLayoutParams();
progressSlider.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
final int seekBarMarginLeftRight = getResources().getDimensionPixelSize(R.dimen.seek_bar_margin_left_right);
lp.setMargins(seekBarMarginLeftRight, 0, seekBarMarginLeftRight, -(progressSlider.getMeasuredHeight() / 2));
progressSlider.setLayoutParams(lp);
}
}
private void adjustTitleBoxSize() {
int paddingTopBottom = smallerTitleBox ? getResources().getDimensionPixelSize(R.dimen.title_box_padding_small) : getResources().getDimensionPixelSize(R.dimen.title_box_padding_large);
footer.setPadding(footer.getPaddingLeft(), paddingTopBottom, footer.getPaddingRight(), paddingTopBottom);
songTitle.setPadding(songTitle.getPaddingLeft(), songTitle.getPaddingTop(), songTitle.getPaddingRight(), smallerTitleBox ? getResources().getDimensionPixelSize(R.dimen.title_box_text_spacing_small) : getResources().getDimensionPixelSize(R.dimen.title_box_text_spacing_large));
songArtist.setPadding(songArtist.getPaddingLeft(), smallerTitleBox ? getResources().getDimensionPixelSize(R.dimen.title_box_text_spacing_small) : getResources().getDimensionPixelSize(R.dimen.title_box_text_spacing_large), songArtist.getPaddingRight(), songArtist.getPaddingBottom());
songTitle.setTextSize(TypedValue.COMPLEX_UNIT_PX, smallerTitleBox ? getResources().getDimensionPixelSize(R.dimen.title_box_title_text_size_small) : getResources().getDimensionPixelSize(R.dimen.title_box_title_text_size_large));
songArtist.setTextSize(TypedValue.COMPLEX_UNIT_PX, smallerTitleBox ? getResources().getDimensionPixelSize(R.dimen.title_box_caption_text_size_small) : getResources().getDimensionPixelSize(R.dimen.title_box_caption_text_size_large));
}
private void setUpPlaybackControllerCard(){
playbackControllerCard.setVisibility(showPlaybackControllerCard ? View.VISIBLE : View.GONE);
mediaControllerContainer.setBackgroundColor(showPlaybackControllerCard ? Color.TRANSPARENT : Util.resolveColor(this, R.attr.music_controller_container_color));
}
private void initViews() {
@ -155,6 +189,7 @@ public class MusicControllerActivity extends AbsFabActivity {
progressSlider = (SeekBar) findViewById(R.id.progress_slider);
mediaControllerContainer = findViewById(R.id.media_controller_container);
toolbar = (Toolbar) findViewById(R.id.toolbar);
playbackControllerCard = (CardView) findViewById(R.id.playback_controller_card);
}
private void setUpMusicControllers() {
@ -164,8 +199,16 @@ public class MusicControllerActivity extends AbsFabActivity {
setUpProgressSlider();
}
private static void setTint(SeekBar seekBar, int color) {
seekBar.getThumb().setColorFilter(color, PorterDuff.Mode.SRC_IN);
private void setTint(SeekBar seekBar, int color) {
ColorStateList s1 = ColorStateList.valueOf(color);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
seekBar.setThumbTintList(s1);
if (traditionalProgressSlider) seekBar.setProgressTintList(s1);
} else {
seekBar.getThumb().setColorFilter(color, PorterDuff.Mode.SRC_IN);
if (traditionalProgressSlider)
seekBar.getProgressDrawable().setColorFilter(color, PorterDuff.Mode.SRC_IN);
}
}
private void setUpProgressSlider() {
@ -341,9 +384,6 @@ public class MusicControllerActivity extends AbsFabActivity {
animateColorChange(defaultBarColor);
animateTextColorChange(textColor);
currentSongProgress.setTextColor(DialogUtils.resolveColor(MusicControllerActivity.this, R.attr.themed_drawable_color));
totalSongDuration.setTextColor(DialogUtils.resolveColor(MusicControllerActivity.this, R.attr.themed_drawable_color));
notifyTaskColorChange(defaultBarColor);
}
@ -363,7 +403,7 @@ public class MusicControllerActivity extends AbsFabActivity {
}
setTint(progressSlider, !ThemeSingleton.get().darkTheme && getThemeColorAccent() == Color.WHITE ? Color.BLACK : getThemeColorAccent());
if (opaqueToolBar) setStatusBarColor(newColor);
if (opaqueStatusBar) setStatusBarColor(newColor);
else setStatusBarColor(Color.TRANSPARENT);
if (Util.isAtLeastLollipop() && PreferenceUtils.getInstance(this).coloredNavigationBarCurrentPlayingEnabled())
@ -498,16 +538,24 @@ public class MusicControllerActivity extends AbsFabActivity {
return super.onOptionsItemSelected(item);
}
private void setToolbarOpaque(boolean toolbarOpaque) {
private void alignAlbumArtToTop() {
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) findViewById(R.id.album_art_frame).getLayoutParams();
if (!toolbarOpaque) {
if (Build.VERSION.SDK_INT > 16) {
params.removeRule(RelativeLayout.BELOW);
} else {
params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT);
params.addRule(RelativeLayout.ABOVE, R.id.footer_frame);
}
} else params.addRule(RelativeLayout.BELOW, R.id.toolbar_frame);
if (Build.VERSION.SDK_INT > 16) {
params.removeRule(RelativeLayout.BELOW);
} else {
params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT);
params.addRule(RelativeLayout.ABOVE, R.id.footer_frame);
}
}
private void alignAlbumArtToToolbar() {
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) findViewById(R.id.album_art_frame).getLayoutParams();
params.addRule(RelativeLayout.BELOW, R.id.toolbar);
}
private void alignAlbumArtToStatusBar() {
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) findViewById(R.id.album_art_frame).getLayoutParams();
params.addRule(RelativeLayout.BELOW, R.id.status_bar);
}
}

View file

@ -65,7 +65,8 @@ public class SettingsActivity extends AbsBaseActivity implements ColorChooserDia
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.pref_general);
addPreferencesFromResource(R.xml.pref_ui);
addPreferencesFromResource(R.xml.pref_colors);
addPreferencesFromResource(R.xml.pref_now_playing_screen);
addPreferencesFromResource(R.xml.pref_audio);
final Preference defaultStartPage = findPreference("default_start_page");

View file

@ -87,7 +87,7 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(getContentViewResId());
setContentView(getContentViewLayout());
getIntentExtras();
@ -206,7 +206,7 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity {
}
}
protected abstract int getContentViewResId();
protected abstract int getContentViewLayout();
protected abstract List<String> getSongPaths();

View file

@ -167,7 +167,7 @@ public class AlbumTagEditorActivity extends AbsTagEditorActivity implements Text
}
@Override
protected int getContentViewResId() {
protected int getContentViewLayout() {
return R.layout.activity_album_tag_editor;
}

View file

@ -101,7 +101,7 @@ public class SongTagEditorActivity extends AbsTagEditorActivity implements TextW
}
@Override
protected int getContentViewResId() {
protected int getContentViewLayout() {
return R.layout.activity_song_tag_editor;
}

View file

@ -35,7 +35,11 @@ public final class PreferenceUtils {
public static final String ALBUM_GRID_COLUMNS = "album_grid_columns";
public static final String ALBUM_GRID_COLUMNS_LAND = "album_grid_columns_land";
public static final String OPAQUE_TOOLBAR_NOW_PLAYING = "opaque_toolbar_now_playing";
public static final String OPAQUE_STATUSBAR_NOW_PLAYING = "opaque_statusbar_now_playing";
public static final String FORCE_SQUARE_ALBUM_ART = "force_square_album_art";
public static final String SMALLER_TITLE_BOX_NOW_PLAYING = "smaller_title_box_now_playing";
public static final String TRADITIONAL_PROGRESS_SLIDER_NOW_PLAYING = "traditional_progress_slider_now_playing";
public static final String PLAYBACK_CONTROLLER_CARD_NOW_PLAYING = "playback_controller_card_now_playing";
private static PreferenceUtils sInstance;
@ -159,6 +163,10 @@ public final class PreferenceUtils {
// mPreferences.edit().putBoolean(COLORED_NAVIGATION_BAR_OTHER_SCREENS, coloredNavbar).commit();
// }
public final boolean opaqueStatusbarNowPlaying() {
return mPreferences.getBoolean(OPAQUE_STATUSBAR_NOW_PLAYING, false);
}
public final boolean opaqueToolbarNowPlaying() {
return mPreferences.getBoolean(OPAQUE_TOOLBAR_NOW_PLAYING, false);
}
@ -167,6 +175,18 @@ public final class PreferenceUtils {
return mPreferences.getBoolean(FORCE_SQUARE_ALBUM_ART, false);
}
public final boolean playbackControllerCardNowPlaying() {
return mPreferences.getBoolean(PLAYBACK_CONTROLLER_CARD_NOW_PLAYING, false);
}
public final boolean smallerTitileBoxNowPlaying() {
return mPreferences.getBoolean(SMALLER_TITLE_BOX_NOW_PLAYING, false);
}
public final boolean traditionalProgressSliderNowPlaying() {
return mPreferences.getBoolean(TRADITIONAL_PROGRESS_SLIDER_NOW_PLAYING, false);
}
// public final boolean downloadMissingArtistImages() {
// return mPreferences.getBoolean(DOWNLOAD_MISSING_ARTIST_IMAGES, true);
// }