package com.ideabag.playtunes.fragment.search;
import com.google.android.gms.analytics.HitBuilders;
import com.google.android.gms.analytics.Tracker;
import com.ideabag.playtunes.R;
import com.ideabag.playtunes.activity.MainActivity;
import com.ideabag.playtunes.util.IMusicBrowser;
import com.ideabag.playtunes.util.SearchHistory;
import com.ideabag.playtunes.util.ISearchableAdapter;
import com.ideabag.playtunes.util.TrackerSingleton;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.provider.SearchRecentSuggestions;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.ActionBar;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnKeyListener;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.view.inputmethod.EditorInfo;
import android.widget.AutoCompleteTextView;
import android.widget.TextView;
import android.widget.TextView.OnEditorActionListener;
public class SearchFragment extends Fragment implements IMusicBrowser {
public static final String TAG = "Search Fragment";
private MainActivity mActivity;
private Tracker mTracker;
public AutoCompleteTextView mQueryTextView;
//SongSearchAdapter adapter;
protected String mSearchQuery = null;
public SearchFragment() { }
public SearchFragment( String query ) {
setMediaID( query );
}
@Override public void onAttach( Activity activity ) {
super.onAttach( activity );
mActivity = ( MainActivity ) activity;
mTracker = TrackerSingleton.getDefaultTracker( mActivity.getBaseContext() );
mTracker.setScreenName( TAG );
mActivity.setActionbarTitle( null );
mActivity.setActionbarSubtitle( null );
}
@Override public View onCreateView( LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState ) {
return inflater.inflate( R.layout.fragment_search, container, false );
}
@Override public void onSaveInstanceState( Bundle outState ) {
super.onSaveInstanceState( outState );
outState.putString( getString( R.string.key_state_query_string ), mSearchQuery );
}
@Override public void onActivityCreated( Bundle savedInstanceState ) {
super.onActivityCreated( savedInstanceState );
if ( null != savedInstanceState ) {
mSearchQuery = savedInstanceState.getString( getString( R.string.key_state_query_string ) );
}
setHasOptionsMenu( true );
ActionBar mBar = mActivity.getSupportActionBar();
mBar.setCustomView( R.layout.view_search_compat );
mBar.setDisplayShowCustomEnabled( true );
mQueryTextView = ( AutoCompleteTextView ) mBar.getCustomView().findViewById( R.id.SearchQuery );
mBar.getCustomView().findViewById( R.id.SearchButton ).setOnClickListener( new OnClickListener() {
@Override public void onClick( View v ) {
String mQueryString = mQueryTextView.getEditableText().toString();
setMediaID( mQueryString );
}
});
mBar.getCustomView().findViewById( R.id.ClearSearchButton ).setOnClickListener( new OnClickListener() {
@Override public void onClick( View v ) {
mQueryTextView.setText( "" );
setMediaID( null );
}
});
mQueryTextView.setOnEditorActionListener( new OnEditorActionListener() {
@Override public boolean onEditorAction( TextView view, int actionId, KeyEvent event ) {
boolean mConsumed = false;
String query = mQueryTextView.getEditableText().toString();
if ( event != null && event.getKeyCode() == KeyEvent.KEYCODE_ENTER ) {
setMediaID( query );
mConsumed = true;
} else if ( event != null && event.getAction() == KeyEvent.ACTION_DOWN ) {
setMediaID( query );
mConsumed = true;
} else if ( actionId == EditorInfo.IME_ACTION_SEARCH ) {
setMediaID( query );
mConsumed = true;
}
return mConsumed;
}
});
if ( null != mSearchQuery ) {
//android.util.Log.i( TAG, "Search query restore from saved instance state '" + mSearchQuery + "'" );
mQueryTextView.setText( mSearchQuery );
SearchAllFragment mSearchAllFragment = new SearchAllFragment();
mSearchAllFragment.setSearchFragment( this );
mSearchAllFragment.setSearchTerms( mSearchQuery );
//mSearchAllFragment.setP
FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
ft.replace( R.id.SearchFragment, mSearchAllFragment );
// Don't add to back stack
// Commit the transaction
ft.commit();
} else {
SearchSuggestionsFragment mSuggestionsFragment = new SearchSuggestionsFragment( this );
FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
ft.replace( R.id.SearchFragment, mSuggestionsFragment );
// Don't add to back stack
// Commit the transaction
ft.commit();
}
}
@Override public void onResume() {
super.onResume();
mActivity.setActionbarTitle( "*" );
mActivity.setActionbarSubtitle( null );
mActivity.getSupportActionBar().setDisplayShowCustomEnabled( true );
mTracker.send( new HitBuilders.AppViewBuilder().build() );
}
@Override public void onDestroyView() {
super.onDestroyView();
//setListAdapter( null );
if ( mActivity != null ) {
ActionBar bar = mActivity.getSupportActionBar();
if ( bar != null ) {
View searchView = bar.getCustomView();
if ( searchView != null ) {
searchView.setVisibility( View.GONE );
bar.setCustomView( null );
}
}
mActivity.supportInvalidateOptionsMenu();
//mActivity.supportInvalidateOptionsMenu();
}
}
@Override public void onDestroy() {
super.onDestroy();
setHasOptionsMenu( false );
//getActivity().getContentResolver().unregisterContentObserver( mediaStoreChanged );
}
// PlaylistBrowser interface methods
@Override public void setMediaID( String media_id ) {
if ( null != media_id && media_id.length() > 1 ) {
mSearchQuery = media_id;
// Check if there is a Searchable fragment
// Load SearchAllFragment if there isn't
// Otherwise set the Searchable's query to mSearchQuery
if ( this.isResumed() ) {
SearchHistory history = new SearchHistory( getActivity() );
history.addSearchQuery( media_id );
history.destroy();
Fragment mFragment = getActivity().getSupportFragmentManager().findFragmentById( R.id.SearchFragment );
if ( mFragment instanceof SearchSuggestionsFragment ) {
SearchAllFragment mSearchAllFragment = new SearchAllFragment();
mSearchAllFragment.setSearchFragment( this );
mSearchAllFragment.setSearchTerms( mSearchQuery );
//mSearchAllFragment.setP
transactFragment( mSearchAllFragment );
} else {
ISearchableAdapter mSearchable = ( ISearchableAdapter ) mFragment;
mSearchable.setSearchTerms( mSearchQuery );
}
}
}
}
public void transactFragment( Fragment mFrag ) {
//mCurrentFragment = (ISearchable) mFrag;
FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
ft.replace( R.id.SearchFragment, mFrag );
ft.addToBackStack( null );
ft.commit();
}
@Override public String getMediaID() {
return mSearchQuery;
}
}