Massiv design optimizations and settings

This commit is contained in:
Karim Abou Zeid 2015-03-29 17:41:47 +02:00
commit b302abc2e1
117 changed files with 1104 additions and 962 deletions

View file

@ -1,9 +1,9 @@
package com.kabouzeid.gramophone.ui.activities;
import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.graphics.drawable.BitmapDrawable;
import android.os.Build;
import android.os.Bundle;
@ -30,13 +30,16 @@ import com.kabouzeid.gramophone.misc.AppKeys;
import com.kabouzeid.gramophone.misc.SmallObservableScrollViewCallbacks;
import com.kabouzeid.gramophone.model.Album;
import com.kabouzeid.gramophone.model.Song;
import com.kabouzeid.gramophone.model.UIPreferenceChangedEvent;
import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity;
import com.kabouzeid.gramophone.ui.activities.tageditor.AlbumTagEditorActivity;
import com.kabouzeid.gramophone.util.MusicUtil;
import com.kabouzeid.gramophone.util.NavigationUtil;
import com.kabouzeid.gramophone.util.PreferenceUtils;
import com.kabouzeid.gramophone.util.Util;
import com.kabouzeid.gramophone.util.ViewUtil;
import com.nineoldandroids.view.ViewHelper;
import com.squareup.otto.Subscribe;
import com.squareup.picasso.Callback;
import com.squareup.picasso.Picasso;
@ -102,15 +105,14 @@ public class AlbumDetailActivity extends AbsFabActivity {
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
@Override
protected void onCreate(Bundle savedInstanceState) {
app = (App) getApplicationContext();
setTheme(app.getAppTheme());
setUpTranslucence(true, false);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_album_detail);
App.bus.register(this);
if (Util.hasLollipopSDK()) postponeEnterTransition();
if (Util.hasLollipopSDK()) getWindow().setNavigationBarColor(getResources().getColor(R.color.materialmusic_default_bar_color));
if (Util.hasLollipopSDK() && PreferenceUtils.getInstance(this).coloredNavigationBarAlbumEnabled()) getWindow().setNavigationBarColor(Util.resolveColor(this, R.attr.default_bar_color));
Bundle intentExtras = getIntent().getExtras();
int albumId = -1;
@ -146,7 +148,7 @@ public class AlbumDetailActivity extends AbsFabActivity {
private void setUpObservableListViewParams() {
albumArtViewHeight = getResources().getDimensionPixelSize(R.dimen.header_image_height);
toolbarColor = getResources().getColor(R.color.materialmusic_default_bar_color);
toolbarColor = Util.resolveColor(this, R.attr.default_bar_color);
toolbarHeight = Util.getActionBarSize(this);
titleViewHeight = getResources().getDimensionPixelSize(R.dimen.title_view_height);
headerOffset = toolbarHeight;
@ -187,14 +189,24 @@ public class AlbumDetailActivity extends AbsFabActivity {
Palette.Swatch swatch = palette.getVibrantSwatch();
if (swatch != null) {
toolbarColor = swatch.getRgb();
albumTitleView.setBackgroundColor(swatch.getRgb());
albumTitleView.setBackgroundColor(toolbarColor);
albumTitleView.setTextColor(swatch.getTitleTextColor());
if (Util.hasLollipopSDK()) getWindow().setNavigationBarColor(swatch.getRgb());
if (Util.hasLollipopSDK() && PreferenceUtils.getInstance(AlbumDetailActivity.this).coloredNavigationBarAlbumEnabled())
getWindow().setNavigationBarColor(toolbarColor);
}
}
});
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
private void setNavigationBarColored(boolean colored){
if (colored){
if (Util.hasLollipopSDK()) getWindow().setNavigationBarColor(toolbarColor);
} else {
if (Util.hasLollipopSDK()) getWindow().setNavigationBarColor(Color.BLACK);
}
}
private void setUpListView() {
recyclerView.setScrollViewCallbacks(observableScrollViewCallbacks);
recyclerView.setPadding(0, albumArtViewHeight + titleViewHeight, 0, 0);
@ -204,6 +216,8 @@ public class AlbumDetailActivity extends AbsFabActivity {
public void run() {
songsBackgroundView.getLayoutParams().height = contentView.getHeight();
observableScrollViewCallbacks.onScrollChanged(-(albumArtViewHeight + titleViewHeight), false, false);
recyclerView.scrollBy(0,1);
recyclerView.scrollBy(0,-1);
}
});
}
@ -255,7 +269,7 @@ public class AlbumDetailActivity extends AbsFabActivity {
NavigationUtil.openPlayingQueueDialog(this);
return true;
case R.id.action_settings:
Toast.makeText(this, "This feature is not available yet", Toast.LENGTH_SHORT).show();
startActivity(new Intent(this, SettingsActivity.class));
return true;
case R.id.action_current_playing:
NavigationUtil.openCurrentPlayingIfPossible(this, getSharedViewsWithFab(null));
@ -273,4 +287,18 @@ public class AlbumDetailActivity extends AbsFabActivity {
}
return super.onOptionsItemSelected(item);
}
@Subscribe public void onUIPreferenceChanged(UIPreferenceChangedEvent event){
switch (event.getAction()){
case UIPreferenceChangedEvent.COLORED_NAVIGATION_BAR_ALBUM_CHANGED:
setNavigationBarColored((boolean) event.getValue());
break;
}
}
@Override
protected void onDestroy() {
super.onDestroy();
App.bus.unregister(this);
}
}

