package io.hefuyi.listener.ui.dialogs; import android.app.Dialog; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.app.DialogFragment; import android.support.v7.app.AppCompatActivity; import android.support.v7.graphics.Palette; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.Window; import android.view.WindowManager; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import com.afollestad.materialdialogs.DialogAction; import com.afollestad.materialdialogs.MaterialDialog; import java.util.List; import javax.inject.Inject; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; import io.hefuyi.listener.ListenerApp; import io.hefuyi.listener.MusicPlayer; import io.hefuyi.listener.MusicService; import io.hefuyi.listener.R; import io.hefuyi.listener.injector.component.ApplicationComponent; import io.hefuyi.listener.injector.component.DaggerPlayqueueSongComponent; import io.hefuyi.listener.injector.component.PlayqueueSongComponent; import io.hefuyi.listener.injector.module.PlayqueueSongModule; import io.hefuyi.listener.mvp.contract.PlayqueueSongContract; import io.hefuyi.listener.mvp.model.Song; import io.hefuyi.listener.ui.adapter.PlayqueueSongsAdapter; import io.hefuyi.listener.util.ColorUtil; import io.hefuyi.listener.widget.DividerItemDecoration; /** * Created by hefuyi on 2016/12/27. */ public class PlayqueueDialog extends DialogFragment implements PlayqueueSongContract.View{ @Inject PlayqueueSongContract.Presenter mPresenter; @BindView(R.id.tv_play_mode) TextView tvPlayMode; @BindView(R.id.iv_play_mode) ImageView ivPlayMode; @BindView(R.id.clear_all) ImageView clearAll; @BindView(R.id.recycler_view_songs) RecyclerView recyclerView; @BindView(R.id.bottomsheet) LinearLayout root; private PlayqueueSongsAdapter mAdapter; private Palette.Swatch mSwatch; private PlayMode mPlayMode; public enum PlayMode { REPEATALL, CURRENT, SHUFFLE } @Override public void onStart() { super.onStart(); Dialog dialog = getDialog(); dialog.setCanceledOnTouchOutside(true); Window window = dialog.getWindow(); WindowManager.LayoutParams params = window.getAttributes(); params.gravity = Gravity.BOTTOM; params.width = WindowManager.LayoutParams.MATCH_PARENT; window.setAttributes(params); window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); } @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); injectDependences(); mPresenter.attachView(this); mAdapter = new PlayqueueSongsAdapter((AppCompatActivity) getActivity(), null); } private void injectDependences() { ApplicationComponent applicationComponent = ((ListenerApp) getActivity().getApplication()).getApplicationComponent(); PlayqueueSongComponent playqueueSongComponent = DaggerPlayqueueSongComponent.builder() .applicationComponent(applicationComponent) .playqueueSongModule(new PlayqueueSongModule()) .build(); playqueueSongComponent.inject(this); } @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.dialog_playqueue,container,false); ButterKnife.bind(this, view); return view; } @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE); if (mSwatch != null) { root.setBackgroundColor(mSwatch.getRgb()); mAdapter.setPaletteSwatch(mSwatch); int blackWhiteColor = ColorUtil.getBlackWhiteColor(mSwatch.getRgb()); tvPlayMode.setTextColor(blackWhiteColor); ivPlayMode.setColorFilter(blackWhiteColor); clearAll.setColorFilter(blackWhiteColor); } recyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); recyclerView.setAdapter(mAdapter); recyclerView.addItemDecoration(new DividerItemDecoration(getActivity(), DividerItemDecoration.VERTICAL_LIST, false)); int shuffleMode = MusicPlayer.getShuffleMode(); int repeatMode = MusicPlayer.getRepeatMode(); if (shuffleMode == MusicService.SHUFFLE_NONE) { if (repeatMode == MusicService.REPEAT_CURRENT) { //单曲播放模式 ivPlayMode.setImageDrawable(getResources().getDrawable(R.drawable.ic_one_shot)); tvPlayMode.setText(R.string.repeat_current); mPlayMode = PlayMode.CURRENT; }else{ //顺序播放模式 ivPlayMode.setImageDrawable(getResources().getDrawable(R.drawable.ic_list_repeat)); tvPlayMode.setText(R.string.repeat_all); mPlayMode = PlayMode.REPEATALL; } } else if (shuffleMode == MusicService.SHUFFLE_NORMAL||shuffleMode==MusicService.SHUFFLE_AUTO) { //随机播放模式 ivPlayMode.setImageDrawable(getResources().getDrawable(R.drawable.ic_list_shuffle)); tvPlayMode.setText(R.string.shuffle_all); mPlayMode = PlayMode.SHUFFLE; } mAdapter.registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() { @Override public void onItemRangeRemoved(int positionStart, int itemCount) { if (mAdapter.getItemCount() == 0) { dismiss(); } } }); mPresenter.subscribe(); } @Override public void onActivityCreated(Bundle arg0) { super.onActivityCreated(arg0); getDialog().getWindow() .getAttributes().windowAnimations = R.style.DialogAnimation; } @Override public void onDestroyView() { super.onDestroyView(); mPresenter.unsubscribe(); } @Override public void showSongs(List<Song> songs) { mAdapter.setSongList(songs); } public void setPaletteSwatch(Palette.Swatch swatch) { if (swatch == null) { return; } mSwatch = swatch; if (root != null) { root.setBackgroundColor(mSwatch.getRgb()); int blackWhiteColor = ColorUtil.getBlackWhiteColor(mSwatch.getRgb()); tvPlayMode.setTextColor(blackWhiteColor); ivPlayMode.setColorFilter(blackWhiteColor); clearAll.setColorFilter(blackWhiteColor); mAdapter.setPaletteSwatch(mSwatch); } } public void dismiss() { getDialog().dismiss(); } @OnClick(R.id.iv_play_mode) public void onPlayModeClick() { if (mPlayMode == PlayMode.REPEATALL) { ivPlayMode.setImageDrawable(getResources().getDrawable(R.drawable.ic_one_shot)); tvPlayMode.setText(R.string.repeat_current); MusicPlayer.setShuffleMode(MusicService.SHUFFLE_NONE); MusicPlayer.setRepeatMode(MusicService.REPEAT_CURRENT); mPlayMode = PlayMode.CURRENT; } else if (mPlayMode == PlayMode.CURRENT) { ivPlayMode.setImageDrawable(getResources().getDrawable(R.drawable.ic_list_shuffle)); tvPlayMode.setText(R.string.shuffle_all); MusicPlayer.setShuffleMode(MusicService.SHUFFLE_NORMAL); MusicPlayer.setRepeatMode(MusicService.REPEAT_ALL); mPlayMode = PlayMode.SHUFFLE; } else if (mPlayMode == PlayMode.SHUFFLE) { ivPlayMode.setImageDrawable(getResources().getDrawable(R.drawable.ic_list_repeat)); tvPlayMode.setText(R.string.repeat_all); MusicPlayer.setShuffleMode(MusicService.SHUFFLE_NONE); mPlayMode = PlayMode.REPEATALL; } } @OnClick(R.id.clear_all) public void onClearAllClick() { new MaterialDialog.Builder(getActivity()) .title(getActivity().getResources().getString(R.string.clear_song_queue) + "?") .positiveText(R.string.sure) .negativeText(R.string.cancel) .onPositive(new MaterialDialog.SingleButtonCallback() { @Override public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) { dismiss(); MusicPlayer.clearQueue(); } }) .onNegative(new MaterialDialog.SingleButtonCallback() { @Override public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) { dialog.dismiss(); } }) .show(); } }