package com.kitty.poclient.fragment; import android.app.Activity; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.graphics.drawable.AnimationDrawable; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.ImageButton; import android.widget.TextView; import com.kitty.poclient.R; import com.kitty.poclient.common.MymusicManager; import com.kitty.poclient.common.UIHelper; import com.kitty.poclient.common.WatchDog; import com.kitty.poclient.fragment.mymusic.AlbumDetailFragment; import com.kitty.poclient.fragment.mymusic.AlbumListFragment; import com.kitty.poclient.fragment.mymusic.BaseFragment; import com.kitty.poclient.fragment.mymusic.CacheAlbumDetailFragment; import com.kitty.poclient.fragment.mymusic.MymusicThemeDetailFragment; import com.kitty.poclient.fragment.mymusic.MymusicThemesFragment; import com.kitty.poclient.fragment.mymusic.SinglesFragment; import com.kitty.poclient.interfaces.OnCurrentPlayingStateChangedListener; public class TabMusicFragment extends TabFragment implements OnCurrentPlayingStateChangedListener { private static final String TAG = TabMusicFragment.class.getSimpleName(); public static boolean IS_ALIVE = false; public static final int ALBUM = 0; public static final int SINGLE = 1; public static final int THEME = 2; private TextView tabTitle; private ImageButton btnMenuOrBack; private ImageButton btnPlayer; private String menuItems[]; public static int currentPosition = ALBUM; private OnClickListener menuOrBackButtonListener; private OnClickListener btnPlayerButtonListener; private AlbumDetailFragment lastAlbumDetailFragment; private String currentFragmentName; private FragmentManager musicFragmentManager; private BroadcastReceiver initBtnPlayerReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { refreshPlayStatus(); } }; public void refreshPlayStatus() { UIHelper.initMusicFragmentBtnPlayer(btnPlayer, getResources(), null); } private void registerReceivers() { getActivity().registerReceiver(initBtnPlayerReceiver, new IntentFilter("initBtnPlayerReceiver")); } private void unregisterReceivers() { getActivity().unregisterReceiver(initBtnPlayerReceiver); } @Override public void onAttach(Activity activity) { super.onAttach(activity); Fragment parentFragment = getParentFragment(); if(parentFragment instanceof TabFragment.OnTitleClickListener){ this.listener = (TabFragment.OnTitleClickListener)parentFragment; } } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); musicFragmentManager = getChildFragmentManager(); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { Log.e(TAG,"onCreateView"); View view = inflater.inflate(R.layout.layout_tab_main, null); tabTitle = (TextView) view.findViewById(R.id.tv_title); btnMenuOrBack = (ImageButton) view.findViewById(R.id.btn_menu); btnPlayer = (ImageButton) view.findViewById(R.id.btn_player); initListeners(); menuItems = getActivity().getResources().getStringArray(R.array.sliding_menu_music); setContentFragment(menuItems[currentPosition], currentPosition); registerReceivers(); MymusicManager.tabMusicFragment = this; // MymusicManager.receiveCacheSub(); WatchDog.cpsListeners.add(this); return view; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); } @Override public void onResume() { IS_ALIVE = true; super.onResume(); onCurrentPlayingStateChanged(); } @Override public void onPause() { IS_ALIVE = false; super.onPause(); } @Override public void onDestroyView() { super.onDestroyView(); } @Override public void onDetach() { unregisterReceivers(); super.onDetach(); } public void back() { int backStackEntryCount = musicFragmentManager.getBackStackEntryCount(); int topFragmentIndex = backStackEntryCount - 1; String topFragemntName = musicFragmentManager.getBackStackEntryAt(topFragmentIndex).getName(); Log.i(TAG, "BackStackEntryCount:" + backStackEntryCount); Log.i(TAG, "topFragemntName:" + topFragemntName); if (isRoot(topFragemntName)) { UIHelper.showExitDialog(MymusicManager.mainActivity); } else { musicFragmentManager.popBackStack(); topFragmentIndex--; } boolean isMenu = false; if(topFragmentIndex>=0){ topFragemntName = musicFragmentManager.getBackStackEntryAt(topFragmentIndex).getName(); currentFragmentName = topFragemntName; if(isRoot(topFragemntName)){ isMenu = true; } }else{ isMenu = true; } //按钮 resetMenuOrBack(isMenu); //标题 resetTile(currentFragmentName); } private boolean isRoot(String name){ boolean flag = false; if(name.equals(AlbumListFragment.class.getSimpleName()) || name.equals(SinglesFragment.class.getSimpleName()) || name.equals(MymusicThemesFragment.class.getSimpleName()) ){ flag = true; } return flag; } private void initListeners() { menuOrBackButtonListener = new OnClickListener() { @Override public void onClick(View v) { if (isRoot(currentFragmentName)) { Log.i(TAG, "perform MENU, currentFragment:" + currentFragmentName); if(listener != null) listener.onMenuClick(); // 此时为菜单按钮 } else { Log.i(TAG, "perform BACK, currentFragment:" + currentFragmentName); back(); } } }; btnPlayerButtonListener = new OnClickListener() { @Override public void onClick(View v) { if (listener != null) { listener.onPlayerClick(); } } }; btnMenuOrBack.setOnClickListener(menuOrBackButtonListener); btnPlayer.setOnClickListener(btnPlayerButtonListener); } private AlbumListFragment getAlbumsFragment() { AlbumListFragment albumListFragment= new AlbumListFragment(getActivity(), this); return albumListFragment; } private BaseFragment getSinglesFragment() { SinglesFragment singlesFragment= new SinglesFragment(); return singlesFragment; } private BaseFragment getThemesFragment() { MymusicThemesFragment mymusicThemesFragment = new MymusicThemesFragment(getActivity(), this); return mymusicThemesFragment; } // private void setContentFragment(BaseFragment fragment) { FragmentTransaction transaction = musicFragmentManager.beginTransaction(); transaction.replace(R.id.fragment_stub, fragment); transaction.addToBackStack(fragment.getFragmentName()); transaction.commit(); currentFragmentName = fragment.getFragmentName(); Log.i(TAG, "currentFragment.getFragmentName:" + currentFragmentName); //按钮 图标 resetMenuOrBack(isRoot(currentFragmentName)); //标题 resetTile(currentFragmentName); } private void resetTile(String fragmentName){ int index = -1; if(fragmentName.equals(AlbumListFragment.class.getSimpleName())){ index = 0; } else if(fragmentName.equals(SinglesFragment.class.getSimpleName())){ index = 1; } else if(fragmentName.equals(MymusicThemesFragment.class.getSimpleName())){ index = 2; } if(index != -1){ tabTitle.setText(menuItems[index]); } } public void setContentFragment(String title, int position) { // 标题 if(title!=null){ tabTitle.setText(title); } currentPosition = position; switch (position) { case ALBUM: setContentFragment(getAlbumsFragment()); break; case SINGLE: setContentFragment(getSinglesFragment()); break; case THEME: setContentFragment(getThemesFragment()); break; } } /** * @param isMenu */ private void resetMenuOrBack(boolean isMenu){ if (isMenu) { // 菜单 图标 btnMenuOrBack.setImageResource(R.drawable.btn_menu); } else { // 退回 图标 btnMenuOrBack.setImageResource(R.drawable.btn_back); } } private void setContentFragment(BaseFragment fragment, String title) { // 标题 tabTitle.setText(title); // content fragment setContentFragment(fragment); } public void showAlbumDetailFragment(AlbumDetailFragment fragment) { String title = fragment.getAlbumName(); setContentFragment(fragment, title); lastAlbumDetailFragment = fragment; // 记录打开的专辑 } public void showThemeDetailFragment(MymusicThemeDetailFragment fragment) { String title = fragment.getThemeName(); setContentFragment(fragment, title); } public void showCacheAlbumDetailFragment(CacheAlbumDetailFragment fragment) { String title = lastAlbumDetailFragment.getAlbumName(); setContentFragment(fragment, title); } public static int getCurrentPosition(){ return currentPosition; } @Override public void onCurrentPlayingStateChanged() { if(PlayerFragment.PLAYING.equals(WatchDog.currentState)){ AnimationDrawable animationDrawable = (AnimationDrawable) getResources().getDrawable(R.anim.playing); btnPlayer.setImageDrawable(animationDrawable); animationDrawable.start(); }else{ btnPlayer.setImageDrawable(getResources().getDrawable(R.drawable.btn_player)); } } }