Sfoglia il codice sorgente

Pop a dialog to log in again or delete the account

Signed-off-by: Joas Schilling <coding@schilljs.com>
Joas Schilling 4 anni fa
parent
commit
cb11c36400

+ 56 - 15
app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.java

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

+ 10 - 3
app/src/main/java/com/nextcloud/talk/controllers/WebViewLoginController.java

@@ -35,6 +35,7 @@ import android.view.View;
 import android.view.ViewGroup;
 import android.webkit.*;
 import android.widget.ProgressBar;
+
 import androidx.annotation.NonNull;
 import androidx.appcompat.app.AppCompatActivity;
 import androidx.core.content.res.ResourcesCompat;
@@ -42,6 +43,7 @@ import androidx.work.OneTimeWorkRequest;
 import androidx.work.WorkManager;
 import autodagger.AutoInjector;
 import butterknife.BindView;
+
 import com.bluelinelabs.conductor.RouterTransaction;
 import com.bluelinelabs.conductor.changehandler.HorizontalChangeHandler;
 import com.nextcloud.talk.R;
@@ -64,9 +66,11 @@ import io.reactivex.disposables.Disposable;
 import io.reactivex.schedulers.Schedulers;
 import io.requery.Persistable;
 import io.requery.reactivex.ReactiveEntityStore;
+
 import org.greenrobot.eventbus.EventBus;
 
 import javax.inject.Inject;
+
 import java.lang.reflect.Field;
 import java.net.CookieManager;
 import java.net.URLDecoder;
@@ -233,9 +237,9 @@ public class WebViewLoginController extends BaseController {
                             webView.loadUrl("javascript:var justStore = document.getElementById('user').value = '" + username + "';");
                         } else {
                             webView.loadUrl("javascript: {" +
-                                    "document.getElementById('user').value = '" + username + "';" +
-                                    "document.getElementById('password').value = '" + password + "';" +
-                                    "document.getElementById('submit').click(); };");
+                                                    "document.getElementById('user').value = '" + username + "';" +
+                                                    "document.getElementById('password').value = '" + password + "';" +
+                                                    "document.getElementById('submit').click(); };");
                         }
                     }
                 }
@@ -406,6 +410,9 @@ public class WebViewLoginController extends BaseController {
                     }
                 } else {
                     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);
                     }
                     getRouter().popToRoot();

+ 2 - 0
app/src/main/res/values/strings.xml

@@ -409,4 +409,6 @@
     <string name="failed_to_save">Failed to save %1$s</string>
     <string name="selected_list_item">selected</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>