package it.angelic.soulissclient;
import android.app.AlertDialog;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.res.Configuration;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.util.Log;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import java.util.LinkedList;
import java.util.List;
import it.angelic.soulissclient.adapters.SceneListAdapter;
import it.angelic.soulissclient.adapters.SceneListAdapter.SceneViewHolder;
import it.angelic.soulissclient.drawer.DrawerMenuHelper;
import it.angelic.soulissclient.drawer.INavDrawerItem;
import it.angelic.soulissclient.drawer.NavDrawerAdapter;
import it.angelic.soulissclient.helpers.AlertDialogHelper;
import it.angelic.soulissclient.helpers.ScenesDialogHelper;
import it.angelic.soulissclient.model.LauncherElement;
import it.angelic.soulissclient.model.SoulissScene;
import it.angelic.soulissclient.model.db.SoulissDBHelper;
import it.angelic.soulissclient.model.db.SoulissDBLauncherHelper;
import it.angelic.soulissclient.util.FontAwesomeEnum;
import it.angelic.soulissclient.util.FontAwesomeUtil;
import it.angelic.soulissclient.util.LauncherElementEnum;
import static it.angelic.soulissclient.Constants.TAG;
/**
* Activity per mostrare una lista di scenari
* <p>
* legge dal DB tipici e tipici
*
* @author Ale
*/
public class SceneListActivity extends AbstractStatusedFragmentActivity {
private SoulissDBHelper datasource;
private ListView listaScenesView;
private SceneListAdapter progsAdapter;
// Aggiorna il feedback
private BroadcastReceiver datareceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
List<SoulissScene> goer = datasource.getScenes();
//progsAdapter = new SceneListAdapter(SceneListActivity.this.getApplicationContext(), scenesArray, opzioni);
progsAdapter.setScenes(goer);
progsAdapter.notifyDataSetChanged();
// Adapter della lista
//listaScenesView.setAdapter(progsAdapter);
listaScenesView.invalidateViews();
}
};
@Override
public void onConfigurationChanged(Configuration newConfig) {
// ignore orientation change
super.onConfigurationChanged(newConfig);
mDrawerToggle.onConfigurationChanged(newConfig);
}
@Override
public boolean onContextItemSelected(android.view.MenuItem item) {
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
SceneListAdapter ada = (SceneListAdapter) listaScenesView.getAdapter();
long arrayAdapterPosition = info.position;
final SoulissScene todoItem = (SoulissScene) ada.getItem((int) arrayAdapterPosition);
switch (item.getItemId()) {
case R.id.eseguiScena:
ScenesDialogHelper.executeSceneDialog(SceneListActivity.this, todoItem);
return true;
case R.id.addScenaDashboard:
SoulissDBLauncherHelper dbl = new SoulissDBLauncherHelper(SceneListActivity.this);
LauncherElement nodeLauncher = new LauncherElement();
nodeLauncher.setComponentEnum(LauncherElementEnum.SCENE);
nodeLauncher.setLinkedObject(todoItem);
dbl.addElement(nodeLauncher);
Toast.makeText(SceneListActivity.this, todoItem.getNiceName() + " " + getString(R.string.added_to_dashboard), Toast.LENGTH_SHORT).show();
return true;
case R.id.eliminaScena:
ScenesDialogHelper.removeSceneDialog(this, listaScenesView, datasource, todoItem, opzioni);
return true;
case R.id.rinominaScena:
AlertDialog.Builder alert3 = AlertDialogHelper.renameSoulissObjectDialog(this, null, listaScenesView,
datasource, todoItem);
alert3.show();
return true;
case R.id.scegliconaScena:
SoulissScene convertView = (SoulissScene) listaScenesView.getItemAtPosition(item.getOrder());
AlertDialog.Builder alert2 = AlertDialogHelper.chooseIconDialog(this, null, listaScenesView, datasource,
todoItem);
alert2.show();
// nodesAdapter.notifyDataSetChanged();
// listaNodiView.invalidateViews();
return true;
default:
return super.onContextItemSelected(item);
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
opzioni = SoulissApp.getOpzioni();
// Remove title bar
// this.requestWindowFeature(Window.FEATURE_NO_TITLE);
if (opzioni.isLightThemeSelected())
setTheme(R.style.LightThemeSelector);
else
setTheme(R.style.DarkThemeSelector);
super.onCreate(savedInstanceState);
setContentView(R.layout.main_scenes);
// final Button buttAddProgram = (Button)
// findViewById(R.id.buttonAddScene);
//tt = (TextView) findViewById(R.id.TextViewScenes);
/*
* if ("def".compareToIgnoreCase(opzioni.getPrefFont()) != 0) { Typeface
* font = Typeface.createFromAsset(getAssets(), opzioni.getPrefFont());
* tt.setTypeface(font, Typeface.NORMAL); }
*/
// ParallaxListView listView2 = (ParallaxListView) findViewById(R.id.paraList);
listaScenesView = (ListView) findViewById(R.id.ListViewListaScenes);
TextView textAwesomeUpperRight = (TextView) findViewById(R.id.scene_icon);
final TextView toHid = (TextView) findViewById(R.id.TextViewSceneDesc);
final TextView textViewTagsDescFa = (TextView) findViewById(R.id.TextViewSceneDescFa);
FontAwesomeUtil.prepareMiniFontAweTextView(this, textViewTagsDescFa, FontAwesomeEnum.fa_close.getFontName());
//NASCONDI
textViewTagsDescFa.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
textViewTagsDescFa.setVisibility(View.GONE);
toHid.setVisibility(View.GONE);
opzioni.setDontShowAgain("scenesInfo", true);
}
});
if (opzioni.getDontShowAgain("scenesInfo")) {
textViewTagsDescFa.setVisibility(View.GONE);
toHid.setVisibility(View.GONE);
}
FontAwesomeUtil.prepareAwesomeFontAweTextView(this, textAwesomeUpperRight, FontAwesomeEnum.fa_moon_o.getFontName());
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
// fab.attachToListView(listaScenesView);
//SoulissClient.setBackground(findViewById(R.id.containerlistaScenes), getWindowManager());
//ADD NEW SCENE
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int rest = datasource.createOrUpdateScene(null);
// prendo comandi dal DB, setto adapter
LinkedList<SoulissScene> goer = datasource.getScenes();
progsAdapter.setScenes(goer);
progsAdapter.notifyDataSetChanged();
listaScenesView.setAdapter(progsAdapter);
listaScenesView.invalidateViews();
Toast.makeText(SceneListActivity.this, getString(R.string.scene_added), Toast.LENGTH_LONG).show();
}
});
// check se IP non settato
if (!opzioni.isSoulissIpConfigured() && !opzioni.isSoulissReachable()) {
AlertDialog.Builder alert = AlertDialogHelper.sysNotInitedDialog(this);
alert.show();
}
// TODO error management
datasource = new SoulissDBHelper(this);
// datasource.open();
// DRAWER
super.initDrawer(this, DrawerMenuHelper.SCENES);
listaScenesView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
Log.w(TAG, "Activating SCENE " + arg2);
Intent nodeDatail = new Intent(SceneListActivity.this, SceneDetailActivity.class);
SceneViewHolder holder = (SceneViewHolder) arg1.getTag();
nodeDatail.putExtra("SCENA", holder.data);
SceneListActivity.this.startActivity(nodeDatail);
if (opzioni.isAnimationsEnabled())
overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left);
}
});
registerForContextMenu(listaScenesView);
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
android.view.MenuInflater inflater = getMenuInflater();
// Rinomina nodo e scelta icona
inflater.inflate(R.menu.scenes_ctx_menu, menu);
super.onCreateContextMenu(menu, v, menuInfo);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.scenelist_menu, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
if (mDrawerLayout.isDrawerOpen(mDrawerLinear)) {
mDrawerLayout.closeDrawer(mDrawerLinear);
} else {
mDrawerLayout.openDrawer(mDrawerLinear);
}
return true;
}
switch (item.getItemId()) {
case android.R.id.home:
// app icon in action bar clicked; go home
Intent intent = new Intent(this, OldLauncherActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
return true;
case R.id.Opzioni:
Intent settingsActivity = new Intent(getBaseContext(), PreferencesActivity.class);
startActivity(settingsActivity);
return true;
case R.id.TestUDP:
Intent myIntents = new Intent(SceneListActivity.this, ManualUDPTestActivity.class);
SceneListActivity.this.startActivity(myIntents);
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
protected void onPause() {
super.onPause();
unregisterReceiver(datareceiver);
}
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
// Sync the toggle state after onRestoreInstanceState has occurred.
mDrawerToggle.syncState();
}
@Override
protected void onResume() {
super.onResume();
IntentFilter filtere = new IntentFilter();
filtere.addAction("it.angelic.soulissclient.GOT_DATA");
registerReceiver(datareceiver, filtere);
}
@Override
protected void onStart() {
super.onStart();
setActionBarInfo(getString(R.string.scenes_title));
this.getSupportActionBar().setDisplayHomeAsUpEnabled(true);
opzioni.initializePrefs();
if (!opzioni.isDbConfigured()) {
AlertDialogHelper.dbNotInitedDialog(this);
}
SoulissDBHelper.open();
// prendo comandi dal DB, setto adapter
LinkedList<SoulissScene> sceneList = datasource.getScenes();
progsAdapter = new SceneListAdapter(this, sceneList, opzioni);
// Adapter della lista
listaScenesView.setAdapter(progsAdapter);
//listaScenesView.invalidateViews();
// ImageView nodeic = (ImageView) findViewById(R.id.scene_icon);
// nodeic.setAlpha(150);
ArrayAdapter<INavDrawerItem> mAdapter = new NavDrawerAdapter(SceneListActivity.this, R.layout.drawer_list_item, dmh.getStuff(), DrawerMenuHelper.SCENES);
mDrawerList.setAdapter(mAdapter);
}
}