package com.jens.automation2; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.provider.CalendarContract; import android.view.View; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.Spinner; import androidx.annotation.Nullable; import com.jens.automation2.receivers.CalendarReceiver; import java.sql.Array; import java.util.ArrayList; import java.util.List; public class ActivityManageTriggerCalendar extends Activity { CheckBox chkCalendarEventActive, chkCalendarAvailabilityBusy, chkCalendarAvailabilityFree, chkCalendarAvailabilityTentative, chkCalendarAvailabilityOutOfOffice, chkCalendarAvailabilityWorkingElsewhere; Spinner spinnerCalendarTitleDirection, spinnerCalendarLocationDirection, spinnerCalendarDescriptionDirection; EditText etCalendarTitle, etCalendarLocation, etCalendarDescription; LinearLayout llCalendarSelection; Button bSaveTriggerCalendar; List checkboxesCalendars = new ArrayList<>(); final static String separator = ","; private static String[] directions; ArrayAdapter directionSpinnerAdapter; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); Miscellaneous.setDisplayLanguage(this); setContentView(R.layout.activity_manage_trigger_calendar); chkCalendarEventActive = (CheckBox) findViewById(R.id.chkCalendarEventActive); spinnerCalendarTitleDirection = (Spinner)findViewById(R.id.spinnerCalendarTitleDirection); spinnerCalendarLocationDirection = (Spinner)findViewById(R.id.spinnerCalendarLocationDirection); spinnerCalendarDescriptionDirection = (Spinner)findViewById(R.id.spinnerCalendarDescriptionDirection); chkCalendarAvailabilityBusy = (CheckBox)findViewById(R.id.chkCalendarAvailabilityBusy); chkCalendarAvailabilityFree = (CheckBox)findViewById(R.id.chkCalendarAvailabilityFree); chkCalendarAvailabilityTentative = (CheckBox)findViewById(R.id.chkCalendarAvailabilityTentative); chkCalendarAvailabilityOutOfOffice = (CheckBox)findViewById(R.id.chkCalendarAvailabilityOutOfOffice); chkCalendarAvailabilityWorkingElsewhere = (CheckBox)findViewById(R.id.chkCalendarAvailabilityWorkingElsewhere); llCalendarSelection = (LinearLayout)findViewById(R.id.llCalendarSelection); etCalendarTitle = (EditText)findViewById(R.id.etCalendarTitle); etCalendarLocation = (EditText)findViewById(R.id.etCalendarLocation); etCalendarDescription = (EditText)findViewById(R.id.etCalendarDescription); bSaveTriggerCalendar = (Button)findViewById(R.id.bSaveTriggerCalendar); directions = new String[] { getResources().getString(R.string.directionStringEquals), getResources().getString(R.string.directionStringContains), getResources().getString(R.string.directionStringDoesNotContain), getResources().getString(R.string.directionStringStartsWith), getResources().getString(R.string.directionStringEndsWith), getResources().getString(R.string.directionStringNotEquals) }; directionSpinnerAdapter = new ArrayAdapter(this, R.layout.text_view_for_poi_listview_mediumtextsize, ActivityManageTriggerCalendar.directions); spinnerCalendarTitleDirection.setAdapter(directionSpinnerAdapter); spinnerCalendarLocationDirection.setAdapter(directionSpinnerAdapter); spinnerCalendarDescriptionDirection.setAdapter(directionSpinnerAdapter); directionSpinnerAdapter.notifyDataSetChanged(); for(CalendarReceiver.AndroidCalendar cal : CalendarReceiver.readCalendars(ActivityManageTriggerCalendar.this)) { CheckBox oneCalCheckbox = new CheckBox(ActivityManageTriggerCalendar.this); oneCalCheckbox.setText(cal.displayName); oneCalCheckbox.setTag(cal); llCalendarSelection.addView(oneCalCheckbox); checkboxesCalendars.add(oneCalCheckbox); } chkCalendarEventActive.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { if(checked) chkCalendarEventActive.setText(R.string.eventIsCurrentlyHappening); else chkCalendarEventActive.setText(R.string.eventIsCurrentlyNotHappening); } }); bSaveTriggerCalendar.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { String titleDir = Trigger.getMatchCode(spinnerCalendarTitleDirection.getSelectedItem().toString()); String title = etCalendarTitle.getText().toString(); String descriptionDir = Trigger.getMatchCode(spinnerCalendarDescriptionDirection.getSelectedItem().toString()); String description = etCalendarDescription.getText().toString(); String locationDir = Trigger.getMatchCode(spinnerCalendarLocationDirection.getSelectedItem().toString()); String location = etCalendarLocation.getText().toString(); List availabilityList = new ArrayList<>(); if(chkCalendarAvailabilityBusy.isChecked()) availabilityList.add(String.valueOf(CalendarContract.Events.AVAILABILITY_BUSY)); if(chkCalendarAvailabilityFree.isChecked()) availabilityList.add(String.valueOf(CalendarContract.Events.AVAILABILITY_FREE)); if(chkCalendarAvailabilityTentative.isChecked()) availabilityList.add(String.valueOf(CalendarContract.Events.AVAILABILITY_TENTATIVE)); if(chkCalendarAvailabilityOutOfOffice.isChecked()) availabilityList.add(String.valueOf(CalendarReceiver.AVAILABILITY_OUT_OF_OFFICE)); if(chkCalendarAvailabilityWorkingElsewhere.isChecked()) availabilityList.add(String.valueOf(CalendarReceiver.AVAILABILITY_WORKING_ELSEWHERE)); List selectedCalendarsList = new ArrayList<>(); for(CheckBox calCheckbox : checkboxesCalendars) { if(calCheckbox.isChecked()) selectedCalendarsList.add((CalendarReceiver.AndroidCalendar) calCheckbox.getTag()); } List selectedCalendarsIdArray = new ArrayList<>(); for(CalendarReceiver.AndroidCalendar cal : selectedCalendarsList) selectedCalendarsIdArray.add(String.valueOf(cal.calendarId)); String returnString = titleDir + Trigger.triggerParameter2Split + title + Trigger.triggerParameter2Split + descriptionDir + Trigger.triggerParameter2Split + description + Trigger.triggerParameter2Split + locationDir + Trigger.triggerParameter2Split + location + Trigger.triggerParameter2Split + Miscellaneous.explode(separator, availabilityList.toArray(new String[availabilityList.size()])) + Trigger.triggerParameter2Split + Miscellaneous.explode(separator, selectedCalendarsIdArray.toArray(new String[selectedCalendarsIdArray.size()])); Intent data = new Intent(); data.putExtra(ActivityManageRule.intentNameTriggerParameter1, chkCalendarEventActive.isChecked()); data.putExtra(ActivityManageRule.intentNameTriggerParameter2, returnString); ActivityManageTriggerCalendar.this.setResult(RESULT_OK, data); finish(); } }); Intent inputIntent = getIntent(); if(inputIntent.hasExtra(ActivityManageRule.intentNameTriggerParameter1)) loadValuesIntoGui(inputIntent); } void loadValuesIntoGui(Intent data) { //TODO:try-catch if(data.hasExtra(ActivityManageRule.intentNameTriggerParameter1)) chkCalendarEventActive.setChecked(data.getBooleanExtra(ActivityManageRule.intentNameTriggerParameter1, true)); if(data.hasExtra(ActivityManageRule.intentNameTriggerParameter2)) { String input[] = data.getStringExtra(ActivityManageRule.intentNameTriggerParameter2).split(Trigger.triggerParameter2Split); /* 0 = titleDir 1 = title 2 = descriptionDir 3 = description 4 = locationDir 5 = location 6 = availability list 7 = calendars list */ for(int i = 0; i < directions.length; i++) { if(Trigger.getMatchCode(directions[i]).equalsIgnoreCase(input[0])) spinnerCalendarTitleDirection.setSelection(i); if(Trigger.getMatchCode(directions[i]).equalsIgnoreCase(input[2])) spinnerCalendarDescriptionDirection.setSelection(i); if(Trigger.getMatchCode(directions[i]).equalsIgnoreCase(input[4])) spinnerCalendarLocationDirection.setSelection(i); } etCalendarTitle.setText(input[1]); etCalendarDescription.setText(input[3]); etCalendarLocation.setText(input[5]); String[] availabilities = input[6].split(separator); String[] calendars = input[7].split(separator); for(String avail : availabilities) { if(Integer.parseInt(avail) == CalendarContract.Events.AVAILABILITY_BUSY) chkCalendarAvailabilityBusy.setChecked(true); else if(Integer.parseInt(avail) == CalendarContract.Events.AVAILABILITY_FREE) chkCalendarAvailabilityFree.setChecked(true); else if(Integer.parseInt(avail) == CalendarContract.Events.AVAILABILITY_TENTATIVE) chkCalendarAvailabilityTentative.setChecked(true); else if(Integer.parseInt(avail) == CalendarReceiver.AVAILABILITY_OUT_OF_OFFICE) chkCalendarAvailabilityOutOfOffice.setChecked(true); else if(Integer.parseInt(avail) == CalendarReceiver.AVAILABILITY_WORKING_ELSEWHERE) chkCalendarAvailabilityWorkingElsewhere.setChecked(true); } for(CheckBox checkbox : checkboxesCalendars) { int id = ((CalendarReceiver.AndroidCalendar)checkbox.getTag()).calendarId; for(String calId : calendars) { if(calId.equals(String.valueOf(id))) { checkbox.setChecked(true); break; } } } } } }