mirror of
https://github.com/ArcaneChat/android.git
synced 2026-07-03 14:05:24 +02:00
Merge branch 'main' into adb/issue-3126
This commit is contained in:
@@ -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);
|
||||
|
||||
+1
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user