mirror of
https://github.com/nextcloud/talk-android
synced 2025-06-22 13:09:46 +01:00
parent
252a37e0e8
commit
d8e6b9f6ef
@ -62,6 +62,7 @@ import com.nextcloud.talk.jobs.AccountRemovalWorker;
|
|||||||
import com.nextcloud.talk.models.RingtoneSettings;
|
import com.nextcloud.talk.models.RingtoneSettings;
|
||||||
import com.nextcloud.talk.models.database.UserEntity;
|
import com.nextcloud.talk.models.database.UserEntity;
|
||||||
import com.nextcloud.talk.utils.ApiUtils;
|
import com.nextcloud.talk.utils.ApiUtils;
|
||||||
|
import com.nextcloud.talk.utils.DisplayUtils;
|
||||||
import com.nextcloud.talk.utils.DoNotDisturbUtils;
|
import com.nextcloud.talk.utils.DoNotDisturbUtils;
|
||||||
import com.nextcloud.talk.utils.SecurityUtils;
|
import com.nextcloud.talk.utils.SecurityUtils;
|
||||||
import com.nextcloud.talk.utils.bundle.BundleKeys;
|
import com.nextcloud.talk.utils.bundle.BundleKeys;
|
||||||
@ -70,6 +71,8 @@ import com.nextcloud.talk.utils.glide.GlideApp;
|
|||||||
import com.nextcloud.talk.utils.preferences.AppPreferences;
|
import com.nextcloud.talk.utils.preferences.AppPreferences;
|
||||||
import com.nextcloud.talk.utils.preferences.MagicUserInputModule;
|
import com.nextcloud.talk.utils.preferences.MagicUserInputModule;
|
||||||
import com.nextcloud.talk.utils.singletons.ApplicationWideMessageHolder;
|
import com.nextcloud.talk.utils.singletons.ApplicationWideMessageHolder;
|
||||||
|
import com.yarolegovich.lovelydialog.LovelySaveStateHandler;
|
||||||
|
import com.yarolegovich.lovelydialog.LovelyStandardDialog;
|
||||||
import com.yarolegovich.mp.*;
|
import com.yarolegovich.mp.*;
|
||||||
import io.reactivex.android.schedulers.AndroidSchedulers;
|
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||||
import io.reactivex.disposables.Disposable;
|
import io.reactivex.disposables.Disposable;
|
||||||
@ -178,6 +181,8 @@ public class SettingsController extends BaseController {
|
|||||||
@Inject
|
@Inject
|
||||||
Context context;
|
Context context;
|
||||||
|
|
||||||
|
private LovelySaveStateHandler saveStateHandler;
|
||||||
|
|
||||||
private UserEntity currentUser;
|
private UserEntity currentUser;
|
||||||
private String credentials;
|
private String credentials;
|
||||||
|
|
||||||
@ -190,6 +195,8 @@ public class SettingsController extends BaseController {
|
|||||||
private Disposable profileQueryDisposable;
|
private Disposable profileQueryDisposable;
|
||||||
private Disposable dbQueryDisposable;
|
private Disposable dbQueryDisposable;
|
||||||
|
|
||||||
|
private static final int ID_REMOVE_ACCOUNT_WARNING_DIALOG = 0;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected View inflateView(@NonNull LayoutInflater inflater, @NonNull ViewGroup container) {
|
protected View inflateView(@NonNull LayoutInflater inflater, @NonNull ViewGroup container) {
|
||||||
return inflater.inflate(R.layout.controller_settings, container, false);
|
return inflater.inflate(R.layout.controller_settings, container, false);
|
||||||
@ -210,6 +217,10 @@ public class SettingsController extends BaseController {
|
|||||||
|
|
||||||
getCurrentUser();
|
getCurrentUser();
|
||||||
|
|
||||||
|
if (saveStateHandler == null) {
|
||||||
|
saveStateHandler = new LovelySaveStateHandler();
|
||||||
|
}
|
||||||
|
|
||||||
appPreferences.registerProxyTypeListener(proxyTypeChangeListener = new ProxyTypeChangeListener());
|
appPreferences.registerProxyTypeListener(proxyTypeChangeListener = new ProxyTypeChangeListener());
|
||||||
appPreferences.registerProxyCredentialsListener(proxyCredentialsChangeListener = new ProxyCredentialsChangeListener());
|
appPreferences.registerProxyCredentialsListener(proxyCredentialsChangeListener = new ProxyCredentialsChangeListener());
|
||||||
appPreferences.registerScreenSecurityListener(screenSecurityChangeListener = new ScreenSecurityChangeListener());
|
appPreferences.registerScreenSecurityListener(screenSecurityChangeListener = new ScreenSecurityChangeListener());
|
||||||
@ -302,7 +313,6 @@ public class SettingsController extends BaseController {
|
|||||||
.popChangeHandler(new VerticalChangeHandler()));
|
.popChangeHandler(new VerticalChangeHandler()));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
String host = null;
|
String host = null;
|
||||||
int port = -1;
|
int port = -1;
|
||||||
|
|
||||||
@ -338,6 +348,78 @@ public class SettingsController extends BaseController {
|
|||||||
()));
|
()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void showLovelyDialog(int dialogId, Bundle savedInstanceState) {
|
||||||
|
switch (dialogId) {
|
||||||
|
case ID_REMOVE_ACCOUNT_WARNING_DIALOG:
|
||||||
|
showRemoveAccountWarning(savedInstanceState);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onSaveViewState(@NonNull View view, @NonNull Bundle outState) {
|
||||||
|
saveStateHandler.saveInstanceState(outState);
|
||||||
|
super.onSaveViewState(view, outState);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onRestoreViewState(@NonNull View view, @NonNull Bundle savedViewState) {
|
||||||
|
super.onRestoreViewState(view, savedViewState);
|
||||||
|
if (LovelySaveStateHandler.wasDialogOnScreen(savedViewState)) {
|
||||||
|
//Dialog won't be restarted automatically, so we need to call this method.
|
||||||
|
//Each dialog knows how to restore its state
|
||||||
|
showLovelyDialog(LovelySaveStateHandler.getSavedDialogId(savedViewState), savedViewState);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void showRemoveAccountWarning(Bundle savedInstanceState) {
|
||||||
|
if (getActivity() != null) {
|
||||||
|
new LovelyStandardDialog(getActivity(), LovelyStandardDialog.ButtonLayout.HORIZONTAL)
|
||||||
|
.setTopColorRes(R.color.nc_darkRed)
|
||||||
|
.setIcon(DisplayUtils.getTintedDrawable(getResources(),
|
||||||
|
R.drawable.ic_delete_black_24dp, R.color.white))
|
||||||
|
.setPositiveButtonColor(context.getResources().getColor(R.color.nc_darkRed))
|
||||||
|
.setTitle(R.string.nc_settings_remove_account)
|
||||||
|
.setMessage(R.string.nc_settings_remove_confirmation)
|
||||||
|
.setPositiveButton(R.string.nc_settings_remove, new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
removeCurrentAccount();
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.setNegativeButton(R.string.nc_cancel, null)
|
||||||
|
.setInstanceStateHandler(ID_REMOVE_ACCOUNT_WARNING_DIALOG, saveStateHandler)
|
||||||
|
.setSavedInstanceState(savedInstanceState)
|
||||||
|
.show();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void removeCurrentAccount() {
|
||||||
|
boolean otherUserExists = userUtils.scheduleUserForDeletionWithId(currentUser.getId());
|
||||||
|
|
||||||
|
OneTimeWorkRequest accountRemovalWork = new OneTimeWorkRequest.Builder(AccountRemovalWorker.class).build();
|
||||||
|
WorkManager.getInstance().enqueue(accountRemovalWork);
|
||||||
|
|
||||||
|
if (otherUserExists && getView() != null) {
|
||||||
|
onViewBound(getView());
|
||||||
|
onAttach(getView());
|
||||||
|
} else if (!otherUserExists) {
|
||||||
|
if (getParentController() == null || getParentController().getRouter() == null) {
|
||||||
|
if (getActivity() != null) {
|
||||||
|
// Something went very wrong, finish the app
|
||||||
|
getActivity().finish();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
getParentController().getRouter().setRoot(RouterTransaction.with(
|
||||||
|
new ServerSelectionController())
|
||||||
|
.pushChangeHandler(new VerticalChangeHandler())
|
||||||
|
.popChangeHandler(new VerticalChangeHandler()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onAttach(@NonNull View view) {
|
protected void onAttach(@NonNull View view) {
|
||||||
super.onAttach(view);
|
super.onAttach(view);
|
||||||
@ -495,28 +577,7 @@ public class SettingsController extends BaseController {
|
|||||||
|
|
||||||
|
|
||||||
removeAccountButton.addPreferenceClickListener(view1 -> {
|
removeAccountButton.addPreferenceClickListener(view1 -> {
|
||||||
boolean otherUserExists = userUtils.scheduleUserForDeletionWithId(currentUser.getId());
|
showLovelyDialog(ID_REMOVE_ACCOUNT_WARNING_DIALOG, null);
|
||||||
|
|
||||||
OneTimeWorkRequest accountRemovalWork = new OneTimeWorkRequest.Builder(AccountRemovalWorker.class).build();
|
|
||||||
WorkManager.getInstance().enqueue(accountRemovalWork);
|
|
||||||
|
|
||||||
if (otherUserExists && getView() != null) {
|
|
||||||
onViewBound(getView());
|
|
||||||
onAttach(getView());
|
|
||||||
} else if (!otherUserExists) {
|
|
||||||
if (getParentController() == null || getParentController().getRouter() == null) {
|
|
||||||
if (getActivity() != null) {
|
|
||||||
// Something went very wrong, finish the app
|
|
||||||
getActivity().finish();
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
getParentController().getRouter().setRoot(RouterTransaction.with(
|
|
||||||
new ServerSelectionController())
|
|
||||||
.pushChangeHandler(new VerticalChangeHandler())
|
|
||||||
.popChangeHandler(new VerticalChangeHandler()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -69,6 +69,8 @@
|
|||||||
<string name="nc_settings_reauthorize">Reauthorize</string>
|
<string name="nc_settings_reauthorize">Reauthorize</string>
|
||||||
<string name="nc_client_cert_setup">Set up client certificate</string>
|
<string name="nc_client_cert_setup">Set up client certificate</string>
|
||||||
<string name="nc_client_cert_change">Change client certificate</string>
|
<string name="nc_client_cert_change">Change client certificate</string>
|
||||||
|
<string name="nc_settings_remove">Remove</string>
|
||||||
|
<string name="nc_settings_remove_confirmation">Please confirm your intent to remove the current account.</string>
|
||||||
<string name="nc_settings_remove_account">Remove account</string>
|
<string name="nc_settings_remove_account">Remove account</string>
|
||||||
<string name="nc_settings_add_account">Add a new account</string>
|
<string name="nc_settings_add_account">Add a new account</string>
|
||||||
<string name="nc_settings_wrong_account">Only current account can be reauthorized</string>
|
<string name="nc_settings_wrong_account">Only current account can be reauthorized</string>
|
||||||
|
Loading…
Reference in New Issue
Block a user