Automation/app/src/main/java/com/jens/automation2/ActivityManageTriggerCalendar.java

275 lines
13 KiB
Java
Raw Normal View History

2023-12-23 13:55:02 +01:00
package com.jens.automation2;
import android.app.Activity;
2023-12-25 11:57:55 +01:00
import android.content.Intent;
2023-12-23 13:55:02 +01:00
import android.os.Bundle;
2023-12-27 13:33:09 +01:00
import android.provider.CalendarContract;
2023-12-25 11:57:55 +01:00
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
2023-12-23 13:55:02 +01:00
import android.widget.CheckBox;
import android.widget.CompoundButton;
2023-12-25 11:57:55 +01:00
import android.widget.EditText;
2023-12-27 13:33:09 +01:00
import android.widget.LinearLayout;
2023-12-25 11:57:55 +01:00
import android.widget.Spinner;
2023-12-28 00:25:55 +01:00
import android.widget.TextView;
2023-12-23 13:55:02 +01:00
import androidx.annotation.Nullable;
2023-12-27 13:33:09 +01:00
import com.jens.automation2.receivers.CalendarReceiver;
2023-12-28 17:17:08 +01:00
import org.apache.commons.lang3.StringUtils;
2023-12-27 13:33:09 +01:00
import java.util.ArrayList;
import java.util.List;
2023-12-23 13:55:02 +01:00
public class ActivityManageTriggerCalendar extends Activity
{
2023-12-28 17:17:08 +01:00
CheckBox chkCalendarEventActive, chkCalendarAvailabilityBusy, chkCalendarAvailabilityFree, chkCalendarAvailabilityTentative, chkCalendarAvailabilityOutOfOffice, chkCalendarAvailabilityWorkingElsewhere, chkCalendarAllDayEvent;
2023-12-27 13:33:09 +01:00
Spinner spinnerCalendarTitleDirection, spinnerCalendarLocationDirection, spinnerCalendarDescriptionDirection;
2023-12-25 11:57:55 +01:00
EditText etCalendarTitle, etCalendarLocation, etCalendarDescription;
2023-12-27 13:33:09 +01:00
LinearLayout llCalendarSelection;
2023-12-25 11:57:55 +01:00
Button bSaveTriggerCalendar;
2023-12-27 13:33:09 +01:00
List<CheckBox> checkboxesCalendars = new ArrayList<>();
2023-12-27 14:48:27 +01:00
final static String separator = ",";
2023-12-28 00:25:55 +01:00
TextView tvMissingCalendarHint;
2023-12-25 11:57:55 +01:00
private static String[] directions;
ArrayAdapter<String> directionSpinnerAdapter;
2023-12-23 13:55:02 +01:00
@Override
protected void onCreate(@Nullable Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
setContentView(R.layout.activity_manage_trigger_calendar);
2023-12-27 14:48:27 +01:00
chkCalendarEventActive = (CheckBox) findViewById(R.id.chkCalendarEventActive);
2023-12-25 11:57:55 +01:00
spinnerCalendarTitleDirection = (Spinner)findViewById(R.id.spinnerCalendarTitleDirection);
spinnerCalendarLocationDirection = (Spinner)findViewById(R.id.spinnerCalendarLocationDirection);
spinnerCalendarDescriptionDirection = (Spinner)findViewById(R.id.spinnerCalendarDescriptionDirection);
2023-12-28 17:17:08 +01:00
chkCalendarAllDayEvent = (CheckBox)findViewById(R.id.chkCalendarAllDayEvent);
2023-12-27 13:33:09 +01:00
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);
2023-12-28 00:25:55 +01:00
tvMissingCalendarHint = (TextView) findViewById(R.id.tvMissingCalendarHint);
2023-12-27 13:33:09 +01:00
llCalendarSelection = (LinearLayout)findViewById(R.id.llCalendarSelection);
2023-12-25 11:57:55 +01:00
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<String>(this, R.layout.text_view_for_poi_listview_mediumtextsize, ActivityManageTriggerCalendar.directions);
spinnerCalendarTitleDirection.setAdapter(directionSpinnerAdapter);
spinnerCalendarLocationDirection.setAdapter(directionSpinnerAdapter);
spinnerCalendarDescriptionDirection.setAdapter(directionSpinnerAdapter);
directionSpinnerAdapter.notifyDataSetChanged();
2023-12-27 13:33:09 +01:00
for(CalendarReceiver.AndroidCalendar cal : CalendarReceiver.readCalendars(ActivityManageTriggerCalendar.this))
{
CheckBox oneCalCheckbox = new CheckBox(ActivityManageTriggerCalendar.this);
2023-12-28 17:17:08 +01:00
oneCalCheckbox.setText(cal.toString());
2023-12-27 13:33:09 +01:00
oneCalCheckbox.setTag(cal);
llCalendarSelection.addView(oneCalCheckbox);
checkboxesCalendars.add(oneCalCheckbox);
}
2023-12-23 13:55:02 +01:00
2023-12-27 14:48:27 +01:00
chkCalendarEventActive.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener()
2023-12-23 13:55:02 +01:00
{
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean checked)
{
if(checked)
2023-12-27 14:48:27 +01:00
chkCalendarEventActive.setText(R.string.eventIsCurrentlyHappening);
2023-12-23 13:55:02 +01:00
else
2023-12-27 14:48:27 +01:00
chkCalendarEventActive.setText(R.string.eventIsCurrentlyNotHappening);
2023-12-23 13:55:02 +01:00
}
});
2023-12-25 11:57:55 +01:00
2023-12-28 17:17:08 +01:00
chkCalendarAllDayEvent.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener()
{
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean checked)
{
if(checked)
chkCalendarAllDayEvent.setText(getResources().getString(R.string.allDayEventTrue));
else
chkCalendarAllDayEvent.setText(getResources().getString(R.string.allDayEventFalse));
}
});
2023-12-25 11:57:55 +01:00
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();
2023-12-27 13:33:09 +01:00
List<String> 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<CalendarReceiver.AndroidCalendar> selectedCalendarsList = new ArrayList<>();
for(CheckBox calCheckbox : checkboxesCalendars)
{
if(calCheckbox.isChecked())
selectedCalendarsList.add((CalendarReceiver.AndroidCalendar) calCheckbox.getTag());
}
2023-12-27 14:48:27 +01:00
List<String> selectedCalendarsIdArray = new ArrayList<>();
for(CalendarReceiver.AndroidCalendar cal : selectedCalendarsList)
selectedCalendarsIdArray.add(String.valueOf(cal.calendarId));
2023-12-25 11:57:55 +01:00
String returnString =
titleDir + Trigger.triggerParameter2Split + title + Trigger.triggerParameter2Split +
descriptionDir + Trigger.triggerParameter2Split + description + Trigger.triggerParameter2Split +
locationDir + Trigger.triggerParameter2Split + location + Trigger.triggerParameter2Split +
2023-12-28 17:17:08 +01:00
String.valueOf(chkCalendarAllDayEvent.isChecked()) + Trigger.triggerParameter2Split +
2023-12-27 14:48:27 +01:00
Miscellaneous.explode(separator, availabilityList.toArray(new String[availabilityList.size()])) + Trigger.triggerParameter2Split +
Miscellaneous.explode(separator, selectedCalendarsIdArray.toArray(new String[selectedCalendarsIdArray.size()]));
2023-12-25 11:57:55 +01:00
Intent data = new Intent();
2023-12-27 14:48:27 +01:00
data.putExtra(ActivityManageRule.intentNameTriggerParameter1, chkCalendarEventActive.isChecked());
2023-12-25 11:57:55 +01:00
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))
2023-12-27 14:48:27 +01:00
chkCalendarEventActive.setChecked(data.getBooleanExtra(ActivityManageRule.intentNameTriggerParameter1, true));
2023-12-25 11:57:55 +01:00
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
2023-12-28 17:17:08 +01:00
6 = all day event
7 = availability list
8 = calendars list
2023-12-25 11:57:55 +01:00
*/
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]);
2023-12-27 14:48:27 +01:00
2023-12-28 17:17:08 +01:00
chkCalendarAllDayEvent.setChecked(Boolean.parseBoolean(input[6]));
String[] availabilities = null;
if(!StringUtils.isEmpty(input[7]))
availabilities = input[7].split(separator);
2023-12-27 14:48:27 +01:00
2023-12-28 17:17:08 +01:00
String[] calendars = null;
if(!StringUtils.isEmpty(input[8]))
calendars = input[8].split(separator);
if(availabilities != null)
2023-12-27 14:48:27 +01:00
{
2023-12-28 17:17:08 +01:00
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);
}
2023-12-27 14:48:27 +01:00
}
2023-12-28 17:17:08 +01:00
if(calendars != null)
2023-12-27 14:48:27 +01:00
{
2023-12-28 17:17:08 +01:00
List<String> usedCalendarIDs = new ArrayList<>();
List<String> unusedCalendarIDs = new ArrayList<>();
for (CheckBox checkbox : checkboxesCalendars)
2023-12-27 14:48:27 +01:00
{
2023-12-28 17:17:08 +01:00
int id = ((CalendarReceiver.AndroidCalendar) checkbox.getTag()).calendarId;
for (String calId : calendars)
2023-12-27 14:48:27 +01:00
{
2023-12-28 17:17:08 +01:00
if (calId.equals(String.valueOf(id)))
{
usedCalendarIDs.add(String.valueOf(id));
checkbox.setChecked(true);
break;
}
2023-12-27 14:48:27 +01:00
}
}
2023-12-28 17:17:08 +01:00
for (String calId : calendars)
{
if (!Miscellaneous.arraySearch((ArrayList<String>) usedCalendarIDs, calId, false, true))
unusedCalendarIDs.add(calId);
}
if (unusedCalendarIDs.size() > 0)
{
2023-12-28 00:25:55 +01:00
/*
A calendar has been configured that has been deleted since. We cannot resolve it.
It will be removed with the next save, but we should inform this user
of these circumstances.
*/
2023-12-28 17:17:08 +01:00
tvMissingCalendarHint.setText(String.format(getResources().getString(R.string.calendarsMissingHint), Miscellaneous.explode(", ", (ArrayList<String>) unusedCalendarIDs)));
}
2023-12-28 00:25:55 +01:00
}
2023-12-25 11:57:55 +01:00
}
2023-12-23 13:55:02 +01:00
}
2023-12-27 14:48:27 +01:00
}