package com.ideabag.playtunes.fragment;
import com.ideabag.playtunes.R;
import com.ideabag.playtunes.activity.MainActivity;
import com.ideabag.playtunes.util.IMusicBrowser;
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class MusicBrowserFragment extends Fragment {
public static final String TAG = "MusicBrowserFragment";
private static final String PREF_KEY_CLASSNAME = "class_name";
private static final String PREF_KEY_MEDIAID = "media_id";
private MainActivity mActivity;
@Override public View onCreateView( LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState ) {
return inflater.inflate( R.layout.fragment_music_browser, container, false );
}
@Override public void onAttach( Activity activity ) {
super.onAttach( activity );
mActivity = ( MainActivity ) activity;
//mActivity.getFragmentManager().getBackStackEntryCount()
}
@SuppressWarnings("unchecked")
@Override public void onActivityCreated( Bundle savedInstanceState ) {
super.onActivityCreated( savedInstanceState );
SharedPreferences prefs = getActivity().getSharedPreferences( getString( R.string.prefs_file ), Context.MODE_PRIVATE );
//IMusicBrowser TopFragment = null;
if ( prefs.contains( "class_name" ) ) {// else check if we saved it in prefs
String className = prefs.getString( PREF_KEY_CLASSNAME, "" );
String mediaID = prefs.getString( PREF_KEY_MEDIAID, null );
Fragment initialFragment = null;
Class < ? extends Fragment > nowPlayingFragmentClass;
try {
nowPlayingFragmentClass = ( Class< ? extends Fragment > ) Class.forName( className );
initialFragment = nowPlayingFragmentClass.newInstance();
if ( null != initialFragment ) {
IMusicBrowser mBrowserFragment = ( IMusicBrowser ) initialFragment;
mBrowserFragment.setMediaID( mediaID );
}
} catch ( ClassNotFoundException e ) {
e.printStackTrace();
} catch ( java.lang.InstantiationException e ) {
e.printStackTrace();
} catch ( IllegalAccessException e ) {
e.printStackTrace();
}
if ( null == initialFragment ) {
// Fall back to "All Songs"
//android.util.Log.i( TAG, "Failed to instantiate... falling back to SongsFragment.");
initialFragment = new SongsFragment();
}
FragmentTransaction transaction = getActivity().getSupportFragmentManager().beginTransaction();
transaction.replace( R.id.MusicBrowserContainer, initialFragment );
// Don't add to back stack
// Commit the transaction
transaction.commit();
} else {
SongsFragment initialFragment = new SongsFragment();
FragmentTransaction transaction = getActivity().getSupportFragmentManager().beginTransaction();
transaction.replace( R.id.MusicBrowserContainer, initialFragment );
// Don't add to back stack
// Commit the transaction
transaction.commit();
}
}
@Override public void onStop() {
super.onStop();
SharedPreferences prefs = getActivity().getSharedPreferences( getString( R.string.prefs_file ), Context.MODE_PRIVATE );
SharedPreferences.Editor edit = prefs.edit();
//android.util.Log.i( TAG, "Class name: " + TopFragment.getClass().getName() );
IMusicBrowser TopFragment = ( IMusicBrowser ) getActivity().getSupportFragmentManager().findFragmentById( R.id.MusicBrowserContainer );
edit.putString( PREF_KEY_CLASSNAME, TopFragment.getClass().getName() );
edit.putString( PREF_KEY_MEDIAID, TopFragment.getMediaID() );
edit.commit();
}
public void showNowPlaying() {
Class < ? extends Fragment > nowPlayingFragmentClass = null;
String nowPlayingMediaID = null;
try {
nowPlayingFragmentClass = mActivity.mBoundService.mPlaylistFragmentClass;
nowPlayingMediaID = mActivity.mBoundService.mPlaylistMediaID;
//
// Check to see if the currently playing Fragment is already showing
// only create the new fragment if it isn't already showing.
//
IMusicBrowser TopFragment = ( IMusicBrowser ) getActivity().getSupportFragmentManager().findFragmentById( R.id.MusicBrowserContainer );
if ( TopFragment != null ) {
String showingMediaID = ( ( IMusicBrowser ) TopFragment ).getMediaID();
boolean isSameClass = TopFragment.getClass().equals( nowPlayingFragmentClass );
boolean isSameMediaID = showingMediaID.equals( nowPlayingMediaID );
if ( !( isSameClass && isSameMediaID ) ) {
Fragment nowPlayingFragment;
nowPlayingFragment = nowPlayingFragmentClass.newInstance();
( ( IMusicBrowser ) nowPlayingFragment ).setMediaID( nowPlayingMediaID );
FragmentTransaction transaction = getActivity().getSupportFragmentManager().beginTransaction();
// Replace whatever is in the fragment_container view with this fragment,
// and add the transaction to the back stack
transaction.replace( R.id.MusicBrowserContainer, nowPlayingFragment );
transaction.addToBackStack( null );
// Commit the transaction
transaction.commitAllowingStateLoss();
}
}
} catch ( java.lang.InstantiationException e ) {
e.printStackTrace();
} catch ( IllegalAccessException e ) {
e.printStackTrace();
} catch ( ClassCastException e ) {
e.printStackTrace();
} catch( NullPointerException e ) {
e.printStackTrace();
}
}
public void transactFragment( Fragment newFragment ) {
//
// Check to see if the currently playing Fragment is already showing
// only create the new fragment if it isn't already showing.
//
IMusicBrowser TopFragment = ( IMusicBrowser ) getActivity().getSupportFragmentManager().findFragmentById( R.id.MusicBrowserContainer );
if ( TopFragment != null ) {
String showingMediaID = TopFragment.getMediaID();
boolean isSameClass = TopFragment.getClass().equals( newFragment.getClass() );
boolean isSameMediaID = showingMediaID != null && showingMediaID.equals( ((IMusicBrowser)newFragment).getMediaID() );
if ( !( isSameClass && isSameMediaID ) ) {
FragmentTransaction transaction = getActivity().getSupportFragmentManager().beginTransaction();
TopFragment = (IMusicBrowser) newFragment;
// Replace whatever is in the fragment_container view with this fragment,
// and add the transaction to the back stack
transaction.replace( R.id.MusicBrowserContainer, newFragment );
transaction.addToBackStack( null );
// Commit the transaction
transaction.commit();
}
} else {
FragmentTransaction transaction = getActivity().getSupportFragmentManager().beginTransaction();
TopFragment = (IMusicBrowser) newFragment;
// Replace whatever is in the fragment_container view with this fragment,
// and add the transaction to the back stack
transaction.replace( R.id.MusicBrowserContainer, newFragment );
transaction.addToBackStack( null );
// Commit the transaction
transaction.commit();
}
}
}