package com.simplecity.amp_library.ui.fragments;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.graphics.LightingColorFilter;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.simplecity.amp_library.R;
import com.simplecity.amp_library.glide.utils.GlideUtils;
import com.simplecity.amp_library.model.Song;
import com.simplecity.amp_library.playback.MusicService;
import com.simplecity.amp_library.ui.views.CircleImageView;
import com.simplecity.amp_library.utils.ColorUtils;
import com.simplecity.amp_library.utils.MusicUtils;
public class DrawerHeaderFragment extends BaseFragment {
private static final String TAG = "DrawerHeaderFragment";
private BroadcastReceiver mStatusListener;
private View mRootView;
private ImageView mBackgroundImage;
private CircleImageView mArtistImage;
private Drawable mBackgroundDrawable;
private SharedPreferences mPrefs;
private SharedPreferences.OnSharedPreferenceChangeListener mSharedPreferenceChangeListener;
public DrawerHeaderFragment() {
}
public static DrawerHeaderFragment newInstance() {
DrawerHeaderFragment fragment = new DrawerHeaderFragment();
Bundle args = new Bundle();
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mBackgroundDrawable = getResources().getDrawable(R.drawable.ic_drawer_header_placeholder);
mBackgroundDrawable.setColorFilter(new LightingColorFilter(ColorUtils.getPrimaryColor(), 0x00222222));
mPrefs = PreferenceManager.getDefaultSharedPreferences(this.getActivity());
mSharedPreferenceChangeListener = (sharedPreferences, key) -> {
if (key.equals("pref_theme_highlight_color")
|| key.equals("pref_theme_accent_color")
|| key.equals("pref_theme_white_accent")) {
themeUIComponents();
}
};
mPrefs.registerOnSharedPreferenceChangeListener(mSharedPreferenceChangeListener);
}
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
if (mRootView == null) {
mRootView = inflater.inflate(R.layout.fragment_drawer_header, container, false);
mBackgroundImage = (ImageView) mRootView.findViewById(R.id.background_image);
mBackgroundImage.setImageDrawable(mBackgroundDrawable);
mArtistImage = (CircleImageView) mRootView.findViewById(R.id.artist_image);
}
return mRootView;
}
@Override
public void onResume() {
super.onResume();
mStatusListener = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
final String action = intent.getAction();
if (action != null) {
switch (action) {
case MusicService.InternalIntents.META_CHANGED:
updateTrackInfo();
break;
case MusicService.InternalIntents.PLAY_STATE_CHANGED:
updateTrackInfo();
break;
case MusicService.InternalIntents.SERVICE_CONNECTED:
updateTrackInfo();
break;
}
}
}
};
final IntentFilter filter = new IntentFilter();
filter.addAction(MusicService.InternalIntents.META_CHANGED);
filter.addAction(MusicService.InternalIntents.PLAY_STATE_CHANGED);
filter.addAction(MusicService.InternalIntents.SERVICE_CONNECTED);
getActivity().registerReceiver(mStatusListener, filter);
updateTrackInfo();
}
@Override
public void onPause() {
getActivity().unregisterReceiver(mStatusListener);
super.onPause();
}
@Override
public void onDestroy() {
mPrefs.unregisterOnSharedPreferenceChangeListener(mSharedPreferenceChangeListener);
super.onDestroy();
}
private void themeUIComponents() {
if (mBackgroundDrawable != null) {
mBackgroundDrawable.setColorFilter(new LightingColorFilter(ColorUtils.getPrimaryColor(), 0x00222222));
}
}
void updateTrackInfo() {
Song song = MusicUtils.getSong();
if (song != null) {
TextView trackNameView = (TextView) mRootView.findViewById(R.id.line1);
TextView artistNameView = (TextView) mRootView.findViewById(R.id.line2);
TextView placeholderText = (TextView) mRootView.findViewById(R.id.placeholder_text);
trackNameView.setText(song.name);
artistNameView.setText(String.format("%s - %s", song.albumArtistName, song.albumName));
placeholderText.setText(R.string.app_name);
Glide.with(getContext())
.load(song)
.diskCacheStrategy(DiskCacheStrategy.ALL)
.error(mBackgroundDrawable)
.fallback(mBackgroundDrawable)
.into(mBackgroundImage);
Glide.with(getContext())
.load(song.getAlbumArtist())
.diskCacheStrategy(DiskCacheStrategy.ALL)
.placeholder(GlideUtils.getMediumPlaceHolderResId())
.into(mArtistImage);
if (song.name == null || (song.albumName == null && song.albumArtistName == null)) {
placeholderText.setVisibility(View.VISIBLE);
trackNameView.setVisibility(View.GONE);
artistNameView.setVisibility(View.GONE);
} else {
placeholderText.setVisibility(View.GONE);
trackNameView.setVisibility(View.VISIBLE);
artistNameView.setVisibility(View.VISIBLE);
}
}
}
@Override
protected String screenName() {
return TAG;
}
}