View file

@ -1,8 +1,8 @@
package com.kabouzeid.gramophone.ui.activities;
import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.graphics.drawable.BitmapDrawable;
import android.os.Build;
import android.os.Bundle;
@ -24,6 +24,7 @@ import android.widget.Toast;
import com.afollestad.materialdialogs.MaterialDialog;
import com.github.ksoichiro.android.observablescrollview.ObservableListView;
import com.kabouzeid.gramophone.App;
import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.adapter.ArtistAlbumAdapter;
import com.kabouzeid.gramophone.adapter.songadapter.ArtistSongAdapter;
@ -38,11 +39,14 @@ import com.kabouzeid.gramophone.misc.SmallObservableScrollViewCallbacks;
import com.kabouzeid.gramophone.model.Album;
import com.kabouzeid.gramophone.model.Artist;
import com.kabouzeid.gramophone.model.Song;
import com.kabouzeid.gramophone.model.UIPreferenceChangedEvent;
import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity;
import com.kabouzeid.gramophone.util.NavigationUtil;
import com.kabouzeid.gramophone.util.PreferenceUtils;
import com.kabouzeid.gramophone.util.Util;
import com.kabouzeid.gramophone.util.ViewUtil;
import com.nineoldandroids.view.ViewHelper;
import com.squareup.otto.Subscribe;
import com.squareup.picasso.Callback;
import com.squareup.picasso.Picasso;
@ -120,8 +124,10 @@ public class ArtistDetailActivity extends AbsFabActivity {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_artist_detail);
App.bus.register(this);
if (Util.hasLollipopSDK()) postponeEnterTransition();
if (Util.hasLollipopSDK()) getWindow().setNavigationBarColor(getResources().getColor(R.color.materialmusic_default_bar_color));
if (Util.hasLollipopSDK() && PreferenceUtils.getInstance(this).coloredNavigationBarArtistEnabled()) getWindow().setNavigationBarColor(Util.resolveColor(this, R.attr.default_bar_color));
getIntentExtras();
initViews();
@ -147,7 +153,7 @@ public class ArtistDetailActivity extends AbsFabActivity {
private void setUpObservableListViewParams() {
artistImageViewHeight = getResources().getDimensionPixelSize(R.dimen.header_image_height);
toolbarColor = getResources().getColor(R.color.materialmusic_default_bar_color);
toolbarColor = Util.resolveColor(this, R.attr.default_bar_color);
toolbarHeight = Util.getActionBarSize(this);
titleViewHeight = getResources().getDimensionPixelSize(R.dimen.title_view_height);
headerOffset = toolbarHeight;
@ -173,6 +179,15 @@ public class ArtistDetailActivity extends AbsFabActivity {
loadBiography();
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
private void setNavigationBarColored(boolean colored){
if (colored){
if (Util.hasLollipopSDK()) getWindow().setNavigationBarColor(toolbarColor);
} else {
if (Util.hasLollipopSDK()) getWindow().setNavigationBarColor(Color.BLACK);
}
}
private void setUpSongListView() {
songListView.setScrollViewCallbacks(observableScrollViewCallbacks);
songListView.setPadding(0, artistImageViewHeight + titleViewHeight, 0, 0);
@ -259,7 +274,8 @@ public class ArtistDetailActivity extends AbsFabActivity {
toolbarColor = swatch.getRgb();
artistNameTv.setBackgroundColor(swatch.getRgb());
artistNameTv.setTextColor(swatch.getTitleTextColor());
if (Util.hasLollipopSDK()) getWindow().setNavigationBarColor(swatch.getRgb());
if (Util.hasLollipopSDK() && PreferenceUtils.getInstance(ArtistDetailActivity.this).coloredNavigationBarArtistEnabled())
getWindow().setNavigationBarColor(swatch.getRgb());
} else {
setStandardColors();
}
@ -270,13 +286,13 @@ public class ArtistDetailActivity extends AbsFabActivity {
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
private void setStandardColors() {
int titleTextColor = Util.resolveColor(this, R.attr.title_text_color);
int defaultBarColor = getResources().getColor(R.color.materialmusic_default_bar_color);
int defaultBarColor = Util.resolveColor(this, R.attr.default_bar_color);
toolbarColor = defaultBarColor;
artistNameTv.setBackgroundColor(defaultBarColor);
artistNameTv.setTextColor(titleTextColor);
if (Util.hasLollipopSDK()) getWindow().setNavigationBarColor(getResources().getColor(R.color.materialmusic_default_bar_color));
if (Util.hasLollipopSDK() && PreferenceUtils.getInstance(this).coloredNavigationBarArtistEnabled()) getWindow().setNavigationBarColor(Util.resolveColor(this, R.attr.default_bar_color));
}
private void setUpToolBar() {
@ -323,6 +339,7 @@ public class ArtistDetailActivity extends AbsFabActivity {
case R.id.action_re_download_artist_image:
Toast.makeText(ArtistDetailActivity.this, getResources().getString(R.string.updating), Toast.LENGTH_SHORT).show();
setUpArtistImageAndApplyPalette(true);
return true;
case R.id.action_settings:
Toast.makeText(this, "This feature is not available yet", Toast.LENGTH_SHORT).show();
return true;
@ -376,4 +393,19 @@ public class ArtistDetailActivity extends AbsFabActivity {
}
});
}
@Subscribe
public void onUIPreferenceChanged(UIPreferenceChangedEvent event){
switch (event.getAction()){
case UIPreferenceChangedEvent.COLORED_NAVIGATION_BAR_ARTIST_CHANGED:
setNavigationBarColored((boolean) event.getValue());
break;
}
}
@Override
protected void onDestroy() {
super.onDestroy();
App.bus.unregister(this);
}
}

View file

@ -6,6 +6,7 @@ import android.content.Context;
import android.content.Intent;
import android.content.res.Configuration;
import android.os.Bundle;
import android.preference.PreferenceActivity;
import android.support.v13.app.FragmentPagerAdapter;
import android.support.v4.util.Pair;
import android.support.v4.view.ViewPager;
@ -17,9 +18,8 @@ import android.util.SparseArray;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Toast;
import com.google.samples.apps.iosched.ui.widget.SlidingTabLayout;
import com.astuetz.PagerSlidingTabStrip;
import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.helper.AboutDeveloperDialogHelper;
import com.kabouzeid.gramophone.helper.CreatePlaylistDialogHelper;
@ -53,7 +53,7 @@ public class MainActivity extends AbsFabActivity
private View statusBar;
private MainActivityViewPagerAdapter viewPagerAdapter;
private ViewPager viewPager;
private SlidingTabLayout slidingTabLayout;
private PagerSlidingTabStrip slidingTabLayout;
private int currentPage = -1;
@Override
@ -74,13 +74,16 @@ public class MainActivity extends AbsFabActivity
private void setUpViewPager() {
viewPagerAdapter = new MainActivityViewPagerAdapter(this);
viewPager.setAdapter(viewPagerAdapter);
int startPosition = PreferenceUtils.getInstace(this).getStartPage();
int startPosition = PreferenceUtils.getInstance(this).getDefaultStartPage();
startPosition = startPosition == -1 ? PreferenceUtils.getInstance(this).getLastStartPage() : startPosition;
currentPage = startPosition;
viewPager.setCurrentItem(startPosition);
navigationDrawerFragment.setItemChecked(startPosition);
slidingTabLayout.setSelectedIndicatorColors(Util.resolveColor(MainActivity.this, R.attr.colorAccent));
final int accentColor = Util.resolveColor(MainActivity.this, R.attr.colorAccent);
slidingTabLayout.setIndicatorColor(accentColor);
slidingTabLayout.setViewPager(viewPager);
slidingTabLayout.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
@ -89,7 +92,7 @@ public class MainActivity extends AbsFabActivity
@Override
public void onPageSelected(final int position) {
PreferenceUtils.getInstace(MainActivity.this).setStartPage(position);
PreferenceUtils.getInstance(MainActivity.this).setLastStartPage(position);
navigationDrawerFragment.setItemChecked(position);
currentPage = position;
invalidateOptionsMenu();
@ -104,7 +107,7 @@ public class MainActivity extends AbsFabActivity
private void initViews() {
viewPager = (ViewPager) findViewById(R.id.pager);
slidingTabLayout = (SlidingTabLayout) findViewById(R.id.sliding_tabs);
slidingTabLayout = (PagerSlidingTabStrip) findViewById(R.id.tabs);
drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
navigationDrawerFragment = (NavigationDrawerFragment)
getFragmentManager().findFragmentById(R.id.navigation_drawer);
@ -246,7 +249,7 @@ public class MainActivity extends AbsFabActivity
startActivity(new Intent(MainActivity.this, SearchActivity.class));
return true;
case R.id.action_settings:
Toast.makeText(this, "This feature is not available yet", Toast.LENGTH_SHORT).show();
startActivity(new Intent(MainActivity.this, SettingsActivity.class));
return true;
case R.id.action_about:
AboutDeveloperDialogHelper.getDialog(this).show();
@ -291,12 +294,12 @@ public class MainActivity extends AbsFabActivity
context.getResources().getString(R.string.songs),
context.getResources().getString(R.string.albums),
context.getResources().getString(R.string.artists),
context.getResources().getString(R.string.playlists) + " BETA"
context.getResources().getString(R.string.playlists)
};
}
@Override
public Fragment getItem(final int position) {
public AbsMainActivityFragment getItem(final int position) {
switch (position) {
case 0:
return pages.get(position, new SongViewFragment());

View file

@ -1,5 +1,6 @@
package com.kabouzeid.gramophone.ui.activities;
import android.annotation.TargetApi;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
@ -18,6 +19,7 @@ import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.Toast;
import com.kabouzeid.gramophone.App;
import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.helper.AddToPlaylistDialogHelper;
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
@ -27,14 +29,17 @@ import com.kabouzeid.gramophone.loader.SongFilePathLoader;
import com.kabouzeid.gramophone.misc.AppKeys;
import com.kabouzeid.gramophone.model.MusicRemoteEvent;
import com.kabouzeid.gramophone.model.Song;
import com.kabouzeid.gramophone.model.UIPreferenceChangedEvent;
import com.kabouzeid.gramophone.service.MusicService;
import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity;
import com.kabouzeid.gramophone.ui.activities.tageditor.SongTagEditorActivity;
import com.kabouzeid.gramophone.util.MusicUtil;
import com.kabouzeid.gramophone.util.NavigationUtil;
import com.kabouzeid.gramophone.util.PreferenceUtils;
import com.kabouzeid.gramophone.util.Util;
import com.kabouzeid.gramophone.util.ViewUtil;
import com.nineoldandroids.view.ViewPropertyAnimator;
import com.squareup.otto.Subscribe;
import com.squareup.picasso.Callback;
import com.squareup.picasso.Picasso;
@ -59,6 +64,7 @@ public class MusicControllerActivity extends AbsFabActivity {
private ImageButton prevButton;
private ImageButton repeatButton;
private ImageButton shuffleButton;
private View mediaControllerContainer;
private int lastFooterColor = -1;
@ -71,6 +77,8 @@ public class MusicControllerActivity extends AbsFabActivity {
setContentView(R.layout.activity_music_controller);
App.bus.register(this);
initViews();
moveSeekBarIntoPlace();
@ -102,6 +110,7 @@ public class MusicControllerActivity extends AbsFabActivity {
totalSongDuration = (TextView) findViewById(R.id.song_total_time);
footer = findViewById(R.id.footer);
progressSlider = (SeekBar) findViewById(R.id.progress_slider);
mediaControllerContainer = findViewById(R.id.media_controller_container);
}
private void setUpMusicControllers() {
@ -109,6 +118,24 @@ public class MusicControllerActivity extends AbsFabActivity {
setUpRepeatButton();
setUpShuffleButton();
setUpProgressSlider();
setUpBox(PreferenceUtils.getInstance(this).playbackControllerBoxEnabled());
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
private void setUpBox(boolean boxEnabled) {
if (boxEnabled) {
if (Util.hasLollipopSDK()) {
mediaControllerContainer.setElevation(getResources().getDimensionPixelSize(R.dimen.cardview_default_elevation));
}
mediaControllerContainer.setBackgroundColor(Util.resolveColor(this, R.attr.music_controller_container_color));
} else {
if (Util.hasLollipopSDK() && !Util.isInPortraitMode(this)) {
mediaControllerContainer.setElevation(getResources().getDimensionPixelSize(R.dimen.cardview_default_elevation));
mediaControllerContainer.setBackgroundColor(Util.resolveColor(this, R.attr.music_controller_container_color));
} else {
mediaControllerContainer.setBackground(null);
}
}
}
private void setUpProgressSlider() {
@ -131,6 +158,8 @@ public class MusicControllerActivity extends AbsFabActivity {
}
private void setUpPrevNext() {
nextButton.setImageDrawable(Util.getTintedDrawable(getResources(), R.drawable.ic_skip_next_white_48dp, Util.resolveColor(this, R.attr.themed_drawable_color)));
prevButton.setImageDrawable(Util.getTintedDrawable(getResources(), R.drawable.ic_skip_previous_white_48dp, Util.resolveColor(this, R.attr.themed_drawable_color)));
nextButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
@ -158,10 +187,10 @@ public class MusicControllerActivity extends AbsFabActivity {
private void updateShuffleState() {
switch (MusicPlayerRemote.getShuffleMode()) {
case MusicService.SHUFFLE_MODE_SHUFFLE:
shuffleButton.setImageResource(R.drawable.ic_shuffle_white_48dp);
shuffleButton.setImageDrawable(Util.getTintedDrawable(getResources(), R.drawable.ic_shuffle_white_48dp, Util.resolveColor(this, R.attr.themed_drawable_activated_color)));
break;
default:
shuffleButton.setImageResource(R.drawable.ic_shuffle_grey600_48dp);
shuffleButton.setImageDrawable(Util.getTintedDrawable(getResources(), R.drawable.ic_shuffle_white_48dp, Util.resolveColor(this, R.attr.themed_drawable_color)));
break;
}
}
@ -179,13 +208,13 @@ public class MusicControllerActivity extends AbsFabActivity {
private void updateRepeatState() {
switch (MusicPlayerRemote.getRepeatMode()) {
case MusicService.REPEAT_MODE_NONE:
repeatButton.setImageResource(R.drawable.ic_repeat_grey600_48dp);
repeatButton.setImageDrawable(Util.getTintedDrawable(getResources(), R.drawable.ic_repeat_white_48dp, Util.resolveColor(this, R.attr.themed_drawable_color)));
break;
case MusicService.REPEAT_MODE_ALL:
repeatButton.setImageResource(R.drawable.ic_repeat_white_48dp);
repeatButton.setImageDrawable(Util.getTintedDrawable(getResources(), R.drawable.ic_repeat_white_48dp, Util.resolveColor(this, R.attr.themed_drawable_activated_color)));
break;
default:
repeatButton.setImageResource(R.drawable.ic_repeat_one_white_48dp);
repeatButton.setImageDrawable(Util.getTintedDrawable(getResources(), R.drawable.ic_repeat_one_white_48dp, Util.resolveColor(this, R.attr.themed_drawable_activated_color)));
break;
}
}
@ -266,7 +295,7 @@ public class MusicControllerActivity extends AbsFabActivity {
private void setStandardColors() {
int songTitleTextColor = Util.resolveColor(this, R.attr.title_text_color);
int artistNameTextColor = Util.resolveColor(this, R.attr.caption_text_color);
int defaultBarColor = getResources().getColor(R.color.materialmusic_default_bar_color);
int defaultBarColor = Util.resolveColor(this, R.attr.default_bar_color);
animateColorChange(defaultBarColor);
@ -274,15 +303,15 @@ public class MusicControllerActivity extends AbsFabActivity {
songArtist.setTextColor(artistNameTextColor);
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
private void animateColorChange(final int newColor) {
if (lastFooterColor != -1 && lastFooterColor != newColor) {
ViewUtil.animateViewColor(footer, lastFooterColor, newColor, 300);
} else {
footer.setBackgroundColor(newColor);
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
if (Util.hasLollipopSDK() && PreferenceUtils.getInstance(this).coloredNavigationBarCurrentPlayingEnabled())
getWindow().setNavigationBarColor(newColor);
}
lastFooterColor = newColor;
}
@ -432,4 +461,19 @@ public class MusicControllerActivity extends AbsFabActivity {
.setStartDelay(startDelay)
.start();
}
@Subscribe
public void onUIPrefsChanged(UIPreferenceChangedEvent event) {
switch (event.getAction()) {
case UIPreferenceChangedEvent.PLAYBACK_CONTROLLER_CARD_CHANGED:
setUpBox((boolean) event.getValue());
break;
}
}
@Override
protected void onDestroy() {
super.onDestroy();
App.bus.unregister(this);
}
}

View file

@ -0,0 +1,125 @@
package com.kabouzeid.gramophone.ui.activities;
import android.os.Bundle;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.PreferenceFragment;
import android.preference.PreferenceManager;
import android.support.v7.widget.Toolbar;
import android.view.MenuItem;
import com.kabouzeid.gramophone.App;
import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.model.UIPreferenceChangedEvent;
import com.kabouzeid.gramophone.ui.activities.base.AbsBaseActivity;
public class SettingsActivity extends AbsBaseActivity {
public static final String TAG = SettingsActivity.class.getSimpleName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_preferences);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getFragmentManager().beginTransaction().replace(R.id.content_frame, new SettingsFragment()).commit();
}
public static class SettingsFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.pref_general);
addPreferencesFromResource(R.xml.pref_ui);
final Preference defaultStartPage = findPreference("default_start_page");
setSummary(defaultStartPage);
defaultStartPage.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object o) {
setSummary(defaultStartPage, o);
return true;
}
});
final Preference generalTheme = findPreference("general_theme");
setSummary(generalTheme);
generalTheme.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object o) {
setSummary(generalTheme, o);
App.bus.post(new UIPreferenceChangedEvent(UIPreferenceChangedEvent.THEME_CHANGED, o));
return true;
}
});
findPreference("colored_album_footers").setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object o) {
App.bus.post(new UIPreferenceChangedEvent(UIPreferenceChangedEvent.ALBUM_OVERVIEW_PALETTE_CHANGED, o));
return true;
}
});
findPreference("colored_navigation_bar_artist").setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object o) {
App.bus.post(new UIPreferenceChangedEvent(UIPreferenceChangedEvent.COLORED_NAVIGATION_BAR_ARTIST_CHANGED, o));
return true;
}
});
findPreference("colored_navigation_bar_album").setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object o) {
App.bus.post(new UIPreferenceChangedEvent(UIPreferenceChangedEvent.COLORED_NAVIGATION_BAR_ALBUM_CHANGED, o));
return true;
}
});
findPreference("playback_controller_card").setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object o) {
App.bus.post(new UIPreferenceChangedEvent(UIPreferenceChangedEvent.PLAYBACK_CONTROLLER_CARD_CHANGED, o));
return true;
}
});
}
private static void setSummary(Preference preference) {
setSummary(preference, PreferenceManager
.getDefaultSharedPreferences(preference.getContext())
.getString(preference.getKey(), ""));
}
private static void setSummary(Preference preference, Object value) {
String stringValue = value.toString();
if (preference instanceof ListPreference) {
ListPreference listPreference = (ListPreference) preference;
int index = listPreference.findIndexOfValue(stringValue);
preference.setSummary(
index >= 0
? listPreference.getEntries()[index]
: null);
} else {
preference.setSummary(stringValue);
}
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
onBackPressed();
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public String getTag() {
return TAG;
}
}

