package com.safemobile.safedispatch; import java.util.ArrayList; import java.util.Locale; import com.safemobile.adapters.AlertGridViewAdapter; import com.safemobile.adapters.AlertGridViewAdapter.ViewHolder; import com.safemobile.lib.Alarm; import com.safemobile.lib.AppParams; import com.safemobile.lib.OperationCodes; import com.safemobile.lib.SM; import android.app.Activity; import android.app.AlertDialog; import android.content.Context; import android.content.res.Configuration; import android.graphics.Typeface; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.view.View; import android.widget.AdapterView; import android.widget.TextView; import android.widget.AdapterView.OnItemClickListener; import android.widget.GridView; public class AlarmActivity extends Activity { private Context context; private TabLayoutActivity parentTab; private ArrayList allAlarms = new ArrayList<>(); private ArrayList acknowledged = new ArrayList<>(); private AlertGridViewAdapter adapter; /* Visual resources */ private GridView gridView; private View convertViewAlarm; private int ackPosition; private Bundle savedInstanceState; // Need handler for callbacks to the UI thread private final Handler myHandler = new Handler(Looper.getMainLooper()); private static final String ALARM = "alarm"; /** * Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.setSavedInstanceState(savedInstanceState); // get parentTab setParentTab((TabLayoutActivity) getParent()); Locale locale = new Locale(AppParams.LANGUAGETMP); Locale.setDefault(locale); Configuration config = new Configuration(); config.locale = locale; getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics()); context = this; setContentView(R.layout.tabalarm); gridView = findViewById(R.id.gridViewAlarms); gridView.setNestedScrollingEnabled(true); adapter = new AlertGridViewAdapter(this, getAllAlarms(), context, acknowledged); gridView.setAdapter(adapter); gridView.setOnItemClickListener(onItemClickListener); // change tab header fontFace TextView textView1 = findViewById(R.id.textView1); textView1.setTypeface(Typeface.createFromAsset(getAssets(), "Sketch_Block.ttf")); textView1.setTextSize(24); getParentTab().setAlarmActivity(this); } @Override public void onBackPressed() { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setMessage(getString(R.string.exit)) .setCancelable(false) .setNeutralButton(getString(R.string.logout), (dialog, id) -> getParentTab().whenBackPressed(AppParams.ActivityResult.logout)) .setPositiveButton(getString(R.string.ext), (dialog, id) -> getParentTab().whenBackPressed(AppParams.ActivityResult.exit)) .setNegativeButton(getString(R.string.cancel), (dialog, id) -> dialog.cancel()); AlertDialog alert = builder.create(); alert.show(); } @Override public void onPause() { super.onPause(); SM.Debug("onPause"); } @Override public void onResume() { super.onResume(); if (!AppParams.DEMO) getAlarms(); else { for (int i = getAllAlarms().size() - 1; i >= 0; i--) { Alarm alarm = getAllAlarms().get(i); if (alarm.ack == 1) getAllAlarms().remove(i); } acknowledged = new ArrayList<>(); for (int i = 0; i < getAllAlarms().size(); i++) acknowledged.add(false); updateResultsInUi(ALARM); } SM.Debug("onResume"); } private final OnItemClickListener onItemClickListener = new OnItemClickListener() { @Override public void onItemClick(AdapterView arg0, View arg1, int position, long arg3) { SM.Debug(" ### CLICK Alarm : " + position); setConvertViewAlarm(arg1); // save position ackPosition = position; if (!AppParams.DEMO) { getParentTab().getAlarms(AppParams.USERID); setACK(getAllAlarms().get(position).idx, getAllAlarms().get(position).type, getAllAlarms().get(position).unitName); acknowledged.set(position, true); updateResultsInUi(ALARM); } else { getAllAlarms().get(position).ack = 1; updateResultsInUi("else"); } } // send ACK to AppServer private void setACK(int idx, int type, String unitName) { getParentTab().executeNetworkStuff(new String[]{OperationCodes.SendAlarmAcknoledge + "", idx + "", type + "", unitName}); } }; // Update Alarms received from AppServer public void updateAlarms(ArrayList list) { SM.Debug("## updateAlarms: " + list.size()); setAllAlarms(list); acknowledged = new ArrayList<>(); // set acknowledged based on alarm.ack value for (Alarm alarm : getAllAlarms()) { acknowledged.add(alarm.ack == 1); SM.Debug("ALARM", "SC_ID> " + alarm.sc_id + " | " + (getParentTab().getVehHashByScId().get(alarm.sc_id) == null ? "null" : getParentTab().getVehHashByScId().get(alarm.sc_id).name)); if (getParentTab().getVehHashByScId().get(alarm.sc_id) != null) alarm.unitName = getParentTab().getVehHashByScId().get(alarm.sc_id).name; } myHandler.post(updateResultsRUN); } // Create runnable for posting final Runnable updateResultsRUN = () -> updateResultsInUi(ALARM); private void updateResultsInUi(String param) { if (param.equals(ALARM)) { // set adapter adapter = new AlertGridViewAdapter(this, getAllAlarms(), context, acknowledged); int position = gridView.getFirstVisiblePosition(); gridView.setAdapter(adapter); gridView.setSelection(position); } else { adapter.changeACK(ackPosition); SM.Debug("Set ACK: " + ackPosition + " | " + (Boolean.TRUE.equals(acknowledged.get(ackPosition)) ? "true" : "false")); ViewHolder viewAlarm; viewAlarm = (ViewHolder) getConvertViewAlarm().getTag(); switch (Boolean.TRUE.equals(acknowledged.get(ackPosition)) ? 1 : 0) { case 1: viewAlarm.imageViewAlert.setImageResource(R.drawable.alert_off); break; case 0: viewAlarm.imageViewAlert.setImageResource(R.drawable.siren); break; default: throw new IllegalStateException("Unexpected value: " + (Boolean.TRUE.equals(acknowledged.get(ackPosition)) ? 1 : 0)); } } } // update ACK received from AppServer public void updateACK() { myHandler.post(updateAckRUN); } // Create runnable for posting final Runnable updateAckRUN = () -> { SM.Debug(" updateACK: "); updateResultsInUi("adapter"); }; // send to AppServer private void getAlarms() { getParentTab().executeNetworkStuff(new String[]{OperationCodes.GetAlarms + "", AppParams.USERID + ""}); } public TabLayoutActivity getParentTab() { return parentTab; } public void setParentTab(TabLayoutActivity parentTab) { this.parentTab = parentTab; } public ArrayList getAllAlarms() { return allAlarms; } public void setAllAlarms(ArrayList allAlarms) { this.allAlarms = allAlarms; } public View getConvertViewAlarm() { return convertViewAlarm; } public void setConvertViewAlarm(View convertViewAlarm) { this.convertViewAlarm = convertViewAlarm; } public Bundle getSavedInstanceState() { return savedInstanceState; } public void setSavedInstanceState(Bundle savedInstanceState) { this.savedInstanceState = savedInstanceState; } }