diff options
author | Marcel Hibbe <dev@mhibbe.de> | 2022-04-20 21:57:58 +0300 |
---|---|---|
committer | Marcel Hibbe <dev@mhibbe.de> | 2022-04-20 21:58:11 +0300 |
commit | 93e9b362b647a4d1055b09921ae1040ea488d37d (patch) | |
tree | fc33a9c34742c1336fa59e66a0ee8e1375752cdf /app/src/main | |
parent | 9d1233aad2e7548cf6986678bbcd378ac503a9bd (diff) |
avoid crash when clicking on header in conversation search mode
fix #1893
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
Diffstat (limited to 'app/src/main')
-rw-r--r-- | app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.java | 443 |
1 files changed, 224 insertions, 219 deletions
diff --git a/app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.java b/app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.java index b2ea7a177..a5de7dd67 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.java @@ -138,7 +138,7 @@ import retrofit2.HttpException; @AutoInjector(NextcloudTalkApplication.class) public class ConversationsListController extends BaseController implements SearchView.OnQueryTextListener, - FlexibleAdapter.OnItemClickListener, FlexibleAdapter.OnItemLongClickListener, ConversationMenuInterface { + FlexibleAdapter.OnItemClickListener, FlexibleAdapter.OnItemLongClickListener, ConversationMenuInterface { public static final String TAG = "ConvListController"; public static final int ID_DELETE_CONVERSATION_DIALOG = 0; @@ -380,8 +380,8 @@ public class ConversationsListController extends BaseController implements Searc showSearchView(activity, searchView, searchItem); if (getResources() != null) { DisplayUtils.applyColorToStatusBar( - activity, - ResourcesCompat.getColor(getResources(), R.color.appbar, null) + activity, + ResourcesCompat.getColor(getResources(), R.color.appbar, null) ); } }); @@ -392,8 +392,8 @@ public class ConversationsListController extends BaseController implements Searc searchView.onActionViewCollapsed(); if (activity != null && getResources() != null) { DisplayUtils.applyColorToStatusBar( - activity, - ResourcesCompat.getColor(getResources(), R.color.bg_default, null) + activity, + ResourcesCompat.getColor(getResources(), R.color.bg_default, null) ); } } else { @@ -423,20 +423,20 @@ public class ConversationsListController extends BaseController implements Searc MainActivity activity = (MainActivity) getActivity(); if (activity != null) { activity.binding.appBar.setStateListAnimator(AnimatorInflater.loadStateListAnimator( - activity.binding.appBar.getContext(), - R.animator.appbar_elevation_off) + activity.binding.appBar.getContext(), + R.animator.appbar_elevation_off) ); activity.binding.toolbar.setVisibility(View.GONE); activity.binding.searchToolbar.setVisibility(View.VISIBLE); if (getResources() != null) { DisplayUtils.applyColorToStatusBar( - activity, - ResourcesCompat.getColor(getResources(), R.color.bg_default, null) + activity, + ResourcesCompat.getColor(getResources(), R.color.bg_default, null) ); } } SmoothScrollLinearLayoutManager layoutManager = - (SmoothScrollLinearLayoutManager) recyclerView.getLayoutManager(); + (SmoothScrollLinearLayoutManager) recyclerView.getLayoutManager(); if (layoutManager != null) { layoutManager.scrollToPositionWithOffset(0, 0); } @@ -449,7 +449,7 @@ public class ConversationsListController extends BaseController implements Searc private boolean hasActivityActionSendIntent() { if (getActivity() != null) { return Intent.ACTION_SEND.equals(getActivity().getIntent().getAction()) - || Intent.ACTION_SEND_MULTIPLE.equals(getActivity().getIntent().getAction()); + || Intent.ACTION_SEND_MULTIPLE.equals(getActivity().getIntent().getAction()); } return false; } @@ -463,8 +463,8 @@ public class ConversationsListController extends BaseController implements Searc public void showSearchView(MainActivity activity, SearchView searchView, MenuItem searchItem) { activity.binding.appBar.setStateListAnimator(AnimatorInflater.loadStateListAnimator( - activity.binding.appBar.getContext(), - R.animator.appbar_elevation_on)); + activity.binding.appBar.getContext(), + R.animator.appbar_elevation_on)); activity.binding.toolbar.setVisibility(View.VISIBLE); activity.binding.searchToolbar.setVisibility(View.GONE); searchItem.expandActionView(); @@ -516,103 +516,103 @@ public class ConversationsListController extends BaseController implements Searc Log.d(TAG, "fetchData - getRooms - calling: " + startNanoTime); roomsQueryDisposable = ncApi.getRooms(credentials, ApiUtils.getUrlForRooms(apiVersion, currentUser.getBaseUrl())) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(roomsOverall -> { - Log.d(TAG, "fetchData - getRooms - got response: " + startNanoTime); - - // This is invoked asynchronously, when server returns a response the view might have been - // unbound in the meantime. Check if the view is still there. - // FIXME - does it make sense to update internal data structures even when view has been unbound? - if (getView() == null) { - Log.d(TAG, "fetchData - getRooms - view is not bound: " + startNanoTime); - return; - } + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(roomsOverall -> { + Log.d(TAG, "fetchData - getRooms - got response: " + startNanoTime); + + // This is invoked asynchronously, when server returns a response the view might have been + // unbound in the meantime. Check if the view is still there. + // FIXME - does it make sense to update internal data structures even when view has been unbound? + if (getView() == null) { + Log.d(TAG, "fetchData - getRooms - view is not bound: " + startNanoTime); + return; + } - if (adapterWasNull) { - adapterWasNull = false; - loadingContent.setVisibility(View.GONE); + if (adapterWasNull) { + adapterWasNull = false; + loadingContent.setVisibility(View.GONE); + } + + if (roomsOverall.getOcs().getData().size() > 0) { + if (emptyLayoutView.getVisibility() != View.GONE) { + emptyLayoutView.setVisibility(View.GONE); } - if (roomsOverall.getOcs().getData().size() > 0) { - if (emptyLayoutView.getVisibility() != View.GONE) { - emptyLayoutView.setVisibility(View.GONE); - } + if (swipeRefreshLayout.getVisibility() != View.VISIBLE) { + swipeRefreshLayout.setVisibility(View.VISIBLE); + } + } else { + if (emptyLayoutView.getVisibility() != View.VISIBLE) { + emptyLayoutView.setVisibility(View.VISIBLE); + } - if (swipeRefreshLayout.getVisibility() != View.VISIBLE) { - swipeRefreshLayout.setVisibility(View.VISIBLE); - } - } else { - if (emptyLayoutView.getVisibility() != View.VISIBLE) { - emptyLayoutView.setVisibility(View.VISIBLE); - } + if (swipeRefreshLayout.getVisibility() != View.GONE) { + swipeRefreshLayout.setVisibility(View.GONE); + } + } - if (swipeRefreshLayout.getVisibility() != View.GONE) { - swipeRefreshLayout.setVisibility(View.GONE); - } + for (Conversation conversation : roomsOverall.getOcs().getData()) { + if (bundle.containsKey(BundleKeys.INSTANCE.getKEY_FORWARD_HIDE_SOURCE_ROOM()) && conversation.roomId.equals(bundle.getString( + BundleKeys.INSTANCE.getKEY_FORWARD_HIDE_SOURCE_ROOM()))) { + continue; } - for (Conversation conversation : roomsOverall.getOcs().getData()) { - if (bundle.containsKey(BundleKeys.INSTANCE.getKEY_FORWARD_HIDE_SOURCE_ROOM()) && conversation.roomId.equals(bundle.getString( - BundleKeys.INSTANCE.getKEY_FORWARD_HIDE_SOURCE_ROOM()))) { - continue; - } + String headerTitle; - String headerTitle; + headerTitle = getResources().getString(R.string.conversations); - headerTitle = getResources().getString(R.string.conversations); + GenericTextHeaderItem genericTextHeaderItem; + if (!callHeaderItems.containsKey(headerTitle)) { + genericTextHeaderItem = new GenericTextHeaderItem(headerTitle); + callHeaderItems.put(headerTitle, genericTextHeaderItem); + } - GenericTextHeaderItem genericTextHeaderItem; - if (!callHeaderItems.containsKey(headerTitle)) { - genericTextHeaderItem = new GenericTextHeaderItem(headerTitle); - callHeaderItems.put(headerTitle, genericTextHeaderItem); - } + if (getActivity() != null) { + ConversationItem conversationItem = new ConversationItem( + conversation, + currentUser, + getActivity(), + userStatuses.get(conversation.name)); + conversationItems.add(conversationItem); - if (getActivity() != null) { - ConversationItem conversationItem = new ConversationItem( - conversation, - currentUser, - getActivity(), - userStatuses.get(conversation.name)); - conversationItems.add(conversationItem); - - ConversationItem conversationItemWithHeader = new ConversationItem( - conversation, - currentUser, - getActivity(), - callHeaderItems.get(headerTitle), - userStatuses.get(conversation.name)); - conversationItemsWithHeader.add(conversationItemWithHeader); - } + ConversationItem conversationItemWithHeader = new ConversationItem( + conversation, + currentUser, + getActivity(), + callHeaderItems.get(headerTitle), + userStatuses.get(conversation.name)); + conversationItemsWithHeader.add(conversationItemWithHeader); } + } - sortConversations(conversationItems); - sortConversations(conversationItemsWithHeader); + sortConversations(conversationItems); + sortConversations(conversationItemsWithHeader); - adapter.updateDataSet(conversationItems, false); + adapter.updateDataSet(conversationItems, false); - new Handler().postDelayed(this::checkToShowUnreadBubble, UNREAD_BUBBLE_DELAY); + new Handler().postDelayed(this::checkToShowUnreadBubble, UNREAD_BUBBLE_DELAY); - fetchOpenConversations(apiVersion); + fetchOpenConversations(apiVersion); - if (swipeRefreshLayout != null) { - swipeRefreshLayout.setRefreshing(false); - } + if (swipeRefreshLayout != null) { + swipeRefreshLayout.setRefreshing(false); + } - }, throwable -> { - handleHttpExceptions(throwable); - if (swipeRefreshLayout != null) { - swipeRefreshLayout.setRefreshing(false); - } - dispose(roomsQueryDisposable); - }, () -> { - dispose(roomsQueryDisposable); - if (swipeRefreshLayout != null) { - swipeRefreshLayout.setRefreshing(false); - } + }, throwable -> { + handleHttpExceptions(throwable); + if (swipeRefreshLayout != null) { + swipeRefreshLayout.setRefreshing(false); + } + dispose(roomsQueryDisposable); + }, () -> { + dispose(roomsQueryDisposable); + if (swipeRefreshLayout != null) { + swipeRefreshLayout.setRefreshing(false); + } - isRefreshing = false; - }); + isRefreshing = false; + }); } private void sortConversations(List<AbstractFlexibleItem> conversationItems) { @@ -620,13 +620,13 @@ public class ConversationsListController extends BaseController implements Searc Conversation conversation1 = ((ConversationItem) o1).getModel(); Conversation conversation2 = ((ConversationItem) o2).getModel(); return new CompareToBuilder() - .append(conversation2.isFavorite(), conversation1.isFavorite()) - .append(conversation2.getLastActivity(), conversation1.getLastActivity()) - .toComparison(); + .append(conversation2.isFavorite(), conversation1.isFavorite()) + .append(conversation2.getLastActivity(), conversation1.getLastActivity()) + .toComparison(); }); } - private void fetchOpenConversations(int apiVersion){ + private void fetchOpenConversations(int apiVersion) { searchableConversationItems.clear(); searchableConversationItems.addAll(conversationItemsWithHeader); @@ -737,8 +737,8 @@ public class ConversationsListController extends BaseController implements Searc "ChooseAccountDialogFragment"); } else { getRouter().pushController((RouterTransaction.with(new SettingsController()) - .pushChangeHandler(new HorizontalChangeHandler()) - .popChangeHandler(new HorizontalChangeHandler()))); + .pushChangeHandler(new HorizontalChangeHandler()) + .popChangeHandler(new HorizontalChangeHandler()))); } }); } @@ -781,8 +781,8 @@ public class ConversationsListController extends BaseController implements Searc Bundle bundle = new Bundle(); bundle.putBoolean(BundleKeys.INSTANCE.getKEY_NEW_CONVERSATION(), true); getRouter().pushController((RouterTransaction.with(new ContactsController(bundle)) - .pushChangeHandler(new HorizontalChangeHandler()) - .popChangeHandler(new HorizontalChangeHandler()))); + .pushChangeHandler(new HorizontalChangeHandler()) + .popChangeHandler(new HorizontalChangeHandler()))); } private void dispose(@Nullable Disposable disposable) { @@ -790,7 +790,7 @@ public class ConversationsListController extends BaseController implements Searc disposable.dispose(); disposable = null; } else if (disposable == null && - roomsQueryDisposable != null && !roomsQueryDisposable.isDisposed()) { + roomsQueryDisposable != null && !roomsQueryDisposable.isDisposed()) { roomsQueryDisposable.dispose(); roomsQueryDisposable = null; } else if (disposable == null && @@ -857,17 +857,22 @@ public class ConversationsListController extends BaseController implements Searc @Override public boolean onItemClick(View view, int position) { - selectedConversation = ((ConversationItem) Objects.requireNonNull(adapter.getItem(position))).getModel(); - if (selectedConversation != null && getActivity() != null) { - if (showShareToScreen) { - handleSharedData(); - showShareToScreen = false; - } else if (forwardMessage) { - openConversation(bundle.getString(BundleKeys.INSTANCE.getKEY_FORWARD_MSG_TEXT())); - forwardMessage = false; - } else { - openConversation(); + try { + selectedConversation = ((ConversationItem) Objects.requireNonNull(adapter.getItem(position))).getModel(); + if (selectedConversation != null && getActivity() != null) { + if (showShareToScreen) { + handleSharedData(); + showShareToScreen = false; + } else if (forwardMessage) { + openConversation(bundle.getString(BundleKeys.INSTANCE.getKEY_FORWARD_MSG_TEXT())); + forwardMessage = false; + } else { + openConversation(); + } } + } catch (ClassCastException e) { + Log.w(TAG, "failed to cast clicked item to ConversationItem. Most probably a heading was clicked. This is" + + " just ignored.", e); } return true; } @@ -895,32 +900,32 @@ public class ConversationsListController extends BaseController implements Searc String confirmationQuestion; if (filesToShare.size() == 1) { confirmationQuestion = - String.format(getResources().getString(R.string.nc_upload_confirm_send_single), - selectedConversation.getDisplayName()); + String.format(getResources().getString(R.string.nc_upload_confirm_send_single), + selectedConversation.getDisplayName()); } else { confirmationQuestion = - String.format(getResources().getString(R.string.nc_upload_confirm_send_multiple), - selectedConversation.getDisplayName()); + String.format(getResources().getString(R.string.nc_upload_confirm_send_multiple), + selectedConversation.getDisplayName()); } new LovelyStandardDialog(getActivity()) - .setPositiveButtonColorRes(R.color.nc_darkGreen) - .setTitle(confirmationQuestion) - .setMessage(fileNamesWithLineBreaks.toString()) - .setPositiveButton(R.string.nc_yes, new View.OnClickListener() { - @Override - public void onClick(View v) { - upload(); - openConversation(); - } - }) - .setNegativeButton(R.string.nc_no, new View.OnClickListener() { - @Override - public void onClick(View v) { - Log.d(TAG, "sharing files aborted"); - } - }) - .show(); + .setPositiveButtonColorRes(R.color.nc_darkGreen) + .setTitle(confirmationQuestion) + .setMessage(fileNamesWithLineBreaks.toString()) + .setPositiveButton(R.string.nc_yes, new View.OnClickListener() { + @Override + public void onClick(View v) { + upload(); + openConversation(); + } + }) + .setNegativeButton(R.string.nc_no, new View.OnClickListener() { + @Override + public void onClick(View v) { + Log.d(TAG, "sharing files aborted"); + } + }) + .show(); } else { UploadAndShareFilesWorker.Companion.requestStoragePermission(ConversationsListController.this); } @@ -950,7 +955,7 @@ public class ConversationsListController extends BaseController implements Searc if (getActivity() != null && getActivity().getIntent() != null) { Intent intent = getActivity().getIntent(); if (Intent.ACTION_SEND.equals(intent.getAction()) - || Intent.ACTION_SEND_MULTIPLE.equals(intent.getAction())) { + || Intent.ACTION_SEND_MULTIPLE.equals(intent.getAction())) { try { String mimeType = intent.getType(); if ("text/plain".equals(mimeType) && (intent.getStringExtra(Intent.EXTRA_TEXT) != null)) { @@ -1003,20 +1008,20 @@ public class ConversationsListController extends BaseController implements Searc filesToShareArray = filesToShare.toArray(filesToShareArray); Data data = new Data.Builder() - .putStringArray(UploadAndShareFilesWorker.DEVICE_SOURCEFILES, filesToShareArray) - .putString( - UploadAndShareFilesWorker.NC_TARGETPATH, - CapabilitiesUtil.getAttachmentFolder(currentUser)) - .putString(UploadAndShareFilesWorker.ROOM_TOKEN, selectedConversation.getToken()) - .build(); + .putStringArray(UploadAndShareFilesWorker.DEVICE_SOURCEFILES, filesToShareArray) + .putString( + UploadAndShareFilesWorker.NC_TARGETPATH, + CapabilitiesUtil.getAttachmentFolder(currentUser)) + .putString(UploadAndShareFilesWorker.ROOM_TOKEN, selectedConversation.getToken()) + .build(); OneTimeWorkRequest uploadWorker = new OneTimeWorkRequest.Builder(UploadAndShareFilesWorker.class) - .setInputData(data) - .build(); + .setInputData(data) + .build(); WorkManager.getInstance().enqueue(uploadWorker); Toast.makeText( - context, context.getResources().getString(R.string.nc_upload_in_progess), - Toast.LENGTH_LONG + context, context.getResources().getString(R.string.nc_upload_in_progess), + Toast.LENGTH_LONG ).show(); } catch (IllegalArgumentException e) { @@ -1028,8 +1033,8 @@ public class ConversationsListController extends BaseController implements Searc @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { if (requestCode == UploadAndShareFilesWorker.REQUEST_PERMISSION && - grantResults.length > 0 && - grantResults[0] == PackageManager.PERMISSION_GRANTED) { + grantResults.length > 0 && + grantResults[0] == PackageManager.PERMISSION_GRANTED) { Log.d(TAG, "upload starting after permissions were granted"); showSendFilesConfirmDialog(); } else { @@ -1083,95 +1088,52 @@ public class ConversationsListController extends BaseController implements Searc if (getActivity() != null && conversationMenuBundle != null && currentUser != null && conversationMenuBundle.getLong(BundleKeys.INSTANCE.getKEY_INTERNAL_USER_ID()) == currentUser.getId()) { Conversation conversation = - Parcels.unwrap(conversationMenuBundle.getParcelable(BundleKeys.INSTANCE.getKEY_ROOM())); + Parcels.unwrap(conversationMenuBundle.getParcelable(BundleKeys.INSTANCE.getKEY_ROOM())); if (conversation != 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_delete_call) - .setMessage(R.string.nc_delete_conversation_more) - .setPositiveButton(R.string.nc_delete, new View.OnClickListener() { - @Override - 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())); - data.putString(BundleKeys.INSTANCE.getKEY_ROOM_TOKEN(), conversation.getToken()); - conversationMenuBundle = null; - deleteConversation(data.build()); - } - }) - .setNegativeButton(R.string.nc_cancel, new View.OnClickListener() { - @Override - public void onClick(View v) { - conversationMenuBundle = null; - } - }) - .setInstanceStateHandler(ID_DELETE_CONVERSATION_DIALOG, saveStateHandler) - .setSavedInstanceState(savedInstanceState) - .show(); - } - } - } - - 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)) - .setCancelable(false) - .setTitle(R.string.nc_dialog_invalid_password) - .setMessage(R.string.nc_dialog_reauth_or_delete) + .setTitle(R.string.nc_delete_call) + .setMessage(R.string.nc_delete_conversation_more) .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())); - } + Data.Builder data = new Data.Builder(); + data.putLong(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()); } }) - .setNegativeButton(R.string.nc_settings_reauthorize, new View.OnClickListener() { + .setNegativeButton(R.string.nc_cancel, new View.OnClickListener() { @Override public void onClick(View v) { - getRouter().pushController(RouterTransaction.with( - new WebViewLoginController(currentUser.getBaseUrl(), true)) - .pushChangeHandler(new VerticalChangeHandler()) - .popChangeHandler(new VerticalChangeHandler())); + conversationMenuBundle = null; } }) .setInstanceStateHandler(ID_DELETE_CONVERSATION_DIALOG, saveStateHandler) + .setSavedInstanceState(savedInstanceState) .show(); + } } } - private void showServerEOLDialog() { - new LovelyStandardDialog(getActivity(), LovelyStandardDialog.ButtonLayout.HORIZONTAL) + 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_warning_white, - R.color.bg_default)) + R.drawable.ic_delete_black_24dp, R.color.bg_default)) .setPositiveButtonColor(context.getResources().getColor(R.color.nc_darkRed)) .setCancelable(false) - .setTitle(R.string.nc_settings_server_eol_title) - .setMessage(R.string.nc_settings_server_eol) - .setPositiveButton(R.string.nc_settings_remove_account, new View.OnClickListener() { + .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()); @@ -1184,30 +1146,73 @@ public class ConversationsListController extends BaseController implements Searc onAttach(getView()); } else if (!otherUserExists) { getRouter().setRoot(RouterTransaction.with( - new ServerSelectionController()) - .pushChangeHandler(new VerticalChangeHandler()) - .popChangeHandler(new VerticalChangeHandler())); + new ServerSelectionController()) + .pushChangeHandler(new VerticalChangeHandler()) + .popChangeHandler(new VerticalChangeHandler())); } } }) - .setNegativeButton(R.string.nc_cancel, new View.OnClickListener() { + .setNegativeButton(R.string.nc_settings_reauthorize, new View.OnClickListener() { @Override public void onClick(View v) { - if (userUtils.hasMultipleUsers()) { - getRouter().pushController(RouterTransaction.with(new SwitchAccountController())); - } else { - getActivity().finishAffinity(); - getActivity().finish(); - } + getRouter().pushController(RouterTransaction.with( + new WebViewLoginController(currentUser.getBaseUrl(), true)) + .pushChangeHandler(new VerticalChangeHandler()) + .popChangeHandler(new VerticalChangeHandler())); } }) .setInstanceStateHandler(ID_DELETE_CONVERSATION_DIALOG, saveStateHandler) .show(); + } + } + + private void showServerEOLDialog() { + new LovelyStandardDialog(getActivity(), LovelyStandardDialog.ButtonLayout.HORIZONTAL) + .setTopColorRes(R.color.nc_darkRed) + .setIcon(DisplayUtils.getTintedDrawable(context.getResources(), + R.drawable.ic_warning_white, + R.color.bg_default)) + .setPositiveButtonColor(context.getResources().getColor(R.color.nc_darkRed)) + .setCancelable(false) + .setTitle(R.string.nc_settings_server_eol_title) + .setMessage(R.string.nc_settings_server_eol) + .setPositiveButton(R.string.nc_settings_remove_account, 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_cancel, new View.OnClickListener() { + @Override + public void onClick(View v) { + if (userUtils.hasMultipleUsers()) { + getRouter().pushController(RouterTransaction.with(new SwitchAccountController())); + } else { + getActivity().finishAffinity(); + getActivity().finish(); + } + } + }) + .setInstanceStateHandler(ID_DELETE_CONVERSATION_DIALOG, saveStateHandler) + .show(); } private void deleteConversation(Data data) { OneTimeWorkRequest deleteConversationWorker = - new OneTimeWorkRequest.Builder(DeleteConversationWorker.class).setInputData(data).build(); + new OneTimeWorkRequest.Builder(DeleteConversationWorker.class).setInputData(data).build(); WorkManager.getInstance().enqueue(deleteConversationWorker); } |