View file

@ -1,5 +1,6 @@
package com.kabouzeid.gramophone.ui.activities.base;
import android.annotation.TargetApi;
import android.os.Build;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
@ -8,7 +9,10 @@ import com.crashlytics.android.Crashlytics;
import com.kabouzeid.gramophone.App;
import com.kabouzeid.gramophone.interfaces.KabViewsDisableAble;
import com.kabouzeid.gramophone.misc.AppKeys;
import com.kabouzeid.gramophone.model.UIPreferenceChangedEvent;
import com.kabouzeid.gramophone.util.PreferenceUtils;
import com.kabouzeid.gramophone.util.Util;
import com.squareup.otto.Subscribe;
/**
* Created by karim on 20.01.15.
@ -16,12 +20,22 @@ import com.kabouzeid.gramophone.util.Util;
public abstract class AbsBaseActivity extends ActionBarActivity implements KabViewsDisableAble {
private App app;
private boolean areViewsEnabled;
private Object uiPreferenceChangeListener = new Object() {
@Subscribe
public void onUIPreferenceChangedEvent(UIPreferenceChangedEvent event) {
AbsBaseActivity.this.onUIPreferenceChangedEvent(event);
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
Crashlytics.setString(AppKeys.CL_CURRENT_ACTIVITY, getTag());
setTheme(getApp().getAppTheme());
setTheme(PreferenceUtils.getInstance(this).getGeneralTheme());
super.onCreate(savedInstanceState);
try {
App.bus.register(uiPreferenceChangeListener);
} catch (Exception ignored) {
}
}
protected App getApp() {
@ -39,6 +53,15 @@ public abstract class AbsBaseActivity extends ActionBarActivity implements KabVi
enableViews();
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public void onUIPreferenceChangedEvent(UIPreferenceChangedEvent event) {
switch (event.getAction()) {
case UIPreferenceChangedEvent.THEME_CHANGED:
recreate();
break;
}
}
@Override
public void enableViews() {
areViewsEnabled = true;
@ -64,4 +87,13 @@ public abstract class AbsBaseActivity extends ActionBarActivity implements KabVi
}
}
}
@Override
protected void onDestroy() {
super.onDestroy();
try {
App.bus.unregister(uiPreferenceChangeListener);
} catch (Exception ignored) {
}
}
}

View file

@ -35,8 +35,7 @@ public abstract class AbsFabActivity extends AbsBaseActivity {
super.onPostCreate(savedInstanceState);
try {
App.bus.register(busEventListener);
} catch (Exception ignored) {
}
} catch (Exception ignored) {}
setUpFab();
}
@ -142,8 +141,7 @@ public abstract class AbsFabActivity extends AbsBaseActivity {
super.onDestroy();
try {
App.bus.unregister(busEventListener);
} catch (Exception ignored) {
}
} catch (Exception ignored) {}
}
public void onMusicRemoteEvent(MusicRemoteEvent event) {

View file

@ -25,6 +25,7 @@ import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.misc.AppKeys;
import com.kabouzeid.gramophone.misc.SmallObservableScrollViewCallbacks;
import com.kabouzeid.gramophone.model.DataBaseChangedEvent;
import com.kabouzeid.gramophone.ui.activities.base.AbsBaseActivity;
import com.kabouzeid.gramophone.util.MusicUtil;
import com.kabouzeid.gramophone.util.Util;
import com.kabouzeid.gramophone.util.ViewUtil;
@ -51,7 +52,7 @@ import java.util.Map;
/**
* Created by karim on 18.01.15.
*/
public abstract class AbsTagEditorActivity extends ActionBarActivity {
public abstract class AbsTagEditorActivity extends AbsBaseActivity {
public static final String TAG = AbsTagEditorActivity.class.getSimpleName();
private static final int REQUEST_CODE_SELECT_IMAGE = 1337;
@ -85,10 +86,7 @@ public abstract class AbsTagEditorActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
app = (App) getApplicationContext();
setTheme(app.getAppTheme());
setUpTranslucence();
setUpTranslucence(false, false);
super.onCreate(savedInstanceState);
setContentView(getContentViewResId());
@ -197,13 +195,6 @@ public abstract class AbsTagEditorActivity extends ActionBarActivity {
}
}
private void setUpTranslucence() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
Util.setStatusBarTranslucent(getWindow(), false);
Util.setNavBarTranslucent(getWindow(), false);
}
}
private void getIntentExtras() {
Bundle intentExtras = getIntent().getExtras();
if (intentExtras != null) {
@ -232,12 +223,6 @@ public abstract class AbsTagEditorActivity extends ActionBarActivity {
startActivity(intent);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_tag_editor, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
@ -245,8 +230,6 @@ public abstract class AbsTagEditorActivity extends ActionBarActivity {
case android.R.id.home:
super.onBackPressed();
return true;
case R.id.action_settings:
return true;
}
return super.onOptionsItemSelected(item);
}
@ -290,7 +273,7 @@ public abstract class AbsTagEditorActivity extends ActionBarActivity {
Palette.generateAsync(bitmap, new Palette.PaletteAsyncListener() {
@Override
public void onGenerated(Palette palette) {
final int vibrantColor = palette.getVibrantColor(getResources().getColor(R.color.materialmusic_default_bar_color));
final int vibrantColor = palette.getVibrantColor(Util.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) {

View file

@ -51,6 +51,11 @@ public class AlbumTagEditorActivity extends AbsTagEditorActivity implements Text
setUpViews();
}
@Override
public String getTag() {
return TAG;
}
private void initViews() {
albumTitle = (EditText) findViewById(R.id.album_title);
albumArtistName = (EditText) findViewById(R.id.album_artist);

View file

@ -34,6 +34,11 @@ public class SongTagEditorActivity extends AbsTagEditorActivity implements TextW
setUpViews();
}
@Override
public String getTag() {
return TAG;
}
private void initViews() {
songTitle = (EditText) findViewById(R.id.title1);
albumTitle = (EditText) findViewById(R.id.title2);

View file

@ -2,13 +2,16 @@ package com.kabouzeid.gramophone.ui.fragments.mainactivityfragments;
import android.os.Bundle;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.support.v7.widget.RecyclerView;
import com.kabouzeid.gramophone.App;
import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.adapter.AlbumAdapter;
import com.kabouzeid.gramophone.model.UIPreferenceChangedEvent;
import com.squareup.otto.Subscribe;
/**
* Created by karim on 22.11.14.