From 6e72ef748619c04465fa1786ea0e4bb053397a79 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Wed, 18 Dec 2024 10:51:36 +0100 Subject: [PATCH] ensure bookmarks are set up after restoring by uuid --- .../services/XmppConnectionService.java | 21 ++- .../ui/ChannelDiscoveryActivity.java | 126 ++++++++++-------- 2 files changed, 87 insertions(+), 60 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java index 832c6c8d6ce875386d57ecb68be5a67f4aa2d699..81e6b361da6e50a7f938174117b5033b3c795079 100644 --- a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java +++ b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java @@ -2290,6 +2290,22 @@ public class XmppConnectionService extends Service { processModifiedBookmark(bookmark, true); } + public void ensureBookmarkIsAutoJoin(final Conversation conversation) { + final var account = conversation.getAccount(); + final var existingBookmark = conversation.getBookmark(); + if (existingBookmark == null) { + final var bookmark = new Bookmark(account, conversation.getJid().asBareJid()); + bookmark.setAutojoin(true); + createBookmark(account, bookmark); + } else { + if (existingBookmark.autojoin()) { + return; + } + existingBookmark.setAutojoin(true); + createBookmark(account, existingBookmark); + } + } + public void createBookmark(final Account account, final Bookmark bookmark) { account.putBookmark(bookmark); final XmppConnection connection = account.getXmppConnection(); @@ -2302,7 +2318,6 @@ public class XmppConnectionService extends Service { Config.LOGTAG, account.getJid().asBareJid() + ": pushing bookmark via Bookmarks 2"); final Element item = mIqGenerator.publishBookmarkItem(bookmark); - Log.d(Config.LOGTAG, "publishing: " + item.toString()); pushNodeAndEnforcePublishOptions( account, Namespace.BOOKMARKS2, @@ -2874,7 +2889,9 @@ public class XmppConnectionService extends Service { existing.getMode() == Conversational.MODE_MULTI, null)); this.conversations.add(existing); - // TODO push bookmark + if (existing.getMode() == Conversational.MODE_MULTI) { + ensureBookmarkIsAutoJoin(existing); + } updateConversationUi(); return existing; } diff --git a/src/main/java/eu/siacs/conversations/ui/ChannelDiscoveryActivity.java b/src/main/java/eu/siacs/conversations/ui/ChannelDiscoveryActivity.java index 92240d4f102160e02d03954acb8cb85ff1bb5ac1..420494d4d3c745047bc0569ca5b2440509083dc5 100644 --- a/src/main/java/eu/siacs/conversations/ui/ChannelDiscoveryActivity.java +++ b/src/main/java/eu/siacs/conversations/ui/ChannelDiscoveryActivity.java @@ -1,6 +1,5 @@ package eu.siacs.conversations.ui; -import android.app.AlertDialog; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; @@ -17,24 +16,16 @@ import android.view.inputmethod.InputMethodManager; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; - import androidx.annotation.NonNull; import androidx.core.content.ContextCompat; import androidx.databinding.DataBindingUtil; - import com.google.android.material.color.MaterialColors; import com.google.android.material.dialog.MaterialAlertDialogBuilder; import com.google.common.base.Strings; - -import java.util.Collections; -import java.util.List; -import java.util.concurrent.atomic.AtomicReference; - import eu.siacs.conversations.Config; import eu.siacs.conversations.R; import eu.siacs.conversations.databinding.ActivityChannelDiscoveryBinding; import eu.siacs.conversations.entities.Account; -import eu.siacs.conversations.entities.Bookmark; import eu.siacs.conversations.entities.Conversation; import eu.siacs.conversations.entities.Room; import eu.siacs.conversations.services.ChannelDiscoveryService; @@ -44,8 +35,15 @@ import eu.siacs.conversations.ui.util.PendingItem; import eu.siacs.conversations.ui.util.SoftKeyboardUtils; import eu.siacs.conversations.utils.AccountUtils; import eu.siacs.conversations.xmpp.Jid; +import java.util.Collections; +import java.util.List; +import java.util.concurrent.atomic.AtomicReference; -public class ChannelDiscoveryActivity extends XmppActivity implements MenuItem.OnActionExpandListener, TextView.OnEditorActionListener, ChannelDiscoveryService.OnChannelSearchResultsFound, ChannelSearchResultAdapter.OnChannelSearchResultSelected { +public class ChannelDiscoveryActivity extends XmppActivity + implements MenuItem.OnActionExpandListener, + TextView.OnEditorActionListener, + ChannelDiscoveryService.OnChannelSearchResultsFound, + ChannelSearchResultAdapter.OnChannelSearchResultSelected { private static final String CHANNEL_DISCOVERY_OPT_IN = "channel_discovery_opt_in"; @@ -60,9 +58,7 @@ public class ChannelDiscoveryActivity extends XmppActivity implements MenuItem.O private boolean optedIn = false; @Override - protected void refreshUiReal() { - - } + protected void refreshUiReal() {} @Override protected void onBackendConnected() { @@ -89,21 +85,25 @@ public class ChannelDiscoveryActivity extends XmppActivity implements MenuItem.O this.adapter.setOnChannelSearchResultSelectedListener(this); this.optedIn = getPreferences().getBoolean(CHANNEL_DISCOVERY_OPT_IN, false); - final String search = savedInstanceState == null ? null : savedInstanceState.getString("search"); + final String search = + savedInstanceState == null ? null : savedInstanceState.getString("search"); if (search != null) { mInitialSearchValue.push(search); } } private static ChannelDiscoveryService.Method getMethod(final Context c) { - if ( Strings.isNullOrEmpty(Config.CHANNEL_DISCOVERY)) { + if (Strings.isNullOrEmpty(Config.CHANNEL_DISCOVERY)) { return ChannelDiscoveryService.Method.LOCAL_SERVER; } if (QuickConversationsService.isQuicksy()) { return ChannelDiscoveryService.Method.JABBER_NETWORK; } final SharedPreferences p = PreferenceManager.getDefaultSharedPreferences(c); - final String m = p.getString("channel_discovery_method", c.getString(R.string.default_channel_discovery)); + final String m = + p.getString( + "channel_discovery_method", + c.getString(R.string.default_channel_discovery)); try { return ChannelDiscoveryService.Method.valueOf(m); } catch (IllegalArgumentException e) { @@ -124,7 +124,8 @@ public class ChannelDiscoveryActivity extends XmppActivity implements MenuItem.O mMenuSearchView.expandActionView(); mSearchEditText.append(initialSearchValue); mSearchEditText.requestFocus(); - if ((optedIn || method == ChannelDiscoveryService.Method.LOCAL_SERVER) && xmppConnectionService != null) { + if ((optedIn || method == ChannelDiscoveryService.Method.LOCAL_SERVER) + && xmppConnectionService != null) { xmppConnectionService.discoverChannels(initialSearchValue, this.method, this); } } @@ -135,18 +136,22 @@ public class ChannelDiscoveryActivity extends XmppActivity implements MenuItem.O @Override public boolean onMenuItemActionExpand(@NonNull MenuItem item) { - mSearchEditText.post(() -> { - mSearchEditText.requestFocus(); - final InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); - imm.showSoftInput(mSearchEditText, InputMethodManager.SHOW_IMPLICIT); - }); + mSearchEditText.post( + () -> { + mSearchEditText.requestFocus(); + final InputMethodManager imm = + (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + imm.showSoftInput(mSearchEditText, InputMethodManager.SHOW_IMPLICIT); + }); return true; } @Override public boolean onMenuItemActionCollapse(@NonNull MenuItem item) { - final InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); - imm.hideSoftInputFromWindow(mSearchEditText.getWindowToken(), InputMethodManager.HIDE_IMPLICIT_ONLY); + final InputMethodManager imm = + (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + imm.hideSoftInputFromWindow( + mSearchEditText.getWindowToken(), InputMethodManager.HIDE_IMPLICIT_ONLY); mSearchEditText.setText(""); toggleLoadingScreen(); if (optedIn || method == ChannelDiscoveryService.Method.LOCAL_SERVER) { @@ -158,7 +163,9 @@ public class ChannelDiscoveryActivity extends XmppActivity implements MenuItem.O private void toggleLoadingScreen() { adapter.submitList(Collections.emptyList()); binding.progressBar.setVisibility(View.VISIBLE); - binding.list.setBackgroundColor(MaterialColors.getColor(binding.list, com.google.android.material.R.attr.colorSurface)); + binding.list.setBackgroundColor( + MaterialColors.getColor( + binding.list, com.google.android.material.R.attr.colorSurface)); } @Override @@ -173,13 +180,14 @@ public class ChannelDiscoveryActivity extends XmppActivity implements MenuItem.O builder.setPositiveButton(R.string.confirm, (dialog, which) -> optIn()); builder.setOnCancelListener(dialog -> finish()); final androidx.appcompat.app.AlertDialog dialog = builder.create(); - dialog.setOnShowListener(d -> { - final TextView textView = dialog.findViewById(android.R.id.message); - if (textView == null) { - return; - } - textView.setMovementMethod(LinkMovementMethod.getInstance()); - }); + dialog.setOnShowListener( + d -> { + final TextView textView = dialog.findViewById(android.R.id.message); + if (textView == null) { + return; + } + textView.setMovementMethod(LinkMovementMethod.getInstance()); + }); dialog.setCanceledOnTouchOutside(false); dialog.show(); holdLoading(); @@ -189,13 +197,17 @@ public class ChannelDiscoveryActivity extends XmppActivity implements MenuItem.O private void holdLoading() { adapter.submitList(Collections.emptyList()); binding.progressBar.setVisibility(View.GONE); - binding.list.setBackgroundColor(MaterialColors.getColor(binding.list, com.google.android.material.R.attr.colorSurface)); + binding.list.setBackgroundColor( + MaterialColors.getColor( + binding.list, com.google.android.material.R.attr.colorSurface)); } @Override public void onSaveInstanceState(@NonNull Bundle savedInstanceState) { if (mMenuSearchView != null && mMenuSearchView.isActionViewExpanded()) { - savedInstanceState.putString("search", mSearchEditText != null ? mSearchEditText.getText().toString() : null); + savedInstanceState.putString( + "search", + mSearchEditText != null ? mSearchEditText.getText().toString() : null); } super.onSaveInstanceState(savedInstanceState); } @@ -220,16 +232,20 @@ public class ChannelDiscoveryActivity extends XmppActivity implements MenuItem.O @Override public void onChannelSearchResultsFound(final List results) { - runOnUiThread(() -> { - adapter.submitList(results); - binding.progressBar.setVisibility(View.GONE); - if (results.isEmpty()) { - binding.list.setBackground(ContextCompat.getDrawable(this,R.drawable.background_no_results)); - } else { - binding.list.setBackgroundColor(MaterialColors.getColor(binding.list, com.google.android.material.R.attr.colorSurface)); - } - }); - + runOnUiThread( + () -> { + adapter.submitList(results); + binding.progressBar.setVisibility(View.GONE); + if (results.isEmpty()) { + binding.list.setBackground( + ContextCompat.getDrawable(this, R.drawable.background_no_results)); + } else { + binding.list.setBackgroundColor( + MaterialColors.getColor( + binding.list, + com.google.android.material.R.attr.colorSurface)); + } + }); } @Override @@ -243,12 +259,16 @@ public class ChannelDiscoveryActivity extends XmppActivity implements MenuItem.O final AtomicReference account = new AtomicReference<>(accounts.get(0)); final MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(this); builder.setTitle(R.string.choose_account); - builder.setSingleChoiceItems(accounts.toArray(new CharSequence[0]), 0, (dialog, which) -> account.set(accounts.get(which))); - builder.setPositiveButton(R.string.join, (dialog, which) -> joinChannelSearchResult(account.get(), result)); + builder.setSingleChoiceItems( + accounts.toArray(new CharSequence[0]), + 0, + (dialog, which) -> account.set(accounts.get(which))); + builder.setPositiveButton( + R.string.join, + (dialog, which) -> joinChannelSearchResult(account.get(), result)); builder.setNegativeButton(R.string.cancel, null); builder.create().show(); } - } @Override @@ -279,17 +299,7 @@ public class ChannelDiscoveryActivity extends XmppActivity implements MenuItem.O final Conversation conversation = xmppConnectionService.findOrCreateConversation( account, result.getRoom(), true, true, true); - final var existingBookmark = conversation.getBookmark(); - if (existingBookmark == null) { - final var bookmark = new Bookmark(account, conversation.getJid().asBareJid()); - bookmark.setAutojoin(true); - xmppConnectionService.createBookmark(account, bookmark); - } else { - if (!existingBookmark.autojoin()) { - existingBookmark.setAutojoin(true); - xmppConnectionService.createBookmark(account, existingBookmark); - } - } + xmppConnectionService.ensureBookmarkIsAutoJoin(conversation); switchToConversation(conversation); } }