Added calendar selection to POP3 account editor

pull/209/head
M66B 3 years ago
parent de096500fc
commit 2a4b220b7b

@ -24,6 +24,7 @@ import static com.google.android.material.textfield.TextInputLayout.END_ICON_NON
import static com.google.android.material.textfield.TextInputLayout.END_ICON_PASSWORD_TOGGLE; import static com.google.android.material.textfield.TextInputLayout.END_ICON_PASSWORD_TOGGLE;
import static eu.faircode.email.ServiceAuthenticator.AUTH_TYPE_PASSWORD; import static eu.faircode.email.ServiceAuthenticator.AUTH_TYPE_PASSWORD;
import android.Manifest;
import android.app.NotificationManager; import android.app.NotificationManager;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
@ -85,6 +86,8 @@ public class FragmentPop extends FragmentBase {
private ViewButtonColor btnColor; private ViewButtonColor btnColor;
private TextView tvColorPro; private TextView tvColorPro;
private Button btnCalendar;
private CheckBox cbSynchronize; private CheckBox cbSynchronize;
private CheckBox cbIgnoreSchedule; private CheckBox cbIgnoreSchedule;
private CheckBox cbOnDemand; private CheckBox cbOnDemand;
@ -108,17 +111,21 @@ public class FragmentPop extends FragmentBase {
private ContentLoadingProgressBar pbSave; private ContentLoadingProgressBar pbSave;
private CheckBox cbIdentity; private CheckBox cbIdentity;
private TextView tvError; private TextView tvError;
private Group grpCalendar;
private Group grpError; private Group grpError;
private ContentLoadingProgressBar pbWait; private ContentLoadingProgressBar pbWait;
private long id = -1; private long id = -1;
private int auth = AUTH_TYPE_PASSWORD; private int auth = AUTH_TYPE_PASSWORD;
private String calendar = null;
private boolean saving = false; private boolean saving = false;
private static final int REQUEST_COLOR = 1; private static final int REQUEST_COLOR = 1;
private static final int REQUEST_SAVE = 2; private static final int REQUEST_CALENDAR = 2;
private static final int REQUEST_DELETE = 3; private static final int REQUEST_SAVE = 3;
private static final int REQUEST_DELETE = 4;
@Override @Override
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
@ -153,6 +160,8 @@ public class FragmentPop extends FragmentBase {
btnColor = view.findViewById(R.id.btnColor); btnColor = view.findViewById(R.id.btnColor);
tvColorPro = view.findViewById(R.id.tvColorPro); tvColorPro = view.findViewById(R.id.tvColorPro);
btnCalendar = view.findViewById(R.id.btnCalendar);
cbSynchronize = view.findViewById(R.id.cbSynchronize); cbSynchronize = view.findViewById(R.id.cbSynchronize);
cbIgnoreSchedule = view.findViewById(R.id.cbIgnoreSchedule); cbIgnoreSchedule = view.findViewById(R.id.cbIgnoreSchedule);
cbOnDemand = view.findViewById(R.id.cbOnDemand); cbOnDemand = view.findViewById(R.id.cbOnDemand);
@ -176,6 +185,8 @@ public class FragmentPop extends FragmentBase {
cbIdentity = view.findViewById(R.id.cbIdentity); cbIdentity = view.findViewById(R.id.cbIdentity);
tvError = view.findViewById(R.id.tvError); tvError = view.findViewById(R.id.tvError);
grpCalendar = view.findViewById(R.id.grpCalendar);
grpError = view.findViewById(R.id.grpError); grpError = view.findViewById(R.id.grpError);
pbWait = view.findViewById(R.id.pbWait); pbWait = view.findViewById(R.id.pbWait);
@ -246,6 +257,21 @@ public class FragmentPop extends FragmentBase {
Helper.linkPro(tvColorPro); Helper.linkPro(tvColorPro);
grpCalendar.setVisibility(BuildConfig.PLAY_STORE_RELEASE ? View.GONE : View.VISIBLE);
btnCalendar.setEnabled(Helper.hasPermission(getContext(), Manifest.permission.WRITE_CALENDAR));
btnCalendar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Bundle args = new Bundle();
args.putString("account", calendar);
FragmentDialogCalendar fragment = new FragmentDialogCalendar();
fragment.setArguments(args);
fragment.setTargetFragment(FragmentPop.this, REQUEST_CALENDAR);
fragment.show(getParentFragmentManager(), "account:calendar");
}
});
cbSynchronize.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { cbSynchronize.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override @Override
public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
@ -320,6 +346,7 @@ public class FragmentPop extends FragmentBase {
args.putString("name", etName.getText().toString()); args.putString("name", etName.getText().toString());
args.putString("category", etCategory.getText().toString()); args.putString("category", etCategory.getText().toString());
args.putInt("color", btnColor.getColor()); args.putInt("color", btnColor.getColor());
args.putString("calendar", calendar);
args.putBoolean("synchronize", cbSynchronize.isChecked()); args.putBoolean("synchronize", cbSynchronize.isChecked());
args.putBoolean("ignore_schedule", cbIgnoreSchedule.isChecked()); args.putBoolean("ignore_schedule", cbIgnoreSchedule.isChecked());
@ -375,6 +402,8 @@ public class FragmentPop extends FragmentBase {
String category = args.getString("category"); String category = args.getString("category");
Integer color = args.getInt("color"); Integer color = args.getInt("color");
String calendar = args.getString("calendar");
boolean synchronize = args.getBoolean("synchronize"); boolean synchronize = args.getBoolean("synchronize");
boolean ignore_schedule = args.getBoolean("ignore_schedule"); boolean ignore_schedule = args.getBoolean("ignore_schedule");
boolean ondemand = args.getBoolean("ondemand"); boolean ondemand = args.getBoolean("ondemand");
@ -456,6 +485,8 @@ public class FragmentPop extends FragmentBase {
return true; return true;
if (!Objects.equals(account.color, color)) if (!Objects.equals(account.color, color))
return true; return true;
if (!Objects.equals(account.calendar, calendar))
return true;
if (!Objects.equals(account.synchronize, synchronize)) if (!Objects.equals(account.synchronize, synchronize))
return true; return true;
if (ignore_schedule != jconditions.optBoolean("ignore_schedule")) if (ignore_schedule != jconditions.optBoolean("ignore_schedule"))
@ -550,6 +581,8 @@ public class FragmentPop extends FragmentBase {
account.category = category; account.category = category;
account.color = color; account.color = color;
account.calendar = calendar;
account.synchronize = synchronize; account.synchronize = synchronize;
jconditions.put("ignore_schedule", ignore_schedule); jconditions.put("ignore_schedule", ignore_schedule);
account.ondemand = ondemand; account.ondemand = ondemand;
@ -690,6 +723,7 @@ public class FragmentPop extends FragmentBase {
public void onSaveInstanceState(Bundle outState) { public void onSaveInstanceState(Bundle outState) {
outState.putString("fair:password", tilPassword == null ? null : tilPassword.getEditText().getText().toString()); outState.putString("fair:password", tilPassword == null ? null : tilPassword.getEditText().getText().toString());
outState.putInt("fair:auth", auth); outState.putInt("fair:auth", auth);
outState.putString("fair:calendar", calendar);
super.onSaveInstanceState(outState); super.onSaveInstanceState(outState);
} }
@ -781,6 +815,7 @@ public class FragmentPop extends FragmentBase {
} }
auth = (account == null ? AUTH_TYPE_PASSWORD : account.auth_type); auth = (account == null ? AUTH_TYPE_PASSWORD : account.auth_type);
calendar = (account == null ? null : account.calendar);
new SimpleTask<EntityAccount>() { new SimpleTask<EntityAccount>() {
@Override @Override
@ -802,6 +837,7 @@ public class FragmentPop extends FragmentBase {
} else { } else {
tilPassword.getEditText().setText(savedInstanceState.getString("fair:password")); tilPassword.getEditText().setText(savedInstanceState.getString("fair:password"));
auth = savedInstanceState.getInt("fair:auth"); auth = savedInstanceState.getInt("fair:auth");
calendar = savedInstanceState.getString("fair:calendar");
} }
Helper.setViewsEnabled(view, true); Helper.setViewsEnabled(view, true);
@ -872,6 +908,15 @@ public class FragmentPop extends FragmentBase {
startActivity(new Intent(getContext(), ActivityBilling.class)); startActivity(new Intent(getContext(), ActivityBilling.class));
} }
break; break;
case REQUEST_CALENDAR:
if (resultCode == RESULT_OK && data != null) {
if (ActivityBilling.isPro(getContext())) {
Bundle args = data.getBundleExtra("args");
calendar = args.getString("account");
} else
startActivity(new Intent(getContext(), ActivityBilling.class));
}
break;
case REQUEST_SAVE: case REQUEST_SAVE:
if (resultCode == RESULT_OK) { if (resultCode == RESULT_OK) {
getMainHandler().post(new Runnable() { getMainHandler().post(new Runnable() {

@ -330,6 +330,27 @@
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvColorHint" /> app:layout_constraintTop_toBottomOf="@id/tvColorHint" />
<TextView
android:id="@+id/tvCalendar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:text="@string/title_calendar"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvColorPro" />
<Button
android:id="@+id/btnCalendar"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableEnd="@drawable/twotone_event_24"
android:drawablePadding="6dp"
android:text="@string/title_select"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvCalendar" />
<CheckBox <CheckBox
android:id="@+id/cbSynchronize" android:id="@+id/cbSynchronize"
android:layout_width="wrap_content" android:layout_width="wrap_content"
@ -337,7 +358,7 @@
android:layout_marginTop="12dp" android:layout_marginTop="12dp"
android:text="@string/title_enabled" android:text="@string/title_enabled"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvColorPro" /> app:layout_constraintTop_toBottomOf="@id/btnCalendar" />
<CheckBox <CheckBox
android:id="@+id/cbIgnoreSchedule" android:id="@+id/cbIgnoreSchedule"
@ -597,6 +618,12 @@
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />
<androidx.constraintlayout.widget.Group
android:id="@+id/grpCalendar"
android:layout_width="0dp"
android:layout_height="0dp"
app:constraint_referenced_ids="tvCalendar,btnCalendar" />
<androidx.constraintlayout.widget.Group <androidx.constraintlayout.widget.Group
android:id="@+id/grpError" android:id="@+id/grpError"
android:layout_width="0dp" android:layout_width="0dp"

Loading…
Cancel
Save