@@ -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;
}
@@ -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<Room> 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<String> 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);
}
}