package it.angelic.soulissclient; import android.annotation.SuppressLint; import android.content.Intent; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.v4.content.ContextCompat; import android.support.v7.widget.SwitchCompat; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.MotionEvent; import android.view.View; import android.view.View.OnClickListener; import android.widget.AdapterView; import android.widget.AdapterView.OnItemSelectedListener; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.EditText; import android.widget.RadioButton; import android.widget.Spinner; import android.widget.TextView; import android.widget.TimePicker; import android.widget.Toast; import java.util.Calendar; import java.util.LinkedList; import java.util.List; import it.angelic.soulissclient.helpers.AlertDialogHelper; import it.angelic.soulissclient.helpers.SoulissPreferenceHelper; import it.angelic.soulissclient.model.ISoulissCommand; import it.angelic.soulissclient.model.ISoulissExecutable; import it.angelic.soulissclient.model.SoulissCommand; import it.angelic.soulissclient.model.SoulissNode; import it.angelic.soulissclient.model.SoulissScene; import it.angelic.soulissclient.model.SoulissTypical; import it.angelic.soulissclient.model.db.SoulissCommandDTO; import it.angelic.soulissclient.model.db.SoulissDBHelper; import it.angelic.soulissclient.model.db.SoulissTriggerDTO; import it.angelic.soulissclient.util.FontAwesomeEnum; import it.angelic.soulissclient.util.FontAwesomeUtil; public class AddProgramActivity extends AbstractStatusedFragmentActivity { //arrays per spinner private SoulissNode[] nodiArray; private SoulissNode[] nodiArrayWithExtra; private SoulissDBHelper datasource = new SoulissDBHelper(this); private TextView tvcommand; private SoulissCommand collected; private Spinner outputNodeSpinner; private Spinner outputTypicalSpinner; private RadioButton radioTimed; private RadioButton radioPositional; private RadioButton radioTrigger; private SwitchCompat togglehomeaway; private LinkedList<SoulissScene> scenes; private Spinner outputCommandSpinner; private TimePicker commandTimePicker; private CheckBox checkboxRecursive; private int[] spinnerArrVal; private Spinner commandSpinnerInterval; private Spinner triggeredNodeSpinner; private Button threshButton; private Spinner triggeredTypicalSpinner; private EditText threshValEditText; private SoulissTriggerDTO inputTrigger; @Override protected void onCreate(Bundle savedInstanceState) { SoulissPreferenceHelper opzioni = new SoulissPreferenceHelper(this.getApplicationContext()); // tema if (opzioni.isLightThemeSelected()) setTheme(R.style.LightThemeSelector); else setTheme(R.style.DarkThemeSelector); super.onCreate(savedInstanceState); setContentView(R.layout.main_addprogram); if (!opzioni.isDbConfigured()) { AlertDialogHelper.dbNotInitedDialog(this); } datasource = new SoulissDBHelper(this); SoulissDBHelper.open(); spinnerArrVal = getResources().getIntArray(R.array.scheduleIntervalValues); TextView nodeic = (TextView) findViewById(R.id.timed_icon); tvcommand = (TextView) findViewById(R.id.textViewCommand); /* Icona timed */ nodeic.setTextColor(ContextCompat.getColor(AddProgramActivity.this, R.color.md_light_blue_200)); FontAwesomeUtil.prepareFontAweTextView(AddProgramActivity.this, nodeic, FontAwesomeEnum.fa_clock_o.getFontName()); /* Icona positional */ TextView nodeic2 = (TextView) findViewById(R.id.position_icon); nodeic2.setTextColor(ContextCompat.getColor(AddProgramActivity.this, R.color.md_light_blue_400)); FontAwesomeUtil.prepareFontAweTextView(AddProgramActivity.this, nodeic2, FontAwesomeEnum.fa_sign_out.getFontName()); /* Icona Trigger */ TextView nodeic3 = (TextView) findViewById(R.id.triggered_icon); nodeic3.setTextColor(ContextCompat.getColor(AddProgramActivity.this, R.color.md_light_blue_900)); FontAwesomeUtil.prepareFontAweTextView(AddProgramActivity.this, nodeic3, FontAwesomeEnum.fa_puzzle_piece.getFontName()); // prendo tipici dal DB List<SoulissNode> goer = datasource.getAllNodes(); nodiArray = new SoulissNode[goer.size()]; nodiArray = goer.toArray(nodiArray); //Aggiungo massivo SoulissNode massive = new SoulissNode(this, Constants.MASSIVE_NODE_ID);// MASSIVO massive.setName(getString(R.string.allnodes)); massive.setTypicals(datasource.getUniqueTypicals(massive)); goer.add(massive); //AGGIUNGO scene SoulissNode fake = new SoulissNode(this, Constants.COMMAND_FAKE_SCENE);// MASSIVO fake.setName(getString(R.string.scenes_title)); goer.add(fake); nodiArrayWithExtra = new SoulissNode[goer.size()]; nodiArrayWithExtra = goer.toArray(nodiArrayWithExtra); SoulissApp.setBackground(findViewById(R.id.ScrollView01), getWindowManager()); } /** * Carica gli spinner ed i widget ai valori salvati in precedenza */ private void setFields() { if (collected == null) return; else if (collected.getNodeId() == Constants.COMMAND_FAKE_SCENE) { //get last outputNodeSpinner.setSelection(outputNodeSpinner.getAdapter().getCount() - 1); //tipici sono scene int sceneid = collected.getSlot(); Log.w(Constants.TAG, "Restoring scene ID" + sceneid); setTypicalSpinner(outputTypicalSpinner, nodiArrayWithExtra[nodiArrayWithExtra.length - 1]); int tot = outputTypicalSpinner.getCount(); for (int i = 0; i < tot; i++) { SoulissScene now = (SoulissScene) outputTypicalSpinner.getItemAtPosition(i); if (now.getId() == sceneid) { //seleziono la scena da eseguire outputTypicalSpinner.setSelection(i); Log.i(Constants.TAG, "SELECTED:" + i); } } tvcommand.setVisibility(View.INVISIBLE); } else {//reload nodo, tipico e comando int nodeId = collected.getNodeId(); Log.i(Constants.TAG, "SELECTED NODEID:" + nodeId); int toti = outputNodeSpinner.getCount(); int selIdx = 0; for (selIdx = 0; selIdx < toti; selIdx++) { SoulissNode now = (SoulissNode) outputNodeSpinner.getItemAtPosition(selIdx); if (nodeId == now.getNodeId()) { Log.i(Constants.TAG, "SELECTED NODEID:" + nodeId); outputNodeSpinner.setSelection(selIdx); break;//selIdx ok } } setTypicalSpinner(outputTypicalSpinner, nodiArrayWithExtra[selIdx]); int tot = outputTypicalSpinner.getCount(); for (int i = 0; i < tot; i++) { SoulissTypical now = (SoulissTypical) outputTypicalSpinner.getItemAtPosition(i); if (now.getSlot() == collected.getSlot()) { //seleziono la scena da eseguire outputTypicalSpinner.setSelection(i); Log.i(Constants.TAG, "SELECTED TYP:" + i); fillCommandSpinner(outputCommandSpinner, now); break; } } tot = outputCommandSpinner.getCount(); for (int t = 0; t < tot; t++) { SoulissCommand now = (SoulissCommand) outputCommandSpinner.getItemAtPosition(t); if (now.getCommand() == collected.getCommand()) { //seleziono la scena da eseguire outputCommandSpinner.setSelection(t); Log.i(Constants.TAG, "SELECTED COMMAND POS:" + t); break; } } } //SETTA TYPE if (collected.getType() == Constants.COMMAND_TIMED) { Calendar sched = collected.getScheduledTime(); commandTimePicker.setCurrentHour(sched.get(Calendar.HOUR_OF_DAY)); commandTimePicker.setCurrentMinute(sched.get(Calendar.MINUTE)); if (collected.getInterval() > 0) { int j = 0; for (int spi : spinnerArrVal) { if (collected.getInterval() == spi) commandSpinnerInterval.setSelection(j); j++; } checkboxRecursive.setChecked(true); } } else if (collected.getType() == Constants.COMMAND_COMEBACK_CODE || collected.getType() == Constants.COMMAND_GOAWAY_CODE) { radioPositional.performClick(); togglehomeaway.setChecked(collected.getType() == Constants.COMMAND_COMEBACK_CODE); } else if (collected.getType() == Constants.COMMAND_TRIGGERED) { radioTrigger.performClick(); inputTrigger = datasource.getTriggerByCommandId(collected.getCommandId()); triggeredNodeSpinner.setSelection(inputTrigger.getInputNodeId()); Log.d(Constants.TAG, "Setting trigger nodeid:" + inputTrigger.getInputNodeId() + " slot:" + inputTrigger.getInputSlot()); setTypicalSpinner(triggeredTypicalSpinner, nodiArray[inputTrigger.getInputNodeId()]); for (int u = 0;u<triggeredTypicalSpinner.getCount();u++){ if( inputTrigger.getInputSlot() == ((SoulissTypical)triggeredTypicalSpinner.getItemAtPosition(u)).getSlot()) triggeredTypicalSpinner.setSelection(u); } threshValEditText.setText(String.valueOf(inputTrigger.getThreshVal())); threshButton.setText(inputTrigger.getOp()); } } @SuppressLint({"NewApi", "NewApi"}) @Override protected void onStart() { super.onStart(); setActionBarInfo(getString(R.string.app_addprog)); scenes = datasource.getScenes(); outputNodeSpinner = (Spinner) findViewById(R.id.spinner2); fillNodeSpinnerWithExtra(outputNodeSpinner); outputTypicalSpinner = (Spinner) findViewById(R.id.spinner3); outputCommandSpinner = (Spinner) findViewById(R.id.spinnerCommand); radioTimed = (RadioButton) findViewById(R.id.RadioButtonTime); radioPositional = (RadioButton) findViewById(R.id.RadioButtonPosition); radioTrigger = (RadioButton) findViewById(R.id.RadioButtonTriggered); // time based final TextView textviewTimed = (TextView) findViewById(R.id.textviewtimed); checkboxRecursive = (CheckBox) findViewById(R.id.checkBoxRecursive); commandTimePicker = (TimePicker) findViewById(R.id.timePicker); commandSpinnerInterval = (Spinner) findViewById(R.id.spinnerRepeatEvery); // position based final TextView textviewPositional = (TextView) findViewById(R.id.textViewInfoPos); togglehomeaway = (SwitchCompat) findViewById(R.id.toggleButtonPosition); // data based final TextView textviewTriggered = (TextView) findViewById(R.id.textViewInfoTrig); triggeredNodeSpinner = (Spinner) findViewById(R.id.Spinner05); triggeredTypicalSpinner = (Spinner) findViewById(R.id.Spinner06); fillNodeSpinner(triggeredNodeSpinner); threshButton = (Button) findViewById(R.id.buttonComparator); threshValEditText = (EditText) findViewById(R.id.editTextThreshold); final Button btCancel = (Button) findViewById(R.id.buttonInsertProgram); final Button btSave = (Button) findViewById(R.id.buttonCancelProgram); this.getSupportActionBar().setDisplayHomeAsUpEnabled(true); /** * LISTENER SPINNER DESTINATARIO, IN TESTATA */ final OnItemSelectedListener nodeSelectionListener = new AdapterView.OnItemSelectedListener() { public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) { setTypicalSpinner(outputTypicalSpinner, nodiArrayWithExtra[pos]); } public void onNothingSelected(AdapterView<?> parent) { } }; final OnItemSelectedListener typSelectedListener = new AdapterView.OnItemSelectedListener() { public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) { // if (pos > 0) { SoulissNode mynode = nodiArrayWithExtra[(int) outputNodeSpinner.getSelectedItemId()]; Log.d(Constants.TAG, "mynode nodeId:" + mynode.getNodeId()); if (mynode.getNodeId() > Constants.COMMAND_FAKE_SCENE) { //le scene non hanno comandi /*List<SoulissTypical> re = mynode .getActiveTypicals(AddProgramActivity.this); Log.d(Constants.TAG, "hack nodeId:" + re.get(pos).getNodeId());*/ fillCommandSpinner(outputCommandSpinner, (SoulissTypical) outputTypicalSpinner.getSelectedItem()); } else { fillSceneCommandSpinner(outputCommandSpinner, (SoulissScene) outputTypicalSpinner.getSelectedItem()); } } public void onNothingSelected(AdapterView<?> parent) { } }; /** * LISTENER SPINNER INPUT TRIGGER */ final OnItemSelectedListener triggeredNodeSpinnerListener = new AdapterView.OnItemSelectedListener() { public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) { setTypicalSpinner(triggeredTypicalSpinner, nodiArray[pos]); } public void onNothingSelected(AdapterView<?> parent) { } }; togglehomeaway.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { /* android:textOff="@string/addprogram_positional_goout" android:textOn="@string/addprogram_positional_comeback"*/ togglehomeaway.setText(togglehomeaway.isChecked()?getString(R.string.addprogram_positional_comeback):getString(R.string.addprogram_positional_goout)); return false; } }); /** * INTERLOCK della GUI */ OnClickListener first_radio_listener = new OnClickListener() { @Override public void onClick(View v) { radioPositional.setChecked(false); radioTrigger.setChecked(false); checkboxRecursive.setEnabled(true); commandTimePicker.setEnabled(true); commandSpinnerInterval.setEnabled(checkboxRecursive.isChecked()); togglehomeaway.setEnabled(false); triggeredTypicalSpinner.setEnabled(false); triggeredNodeSpinner.setEnabled(false); threshButton.setEnabled(false); threshValEditText.setEnabled(false); textviewPositional.setEnabled(false); textviewTimed.setEnabled(true); textviewTriggered.setEnabled(false); } }; radioTimed.setOnClickListener(first_radio_listener); OnClickListener se_radio_listener = new OnClickListener() { @Override public void onClick(View v) { radioTimed.setChecked(false); radioTrigger.setChecked(false); checkboxRecursive.setEnabled(false); commandTimePicker.setEnabled(false); commandSpinnerInterval.setEnabled(false); togglehomeaway.setEnabled(true); triggeredTypicalSpinner.setEnabled(false); triggeredNodeSpinner.setEnabled(false); threshButton.setEnabled(false); threshValEditText.setEnabled(false); textviewPositional.setEnabled(true); textviewTimed.setEnabled(false); textviewTriggered.setEnabled(false); } }; radioPositional.setOnClickListener(se_radio_listener); OnClickListener rw_radio_listener = new OnClickListener() { @Override public void onClick(View v) { radioTimed.setChecked(false); radioPositional.setChecked(false); checkboxRecursive.setEnabled(false); commandTimePicker.setEnabled(false); commandSpinnerInterval.setEnabled(false); togglehomeaway.setEnabled(false); triggeredTypicalSpinner.setEnabled(true); triggeredNodeSpinner.setEnabled(true); threshButton.setEnabled(true); threshValEditText.setEnabled(true); textviewPositional.setEnabled(false); textviewTimed.setEnabled(false); textviewTriggered.setEnabled(true); } }; radioTrigger.setOnClickListener(rw_radio_listener); // Check box ricorsivo, Interlock checkboxRecursive.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { commandSpinnerInterval.setEnabled(isChecked); } }); OnClickListener simplebttttt = new OnClickListener() { public void onClick(View v) { String old = threshButton.getText().toString(); if (">".compareTo(old) == 0) { threshButton.setText("="); } else if ("<".compareTo(old) == 0) { threshButton.setText(">"); } else { threshButton.setText("<"); } } }; threshButton.setOnClickListener(simplebttttt); OnClickListener saveProgramButtonListener = new OnClickListener() { public void onClick(View v) { ISoulissExecutable IToSave = (ISoulissExecutable) outputCommandSpinner.getSelectedItem(); SoulissCommand programToSave = null; if (IToSave instanceof SoulissScene) { SoulissScene toExec = (SoulissScene) IToSave; SoulissCommandDTO dto = new SoulissCommandDTO(); dto.setNodeId(Constants.COMMAND_FAKE_SCENE); dto.setSlot((short) toExec.getId()); programToSave = new SoulissCommand(AddProgramActivity.this, dto); } else if (IToSave instanceof SoulissCommand) { programToSave = (SoulissCommand) IToSave; Log.i(Constants.TAG, "PERSISTING COMMAND NODEID:" + programToSave.getNodeId()); //programToSave.setCommandId(collected.getCommandId()); //programToSave.setNodeId((short) Constants.MASSIVE_NODE_ID); //programToSave.setSlot(((SoulissTypical)outputTypicalSpinner.getSelectedItem()).getTypicalDTO().getTypical()); } if (programToSave == null) { Toast.makeText(AddProgramActivity.this, "Command not selected", Toast.LENGTH_SHORT).show(); return; } //sceneId solo per i comandi che appartengono a una scena programToSave.setSceneId(null); Intent intent = AddProgramActivity.this.getIntent(); SoulissDBHelper.open(); if (radioTimed.isChecked()) {// temporal schedule Calendar baseNow = Calendar.getInstance(); // se l'ora e` gia passata, fai domani if (commandTimePicker.getCurrentHour().compareTo(baseNow.get(Calendar.HOUR_OF_DAY)) < 0 || (commandTimePicker.getCurrentHour().compareTo(baseNow.get(Calendar.HOUR_OF_DAY)) == 0 && commandTimePicker .getCurrentMinute().compareTo(baseNow.get(Calendar.MINUTE)) < 0)) { baseNow.add(Calendar.DAY_OF_YEAR, 1); Log.i(Constants.TAG, "Timed program delayed by one day"); } baseNow.set(Calendar.HOUR_OF_DAY, commandTimePicker.getCurrentHour()); baseNow.set(Calendar.MINUTE, commandTimePicker.getCurrentMinute()); programToSave.setType(Constants.COMMAND_TIMED); programToSave.setScheduledTime(baseNow); if (checkboxRecursive.isChecked()) { programToSave.setInterval( spinnerArrVal[commandSpinnerInterval.getSelectedItemPosition()]); } // inserimento nuovo intent.putExtra("returnedData", Constants.COMMAND_TIMED); } else if (radioPositional.isChecked()) {// POSIZIONALE if (togglehomeaway.isChecked()) { programToSave.setType(Constants.COMMAND_GOAWAY_CODE); intent.putExtra("returnedData", Constants.COMMAND_GOAWAY_CODE); } else { programToSave.setType(Constants.COMMAND_COMEBACK_CODE); intent.putExtra("returnedData", Constants.COMMAND_COMEBACK_CODE); } // inserimento nuovo } else if (radioTrigger.isChecked()) {// TRIGGER SoulissTypical trig = ((SoulissTypical) triggeredTypicalSpinner.getSelectedItem()); if (trig == null || trig.getTypicalDTO() == null || threshValEditText.getText() == null || "".compareTo(threshValEditText.getText().toString()) == 0) { Toast.makeText(AddProgramActivity.this, getString(R.string.programs_warn_trigger_notset), Toast.LENGTH_SHORT).show(); return; } intent.putExtra("returnedData", Constants.COMMAND_TRIGGERED); programToSave.setType(Constants.COMMAND_TRIGGERED); } // MERGE if (collected != null) programToSave.setCommandId(collected.getCommandId()); programToSave.persistCommand(); if (radioTrigger.isChecked()) {// TRIGGER SoulissTypical trig = ((SoulissTypical) triggeredTypicalSpinner.getSelectedItem()); SoulissTriggerDTO trigger = new SoulissTriggerDTO(); //MERGE if (inputTrigger != null) trigger.setTriggerId(inputTrigger.getTriggerId()); trigger.setInputNodeId(trig.getNodeId()); trigger.setInputSlot(trig.getSlot()); trigger.setOp(threshButton.getText().toString()); trigger.setCommandId(programToSave.getCommandId()); try { trigger.setThreshVal(Float.parseFloat(threshValEditText.getText().toString())); } catch (Exception e){ Log.e(Constants.TAG, "Can't parse threshold "+e.getMessage()); } trigger.persist(datasource); } // datasource.close(); AddProgramActivity.this.setResult(RESULT_OK, intent); AddProgramActivity.this.finish(); } }; btSave.setOnClickListener(saveProgramButtonListener); // Cancel OnClickListener simplecan = new OnClickListener() { public void onClick(View v) { AddProgramActivity.this.finish(); return; } }; btCancel.setOnClickListener(simplecan); // start with timed schedule radioTimed.performClick(); Bundle extras = getIntent().getExtras(); if (extras != null && extras.get("PROG") != null) { collected = (SoulissCommand) extras.get("PROG"); Log.i(Constants.TAG, "Found a SAVED PROGRAM"); // avoid auto call upon Creation with runnable outputTypicalSpinner.post(new Runnable() { public void run() { outputTypicalSpinner.setOnItemSelectedListener(typSelectedListener); outputNodeSpinner.setOnItemSelectedListener(nodeSelectionListener); } }); triggeredNodeSpinner.post(new Runnable() { public void run() { triggeredNodeSpinner.setOnItemSelectedListener(triggeredNodeSpinnerListener); } } ); setFields(); } else { //explicitly riempi gli spinner outputTypicalSpinner.setOnItemSelectedListener(typSelectedListener); outputNodeSpinner.setOnItemSelectedListener(nodeSelectionListener); triggeredNodeSpinner.setOnItemSelectedListener(triggeredNodeSpinnerListener); } }//onStart @Override public boolean onCreateOptionsMenu(Menu menu) { return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: finish(); return true; } return super.onOptionsItemSelected(item); } /** * Fills a spinner with nodes * * @param tgt */ private void fillNodeSpinnerWithExtra(Spinner tgt) { // spinner popolato in base nodeArray ArrayAdapter<SoulissNode> adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, nodiArrayWithExtra); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); tgt.setAdapter(adapter); } /** * Fills a spinner with nodes * * @param tgt */ private void fillNodeSpinner(Spinner tgt) { // spinner popolato in base nodeArray ArrayAdapter<SoulissNode> adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, nodiArray); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); tgt.setAdapter(adapter); } /** * popola spinner tipici in base al nodo */ private void setTypicalSpinner(Spinner tgt, SoulissNode ref) { if (ref.getNodeId() > Constants.COMMAND_FAKE_SCENE) { try { SoulissTypical[] strArray = new SoulissTypical[ref.getActiveTypicals().size()]; ref.getActiveTypicals().toArray(strArray); ArrayAdapter<SoulissTypical> adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, strArray); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); tgt.setAdapter(adapter); } catch (Exception e) { Log.e(Constants.TAG, "Errore in setTypicalSpinner:" + e.getMessage(), e); } } else if (ref.getNodeId() == Constants.COMMAND_FAKE_SCENE) { SoulissScene[] strArray = new SoulissScene[scenes.size()]; strArray = scenes.toArray(strArray); ArrayAdapter<SoulissScene> adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, strArray); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); tgt.setAdapter(adapter); } else { Log.e(Constants.TAG, "UNPREDICTED"); } } /** * popola spinner comandi in base al tipico. Mette nell'adapter i comandi * ottenuti da getCommands * * @param tgt Spinner da riempire * @param ref tipico da cui ottenere i comandi */ private void fillCommandSpinner(@NonNull Spinner tgt, SoulissTypical ref) { List<ISoulissCommand> cmds = ref.getCommands(this); //maledetto bastardo if (cmds!=null&&cmds.size() > 0) { tvcommand.setVisibility(View.VISIBLE); tgt.setVisibility(View.VISIBLE); SoulissCommand[] strArray = new SoulissCommand[cmds.size()]; strArray = cmds.toArray(strArray); Log.d(Constants.TAG, "Filled commandspinner, with commands :" + strArray.length); ArrayAdapter<SoulissCommand> adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, strArray); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); tgt.setAdapter(adapter); }else{ tgt.setVisibility(View.INVISIBLE); } } /** * Mette un comando fake, ovvero la scena che verra\ eseguita * NODEID = -2 * * @param tgt Spinner da riempire * @param ref tipico da cui ottenere i comandi */ private void fillSceneCommandSpinner(Spinner tgt, SoulissScene ref) { tgt.setVisibility(View.INVISIBLE); tvcommand.setVisibility(View.INVISIBLE); ISoulissExecutable[] strArray = new SoulissScene[1]; strArray[0] = ref; ArrayAdapter<ISoulissExecutable> adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, strArray); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); tgt.setAdapter(adapter); } }