package com.bdc.ociney.activity;
import android.app.ActionBar;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.graphics.Color;
import android.graphics.PorterDuff;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.widget.SearchView;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Spinner;
import android.widget.TextView;
import com.bdc.ociney.R;
import com.bdc.ociney.adapter.SpinnerActionBar;
import com.bdc.ociney.database.AccessBaseFavoris;
import com.bdc.ociney.database.BaseFavoris;
import com.bdc.ociney.fragment.CreditsFragment;
import com.bdc.ociney.fragment.ListMoviesFragment;
import com.bdc.ociney.fragment.ListStarFragment;
import com.bdc.ociney.fragment.ListTheaterFragment;
import com.bdc.ociney.fragment.core.BetterFragment;
import com.bdc.ociney.modele.Movie.Movie;
import com.bdc.ociney.modele.Person.PersonFull;
import com.bdc.ociney.task.LoadListStarTask;
import com.bdc.ociney.view.textview.TypefacedTextView;
import java.util.ArrayList;
import java.util.List;
public class AppFragmentActivity extends ActionBarActivity implements View.OnClickListener, ActionBar.OnNavigationListener, LoadListStarTask.LoadListStarTaskCallBack {
private static final int POSITION_NOW_SHOWING = 0;
private static final int POSITION_COMMING_SOON = 1;
public static String actionBarTitle = "";
public static String actionBarSubTitle = "";
public static List<Movie> moviesNowShowing = new ArrayList<Movie>();
public static List<Movie> moviesCommingSoon = new ArrayList<Movie>();
BetterFragment activeFragment;
DrawerLayout drawer;
ActionBarDrawerToggle drawerToggle;
boolean firstTime = true;
boolean recherche = false;
boolean favoris = false;
int navigationMode = ActionBar.NAVIGATION_MODE_LIST;
boolean displayTitle = false;
private Toolbar toolbar;
private Spinner spinner;
View drawerStars, drawerMovies, drawerTheaters, drawerFavoris, drawerCredits;
String recherchePlaceholder = "";
int spinnerVisibilty = View.VISIBLE;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_activity);
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
toolbar.setTitleTextColor(Color.WHITE);
getSupportActionBar().setDisplayShowTitleEnabled(false);
charger();
remplir();
ajouterListener();
TypedArray a = getTheme().obtainStyledAttributes(R.style.AppTheme, new int[] {R.attr.homeAsUpIndicator});
Drawable drawable = getResources().getDrawable(a.getResourceId(0, 0));
drawable.setColorFilter(getResources().getColor(android.R.color.white), PorterDuff.Mode.SRC_IN);
drawerToggle.setHomeAsUpIndicator(drawable);
recherchePlaceholder = "Rechercher un film";
}
public void ajouterFragment(BetterFragment fragment) {
if (activeFragment != null)
activeFragment.onPause();
activeFragment = fragment;
getSupportFragmentManager().beginTransaction()
.replace(R.id.fragmentLayout, fragment)
.commitAllowingStateLoss();
}
private void charger() {
drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
findViewById(R.id.left_drawer).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
}
});
drawerStars = findViewById(R.id.drawerStars);
drawerMovies = findViewById(R.id.drawerMovies);
drawerTheaters = findViewById(R.id.drawerTheaters);
drawerFavoris = findViewById(R.id.drawerFavoris);
drawerCredits = findViewById(R.id.drawerCredits);
spinner = (Spinner) findViewById(R.id.spinner_nav);
}
private void remplir() {
ajouterFragment(ListMoviesFragment.newInstance(moviesNowShowing, true));
}
private void viderTitresDrawer() {
String fontName = "Roboto-Thin.ttf";
((TypefacedTextView) drawerStars.findViewById(R.id.text)).setTypeFace(fontName);
((TypefacedTextView) drawerMovies.findViewById(R.id.text)).setTypeFace(fontName);
((TypefacedTextView) drawerTheaters.findViewById(R.id.text)).setTypeFace(fontName);
((TypefacedTextView) drawerFavoris.findViewById(R.id.text)).setTypeFace(fontName);
((TypefacedTextView) drawerCredits.findViewById(R.id.text)).setTypeFace(fontName);
}
public void setTitreActif(View v) {
viderTitresDrawer();
String fontName = "Roboto-Bold.ttf";
((TypefacedTextView) v.findViewById(R.id.text)).setTypeFace(fontName);
}
private void ajouterListener() {
drawerStars.setOnClickListener(this);
drawerMovies.setOnClickListener(this);
drawerTheaters.setOnClickListener(this);
drawerFavoris.setOnClickListener(this);
drawerCredits.setOnClickListener(this);
drawerToggle = new ActionBarDrawerToggle(this, drawer,
R.string.app_name, R.string.app_name) {
public void onDrawerClosed(View view) {
super.onDrawerClosed(view);
invalidateOptionsMenu();
getSupportActionBar().setDisplayShowTitleEnabled(displayTitle);
getSupportActionBar().setTitle(actionBarTitle);
spinner.setVisibility(spinnerVisibilty);
}
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
invalidateOptionsMenu();
getSupportActionBar().setDisplayShowTitleEnabled(true);
getSupportActionBar().setTitle(R.string.app_name);
spinner.setVisibility(View.GONE);
}
};
drawer.setDrawerListener(drawerToggle);
afficherMovieNow();
refreshActionBar();
final String[] items = {getString(R.string.a_laffiche), getString(R.string.prochainement)};
spinner.setAdapter(new SpinnerActionBar(this, R.layout.actionbar_spinner, items, getApplicationContext().getString(R.string.films)));
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int itemPosition, long l) {
if (activeFragment != null && activeFragment instanceof ListMoviesFragment) {
actionBarSubTitle = items[itemPosition];
if (!firstTime) {
switch (itemPosition) {
case POSITION_NOW_SHOWING:
if (activeFragment instanceof ListMoviesFragment)
((ListMoviesFragment) activeFragment).refreshAdapter(moviesNowShowing);
break;
case POSITION_COMMING_SOON:
if (activeFragment instanceof ListMoviesFragment)
((ListMoviesFragment) activeFragment).refreshAdapter(moviesCommingSoon);
break;
}
}
firstTime = false;
}
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
}
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
// Sync the toggle state after onRestoreInstanceState has occurred.
drawerToggle.syncState();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
drawerToggle.onConfigurationChanged(newConfig);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (recherche) {
onBackPressed();
return true;
} else {
// Pass the event to ActionBarDrawerToggle, if it returns
// true, then it has handled the app icon touch event
if (drawerToggle.onOptionsItemSelected(item)) {
return true;
}
// Handle your other action bar items...
return super.onOptionsItemSelected(item);
}
}
public void afficherMovieNow() {
recherchePlaceholder = "Rechercher un film";
actionBarTitle = "";
displayTitle = false;
spinnerVisibilty = View.VISIBLE;
getSupportActionBar().setDisplayShowTitleEnabled(false);
spinner.setVisibility(spinnerVisibilty);
setTitreActif(drawerMovies);
this.drawer.postDelayed(new Runnable() {
@Override
public void run() {
ajouterFragment(ListMoviesFragment.newInstance(moviesNowShowing, true));
}
}, 200);
this.drawer.postDelayed(new Runnable() {
@Override
public void run() {
firstTime = true;
final String[] items = {getString(R.string.a_laffiche), getString(R.string.prochainement)};
spinner.setAdapter(new SpinnerActionBar(AppFragmentActivity.this, R.layout.actionbar_spinner, items, getApplicationContext().getString(R.string.films)));
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int itemPosition, long l) {
if (activeFragment != null && activeFragment instanceof ListMoviesFragment) {
actionBarSubTitle = items[itemPosition];
if (!firstTime) {
switch (itemPosition) {
case POSITION_NOW_SHOWING:
if (activeFragment instanceof ListMoviesFragment)
((ListMoviesFragment) activeFragment).refreshAdapter(moviesNowShowing);
break;
case POSITION_COMMING_SOON:
if (activeFragment instanceof ListMoviesFragment)
((ListMoviesFragment) activeFragment).refreshAdapter(moviesCommingSoon);
break;
}
}
firstTime = false;
}
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
}
}, 200);
}
public void afficherStars() {
recherchePlaceholder = "Rechercher une star";
displayTitle = true;
getSupportActionBar().setDisplayShowTitleEnabled(true);
spinnerVisibilty = View.GONE;
spinner.setVisibility(spinnerVisibilty);
actionBarTitle = getString(R.string.stars);
setTitreActif(drawerStars);
this.drawer.postDelayed(new Runnable() {
@Override
public void run() {
ajouterFragment(new ListStarFragment());
}
}, 200);
}
public void afficherTheaters() {
recherchePlaceholder = "Rechercher un cinéma";
displayTitle = true;
getSupportActionBar().setDisplayShowTitleEnabled(true);
spinnerVisibilty = View.GONE;
spinner.setVisibility(spinnerVisibilty);
actionBarTitle = getString(R.string.salles);
setTitreActif(drawerTheaters);
this.drawer.postDelayed(new Runnable() {
@Override
public void run() {
ajouterFragment(new ListTheaterFragment());
}
}, 200);
}
public void afficherCredits() {
displayTitle = true;
spinnerVisibilty = View.GONE;
spinner.setVisibility(spinnerVisibilty);
getSupportActionBar().setDisplayShowTitleEnabled(true);
actionBarTitle = getString(R.string.credits);
setTitreActif(drawerCredits);
this.drawer.postDelayed(new Runnable() {
@Override
public void run() {
ajouterFragment(new CreditsFragment());
}
}, 200);
}
private void afficherFilmsFavoris() {
}
public void afficherFavoris() {
actionBarTitle = "";
displayTitle = false;
getSupportActionBar().setDisplayShowTitleEnabled(false);
spinnerVisibilty = View.VISIBLE;
spinner.setVisibility(spinnerVisibilty);
setTitreActif(drawerFavoris);
this.drawer.postDelayed(new Runnable() {
@Override
public void run() {
firstTime = true;
final String[] items = {getString(R.string.films), getString(R.string.theaters), getString(R.string.stars)};
spinner.setAdapter(new SpinnerActionBar(AppFragmentActivity.this, R.layout.actionbar_spinner, items, getApplicationContext().getString(R.string.favoris)));
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int itemPosition, long l) {
AccessBaseFavoris db = new AccessBaseFavoris(AppFragmentActivity.this);
db.open();
actionBarSubTitle = items[itemPosition];
switch (itemPosition) {
case 0:
List<String> films = db.getListFavoris(BaseFavoris.TYPE_FAVORIS_FILM);
ajouterFragment(ListMoviesFragment.newInstance(films));
break;
case 1:
List<String> cinemas = db.getListFavoris(BaseFavoris.TYPE_FAVORIS_CINEMA);
ajouterFragment(ListTheaterFragment.newInstance(cinemas, true));
break;
case 2:
List<String> stars = db.getListFavoris(BaseFavoris.TYPE_FAVORIS_STAR);
ajouterFragment(ListStarFragment.newInstance(stars, true));
break;
}
db.close();
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
}
}, 200);
}
public void refreshActionBar() {
invalidateOptionsMenu();
spinner.setVisibility(spinnerVisibilty);
getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setTitle(actionBarTitle);
}
public void onClick(View v) {
favoris = false;
switch (v.getId()) {
case R.id.drawerMovies:
afficherMovieNow();
break;
case R.id.drawerStars:
afficherStars();
break;
case R.id.drawerTheaters:
afficherTheaters();
break;
case R.id.drawerFavoris:
afficherFavoris();
favoris = true;
break;
case R.id.drawerCredits:
afficherCredits();
break;
}
invalidateOptionsMenu();
refreshActionBar();
drawer.closeDrawers();
}
public void changerActionBarColor(int color, int textColor) {
if (getSupportActionBar() != null) {
getSupportActionBar().setBackgroundDrawable(new ColorDrawable(color));
int actionBarTitleId = Resources.getSystem().getIdentifier("action_bar_title", "id", "android");
if (actionBarTitleId > 0) {
((TextView) findViewById(actionBarTitleId)).setTextColor(textColor);
}
}
}
@Override
public boolean onNavigationItemSelected(int i, long l) {
return false;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
if (activeFragment != null) {
MenuInflater inflater = getMenuInflater();
if (!favoris && (activeFragment instanceof ListMoviesFragment || activeFragment instanceof ListStarFragment || activeFragment instanceof ListTheaterFragment)) {
inflater.inflate(R.menu.movie_list_menu, menu);
final MenuItem searchItem = menu.findItem(R.id.search);
final SearchView searchView = (SearchView) searchItem.getActionView();
SearchView.SearchAutoComplete theTextArea = (SearchView.SearchAutoComplete)searchView.findViewById(R.id.search_src_text);
theTextArea.setTextColor(Color.WHITE);
theTextArea.setHintTextColor(getResources().getColor(R.color.white30));
theTextArea.setHint(recherchePlaceholder);
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
public boolean onQueryTextChange(String text) {
/*
if (activeFragment != null && text.length()>=3) {
activeFragment.search(text);
//searchItem.collapseActionView();
recherche = true;
}
*/
return false;
}
public boolean onQueryTextSubmit(String text) {
if (activeFragment != null) {
displayTitle = true;
// getSupportActionBar().setDisplayShowTitleEnabled(displayTitle);
actionBarTitle = text;
activeFragment.search(text);
searchItem.collapseActionView();
drawerToggle.setDrawerIndicatorEnabled(false);
recherche = true;
//refreshActionBar();
}
return false;
}
});
}
}
return true;
}
@Override
public void onBackPressed() {
drawerToggle.setDrawerIndicatorEnabled(true);
if (recherche) {
if (activeFragment instanceof ListMoviesFragment) {
afficherMovieNow();
} else if (activeFragment instanceof ListStarFragment) {
afficherStars();
} else if (activeFragment instanceof ListTheaterFragment) {
afficherTheaters();
}
refreshActionBar();
recherche = false;
} else
super.onBackPressed();
}
@Override
public void onLoadListStarTaskCallBack(List<PersonFull> movies) {
}
}