Pop a dialog to log in again or delete the account

Signed-off-by: Joas Schilling <coding@schilljs.com>
This commit is contained in:
Joas Schilling 2021-04-29 16:13:23 +02:00 committed by Marcel Hibbe
parent 3f5c03f1ef
commit cb11c36400
No known key found for this signature in database
GPG Key ID: C793F8B59F43CE7B
3 changed files with 68 additions and 18 deletions

View File

@ -87,6 +87,7 @@ import com.nextcloud.talk.events.BottomSheetLockEvent;
import com.nextcloud.talk.events.EventStatus; import com.nextcloud.talk.events.EventStatus;
import com.nextcloud.talk.events.MoreMenuClickEvent; import com.nextcloud.talk.events.MoreMenuClickEvent;
import com.nextcloud.talk.interfaces.ConversationMenuInterface; import com.nextcloud.talk.interfaces.ConversationMenuInterface;
import com.nextcloud.talk.jobs.AccountRemovalWorker;
import com.nextcloud.talk.jobs.ContactAddressBookWorker; import com.nextcloud.talk.jobs.ContactAddressBookWorker;
import com.nextcloud.talk.jobs.DeleteConversationWorker; import com.nextcloud.talk.jobs.DeleteConversationWorker;
import com.nextcloud.talk.models.database.UserEntity; import com.nextcloud.talk.models.database.UserEntity;
@ -234,7 +235,7 @@ public class ConversationsListController extends BaseController implements Searc
} }
ImageRequest imageRequest = DisplayUtils.getImageRequestForUrl(ApiUtils.getUrlForAvatarWithNameAndPixels(currentUser.getBaseUrl(), ImageRequest imageRequest = DisplayUtils.getImageRequestForUrl(ApiUtils.getUrlForAvatarWithNameAndPixels(currentUser.getBaseUrl(),
currentUser.getUserId(), avatarSize), currentUser); currentUser.getUserId(), avatarSize), currentUser);
ImagePipeline imagePipeline = Fresco.getImagePipeline(); ImagePipeline imagePipeline = Fresco.getImagePipeline();
DataSource<CloseableReference<CloseableImage>> dataSource = imagePipeline.fetchDecodedImage(imageRequest, null); DataSource<CloseableReference<CloseableImage>> dataSource = imagePipeline.fetchDecodedImage(imageRequest, null);
@ -333,7 +334,7 @@ public class ConversationsListController extends BaseController implements Searc
DisplayUtils.applyColorToStatusBar( DisplayUtils.applyColorToStatusBar(
activity, activity,
ResourcesCompat.getColor(getResources(), R.color.appbar, null) ResourcesCompat.getColor(getResources(), R.color.appbar, null)
); );
} }
}); });
} }
@ -345,7 +346,7 @@ public class ConversationsListController extends BaseController implements Searc
DisplayUtils.applyColorToStatusBar( DisplayUtils.applyColorToStatusBar(
activity, activity,
ResourcesCompat.getColor(getResources(), R.color.bg_default, null) ResourcesCompat.getColor(getResources(), R.color.bg_default, null)
); );
} }
} else { } else {
searchView.post(() -> searchView.setQuery("", true)); searchView.post(() -> searchView.setQuery("", true));
@ -367,19 +368,19 @@ public class ConversationsListController extends BaseController implements Searc
activity.appBar.setStateListAnimator(AnimatorInflater.loadStateListAnimator( activity.appBar.setStateListAnimator(AnimatorInflater.loadStateListAnimator(
activity.appBar.getContext(), activity.appBar.getContext(),
R.animator.appbar_elevation_off) R.animator.appbar_elevation_off)
); );
activity.toolbar.setVisibility(View.GONE); activity.toolbar.setVisibility(View.GONE);
activity.searchCardView.setVisibility(View.VISIBLE); activity.searchCardView.setVisibility(View.VISIBLE);
if (getResources() != null) { if (getResources() != null) {
DisplayUtils.applyColorToStatusBar( DisplayUtils.applyColorToStatusBar(
activity, activity,
ResourcesCompat.getColor(getResources(), R.color.bg_default, null) ResourcesCompat.getColor(getResources(), R.color.bg_default, null)
); );
} }
} }
SmoothScrollLinearLayoutManager layoutManager = SmoothScrollLinearLayoutManager layoutManager =
(SmoothScrollLinearLayoutManager) recyclerView.getLayoutManager(); (SmoothScrollLinearLayoutManager) recyclerView.getLayoutManager();
if (layoutManager!=null) { if (layoutManager != null) {
layoutManager.scrollToPositionWithOffset(0, 0); layoutManager.scrollToPositionWithOffset(0, 0);
} }
return true; return true;
@ -465,7 +466,7 @@ public class ConversationsListController extends BaseController implements Searc
} else { } else {
Collections.sort(callItems, (callItem, t1) -> Collections.sort(callItems, (callItem, t1) ->
Long.compare(((CallItem) t1).getModel().getLastPing(), Long.compare(((CallItem) t1).getModel().getLastPing(),
((CallItem) callItem).getModel().getLastPing())); ((CallItem) callItem).getModel().getLastPing()));
} }
adapter.updateDataSet(callItems, false); adapter.updateDataSet(callItems, false);
@ -484,15 +485,12 @@ public class ConversationsListController extends BaseController implements Searc
Log.d(TAG, "Starting reauth webview via getParentController()"); Log.d(TAG, "Starting reauth webview via getParentController()");
getParentController().getRouter().pushController((RouterTransaction.with getParentController().getRouter().pushController((RouterTransaction.with
(new WebViewLoginController(currentUser.getBaseUrl(), (new WebViewLoginController(currentUser.getBaseUrl(),
true)) true))
.pushChangeHandler(new VerticalChangeHandler()) .pushChangeHandler(new VerticalChangeHandler())
.popChangeHandler(new VerticalChangeHandler()))); .popChangeHandler(new VerticalChangeHandler())));
} else { } else {
Log.d(TAG, "Starting reauth webview via ConversationsListController"); Log.d(TAG, "Starting reauth webview via ConversationsListController");
getRouter().pushController(RouterTransaction.with( showUnauthorizedDialog();
new WebViewLoginController(currentUser.getBaseUrl(), true))
.pushChangeHandler(new VerticalChangeHandler())
.popChangeHandler(new VerticalChangeHandler()));
} }
break; break;
default: default:
@ -736,7 +734,7 @@ public class ConversationsListController extends BaseController implements Searc
if (currentUser.hasSpreedFeatureCapability("chat-v2")) { if (currentUser.hasSpreedFeatureCapability("chat-v2")) {
bundle.putParcelable(BundleKeys.INSTANCE.getKEY_ACTIVE_CONVERSATION(), Parcels.wrap(conversation)); bundle.putParcelable(BundleKeys.INSTANCE.getKEY_ACTIVE_CONVERSATION(), Parcels.wrap(conversation));
ConductorRemapping.INSTANCE.remapChatController(getRouter(), currentUser.getId(), ConductorRemapping.INSTANCE.remapChatController(getRouter(), currentUser.getId(),
conversation.getToken(), bundle, false); conversation.getToken(), bundle, false);
} else { } else {
overridePushHandler(new NoOpControllerChangeHandler()); overridePushHandler(new NoOpControllerChangeHandler());
overridePopHandler(new NoOpControllerChangeHandler()); overridePopHandler(new NoOpControllerChangeHandler());
@ -793,7 +791,7 @@ public class ConversationsListController extends BaseController implements Searc
new LovelyStandardDialog(getActivity(), LovelyStandardDialog.ButtonLayout.HORIZONTAL) new LovelyStandardDialog(getActivity(), LovelyStandardDialog.ButtonLayout.HORIZONTAL)
.setTopColorRes(R.color.nc_darkRed) .setTopColorRes(R.color.nc_darkRed)
.setIcon(DisplayUtils.getTintedDrawable(context.getResources(), .setIcon(DisplayUtils.getTintedDrawable(context.getResources(),
R.drawable.ic_delete_black_24dp, R.color.bg_default)) R.drawable.ic_delete_black_24dp, R.color.bg_default))
.setPositiveButtonColor(context.getResources().getColor(R.color.nc_darkRed)) .setPositiveButtonColor(context.getResources().getColor(R.color.nc_darkRed))
.setTitle(R.string.nc_delete_call) .setTitle(R.string.nc_delete_call)
.setMessage(conversation.getDeleteWarningMessage()) .setMessage(conversation.getDeleteWarningMessage())
@ -802,7 +800,7 @@ public class ConversationsListController extends BaseController implements Searc
public void onClick(View v) { public void onClick(View v) {
Data.Builder data = new Data.Builder(); Data.Builder data = new Data.Builder();
data.putLong(BundleKeys.INSTANCE.getKEY_INTERNAL_USER_ID(), data.putLong(BundleKeys.INSTANCE.getKEY_INTERNAL_USER_ID(),
conversationMenuBundle.getLong(BundleKeys.INSTANCE.getKEY_INTERNAL_USER_ID())); conversationMenuBundle.getLong(BundleKeys.INSTANCE.getKEY_INTERNAL_USER_ID()));
data.putString(BundleKeys.INSTANCE.getKEY_ROOM_TOKEN(), conversation.getToken()); data.putString(BundleKeys.INSTANCE.getKEY_ROOM_TOKEN(), conversation.getToken());
conversationMenuBundle = null; conversationMenuBundle = null;
deleteConversation(data.build()); deleteConversation(data.build());
@ -821,6 +819,49 @@ public class ConversationsListController extends BaseController implements Searc
} }
} }
private void showUnauthorizedDialog() {
if (getActivity() != null) {
new LovelyStandardDialog(getActivity(), LovelyStandardDialog.ButtonLayout.HORIZONTAL)
.setTopColorRes(R.color.nc_darkRed)
.setIcon(DisplayUtils.getTintedDrawable(context.getResources(),
R.drawable.ic_delete_black_24dp, R.color.bg_default))
.setPositiveButtonColor(context.getResources().getColor(R.color.nc_darkRed))
.setTitle(R.string.nc_dialog_invalid_password)
.setMessage(R.string.nc_dialog_reauth_or_delete)
.setPositiveButton(R.string.nc_delete, new View.OnClickListener() {
@Override
public void onClick(View v) {
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) {
getRouter().setRoot(RouterTransaction.with(
new ServerSelectionController())
.pushChangeHandler(new VerticalChangeHandler())
.popChangeHandler(new VerticalChangeHandler()));
}
}
})
.setNegativeButton(R.string.nc_settings_reauthorize, new View.OnClickListener() {
@Override
public void onClick(View v) {
getRouter().pushController(RouterTransaction.with(
new WebViewLoginController(currentUser.getBaseUrl(), true))
.pushChangeHandler(new VerticalChangeHandler())
.popChangeHandler(new VerticalChangeHandler()));
}
})
.setInstanceStateHandler(ID_DELETE_CONVERSATION_DIALOG, saveStateHandler)
.show();
}
}
private void deleteConversation(Data data) { private void deleteConversation(Data data) {
OneTimeWorkRequest deleteConversationWorker = OneTimeWorkRequest deleteConversationWorker =
new OneTimeWorkRequest.Builder(DeleteConversationWorker.class).setInputData(data).build(); new OneTimeWorkRequest.Builder(DeleteConversationWorker.class).setInputData(data).build();

View File

@ -35,6 +35,7 @@ import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.webkit.*; import android.webkit.*;
import android.widget.ProgressBar; import android.widget.ProgressBar;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.res.ResourcesCompat; import androidx.core.content.res.ResourcesCompat;
@ -42,6 +43,7 @@ import androidx.work.OneTimeWorkRequest;
import androidx.work.WorkManager; import androidx.work.WorkManager;
import autodagger.AutoInjector; import autodagger.AutoInjector;
import butterknife.BindView; import butterknife.BindView;
import com.bluelinelabs.conductor.RouterTransaction; import com.bluelinelabs.conductor.RouterTransaction;
import com.bluelinelabs.conductor.changehandler.HorizontalChangeHandler; import com.bluelinelabs.conductor.changehandler.HorizontalChangeHandler;
import com.nextcloud.talk.R; import com.nextcloud.talk.R;
@ -64,9 +66,11 @@ import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers; import io.reactivex.schedulers.Schedulers;
import io.requery.Persistable; import io.requery.Persistable;
import io.requery.reactivex.ReactiveEntityStore; import io.requery.reactivex.ReactiveEntityStore;
import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.EventBus;
import javax.inject.Inject; import javax.inject.Inject;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.net.CookieManager; import java.net.CookieManager;
import java.net.URLDecoder; import java.net.URLDecoder;
@ -233,9 +237,9 @@ public class WebViewLoginController extends BaseController {
webView.loadUrl("javascript:var justStore = document.getElementById('user').value = '" + username + "';"); webView.loadUrl("javascript:var justStore = document.getElementById('user').value = '" + username + "';");
} else { } else {
webView.loadUrl("javascript: {" + webView.loadUrl("javascript: {" +
"document.getElementById('user').value = '" + username + "';" + "document.getElementById('user').value = '" + username + "';" +
"document.getElementById('password').value = '" + password + "';" + "document.getElementById('password').value = '" + password + "';" +
"document.getElementById('submit').click(); };"); "document.getElementById('submit').click(); };");
} }
} }
} }
@ -406,6 +410,9 @@ public class WebViewLoginController extends BaseController {
} }
} else { } else {
if (finalMessageType != null) { if (finalMessageType != null) {
// FIXME when the user registers a new account that was setup before (aka
// ApplicationWideMessageHolder.MessageType.ACCOUNT_UPDATED_NOT_ADDED)
// The token is not updated in the database and therefor the account not visible/usable
ApplicationWideMessageHolder.getInstance().setMessageType(finalMessageType); ApplicationWideMessageHolder.getInstance().setMessageType(finalMessageType);
} }
getRouter().popToRoot(); getRouter().popToRoot();

View File

@ -409,4 +409,6 @@
<string name="failed_to_save">Failed to save %1$s</string> <string name="failed_to_save">Failed to save %1$s</string>
<string name="selected_list_item">selected</string> <string name="selected_list_item">selected</string>
<string name="filename_progress">%1$s (%2$d)</string> <string name="filename_progress">%1$s (%2$d)</string>
<string name="nc_dialog_invalid_password">Invalid password</string>
<string name="nc_dialog_reauth_or_delete">Do you want to reauthorize or delete this account?</string>
</resources> </resources>