aboutsummaryrefslogtreecommitdiffstats
path: root/src/main
diff options
context:
space:
mode:
authorChristian Schneppe <christian@pix-art.de>2018-06-29 23:41:48 +0200
committerChristian Schneppe <christian@pix-art.de>2018-06-29 23:41:48 +0200
commitc2a5f95da78918032a4cd71aac53d0c14f69fbef (patch)
treedab94e1acee36536be92006f8b1083d10d03a2a8 /src/main
parent5a148ad244705d4d7238903b37c3a46206df2521 (diff)
open/close soft keyboard in quick edit
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/de/pixart/messenger/ui/ConferenceDetailsActivity.java47
-rw-r--r--src/main/java/de/pixart/messenger/ui/ShareWithActivity.java2
-rw-r--r--src/main/java/de/pixart/messenger/ui/StartConversationActivity.java2
-rw-r--r--src/main/java/de/pixart/messenger/ui/XmppActivity.java21
-rw-r--r--src/main/java/de/pixart/messenger/ui/adapter/ConversationAdapter.java12
-rw-r--r--src/main/java/de/pixart/messenger/ui/util/SoftKeyboardUtils.java11
-rw-r--r--src/main/res/drawable-hdpi/ic_cancel_black_24dp.pngbin0 -> 531 bytes
-rw-r--r--src/main/res/drawable-mdpi/ic_cancel_black_24dp.pngbin0 -> 303 bytes
-rw-r--r--src/main/res/drawable-xhdpi/ic_cancel_black_24dp.pngbin0 -> 603 bytes
-rw-r--r--src/main/res/drawable-xxhdpi/ic_cancel_black_24dp.pngbin0 -> 1136 bytes
-rw-r--r--src/main/res/drawable-xxxhdpi/ic_cancel_black_24dp.pngbin0 -> 1230 bytes
-rw-r--r--src/main/res/layout/activity_edit_account.xml2
-rw-r--r--src/main/res/values/defaults.xml1
-rw-r--r--src/main/res/values/themes.xml2
14 files changed, 68 insertions, 32 deletions
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<BitmapWorkerTask> 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.Adapter<ConversationAdapte
if (conversation == null) {
return;
}
- if (conversation.getMode() == Conversation.MODE_SINGLE || activity.useSubjectToIdentifyConference()) {
- CharSequence name = conversation.getName();
- if (name instanceof Jid) {
- viewHolder.name.setText(IrregularUnicodeDetector.style(activity, (Jid) name));
- } else {
- viewHolder.name.setText(EmojiWrapper.transform(name));
- }
+ CharSequence name = conversation.getName();
+ if (name instanceof Jid) {
+ viewHolder.name.setText(IrregularUnicodeDetector.style(activity, (Jid) name));
} else {
- viewHolder.name.setText(conversation.getJid().asBareJid().toString());
+ viewHolder.name.setText(EmojiWrapper.transform(name));
}
viewHolder.frame.setBackgroundColor(Color.get(activity, conversation == ConversationFragment.getConversation(activity) ? R.attr.color_background_secondary : R.attr.color_background_primary));
diff --git a/src/main/java/de/pixart/messenger/ui/util/SoftKeyboardUtils.java b/src/main/java/de/pixart/messenger/ui/util/SoftKeyboardUtils.java
index b92a020b0..86753ac4a 100644
--- a/src/main/java/de/pixart/messenger/ui/util/SoftKeyboardUtils.java
+++ b/src/main/java/de/pixart/messenger/ui/util/SoftKeyboardUtils.java
@@ -30,6 +30,7 @@ package de.pixart.messenger.ui.util;
import android.app.Activity;
import android.content.Context;
+import android.support.annotation.NonNull;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
@@ -45,7 +46,15 @@ public class SoftKeyboardUtils {
if (view == null) {
view = new View(activity);
}
- imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
+ imm.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
+ }
+
+ public static void hideSoftKeyboard(@NonNull final EditText editText) {
+ InputMethodManager imm = (InputMethodManager) editText.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
+ if (imm == null) {
+ return;
+ }
+ imm.hideSoftInputFromWindow(editText.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
}
public static void showKeyboard(EditText editText) {
diff --git a/src/main/res/drawable-hdpi/ic_cancel_black_24dp.png b/src/main/res/drawable-hdpi/ic_cancel_black_24dp.png
new file mode 100644
index 000000000..b4a2d11a7
--- /dev/null
+++ b/src/main/res/drawable-hdpi/ic_cancel_black_24dp.png
Binary files differ
diff --git a/src/main/res/drawable-mdpi/ic_cancel_black_24dp.png b/src/main/res/drawable-mdpi/ic_cancel_black_24dp.png
new file mode 100644
index 000000000..7867e72cf
--- /dev/null
+++ b/src/main/res/drawable-mdpi/ic_cancel_black_24dp.png
Binary files differ
diff --git a/src/main/res/drawable-xhdpi/ic_cancel_black_24dp.png b/src/main/res/drawable-xhdpi/ic_cancel_black_24dp.png
new file mode 100644
index 000000000..e6c744484
--- /dev/null
+++ b/src/main/res/drawable-xhdpi/ic_cancel_black_24dp.png
Binary files differ
diff --git a/src/main/res/drawable-xxhdpi/ic_cancel_black_24dp.png b/src/main/res/drawable-xxhdpi/ic_cancel_black_24dp.png
new file mode 100644
index 000000000..a5fe0e30e
--- /dev/null
+++ b/src/main/res/drawable-xxhdpi/ic_cancel_black_24dp.png
Binary files differ
diff --git a/src/main/res/drawable-xxxhdpi/ic_cancel_black_24dp.png b/src/main/res/drawable-xxxhdpi/ic_cancel_black_24dp.png
new file mode 100644
index 000000000..5ffd8d000
--- /dev/null
+++ b/src/main/res/drawable-xxxhdpi/ic_cancel_black_24dp.png
Binary files differ
diff --git a/src/main/res/layout/activity_edit_account.xml b/src/main/res/layout/activity_edit_account.xml
index efd4b76f5..41e00b4ba 100644
--- a/src/main/res/layout/activity_edit_account.xml
+++ b/src/main/res/layout/activity_edit_account.xml
@@ -47,7 +47,7 @@
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
- android:layout_marginBottom="16dp"
+ android:layout_marginBottom="@dimen/avatar_item_distance"
android:adjustViewBounds="true"
android:contentDescription="@string/account_image_description"
android:maxHeight="384dp"
diff --git a/src/main/res/values/defaults.xml b/src/main/res/values/defaults.xml
index 91eb210d4..9e269d271 100644
--- a/src/main/res/values/defaults.xml
+++ b/src/main/res/values/defaults.xml
@@ -87,7 +87,6 @@
<bool name="send_button_status">true</bool>
<string name="quick_action">recent</string>
<bool name="return_to_previous">false</bool>
- <bool name="use_subject">true</bool>
<bool name="display_enter_key">false</bool>
<bool name="show_dynamic_tags">false</bool>
<integer name="grace_period">144</integer>
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 @@
<item name="icon_add_group" type="reference">@drawable/ic_group_add_white_24dp</item>
<item name="icon_add_person" type="reference">@drawable/ic_person_add_white_24dp</item>
- <item name="icon_cancel" type="reference">@drawable/ic_cancel_white_24dp</item>
+ <item name="icon_cancel" type="reference">@drawable/ic_cancel_black_24dp</item>
<item name="icon_chat" type="reference">@drawable/ic_action_chat</item>
<item name="icon_copy" type="reference">@drawable/ic_content_copy_grey600_24dp</item>
<item name="icon_discard" type="reference">@drawable/ic_delete_white_24dp</item>