package com.example.patrick.myapplication.controller;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.preference.PreferenceManager;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.content.res.Configuration;
import android.support.v4.app.Fragment;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.CursorAdapter;
import android.support.v4.widget.DrawerLayout;
import android.support.v4.view.MenuItemCompat;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBarDrawerToggle;
import android.os.Bundle;
import android.support.v7.widget.SearchView;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;
import com.example.patrick.myapplication.SettingsActivity;
import com.example.patrick.myapplication.bean.NodeBean;
import com.example.patrick.myapplication.view.ListaUtentiFragment;
import com.example.patrick.myapplication.view.ListaNodiFragment;
import com.example.patrick.myapplication.NsMenuAdapter;
import com.example.patrick.myapplication.R;
import com.example.patrick.myapplication.model.NsMenuItemModel;
import com.example.patrick.myapplication.view.MyDetailFragment;
import com.example.patrick.myapplication.view.MyMapFragment;
import com.example.patrick.myapplication.view.NearMeFragment;
public class MyActivity extends ActionBarActivity implements
SearchView.OnQueryTextListener, ListaNodiFragment.OnMyListaNodiItemClick {
private String[] menuItems;
private DrawerLayout mDrawerLayout;
private ListView mDrawerList;
private SearchView mSearchView;
private CustomActionBarDrawerToggle mDrawerToggle;
private CursorAdapter adapter;
private ListaNodiFragment nodiFragment;
private MyMapFragment myMapFragment;
private ListaNodiFragment listaNodiFragment;
private ListaUtentiFragment listaUtentiFragment;
private NearMeFragment nearMeFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Creazione dei fragment
nodiFragment = new ListaNodiFragment();
// enable ActionBar app icon to behave as action to toggle nav drawer
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
// set a custom shadow that overlays the main content when the drawer opens
mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START);
_initMenu();
mDrawerToggle = new CustomActionBarDrawerToggle(this, mDrawerLayout);
mDrawerLayout.setDrawerListener(mDrawerToggle);
// test shared preferences
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
String username = prefs.getString("edittext_username", "");
Log.i("MyACTIVITY", username);
//getSupportFragmentManager().beginTransaction().replace(R.id.frame_container, new ListaNodiFragment()).commit();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.my, menu);
MenuItem searchItem = menu.findItem(R.id.action_search);
mSearchView = (SearchView) MenuItemCompat.getActionView(searchItem);
setupSearchView();
// When using the support library, the setOnActionExpandListener() method is
// static and accepts the MenuItem object as an argument
MenuItemCompat.setOnActionExpandListener(searchItem, new MenuItemCompat.OnActionExpandListener() {
@Override
public boolean onMenuItemActionCollapse(MenuItem item) {
// Do something when collapsed
return true; // Return true to collapse action view
}
@Override
public boolean onMenuItemActionExpand(MenuItem item) {
// Do something when expanded
return true; // Return true to expand action view
}
});
return true;
}
/* Called whenever we call invalidateOptionsMenu() */
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
// If the nav drawer is open, hide action items related to the content view
boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);
menu.findItem(R.id.action_search).setVisible(!drawerOpen);
return super.onPrepareOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
if (mDrawerToggle.onOptionsItemSelected(item)) {
return true;
}
// Handle presses on the action bar items
switch (item.getItemId()) {
case R.id.action_search: {
Toast.makeText(this, "Search selected", Toast.LENGTH_SHORT).show();
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.frame_container, nodiFragment)
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE)
.addToBackStack("ts")
.commit();
return true;
}
case R.id.action_refresh: {
Toast.makeText(this, "Refresh selected", Toast.LENGTH_SHORT).show();
return true;
}
case R.id.action_settings: {
Toast.makeText(this, "Settings selected", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(this, SettingsActivity.class);
startActivity(intent);
return true;
}
default:
return super.onOptionsItemSelected(item);
}
}
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
// Sync the toggle state after onRestoreInstanceState has occurred.
mDrawerToggle.syncState();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
mDrawerToggle.onConfigurationChanged(newConfig);
}
private void _initMenu() {
NsMenuAdapter mAdapter = new NsMenuAdapter(this);
// Add Header
mAdapter.addHeader(R.string.ns_menu_main_header);
// Add first block
menuItems = getResources().getStringArray(
R.array.ns_menu_items);
String[] menuItemsIcon = getResources().getStringArray(
R.array.ns_menu_items_icon);
int res = 0;
for (String item : menuItems) {
int id_title = getResources().getIdentifier(item, "string",
this.getPackageName());
int id_icon = getResources().getIdentifier(menuItemsIcon[res],
"drawable", this.getPackageName());
NsMenuItemModel mItem = new NsMenuItemModel(id_title, id_icon);
if (res == 1) mItem.counter = 12;
if (res == 3) mItem.counter = 3;
mAdapter.addItem(mItem);
res++;
}
mAdapter.addHeader(R.string.ns_menu_main_header2);
mDrawerList = (ListView) findViewById(R.id.left_drawer);
if (mDrawerList != null)
mDrawerList.setAdapter(mAdapter);
mDrawerList.setOnItemClickListener(new DrawerItemClickListener(getApplicationContext()));
}
@Override
public boolean onQueryTextSubmit(String s) {
return false;
}
@Override
public boolean onQueryTextChange(String s) {
// TODO Auto-generated method stub
s = s.isEmpty() ? "" : "Query: " + s;
Log.i("textchange", s);
return true;
}
private void setupSearchView() {
mSearchView.setIconifiedByDefault(false);
mSearchView.setOnQueryTextListener(this);
mSearchView.setSubmitButtonEnabled(true);
mSearchView.setQueryHint("Search Here");
}
private void fetchData() {
}
/**
* Implementazione dell'interfaccia onClick di ListaNodiFragment
*
* @param item NodeBean object selected from listview
*/
@Override
public void onClick(NodeBean item) {
// Preparo l'argomento da passare al Fragment o all'Activity. Questo argomento contiene l'oggetto cliccato.
Bundle arguments = new Bundle();
arguments.putParcelable("com.example.patrick.myapplication.NodeBean",item);
// Recupero la vista detailContainer
View detailView = findViewById(R.id.detail_container);
if (detailView == null) {
// Non esiste spazio per la visualizzazione del dattagli, quindi ho necessità di lanciare una nuova activity.
// Carico gli arguments nell'intent di chiamata.
//Intent intent = new Intent(this, DetailActivity.class);
new LoadDetailActivityTask().execute(arguments);
} else {
// Esiste lo spazio, procedo con la creazione del Fragment!
MyDetailFragment myDetailFragment = new MyDetailFragment();
// Imposto gli argument del fragment.
myDetailFragment.setArguments(arguments);
// Procedo con la sostituzione del fragment visualizzato.
FragmentManager fragmentManager = this.getSupportFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.detail_container, myDetailFragment)
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE)
.addToBackStack("ts")
.commit();
}
}
/**
* Classe innestata che implementa il listener per il drawer
*/
private class DrawerItemClickListener implements ListView.OnItemClickListener {
Context mContext;
public DrawerItemClickListener(Context context) {
mContext = context;
}
@Override
public void onItemClick(AdapterView parent, View view, int position, long id) {
// Highlight the selected item, update the title, and close the drawer
// update selected item and title, then close the drawer
mDrawerList.setItemChecked(position, true);
//setTitle("......");
//String text = "menu click... should be implemented";
//Toast.makeText(MyActivity.this, text, Toast.LENGTH_LONG).show();
Fragment rFragment = null;
switch (position) {
case 1:{
if (myMapFragment == null)
myMapFragment = new MyMapFragment();
rFragment = myMapFragment;
}
break;
case 2: {
if (listaUtentiFragment == null)
listaUtentiFragment = new ListaUtentiFragment();
rFragment = listaUtentiFragment;
}
break;
case 3:{
if( listaNodiFragment == null)
listaNodiFragment= new ListaNodiFragment();
rFragment = listaNodiFragment;
}
break;
case 4:{
if ( nearMeFragment == null)
nearMeFragment = new NearMeFragment();
rFragment = nearMeFragment;
}
}
// Getting reference to the FragmentManager
FragmentManager fragmentManager = getSupportFragmentManager();
// Creating a fragment transaction
FragmentTransaction ft = fragmentManager.beginTransaction();
// Adding a fragment to the fragment transaction
ft.replace(R.id.frame_container, rFragment);
// Committing the transaction
ft.commit();
// Closing the drawer
mDrawerLayout.closeDrawer(mDrawerList);
}
}
// Estendo ActionBarDrawerToggle
private class CustomActionBarDrawerToggle extends ActionBarDrawerToggle {
public CustomActionBarDrawerToggle(Activity mActivity, DrawerLayout mDrawerLayout) {
super(
mActivity, /* host Activity */
mDrawerLayout, /* DrawerLayout object */
R.string.ns_menu_open, /* "open drawer" description */
R.string.ns_menu_close); /* "close drawer" description */
}
/**
* Called when a drawer has settled in a completely closed state.
*/
@Override
public void onDrawerClosed(View view) {
getSupportActionBar().setTitle(getString(R.string.ns_menu_close));
supportInvalidateOptionsMenu();
}
/**
* Called when a drawer has settled in a completely open state.
*/
@Override
public void onDrawerOpened(View drawerView) {
getSupportActionBar().setTitle(getString(R.string.ns_menu_open));
supportInvalidateOptionsMenu();
}
}
/**
* Async task per avviare l'activity di detail
*
*/
class LoadDetailActivityTask extends AsyncTask<Bundle, Void, Void> {
@Override
protected Void doInBackground(Bundle...arguments) {
Intent intent = new Intent(MyActivity.this, DetailActivity.class);
intent.putExtras(arguments[0]);
startActivity(intent);
Log.i("LoadDetailActivityTask","doInBackground");
return (null);
}
@Override
protected void onPostExecute(Void unused) {
}
}
}