Merge branch 'main' into adb/issue-3126

This commit is contained in:
Asiel Díaz Benítez
2024-07-10 13:16:05 +02:00
committed by GitHub
64 changed files with 637 additions and 259 deletions
@@ -244,6 +244,21 @@ public class DcContext {
setConfigInt("is_muted", muted? 1 : 0);
}
// Called for new profiles on chatmail servers that are "single device" initially;
// to save server disk space, we make use of that delete all messages immediately after download.
public void assumeSingleDevice() {
if (isChatmail()) {
setConfigInt("delete_server_after", 1 /*at once*/);
}
}
// Called when we get a hint that another device may be set up.
public void assumeMultiDevice() {
if (isChatmail() && getConfigInt("delete_server_after") == 1 /*at once*/) {
setConfigInt("delete_server_after", 0 /*never/automatic*/);
}
}
/**
* @return true if at least one chat has location streaming enabled
*/
@@ -373,6 +373,7 @@ public class InstantOnboardingActivity extends BaseActionBarActivity implements
progressUpdate((int)progress);
} else if (progress==1000/*done*/) {
DcHelper.getAccounts(this).startIo();
dcContext.assumeSingleDevice();
progressSuccess();
}
}
@@ -369,6 +369,7 @@ public class WelcomeActivity extends BaseActionBarActivity implements DcEventCen
else if (progress==1000/*done*/) {
DcHelper.getAccounts(this).startIo();
progressSuccess();
dcContext.assumeMultiDevice();
notificationController.close();
cleanupTempBackupFile();
}
@@ -68,6 +68,13 @@ public class ChatsPreferenceFragment extends ListSummaryPreferenceFragment {
autoDelServer = findPreference("autodel_server");
autoDelServer.setOnPreferenceChangeListener(new AutodelChangeListener("delete_server_after"));
if (dcContext.isChatmail()) {
autoDelServer.setEntries(new CharSequence[]{getString(R.string.automatic), getString(R.string.autodel_at_once)});
autoDelServer.setEntryValues(new CharSequence[]{"0", "1"});
if (dcContext.getConfigInt("delete_server_after") > 1) {
dcContext.setConfigInt("delete_server_after", 0 /*never/automatic*/);
}
}
}
@Override
@@ -97,7 +104,7 @@ public class ChatsPreferenceFragment extends ListSummaryPreferenceFragment {
private void initAutodelFromCore() {
String value = Integer.toString(dcContext.getConfigInt("delete_server_after"));
autoDelServer.setValue(value);
updateListSummary(autoDelServer, value, value.equals("0")? null : getString(R.string.autodel_server_enabled_hint));
updateListSummary(autoDelServer, value, (value.equals("0") || dcContext.isChatmail())? null : getString(R.string.autodel_server_enabled_hint));
value = Integer.toString(dcContext.getConfigInt("delete_device_after"));
autoDelDevice.setValue(value);
@@ -149,13 +156,7 @@ public class ChatsPreferenceFragment extends ListSummaryPreferenceFragment {
final String onRes = context.getString(R.string.on);
final String offRes = context.getString(R.string.off);
String readReceiptState = dcContext.getConfigInt("mdns_enabled")!=0? onRes : offRes;
boolean deleteOld = (dcContext.getConfigInt("delete_device_after")!=0 || dcContext.getConfigInt("delete_server_after")!=0);
String summary = context.getString(R.string.pref_read_receipts) + " " + readReceiptState;
if (deleteOld) {
summary += ", " + context.getString(R.string.delete_old_messages) + " " + onRes;
}
return summary;
return context.getString(R.string.pref_read_receipts) + " " + readReceiptState;
}
private class BlockedContactsClickListener implements Preference.OnPreferenceClickListener {
@@ -186,9 +187,9 @@ public class ChatsPreferenceFragment extends ListSummaryPreferenceFragment {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
int timeout = Util.objectToInt(newValue);
if (timeout>0) {
Context context = preference.getContext();
boolean fromServer = coreKey.equals("delete_server_after");
Context context = preference.getContext();
boolean fromServer = coreKey.equals("delete_server_after");
if (timeout>0 && !(fromServer && dcContext.isChatmail())) {
int delCount = DcHelper.getContext(context).estimateDeletionCount(fromServer, timeout);
View gl = View.inflate(getActivity(), R.layout.dialog_with_checkbox, null);
@@ -217,6 +218,18 @@ public class ChatsPreferenceFragment extends ListSummaryPreferenceFragment {
.setCancelable(true) // Enable the user to quickly cancel if they are intimidated by the warnings :)
.setOnCancelListener(dialog -> initAutodelFromCore())
.show();
} else if (fromServer && timeout == 1 /*at once, using a constant that cannot be used in .xml would weaken grep ability*/) {
new AlertDialog.Builder(context)
.setTitle(R.string.autodel_server_warn_multi_device_title)
.setMessage(R.string.autodel_server_warn_multi_device)
.setPositiveButton(android.R.string.ok, (dialog, whichButton) -> {
dcContext.setConfigInt(coreKey, timeout);
initAutodelFromCore();
})
.setNegativeButton(android.R.string.cancel, (dialog, whichButton) -> initAutodelFromCore())
.setCancelable(true)
.setOnCancelListener(dialog -> initAutodelFromCore())
.show();
} else {
updateListSummary(preference, newValue);
dcContext.setConfigInt(coreKey, timeout);
@@ -138,6 +138,7 @@ public abstract class ListSummaryPreferenceFragment extends CorrectedPreferenceF
protected void startImexInner(int accountId, int what, String imexPath, String pathAsDisplayedToUser)
{
DcContext dcContext = DcHelper.getAccounts(getActivity()).getAccount(accountId);
dcContext.assumeMultiDevice();
this.pathAsDisplayedToUser = pathAsDisplayedToUser;
progressWhat = what;
dcContext.imex(progressWhat, imexPath);
@@ -64,6 +64,7 @@ public class BackupProviderFragment extends Fragment implements DcEventCenter.Dc
progressBar.setIndeterminate(true);
dcContext = DcHelper.getContext(getActivity());
dcContext.assumeMultiDevice();
DcHelper.getEventCenter(getActivity()).addObserver(DcContext.DC_EVENT_IMEX_PROGRESS, this);
prepareThread = new Thread(() -> {
@@ -94,6 +94,7 @@ public class BackupReceiverFragment extends Fragment implements DcEventCenter.Dc
} else if (permille == 1000) {
getTransferActivity().setTransferState(BackupTransferActivity.TransferState.TRANSFER_SUCCESS);
getTransferActivity().doFinish();
dcContext.assumeMultiDevice();
return;
}