Signed-off-by: Mario Danic <mario@lovelyhq.com>
This commit is contained in:
Mario Danic 2019-03-04 11:47:50 +01:00
parent 252a37e0e8
commit d8e6b9f6ef
2 changed files with 86 additions and 23 deletions

View File

@ -62,6 +62,7 @@ import com.nextcloud.talk.jobs.AccountRemovalWorker;
import com.nextcloud.talk.models.RingtoneSettings;
import com.nextcloud.talk.models.database.UserEntity;
import com.nextcloud.talk.utils.ApiUtils;
import com.nextcloud.talk.utils.DisplayUtils;
import com.nextcloud.talk.utils.DoNotDisturbUtils;
import com.nextcloud.talk.utils.SecurityUtils;
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.MagicUserInputModule;
import com.nextcloud.talk.utils.singletons.ApplicationWideMessageHolder;
import com.yarolegovich.lovelydialog.LovelySaveStateHandler;
import com.yarolegovich.lovelydialog.LovelyStandardDialog;
import com.yarolegovich.mp.*;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
@ -178,6 +181,8 @@ public class SettingsController extends BaseController {
@Inject
Context context;
private LovelySaveStateHandler saveStateHandler;
private UserEntity currentUser;
private String credentials;
@ -190,6 +195,8 @@ public class SettingsController extends BaseController {
private Disposable profileQueryDisposable;
private Disposable dbQueryDisposable;
private static final int ID_REMOVE_ACCOUNT_WARNING_DIALOG = 0;
@Override
protected View inflateView(@NonNull LayoutInflater inflater, @NonNull ViewGroup container) {
return inflater.inflate(R.layout.controller_settings, container, false);
@ -210,6 +217,10 @@ public class SettingsController extends BaseController {
getCurrentUser();
if (saveStateHandler == null) {
saveStateHandler = new LovelySaveStateHandler();
}
appPreferences.registerProxyTypeListener(proxyTypeChangeListener = new ProxyTypeChangeListener());
appPreferences.registerProxyCredentialsListener(proxyCredentialsChangeListener = new ProxyCredentialsChangeListener());
appPreferences.registerScreenSecurityListener(screenSecurityChangeListener = new ScreenSecurityChangeListener());
@ -302,7 +313,6 @@ public class SettingsController extends BaseController {
.popChangeHandler(new VerticalChangeHandler()));
});
String host = null;
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
protected void onAttach(@NonNull View view) {
super.onAttach(view);
@ -495,28 +577,7 @@ public class SettingsController extends BaseController {
removeAccountButton.addPreferenceClickListener(view1 -> {
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()));
}
}
showLovelyDialog(ID_REMOVE_ACCOUNT_WARNING_DIALOG, null);
});
}

View File

@ -69,6 +69,8 @@
<string name="nc_settings_reauthorize">Reauthorize</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_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_add_account">Add a new account</string>
<string name="nc_settings_wrong_account">Only current account can be reauthorized</string>