Added option to disable storing events as tentative

This commit is contained in:
M66B 2023-10-25 13:59:47 +02:00
parent c19b5e1ddb
commit 61eba3e652
4 changed files with 46 additions and 5 deletions

View File

@ -114,6 +114,7 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc
private SwitchCompat swSortAnswers;
private SwitchCompat swExternalAnswer;
private SwitchCompat swShortcuts;
private SwitchCompat swICalTentative;
private SwitchCompat swFts;
private SwitchCompat swClassification;
private TextView tvClassMinProbability;
@ -291,7 +292,7 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc
private static final long MIN_FILE_SIZE = 1024 * 1024L;
private final static String[] RESET_OPTIONS = new String[]{
"sort_answers", "shortcuts", "fts",
"sort_answers", "shortcuts", "ical_tentative", "fts",
"classification", "class_min_probability", "class_min_difference",
"show_filtered",
"language",
@ -381,6 +382,7 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc
swSortAnswers = view.findViewById(R.id.swSortAnswers);
swExternalAnswer = view.findViewById(R.id.swExternalAnswer);
swShortcuts = view.findViewById(R.id.swShortcuts);
swICalTentative = view.findViewById(R.id.swICalTentative);
swFts = view.findViewById(R.id.swFts);
swClassification = view.findViewById(R.id.swClassification);
ibClassification = view.findViewById(R.id.ibClassification);
@ -608,6 +610,14 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc
}
});
swICalTentative.setVisibility(BuildConfig.PLAY_STORE_RELEASE ? View.GONE : View.VISIBLE);
swICalTentative.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
prefs.edit().putBoolean("ical_tentative", checked).apply(); // apply won't work here
}
});
swFts.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
@ -2597,6 +2607,7 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc
swExternalSearch.setChecked(Helper.isComponentEnabled(getContext(), ActivitySearch.class));
swExternalAnswer.setChecked(Helper.isComponentEnabled(getContext(), ActivityAnswer.class));
swShortcuts.setChecked(prefs.getBoolean("shortcuts", true));
swICalTentative.setChecked(prefs.getBoolean("ical_tentative", true));
swFts.setChecked(prefs.getBoolean("fts", false));
swClassification.setChecked(prefs.getBoolean("classification", false));

View File

@ -159,6 +159,7 @@ import biweekly.Biweekly;
import biweekly.ICalendar;
import biweekly.component.VEvent;
import biweekly.property.Method;
import biweekly.property.Status;
import ezvcard.VCard;
import ezvcard.VCardVersion;
import ezvcard.io.text.VCardWriter;
@ -4416,6 +4417,9 @@ public class MessageHelper {
private void decodeICalendar(Context context, EntityAttachment local) {
DB db = DB.getInstance(context);
try {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
boolean ical_tentative = prefs.getBoolean("ical_tentative", true);
boolean permission = Helper.hasPermission(context, Manifest.permission.WRITE_CALENDAR);
EntityMessage message = db.message().getMessage(local.message);
@ -4447,6 +4451,21 @@ public class MessageHelper {
if (method != null && method.isCancel())
CalendarHelper.delete(context, event, message);
else if (method == null || method.isRequest() || method.isReply()) {
int status = CalendarContract.Events.STATUS_TENTATIVE;
if (method != null && method.isReply()) {
Status istatus = event.getStatus();
if (istatus != null)
if (Status.ACCEPTED.equals(istatus.getValue()))
status = CalendarContract.Events.STATUS_CONFIRMED;
else if (Status.CANCELLED.equals(istatus.getValue()))
status = CalendarContract.Events.STATUS_CANCELED;
}
if (status == CalendarContract.Events.STATUS_TENTATIVE && !ical_tentative) {
EntityLog.log(context, "Tentative event not processed");
return;
}
String selectedAccount;
String selectedName;
try {
@ -4459,9 +4478,7 @@ public class MessageHelper {
selectedName = null;
}
CalendarHelper.insert(context, icalendar, event,
CalendarContract.Events.STATUS_TENTATIVE,
selectedAccount, selectedName, message);
CalendarHelper.insert(context, icalendar, event, status, selectedAccount, selectedName, message);
} else
EntityLog.log(context, "Unknown event method=" + method.getValue());
} catch (Throwable ex) {

View File

@ -156,6 +156,18 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/swShortcuts" />
<androidx.appcompat.widget.SwitchCompat
android:id="@+id/swICalTentative"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:checked="true"
android:text="@string/title_advanced_ical_tentative"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvShortcutsHint"
app:switchPadding="12dp" />
<androidx.appcompat.widget.SwitchCompat
android:id="@+id/swFts"
android:layout_width="0dp"
@ -164,7 +176,7 @@
android:text="@string/title_advanced_fts"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvShortcutsHint"
app:layout_constraintTop_toBottomOf="@id/swICalTentative"
app:switchPadding="12dp" />
<TextView

View File

@ -821,6 +821,7 @@
<string name="title_advanced_sort_answers">Sort reply templates by frequency of use</string>
<string name="title_advanced_external_answer" translatable="false">Provide reply templates to other apps</string>
<string name="title_advanced_shortcuts">Show frequently used contacts in Android share menu</string>
<string name="title_advanced_ical_tentative">Store received invitations as tentative</string>
<string name="title_advanced_fts">Build search index</string>
<string name="title_advanced_fts_indexed">%1$d / %2$d messages indexed (%3$s)</string>
<string name="title_advanced_classification">Classify messages</string>