diff options
Diffstat (limited to 'src')
17 files changed, 178 insertions, 72 deletions
diff --git a/src/main/java/de/pixart/messenger/services/XmppConnectionService.java b/src/main/java/de/pixart/messenger/services/XmppConnectionService.java index 3b2699667..51f4793d1 100644 --- a/src/main/java/de/pixart/messenger/services/XmppConnectionService.java +++ b/src/main/java/de/pixart/messenger/services/XmppConnectionService.java @@ -2788,14 +2788,6 @@ public class XmppConnectionService extends Service { public void pushSubjectToConference(final Conversation conference, final String subject) { MessagePacket packet = this.getMessageGenerator().conferenceSubject(conference, subject); this.sendMessagePacket(conference.getAccount(), packet); - final MucOptions mucOptions = conference.getMucOptions(); - final MucOptions.User self = mucOptions.getSelf(); - if (self.getAffiliation().ranks(MucOptions.Affiliation.OWNER)) { - Bundle options = new Bundle(); - options.putString("muc#roomconfig_persistentroom", "1"); - options.putString("muc#roomconfig_roomname", subject); - this.pushConferenceConfiguration(conference, options, null); - } } public void changeAffiliationInConference(final Conversation conference, Jid user, final MucOptions.Affiliation affiliation, final OnAffiliationChanged callback) { diff --git a/src/main/java/de/pixart/messenger/ui/ConferenceDetailsActivity.java b/src/main/java/de/pixart/messenger/ui/ConferenceDetailsActivity.java index 4b0477e1a..2951151cf 100644 --- a/src/main/java/de/pixart/messenger/ui/ConferenceDetailsActivity.java +++ b/src/main/java/de/pixart/messenger/ui/ConferenceDetailsActivity.java @@ -12,7 +12,6 @@ import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.os.AsyncTask; import android.os.Bundle; -import android.support.v7.app.ActionBar; import android.support.v7.app.AlertDialog; import android.support.v7.widget.Toolbar; import android.text.SpannableStringBuilder; @@ -24,7 +23,6 @@ import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.widget.ImageView; -import android.widget.TextView; import android.widget.Toast; import org.openintents.openpgp.util.OpenPgpUtils; @@ -227,14 +225,6 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers builder.create().show(); } }; - private OnValueEdited onSubjectEdited = new OnValueEdited() { - - @Override - public String onValueEdited(String value) { - xmppConnectionService.pushSubjectToConference(mConversation, value.trim().isEmpty() ? null : value.trim()); - return null; - } - }; public static boolean cancelPotentialWork(User user, ImageView imageView) { final BitmapWorkerTask bitmapWorkerTask = getBitmapWorkerTask(imageView); @@ -317,6 +307,7 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers intent.putExtra("uuid", mConversation.getUuid()); startActivity(intent); }); + this.binding.editMucNameButton.setOnClickListener(this::onMucEditButtonClicked); } @Override @@ -356,6 +347,69 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers return super.onOptionsItemSelected(menuItem); } + public void onMucEditButtonClicked(View v) { + if (this.binding.mucEditor.getVisibility() == View.GONE) { + 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)); + final String name = mucOptions.getName(); + this.binding.mucEditTitle.setText(""); + final boolean owner = mucOptions.getSelf().getAffiliation().ranks(MucOptions.Affiliation.OWNER); + if (owner || printableValue(name)) { + this.binding.mucEditTitle.setVisibility(View.VISIBLE); + if (name != null) { + this.binding.mucEditTitle.append(name); + } + } else { + this.binding.mucEditTitle.setVisibility(View.GONE); + } + this.binding.mucEditTitle.setEnabled(owner); + final String subject = mucOptions.getSubject(); + this.binding.mucEditSubject.setText(""); + if (subject != null) { + this.binding.mucEditSubject.append(subject); + } + this.binding.mucEditSubject.setEnabled(mucOptions.canChangeSubject()); + 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); + hideEditor(); + } + } + + private void hideEditor() { + 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"); + xmppConnectionService.pushSubjectToConference(mConversation, subject); + } + if (mucOptions.getSelf().getAffiliation().ranks(MucOptions.Affiliation.OWNER) && !blankOnNull(mucOptions.getName()).equals(name)) { + Log.d(Config.LOGTAG, "name changed"); + Bundle options = new Bundle(); + options.putString("muc#roomconfig_persistentroom", "1"); + options.putString("muc#roomconfig_roomname", name); + xmppConnectionService.pushConferenceConfiguration(mConversation, options, null); + } + } + + private static String blankOnNull(String input) { + return input == null ? "" : input; + } + + @Override protected String getShareableUri(boolean http) { if (mConversation != null) { @@ -567,6 +621,15 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers this.binding.detailsMucAvatar.setImageBitmap(avatarService().get(mConversation, getPixel(Config.AVATAR_SIZE))); } + @Override + public void onBackPressed() { + if (this.binding.mucEditor.getVisibility() == View.VISIBLE) { + hideEditor(); + } else { + super.onBackPressed(); + } + } + private void updateView() { invalidateOptionsMenu(); if (mConversation == null) { @@ -580,20 +643,9 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers } else { account = mConversation.getAccount().getJid().asBareJid().toString(); } - if (getSupportActionBar() != null) { - final ActionBar ab = getSupportActionBar(); - if (ab != null) { - ab.setCustomView(R.layout.ab_title); - ab.setDisplayShowCustomEnabled(true); - TextView abtitle = findViewById(android.R.id.text1); - TextView absubtitle = findViewById(android.R.id.text2); - abtitle.setText(mConversation.getName()); - abtitle.setSelected(true); - abtitle.setClickable(false); - absubtitle.setVisibility(View.GONE); - absubtitle.setClickable(false); - } - } + + + this.binding.editMucNameButton.setVisibility((self.getAffiliation().ranks(MucOptions.Affiliation.OWNER) || mucOptions.canChangeSubject()) ? View.VISIBLE : View.GONE); this.binding.detailsAccount.setText(getString(R.string.using_account, account)); this.binding.jid.setText(mConversation.getJid().asBareJid().toEscapedString()); if (xmppConnectionService.multipleAccounts()) { diff --git a/src/main/res/drawable-hdpi/ic_save_black_24dp.png b/src/main/res/drawable-hdpi/ic_save_black_24dp.png Binary files differnew file mode 100644 index 000000000..261c183f8 --- /dev/null +++ b/src/main/res/drawable-hdpi/ic_save_black_24dp.png diff --git a/src/main/res/drawable-hdpi/ic_save_white_24dp.png b/src/main/res/drawable-hdpi/ic_save_white_24dp.png Binary files differnew file mode 100644 index 000000000..a3b0cb3be --- /dev/null +++ b/src/main/res/drawable-hdpi/ic_save_white_24dp.png diff --git a/src/main/res/drawable-mdpi/ic_save_black_24dp.png b/src/main/res/drawable-mdpi/ic_save_black_24dp.png Binary files differnew file mode 100644 index 000000000..280cb2330 --- /dev/null +++ b/src/main/res/drawable-mdpi/ic_save_black_24dp.png diff --git a/src/main/res/drawable-mdpi/ic_save_white_24dp.png b/src/main/res/drawable-mdpi/ic_save_white_24dp.png Binary files differnew file mode 100644 index 000000000..24eb15f8d --- /dev/null +++ b/src/main/res/drawable-mdpi/ic_save_white_24dp.png diff --git a/src/main/res/drawable-xhdpi/ic_save_black_24dp.png b/src/main/res/drawable-xhdpi/ic_save_black_24dp.png Binary files differnew file mode 100644 index 000000000..d13a342dc --- /dev/null +++ b/src/main/res/drawable-xhdpi/ic_save_black_24dp.png diff --git a/src/main/res/drawable-xhdpi/ic_save_white_24dp.png b/src/main/res/drawable-xhdpi/ic_save_white_24dp.png Binary files differnew file mode 100644 index 000000000..93d1fdd47 --- /dev/null +++ b/src/main/res/drawable-xhdpi/ic_save_white_24dp.png diff --git a/src/main/res/drawable-xxhdpi/ic_save_black_24dp.png b/src/main/res/drawable-xxhdpi/ic_save_black_24dp.png Binary files differnew file mode 100644 index 000000000..00078fcd8 --- /dev/null +++ b/src/main/res/drawable-xxhdpi/ic_save_black_24dp.png diff --git a/src/main/res/drawable-xxhdpi/ic_save_white_24dp.png b/src/main/res/drawable-xxhdpi/ic_save_white_24dp.png Binary files differnew file mode 100644 index 000000000..36461723b --- /dev/null +++ b/src/main/res/drawable-xxhdpi/ic_save_white_24dp.png diff --git a/src/main/res/drawable-xxxhdpi/ic_save_black_24dp.png b/src/main/res/drawable-xxxhdpi/ic_save_black_24dp.png Binary files differnew file mode 100644 index 000000000..ed3c6139a --- /dev/null +++ b/src/main/res/drawable-xxxhdpi/ic_save_black_24dp.png diff --git a/src/main/res/drawable-xxxhdpi/ic_save_white_24dp.png b/src/main/res/drawable-xxxhdpi/ic_save_white_24dp.png Binary files differnew file mode 100644 index 000000000..ec8be2bee --- /dev/null +++ b/src/main/res/drawable-xxxhdpi/ic_save_white_24dp.png diff --git a/src/main/res/layout/activity_muc_details.xml b/src/main/res/layout/activity_muc_details.xml index 7dc1ae3e6..2c1a0e682 100644 --- a/src/main/res/layout/activity_muc_details.xml +++ b/src/main/res/layout/activity_muc_details.xml @@ -47,36 +47,79 @@ android:layout_width="match_parent" android:layout_height="wrap_content"> - <android.support.text.emoji.widget.EmojiTextView - android:id="@+id/muc_title" + <LinearLayout + android:id="@+id/muc_display" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_alignParentLeft="true" - android:layout_toLeftOf="@+id/edit_muc_name_button" - android:singleLine="true" - android:textAppearance="@style/TextAppearance.Conversations.Title" /> + android:layout_alignParentStart="true" + android:layout_toStartOf="@+id/edit_muc_name_button" + android:orientation="vertical"> - <android.support.text.emoji.widget.EmojiTextView - android:id="@+id/muc_subject" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_alignParentLeft="true" - android:layout_below="@+id/muc_title" - android:layout_toLeftOf="@+id/edit_muc_name_button" - android:autoLink="web" - android:textAppearance="@style/TextAppearance.Conversations.Subhead" /> + <TextView + android:id="@+id/muc_title" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:textAppearance="@style/TextAppearance.Conversations.Title" /> - <TextView - android:id="@+id/jid" + <TextView + android:id="@+id/muc_subject" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:autoLink="web" + android:textAppearance="@style/TextAppearance.Conversations.Subhead" /> + + <TextView + android:id="@+id/jid" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_alignParentLeft="true" + android:layout_below="@+id/muc_subject" + android:text="@string/account_settings_example_jabber_id" + android:textAppearance="@style/TextAppearance.Conversations.Body1" + android:textIsSelectable="true" + android:visibility="gone" /> + + </LinearLayout> + + <LinearLayout + android:id="@+id/muc_editor" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_alignParentLeft="true" - android:layout_below="@+id/muc_subject" - android:layout_toLeftOf="@+id/edit_muc_name_button" - android:text="@string/account_settings_example_jabber_id" - android:textAppearance="@style/TextAppearance.Conversations.Body1" - android:textIsSelectable="true" - android:visibility="gone" /> + android:layout_alignParentStart="true" + android:layout_toStartOf="@+id/edit_muc_name_button" + + android:orientation="vertical" + android:visibility="gone"> + + <android.support.design.widget.TextInputLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + app:errorTextAppearance="@style/TextAppearance.Conversations.Design.Error" + app:hintTextAppearance="@style/TextAppearance.Conversations.Design.Hint"> + + <android.support.design.widget.TextInputEditText + android:id="@+id/muc_edit_title" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:hint="@string/group_chat_name" + android:textAppearance="@style/Widget.Conversations.EditText" /> + </android.support.design.widget.TextInputLayout> + + <android.support.design.widget.TextInputLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + app:errorTextAppearance="@style/TextAppearance.Conversations.Design.Error" + app:hintTextAppearance="@style/TextAppearance.Conversations.Design.Hint"> + + <android.support.design.widget.TextInputEditText + android:id="@+id/muc_edit_subject" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:hint="@string/topic" + android:textAppearance="@style/Widget.Conversations.EditText" /> + </android.support.design.widget.TextInputLayout> + + </LinearLayout> <ImageButton android:id="@+id/edit_muc_name_button" @@ -101,6 +144,7 @@ android:id="@+id/details_muc_avatar" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:layout_marginEnd="@dimen/avatar_item_distance" android:adjustViewBounds="true" android:maxHeight="384dp" android:maxWidth="384dp" diff --git a/src/main/res/layout/create_conference_dialog.xml b/src/main/res/layout/create_conference_dialog.xml index 2cb78b165..ca26e618b 100644 --- a/src/main/res/layout/create_conference_dialog.xml +++ b/src/main/res/layout/create_conference_dialog.xml @@ -42,7 +42,7 @@ style="@style/Widget.Conversations.EditText" android:layout_width="match_parent" android:layout_height="wrap_content" - android:hint="@string/edit_subject_hint" + android:hint="@string/topic" android:nextFocusDown="@+id/subject" android:nextFocusUp="@+id/subject" /> </android.support.design.widget.TextInputLayout> diff --git a/src/main/res/values/attrs.xml b/src/main/res/values/attrs.xml index f72834b9f..10690b682 100644 --- a/src/main/res/values/attrs.xml +++ b/src/main/res/values/attrs.xml @@ -47,6 +47,7 @@ <attr name="icon_download" format="reference" /> <attr name="icon_edit" format="reference" /> <attr name="icon_edit_body" format="reference" /> + <attr name="icon_save" format="reference" /> <attr name="icon_done" format="reference" /> <attr name="icon_group" format="reference" /> <attr name="icon_new" format="reference" /> diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index 14feee019..57edf9ba6 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -229,7 +229,7 @@ <string name="delete_bookmark">Delete bookmark</string> <string name="bookmark_already_exists">This bookmark already exists</string> <string name="action_edit_subject">Edit group chat subject</string> - <string name="edit_subject_hint">The subject of this group chat</string> + <string name="topic">Topic</string> <string name="joining_conference">Joining group chat…</string> <string name="leave">Leave</string> <string name="contact_added_you">Contact added you to contact list</string> @@ -801,4 +801,5 @@ <string name="only_the_owner_can_change_group_chat_avatar">Only the owner can change group chat avatar</string> <string name="contact_name">Contact name</string> <string name="nickname">Nickname for this group chat</string> + <string name="group_chat_name">Name</string> </resources> diff --git a/src/main/res/values/themes.xml b/src/main/res/values/themes.xml index 8c68c25f1..aa844dce1 100644 --- a/src/main/res/values/themes.xml +++ b/src/main/res/values/themes.xml @@ -50,13 +50,16 @@ <!--<item type="reference" name="infocard_border">@drawable/infocard_border</item>--> <item name="divider">@color/black12</item> - <item type="reference" name="ic_send_cancel_offline">@drawable/ic_send_cancel_offline</item> - <item type="reference" name="ic_send_location_offline">@drawable/ic_send_location_offline</item> - <item type="reference" name="ic_send_photo_offline">@drawable/ic_send_photo_offline</item> - <item type="reference" name="ic_send_picture_offline">@drawable/ic_send_picture_offline</item> - <item type="reference" name="ic_send_text_offline">@drawable/ic_send_text_offline</item> - <item type="reference" name="ic_send_videocam_offline">@drawable/ic_send_videocam_offline</item> - <item type="reference" name="ic_send_voice_offline">@drawable/ic_send_voice_offline</item> + <item name="ic_send_cancel_offline" type="reference">@drawable/ic_send_cancel_offline</item> + <item name="ic_send_location_offline" type="reference">@drawable/ic_send_location_offline + </item> + <item name="ic_send_photo_offline" type="reference">@drawable/ic_send_photo_offline</item> + <item name="ic_send_picture_offline" type="reference">@drawable/ic_send_picture_offline + </item> + <item name="ic_send_text_offline" type="reference">@drawable/ic_send_text_offline</item> + <item name="ic_send_videocam_offline" type="reference">@drawable/ic_send_videocam_offline + </item> + <item name="ic_send_voice_offline" type="reference">@drawable/ic_send_voice_offline</item> <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> @@ -67,6 +70,7 @@ <item name="icon_download" type="reference">@drawable/ic_file_download_white_24dp</item> <item name="icon_edit" type="reference">@drawable/ic_edit_white_24dp</item> <item name="icon_edit_body" type="reference">@drawable/ic_edit_black_24dp</item> + <item name="icon_save" type="reference">@drawable/ic_save_black_24dp</item> <item name="icon_done" type="reference">@drawable/ic_done_black_24dp</item> <item name="icon_group" type="reference">@drawable/ic_group_white_24dp</item> <item name="icon_new" type="reference">@drawable/ic_contacts_white_24dp</item> @@ -176,13 +180,24 @@ <item name="divider">@color/white12</item> - <item name="ic_send_cancel_offline" type="reference">@drawable/ic_send_cancel_offline_white</item> - <item name="ic_send_location_offline" type="reference">@drawable/ic_send_location_offline_white</item> - <item name="ic_send_photo_offline" type="reference">@drawable/ic_send_photo_offline_white</item> - <item name="ic_send_picture_offline" type="reference">@drawable/ic_send_picture_offline_white</item> - <item name="ic_send_text_offline" type="reference">@drawable/ic_send_text_offline_white</item> - <item name="ic_send_videocam_offline" type="reference">@drawable/ic_send_videocam_offline_white</item> - <item name="ic_send_voice_offline" type="reference">@drawable/ic_send_voice_offline_white</item> + <item name="ic_send_cancel_offline" type="reference"> + @drawable/ic_send_cancel_offline_white + </item> + <item name="ic_send_location_offline" type="reference"> + @drawable/ic_send_location_offline_white + </item> + <item name="ic_send_photo_offline" type="reference">@drawable/ic_send_photo_offline_white + </item> + <item name="ic_send_picture_offline" type="reference"> + @drawable/ic_send_picture_offline_white + </item> + <item name="ic_send_text_offline" type="reference">@drawable/ic_send_text_offline_white + </item> + <item name="ic_send_videocam_offline" type="reference"> + @drawable/ic_send_videocam_offline_white + </item> + <item name="ic_send_voice_offline" type="reference">@drawable/ic_send_voice_offline_white + </item> <item name="ic_attach_camera" type="reference">@drawable/ic_attach_camera_white</item> <item name="ic_attach_video" type="reference">@drawable/ic_attach_videocam_white</item> @@ -206,6 +221,7 @@ <item name="icon_download" type="reference">@drawable/ic_file_download_white_24dp</item> <item name="icon_edit" type="reference">@drawable/ic_edit_white_24dp</item> <item name="icon_edit_body" type="reference">@drawable/ic_edit_white_24dp</item> + <item name="icon_save" type="reference">@drawable/ic_save_white_24dp</item> <item name="icon_done" type="reference">@drawable/ic_done_black_24dp</item> <item name="icon_group" type="reference">@drawable/ic_group_white_24dp</item> <item name="icon_new" type="reference">@drawable/ic_add_white_24dp</item> |