From c2a5f95da78918032a4cd71aac53d0c14f69fbef Mon Sep 17 00:00:00 2001 From: Christian Schneppe Date: Fri, 29 Jun 2018 23:41:48 +0200 Subject: open/close soft keyboard in quick edit --- .../messenger/ui/ConferenceDetailsActivity.java | 47 +++++++++++++++++---- .../de/pixart/messenger/ui/ShareWithActivity.java | 2 +- .../messenger/ui/StartConversationActivity.java | 2 +- .../java/de/pixart/messenger/ui/XmppActivity.java | 21 +++++---- .../messenger/ui/adapter/ConversationAdapter.java | 12 ++---- .../messenger/ui/util/SoftKeyboardUtils.java | 11 ++++- .../res/drawable-hdpi/ic_cancel_black_24dp.png | Bin 0 -> 531 bytes .../res/drawable-mdpi/ic_cancel_black_24dp.png | Bin 0 -> 303 bytes .../res/drawable-xhdpi/ic_cancel_black_24dp.png | Bin 0 -> 603 bytes .../res/drawable-xxhdpi/ic_cancel_black_24dp.png | Bin 0 -> 1136 bytes .../res/drawable-xxxhdpi/ic_cancel_black_24dp.png | Bin 0 -> 1230 bytes src/main/res/layout/activity_edit_account.xml | 2 +- src/main/res/values/defaults.xml | 1 - src/main/res/values/themes.xml | 2 +- 14 files changed, 68 insertions(+), 32 deletions(-) create mode 100644 src/main/res/drawable-hdpi/ic_cancel_black_24dp.png create mode 100644 src/main/res/drawable-mdpi/ic_cancel_black_24dp.png create mode 100644 src/main/res/drawable-xhdpi/ic_cancel_black_24dp.png create mode 100644 src/main/res/drawable-xxhdpi/ic_cancel_black_24dp.png create mode 100644 src/main/res/drawable-xxxhdpi/ic_cancel_black_24dp.png (limited to 'src/main') diff --git a/src/main/java/de/pixart/messenger/ui/ConferenceDetailsActivity.java b/src/main/java/de/pixart/messenger/ui/ConferenceDetailsActivity.java index 2951151cf..09f3d8467 100644 --- a/src/main/java/de/pixart/messenger/ui/ConferenceDetailsActivity.java +++ b/src/main/java/de/pixart/messenger/ui/ConferenceDetailsActivity.java @@ -14,7 +14,9 @@ import android.os.AsyncTask; import android.os.Bundle; import android.support.v7.app.AlertDialog; import android.support.v7.widget.Toolbar; +import android.text.Editable; import android.text.SpannableStringBuilder; +import android.text.TextWatcher; import android.util.Log; import android.view.ContextMenu; import android.view.LayoutInflater; @@ -48,6 +50,7 @@ import de.pixart.messenger.services.XmppConnectionService; import de.pixart.messenger.services.XmppConnectionService.OnConversationUpdate; import de.pixart.messenger.services.XmppConnectionService.OnMucRosterUpdate; import de.pixart.messenger.ui.util.MyLinkify; +import de.pixart.messenger.ui.util.SoftKeyboardUtils; import de.pixart.messenger.utils.MenuDoubleTabUtil; import de.pixart.messenger.utils.TimeframeUtils; import de.pixart.messenger.utils.UIHelper; @@ -56,7 +59,7 @@ import rocks.xmpp.addr.Jid; import static de.pixart.messenger.entities.Bookmark.printableValue; -public class ConferenceDetailsActivity extends XmppActivity implements OnConversationUpdate, OnMucRosterUpdate, XmppConnectionService.OnAffiliationChanged, XmppConnectionService.OnRoleChanged, XmppConnectionService.OnConfigurationPushed { +public class ConferenceDetailsActivity extends XmppActivity implements OnConversationUpdate, OnMucRosterUpdate, XmppConnectionService.OnAffiliationChanged, XmppConnectionService.OnRoleChanged, XmppConnectionService.OnConfigurationPushed, TextWatcher { public static final String ACTION_VIEW_MUC = "view_muc"; private static final float INACTIVE_ALPHA = 0.4684f; //compromise between dark and light theme private Conversation mConversation; @@ -308,6 +311,8 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers startActivity(intent); }); this.binding.editMucNameButton.setOnClickListener(this::onMucEditButtonClicked); + this.binding.mucEditTitle.addTextChangedListener(this); + this.binding.mucEditSubject.addTextChangedListener(this); } @Override @@ -352,7 +357,7 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers final MucOptions mucOptions = mConversation.getMucOptions(); this.binding.mucEditor.setVisibility(View.VISIBLE); this.binding.mucDisplay.setVisibility(View.GONE); - this.binding.editMucNameButton.setImageResource(getThemeResource(R.attr.icon_save, R.drawable.ic_save_black_24dp)); + this.binding.editMucNameButton.setImageResource(getThemeResource(R.attr.icon_cancel, R.drawable.ic_cancel_black_24dp)); final String name = mucOptions.getName(); this.binding.mucEditTitle.setText(""); final boolean owner = mucOptions.getSelf().getAffiliation().ranks(MucOptions.Affiliation.OWNER); @@ -374,11 +379,11 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers if (!owner) { this.binding.mucEditSubject.requestFocus(); } - this.binding.yourPhoto.setVisibility(View.GONE); } else { String subject = this.binding.mucEditSubject.isEnabled() ? this.binding.mucEditSubject.getEditableText().toString().trim() : null; String name = this.binding.mucEditTitle.isEnabled() ? this.binding.mucEditTitle.getEditableText().toString().trim() : null; onMucInfoUpdated(subject, name); + SoftKeyboardUtils.hideSoftKeyboard(this); hideEditor(); } } @@ -387,21 +392,18 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers this.binding.mucEditor.setVisibility(View.GONE); this.binding.mucDisplay.setVisibility(View.VISIBLE); this.binding.editMucNameButton.setImageResource(getThemeResource(R.attr.icon_edit_body, R.drawable.ic_edit_black_24dp)); - this.binding.yourPhoto.setVisibility(View.VISIBLE); } private void onMucInfoUpdated(String subject, String name) { final MucOptions mucOptions = mConversation.getMucOptions(); - if (mucOptions.canChangeSubject() && !blankOnNull(mucOptions.getSubject()).equals(subject)) { - Log.d(Config.LOGTAG, "subject changed"); + if (mucOptions.canChangeSubject() && changed(mucOptions.getSubject(), subject)) { xmppConnectionService.pushSubjectToConference(mConversation, subject); } - if (mucOptions.getSelf().getAffiliation().ranks(MucOptions.Affiliation.OWNER) && !blankOnNull(mucOptions.getName()).equals(name)) { - Log.d(Config.LOGTAG, "name changed"); + if (mucOptions.getSelf().getAffiliation().ranks(MucOptions.Affiliation.OWNER) && changed(mucOptions.getName(), name)) { Bundle options = new Bundle(); options.putString("muc#roomconfig_persistentroom", "1"); options.putString("muc#roomconfig_roomname", name); - xmppConnectionService.pushConferenceConfiguration(mConversation, options, null); + xmppConnectionService.pushConferenceConfiguration(mConversation, options, this); } } @@ -409,6 +411,9 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers return input == null ? "" : input; } + private static boolean changed(String one, String two) { + return !blankOnNull(one).equals(blankOnNull(two)); + } @Override protected String getShareableUri(boolean http) { @@ -892,6 +897,30 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers } } + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + + } + + @Override + public void afterTextChanged(Editable s) { + final MucOptions mucOptions = mConversation.getMucOptions(); + if (this.binding.mucEditor.getVisibility() == View.VISIBLE) { + boolean subjectChanged = changed(binding.mucEditSubject.getEditableText().toString(), mucOptions.getSubject()); + boolean nameChanged = changed(binding.mucEditTitle.getEditableText().toString(), mucOptions.getName()); + if (subjectChanged || nameChanged) { + this.binding.editMucNameButton.setImageResource(getThemeResource(R.attr.icon_save, R.drawable.ic_save_black_24dp)); + } else { + this.binding.editMucNameButton.setImageResource(getThemeResource(R.attr.icon_cancel, R.drawable.ic_cancel_black_24dp)); + } + } + } + static class AsyncDrawable extends BitmapDrawable { private final WeakReference bitmapWorkerTaskReference; diff --git a/src/main/java/de/pixart/messenger/ui/ShareWithActivity.java b/src/main/java/de/pixart/messenger/ui/ShareWithActivity.java index 22cd2a677..a820378a3 100644 --- a/src/main/java/de/pixart/messenger/ui/ShareWithActivity.java +++ b/src/main/java/de/pixart/messenger/ui/ShareWithActivity.java @@ -203,7 +203,7 @@ public class ShareWithActivity extends XmppActivity implements XmppConnectionSer if (intent == null) { return; } - this.mReturnToPrevious = getPreferences().getBoolean("return_to_previous", getResources().getBoolean(R.bool.return_to_previous)); + this.mReturnToPrevious = getBooleanPreference("return_to_previous", R.bool.return_to_previous); final String type = intent.getType(); final String action = intent.getAction(); Log.d(Config.LOGTAG, "action: " + action + ", type:" + type); diff --git a/src/main/java/de/pixart/messenger/ui/StartConversationActivity.java b/src/main/java/de/pixart/messenger/ui/StartConversationActivity.java index 06ab237df..ddb5a74f8 100644 --- a/src/main/java/de/pixart/messenger/ui/StartConversationActivity.java +++ b/src/main/java/de/pixart/messenger/ui/StartConversationActivity.java @@ -999,7 +999,7 @@ public class StartConversationActivity extends XmppActivity implements XmppConne jid.setError(getString(R.string.bookmark_already_exists)); } else { final Bookmark bookmark = new Bookmark(account, conferenceJid.asBareJid()); - bookmark.setAutojoin(getPreferences().getBoolean("autojoin", getResources().getBoolean(R.bool.autojoin))); + bookmark.setAutojoin(getBooleanPreference("autojoin", R.bool.autojoin)); String nick = conferenceJid.getResource(); if (nick != null && !nick.isEmpty()) { bookmark.setNick(nick); diff --git a/src/main/java/de/pixart/messenger/ui/XmppActivity.java b/src/main/java/de/pixart/messenger/ui/XmppActivity.java index ca833d9c1..cd78879ac 100644 --- a/src/main/java/de/pixart/messenger/ui/XmppActivity.java +++ b/src/main/java/de/pixart/messenger/ui/XmppActivity.java @@ -78,6 +78,7 @@ import de.pixart.messenger.services.BarcodeProvider; import de.pixart.messenger.services.XmppConnectionService; import de.pixart.messenger.services.XmppConnectionService.XmppConnectionBinder; import de.pixart.messenger.ui.util.PresenceSelector; +import de.pixart.messenger.ui.util.SoftKeyboardUtils; import de.pixart.messenger.utils.CryptoHelper; import de.pixart.messenger.utils.ExceptionHelper; import de.pixart.messenger.utils.MenuDoubleTabUtil; @@ -108,8 +109,6 @@ public abstract class XmppActivity extends ActionBarActivity { private boolean isCameraFeatureAvailable = false; - protected boolean mUseSubject = true; - protected int mTheme; protected boolean mUsingEnterKey = false; @@ -404,7 +403,6 @@ public abstract class XmppActivity extends ActionBarActivity { } mColorWhite = ContextCompat.getColor(this, R.color.white70); this.mUsingEnterKey = usingEnterKey(); - mUseSubject = getBooleanPreference("use_subject", R.bool.use_subject); } protected boolean isCameraFeatureAvailable() { @@ -445,7 +443,7 @@ public abstract class XmppActivity extends ActionBarActivity { } protected boolean usingEnterKey() { - return getPreferences().getBoolean("display_enter_key", getResources().getBoolean(R.bool.display_enter_key)); + return getBooleanPreference("display_enter_key", R.bool.display_enter_key); } protected SharedPreferences getPreferences() { @@ -456,10 +454,6 @@ public abstract class XmppActivity extends ActionBarActivity { return getPreferences().getBoolean(name, getResources().getBoolean(res)); } - public boolean useSubjectToIdentifyConference() { - return mUseSubject; - } - public void switchToConversation(Conversation conversation) { switchToConversation(conversation, null, false); } @@ -745,6 +739,7 @@ public abstract class XmppActivity extends ActionBarActivity { builder.setView(binding.getRoot()); builder.setNegativeButton(R.string.cancel, null); final AlertDialog dialog = builder.create(); + dialog.setOnShowListener(d -> SoftKeyboardUtils.showKeyboard(binding.inputEditText)); dialog.show(); View.OnClickListener clickListener = v -> { String value = binding.inputEditText.getText().toString(); @@ -755,9 +750,17 @@ public abstract class XmppActivity extends ActionBarActivity { return; } } + SoftKeyboardUtils.hideSoftKeyboard(binding.inputEditText); dialog.dismiss(); }; dialog.getButton(DialogInterface.BUTTON_POSITIVE).setOnClickListener(clickListener); + dialog.getButton(DialogInterface.BUTTON_NEGATIVE).setOnClickListener((v -> { + SoftKeyboardUtils.hideSoftKeyboard(binding.inputEditText); + dialog.dismiss(); + })); + dialog.setOnDismissListener(dialog1 -> { + SoftKeyboardUtils.hideSoftKeyboard(binding.inputEditText); + }); } protected boolean hasStoragePermission(int requestCode) { @@ -936,7 +939,7 @@ public abstract class XmppActivity extends ActionBarActivity { } protected boolean manuallyChangePresence() { - return getPreferences().getBoolean(SettingsActivity.MANUALLY_CHANGE_PRESENCE, getResources().getBoolean(R.bool.manually_change_presence)); + return getBooleanPreference(SettingsActivity.MANUALLY_CHANGE_PRESENCE, R.bool.manually_change_presence); } protected String getShareableUri() { diff --git a/src/main/java/de/pixart/messenger/ui/adapter/ConversationAdapter.java b/src/main/java/de/pixart/messenger/ui/adapter/ConversationAdapter.java index abb84a51a..11c129522 100644 --- a/src/main/java/de/pixart/messenger/ui/adapter/ConversationAdapter.java +++ b/src/main/java/de/pixart/messenger/ui/adapter/ConversationAdapter.java @@ -89,15 +89,11 @@ public class ConversationAdapter extends RecyclerView.Adaptertrue recent false - true false false 144 diff --git a/src/main/res/values/themes.xml b/src/main/res/values/themes.xml index aa844dce1..6eef29072 100644 --- a/src/main/res/values/themes.xml +++ b/src/main/res/values/themes.xml @@ -63,7 +63,7 @@ @drawable/ic_group_add_white_24dp @drawable/ic_person_add_white_24dp - @drawable/ic_cancel_white_24dp + @drawable/ic_cancel_black_24dp @drawable/ic_action_chat @drawable/ic_content_copy_grey600_24dp @drawable/ic_delete_white_24dp -- cgit v1.2.3