package com.tadpolemusic.activity.fragment;
import java.util.WeakHashMap;
import android.app.ProgressDialog;
import android.graphics.Color;
import android.graphics.LightingColorFilter;
import android.os.Bundle;
import android.support.v4.app.FragmentTransaction;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebView;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.SeekBar;
import android.widget.TextView;
import com.itap.voiceemoticon.widget.MarqueeTextSurfaceView;
import com.tadpolemusic.R;
import com.tadpolemusic.TMLog;
import com.tadpolemusic.VEApplication;
import com.tadpolemusic.activity.LeftAndRightActivity.ActivityMusicListenter;
import com.tadpolemusic.activity.dialog.PlayListDialog;
import com.tadpolemusic.adapter.MyMusicItem;
import com.tadpolemusic.media.MusicData;
import com.tadpolemusic.media.MusicPlayState;
import com.tadpolemusic.media.interface1.IOnServiceConnectComplete;
import com.tadpolemusic.media.service.MusicPlayerProxy;
public class CenterFragment extends AbsMenuFragment implements ActivityMusicListenter {
//-----------------------------------------------------
//set content fragment
//-----------------------------------------------------
private AbsCenterContent mFragmentToSet;
private AbsCenterContent mCurContent;
private WeakHashMap<String, AbsCenterContent> mContentCache = new WeakHashMap<String, AbsCenterContent>();
public void setContent(MyMusicItem item) {
setContent(item.contentKey, item.centerContentClass);
}
private void setContent(boolean toAdd, AbsCenterContent content) {
if (getActivity() == null) {
mFragmentToSet = content;
} else {
FragmentTransaction t = getActivity().getSupportFragmentManager().beginTransaction();
// hide previous content
if (mCurContent != null) {
t.hide(mCurContent);
}
// show new
if (toAdd) {
t.add(R.id.main_center_container, content);
} else {
t.show(content);
}
mCurContent = content;
t.commit();
setHeaderTitle(content.geTitle());
}
}
private void setContent(String contentKey, Class<? extends AbsCenterContent> centerContentClass) {
try {
boolean needCreate = false;
// use cache
if (mContentCache.containsKey(contentKey)) {
System.out.println("====>in cache");
AbsCenterContent content = mContentCache.get(contentKey);
if (content != null) {
setContent(false, content);
} else {
System.out.println("====>in cache but null");
needCreate = true;
}
} else {
needCreate = true;
}
// no cache , to create
if (needCreate) {
AbsCenterContent content = centerContentClass.newInstance();
setContent(true, content);
mContentCache.put(contentKey, content);
return;
}
} catch (java.lang.InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
if (mFragmentToSet != null) {
setContent(true, mFragmentToSet);
mFragmentToSet = null;
}
}
// -------------------------------------------
// MAIN --
// -------------------------------------------
private ViewGroup mViewGroup;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
mViewGroup = (ViewGroup) inflater.inflate(R.layout.main_center, null);
final ProgressDialog progress = ProgressDialog.show(getActivity(), "音乐服务", "正在链接..");
final MusicPlayerProxy player = VEApplication.getMusicPlayer(getActivity().getApplicationContext());
player.setOnServiceConnectComplete(new IOnServiceConnectComplete() {
@Override
public void OnServiceConnectComplete() {
progress.hide();
player.setOnServiceConnectComplete(null);
}
});
player.connectService();
initHeader();
initMusic();
return mViewGroup;
}
@Override
public void onDestroy() {
super.onDestroy();
}
@Override
public void onSaveInstanceState(Bundle outState) {
if (outState != null) {
outState.putString("headerTitle", mHeaderTitle.getText().toString());
}
super.onSaveInstanceState(outState);
}
@Override
public void onViewStateRestored(Bundle savedInstanceState) {
if (savedInstanceState != null) {
String headerTitle = savedInstanceState.getString("headerTitle");
mHeaderTitle.setText(headerTitle);
}
super.onViewStateRestored(savedInstanceState);
}
// -------------------------------------------
// Header --
// -------------------------------------------
private TextView mHeaderTitle;
private ImageButton mBtnToLeft;
private void initHeader() {
mHeaderTitle = (TextView) this.findViewById(R.id.title);
mBtnToLeft = (ImageButton) this.findViewById(R.id.button_left);
final CenterFragment me = this;
mBtnToLeft.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
me.getLeftMenuControll().scrollToLeft();
}
});
}
public void setHeaderTitle(String str) {
mHeaderTitle.setText(str);
}
//-----------------------------------------------------
// useful methods
//-----------------------------------------------------
private View findViewById(int resId) {
return mViewGroup.findViewById(resId);
}
// -------------------------------------------
// Footer -- Music Player
// -------------------------------------------
@Override
public void onStart() {
super.onStart();
getLeftMenuControll().registerMusicListener(this);
}
@Override
public void onStop() {
super.onStop();
getLeftMenuControll().unRegisterMusicListenr(this);
}
private ImageView mBtnPlay;
private ImageView mBtnPlayNext;
private TextView mTextViewTime;
private MarqueeTextSurfaceView mTextViewMusicTitle;
private SeekBar mSeekBarTime;
private ProgressBar mProgressBarPrepare;
private View mViewFooter;
private int mCurPlayListIndex;
private ImageView mImageViewICon;
private void initMusic() {
// setContainer(new LocalMusicFragment());
final CenterFragment me = this;
mBtnPlay = (ImageView) this.findViewById(R.id.btn_play);
mBtnPlayNext = (ImageView) this.findViewById(R.id.btn_play_next);
mTextViewTime = (TextView) this.findViewById(R.id.text_view_time);
mSeekBarTime = (SeekBar) this.findViewById(R.id.seek_bar_time);
mProgressBarPrepare = (ProgressBar) this.findViewById(R.id.progress_bar_preparing);
mTextViewMusicTitle = (MarqueeTextSurfaceView) this.findViewById(R.id.text_view_music_title_slide);
mImageViewICon = (ImageView) this.findViewById(R.id.image_view_music_icon);
mImageViewICon.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
me.getLeftMenuControll().scrollToRight();
}
});
mViewFooter = (View) this.findViewById(R.id.footer);
mViewFooter.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new PlayListDialog(v.getContext()).show();
}
});
mBtnPlay.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final MusicPlayerProxy musicPlayer = VEApplication.getMusicPlayer(getActivity().getApplicationContext());
if (musicPlayer.getPlayState() == MusicPlayState.MPS_PLAYING) {
musicPlayer.pause();
} else {
musicPlayer.play(mCurPlayListIndex);
}
}
});
mBtnPlayNext.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final MusicPlayerProxy musicPlayer = VEApplication.getMusicPlayer(getActivity().getApplicationContext());
musicPlayer.playNext();
}
});
mSeekBarTime.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
final MusicPlayerProxy musicPlayer = VEApplication.getMusicPlayer(getActivity().getApplicationContext());
musicPlayer.seekTo(seekBar.getProgress());
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
}
});
}
public void dispatchPlayingInfo(int playListIndex) {
if (mCurContent != null) {
mCurPlayListIndex = playListIndex;
Log.d("", "onMusicPlayingIndexChange = " + playListIndex);
mCurContent.onMusicPlayingIndexChange(playListIndex);
}
}
public void onMusicPlayStart(MusicData musicData, int playListIndex) {
dispatchPlayingInfo(playListIndex);
mTextViewMusicTitle.setText(musicData.musicName);
mTextViewMusicTitle.startScroll();
mBtnPlay.setImageResource(android.R.drawable.ic_media_pause);
// mProgressBarPrepare.setVisibility(View.GONE);
// mProgressBarPrepare.setVisibility(View.INVISIBLE);
}
public void onMusicPreparing() {
// mProgressBarPrepare.setVisibility(View.VISIBLE);
}
public void onMusicTimeAndProgressUpdate(String timerText, int progress) {
mTextViewTime.setText(timerText);
mSeekBarTime.setProgress(progress);
}
public void onMusicPlayComplete() {
Log.d(VEApplication.TAG, "onMusicPlayComplete");
// mProgressBarPrepare.setVisibility(View.GONE);
mTextViewMusicTitle.stopScroll();
mBtnPlay.setImageResource(android.R.drawable.ic_media_play);
}
public void onPlayListNoFile(int playListIndex) {
dispatchPlayingInfo(playListIndex);
// mProgressBarPrepare.setVisibility(View.GONE);
mTextViewMusicTitle.stopScroll();
mTextViewMusicTitle.setText("");
mTextViewTime.setText("00:00/00:00");
mSeekBarTime.setProgress(0);
mBtnPlay.setImageResource(android.R.drawable.ic_media_play);
}
@Override
public void onMusicTimeAndProgressUpdate(String progressTimeText, String durationText, int progress) {
}
private static final String TAG = "CenterFragment";
@Override
public void onMusicPlayBufferUpdate(int playBufferPercent) {
TMLog.step(TAG, "onMusicPlayBufferUpdate playBufferPercent = " + playBufferPercent);
mSeekBarTime.setSecondaryProgress(playBufferPercent);
}
}