package cn.qylk.fragment; import android.app.AlertDialog; import android.app.Fragment; import android.content.BroadcastReceiver; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.IntentFilter; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.os.Bundle; import android.preference.PreferenceManager; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.SeekBar; import android.widget.TextView; import cn.qylk.ListUI; import cn.qylk.MainActivity; import cn.qylk.R; import cn.qylk.app.APP; import cn.qylk.app.IPlayList.PlayMode; import cn.qylk.app.MyAction; import cn.qylk.app.PlayList; import cn.qylk.database.MediaDatabase; import cn.qylk.service.LocalService; import cn.qylk.utils.StringUtils; public class Fragment_MusicControls extends Fragment implements OnClickListener { private class PosReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(MyAction.INTENT_POSITION)) posbar.setProgress(intent.getExtras().getInt("pos")); else if (intent.getAction().equals(MyAction.INTENT_STATUS)) {// 接收播放状态消息 playorpause.setImageResource(intent.getExtras().getBoolean( "isplaying") ? R.drawable.btn_pause_bg : R.drawable.btn_play_bg); } } } private TextView dura, curpos; private PlayList list = APP.list; private SeekBar posbar; private PosReceiver posreceiver; private LocalService Service = ListUI.Service; private ImageView voicesearch, info, playorpause, love, next, pre, mode, eq; private void InitView(View root) { voicesearch = (ImageView) root.findViewById(R.id.voicesearch); info = (ImageView) root.findViewById(R.id.openinfo); playorpause = (ImageView) root.findViewById(R.id.play_pause); love = (ImageView) root.findViewById(R.id.love); dura = (TextView) root.findViewById(R.id.dura); curpos = (TextView) root.findViewById(R.id.pos); next = (ImageView) root.findViewById(R.id.next); pre = (ImageView) root.findViewById(R.id.pre); mode = (ImageView) root.findViewById(R.id.mode); eq = (ImageView) root.findViewById(R.id.seteq); posbar = (SeekBar) root.findViewById(R.id.progressbar); info.setOnClickListener(this); playorpause.setOnClickListener(this); mode.setOnClickListener(this); voicesearch.setOnClickListener(this); next.setOnClickListener(this); pre.setOnClickListener(this); love.setOnClickListener(this); eq.setOnClickListener(this); posreceiver = new PosReceiver(); IntentFilter filter = new IntentFilter();// 过滤器 filter.addAction(MyAction.INTENT_POSITION); filter.addAction(MyAction.INTENT_STATUS); getActivity().registerReceiver(posreceiver, filter); posbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { curpos.setText(StringUtils.TimeFormat(progress));// 更新显示时间进度 } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { // 停止拖拉进度条 Service.SetMediaPos(seekBar.getProgress());// 调整歌曲进度 ((MainActivity) getActivity()).updateLrcPos(seekBar .getProgress()); } }); } @Override public void onClick(View v) { switch (v.getId()) {// 通过传过来的BUTTON ID可以判断Button的类型 case R.id.play_pause: Service.PauseOrContinue(Service.IsPlaying()); break; case R.id.pre:// 上一首 Service.pre(); break; case R.id.next:// 下一首 Service.next(); break; case R.id.love: boolean isloved = MediaDatabase.IsLoved(list.getId()); love.setImageResource(isloved ? R.drawable.tool_favorite_off : R.drawable.tool_favorite_on); MediaDatabase.recordLove(list.getId(), !isloved); break; case R.id.mode:// 播放模式 ShiftMode(); break; case R.id.openinfo:// 显示歌手信息 ((MainActivity) getActivity()).showInfo2(); break; case R.id.seteq: CharSequence[] presets = getResources().getStringArray( R.array.eqpresets); new AlertDialog.Builder(getActivity()) .setTitle("均衡器设置") .setSingleChoiceItems(presets, Service.getEQ(), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { SharedPreferences mPerferences = PreferenceManager .getDefaultSharedPreferences(APP .getInstance()); Editor editor = mPerferences.edit(); editor.putInt("eq", which); editor.commit(); Service.setEQ((short) which); } }).show(); break; case R.id.voicesearch: ((MainActivity) getActivity()).startVoiceRecognition(); break; } } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View root = inflater.inflate(R.layout.buttons, null); InitView(root); return root; } @Override public void onDestroyView() { getActivity().unregisterReceiver(posreceiver); super.onDestroyView(); } /** * 播放模式转换 */ private void ShiftMode() { int res; PlayMode mode2; switch (list.getMode()) { case Normal: res = R.drawable.tool_shuffle; mode2 = PlayMode.Shuffle; break; case Shuffle: res = R.drawable.tool_repeat_none; mode2 = PlayMode.Repeat_One; break; case Repeat_One: default: res = R.drawable.tool_repeat_all; mode2 = PlayMode.Normal; break; } mode.setImageResource(res); list.setMode(mode2); } /** * 更新控制区显示 * * @param dur * 歌曲时长 */ public void updateViewElements(int dur) { posbar.setMax(dur);// 设置进度条最大值 posbar.setProgress(0); dura.setText(StringUtils.TimeFormat(dur)); // 显示歌曲时间 boolean isloved = MediaDatabase.IsLoved(list.getId()); love.setImageResource(isloved ? R.drawable.tool_favorite_on : R.drawable.tool_favorite_off); if (Service.IsPlaying()) playorpause.setImageResource(R.drawable.btn_pause_bg);// 更新按钮图标 } }