diff options
author | iNPUTmice <daniel@gultsch.de> | 2014-07-16 12:34:09 +0200 |
---|---|---|
committer | iNPUTmice <daniel@gultsch.de> | 2014-07-16 12:34:09 +0200 |
commit | e79a34b651a626b93686b8c578280b77c54b6138 (patch) | |
tree | 0a09589dda9e69c22f069f9efa815a32673aa8cd | |
parent | eb8253d49a432412b8a27d4f61f8f009ace4d79b (diff) |
redesigned muc details a little bit
-rw-r--r-- | res/drawable-hdpi/ic_action_edit_dark.png | bin | 0 -> 884 bytes | |||
-rw-r--r-- | res/drawable-mdpi/ic_action_edit_dark.png | bin | 0 -> 587 bytes | |||
-rw-r--r-- | res/drawable-xhdpi/ic_action_edit_dark.png | bin | 0 -> 1179 bytes | |||
-rw-r--r-- | res/drawable-xxhdpi/ic_action_edit_dark.png | bin | 0 -> 1670 bytes | |||
-rw-r--r-- | res/layout/activity_muc_details.xml | 239 | ||||
-rw-r--r-- | res/layout/edit_contact_name.xml | 28 | ||||
-rw-r--r-- | res/layout/quickedit.xml | 18 | ||||
-rw-r--r-- | res/menu/muc_details.xml | 6 | ||||
-rw-r--r-- | res/values/colors.xml | 2 | ||||
-rw-r--r-- | res/values/strings.xml | 2 | ||||
-rw-r--r-- | res/values/styles.xml | 4 | ||||
-rw-r--r-- | res/values/themes.xml | 4 | ||||
-rw-r--r-- | src/eu/siacs/conversations/entities/MucOptions.java | 28 | ||||
-rw-r--r-- | src/eu/siacs/conversations/ui/ContactDetailsActivity.java | 18 | ||||
-rw-r--r-- | src/eu/siacs/conversations/ui/ConversationFragment.java | 28 | ||||
-rw-r--r-- | src/eu/siacs/conversations/ui/MucDetailsActivity.java | 287 | ||||
-rw-r--r-- | src/eu/siacs/conversations/ui/XmppActivity.java | 31 |
17 files changed, 362 insertions, 333 deletions
diff --git a/res/drawable-hdpi/ic_action_edit_dark.png b/res/drawable-hdpi/ic_action_edit_dark.png Binary files differnew file mode 100644 index 00000000..5f7c6eff --- /dev/null +++ b/res/drawable-hdpi/ic_action_edit_dark.png diff --git a/res/drawable-mdpi/ic_action_edit_dark.png b/res/drawable-mdpi/ic_action_edit_dark.png Binary files differnew file mode 100644 index 00000000..650b4d89 --- /dev/null +++ b/res/drawable-mdpi/ic_action_edit_dark.png diff --git a/res/drawable-xhdpi/ic_action_edit_dark.png b/res/drawable-xhdpi/ic_action_edit_dark.png Binary files differnew file mode 100644 index 00000000..8ab436d8 --- /dev/null +++ b/res/drawable-xhdpi/ic_action_edit_dark.png diff --git a/res/drawable-xxhdpi/ic_action_edit_dark.png b/res/drawable-xxhdpi/ic_action_edit_dark.png Binary files differnew file mode 100644 index 00000000..f2b2078b --- /dev/null +++ b/res/drawable-xxhdpi/ic_action_edit_dark.png diff --git a/res/layout/activity_muc_details.xml b/res/layout/activity_muc_details.xml index 15f09c7c..d47c6b6e 100644 --- a/res/layout/activity_muc_details.xml +++ b/res/layout/activity_muc_details.xml @@ -2,147 +2,128 @@ <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" - android:background="@color/secondarybackground"> - -<LinearLayout - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:orientation="vertical" > - <TextView - style="@style/sectionHeader" + android:background="@color/primarybackground" > + + <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" - android:padding="8dp" - android:text="@string/muc_details_conference" - android:textColor="@color/primarytext"/> - <RelativeLayout - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:background="@color/primarybackground" > - + android:orientation="vertical" > - <EditText - android:id="@+id/muc_subject" + <TextView + style="@style/sectionHeader" android:layout_width="wrap_content" - android:layout_height="48dp" - android:layout_alignParentLeft="true" - android:layout_toLeftOf="@+id/muc_edit_subject" - android:background="@color/primarybackground" - android:ems="10" - android:hint="@string/muc_details_conference_subject" - android:inputType="textAutoComplete" - android:paddingBottom="12dp" - android:paddingLeft="8dp" - android:paddingRight="8dp" - android:paddingTop="12dp" /> - - <ImageButton - android:id="@+id/muc_edit_subject" - android:layout_width="48dp" - android:layout_height="48dp" - android:layout_alignParentRight="true" - android:layout_alignParentTop="true" - android:layout_centerVertical="true" - android:background="?android:selectableItemBackground" + android:layout_height="wrap_content" android:padding="8dp" - android:src="@drawable/ic_action_edit" /> - </RelativeLayout> - <TextView - android:id="@+id/muc_jabberid" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:padding="8dp" - android:singleLine="true" - android:textSize="14sp" - android:textColor="@color/primarytext"/> + android:text="@string/muc_details_conference" /> - <TextView - style="@style/sectionHeader" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:paddingLeft="8dp" - android:paddingRight="8dp" - android:paddingTop="8dp" - android:text="@string/muc_details_your_nickname" - android:textColor="@color/primarytext"/> - - <RelativeLayout - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:background="@color/primarybackground" > - + <TextView + android:id="@+id/muc_jabberid" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:padding="8dp" + android:singleLine="true" + android:text="@string/account_settings_example_jabber_id" + android:textColor="@color/primarytext" + android:textSize="14sp"/> - <EditText - android:id="@+id/muc_your_nick" + <TextView + style="@style/sectionHeader" android:layout_width="wrap_content" - android:layout_height="48dp" - android:layout_alignParentLeft="true" - android:layout_toLeftOf="@+id/muc_edit_nick" - android:background="@color/primarybackground" - android:ems="10" - android:hint="@string/muc_details_your_nickname" - android:inputType="textEmailAddress" - android:paddingBottom="12dp" + android:layout_height="wrap_content" android:paddingLeft="8dp" android:paddingRight="8dp" - android:paddingTop="12dp" /> - - <ImageButton - android:id="@+id/muc_edit_nick" - android:layout_width="48dp" - android:layout_height="48dp" - android:layout_alignParentRight="true" - android:layout_alignParentTop="true" - android:layout_centerVertical="true" - android:background="?android:selectableItemBackground" + android:paddingTop="8dp" + android:text="@string/you" /> + + <RelativeLayout + android:layout_width="fill_parent" + android:layout_height="wrap_content" + android:background="?android:attr/activatedBackgroundIndicator" android:padding="8dp" - android:src="@drawable/ic_action_edit" /> - </RelativeLayout> - <TextView - android:id="@+id/muc_role" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:padding="8dp" - android:singleLine="true" - android:textSize="14sp" - android:textColor="@color/primarytext"/> - - <LinearLayout - android:id="@+id/muc_more_details" - android:layout_width="fill_parent" - android:layout_height="fill_parent" - android:orientation="vertical"> - - <TextView - android:id="@+id/muc_participants_header" - style="@style/sectionHeader" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:paddingLeft="8dp" - android:paddingRight="8dp" - android:paddingTop="8dp" - android:text="@string/muc_details_other_members" - android:textColor="@color/primarytext"/> + android:paddingBottom="8dp" > - <LinearLayout - android:id="@+id/muc_members" - android:layout_width="fill_parent" - android:layout_height="0dp" - android:layout_weight="1" - android:orientation="vertical" - android:divider="?android:dividerHorizontal" - android:showDividers="middle" - > - </LinearLayout> + <ImageView + android:id="@+id/your_photo" + android:layout_width="48dp" + android:layout_height="48dp" + android:layout_alignParentLeft="true" + android:src="@drawable/ic_profile" > + </ImageView> + + <LinearLayout + android:layout_width="fill_parent" + android:layout_height="wrap_content" + android:layout_centerVertical="true" + android:layout_toRightOf="@+id/your_photo" + android:orientation="vertical" + android:paddingLeft="8dp" > + + <TextView + android:id="@+id/muc_your_nick" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:singleLine="true" + android:text="hallo hallo" + android:textColor="@color/primarytext" + android:textSize="18sp" /> + + <TextView + android:id="@+id/muc_role" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:singleLine="true" + android:text="Participant" + android:textColor="@color/primarytext" + android:textSize="14sp" /> + </LinearLayout> + + <ImageButton + android:id="@+id/edit_nick_button" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_alignParentRight="true" + android:layout_centerVertical="true" + android:background="?android:selectableItemBackground" + android:src="@drawable/ic_action_edit_dark" + android:padding="8dp"/> + + </RelativeLayout> + + <LinearLayout + android:id="@+id/muc_more_details" + android:layout_width="fill_parent" + android:layout_height="fill_parent" + android:orientation="vertical" > + + <TextView + android:id="@+id/muc_participants_header" + style="@style/sectionHeader" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:paddingLeft="8dp" + android:paddingRight="8dp" + android:paddingTop="8dp" + android:text="@string/muc_details_other_members" /> + + <LinearLayout + android:id="@+id/muc_members" + android:layout_width="fill_parent" + android:layout_height="0dp" + android:layout_weight="1" + android:divider="?android:dividerHorizontal" + android:orientation="vertical" + android:showDividers="middle" > + </LinearLayout> + </LinearLayout> + + <Button + android:id="@+id/invite" + style="?android:attr/buttonStyleSmall" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center_horizontal" + android:layout_marginTop="24dp" + android:text="@string/invite_contacts" /> </LinearLayout> - <Button - android:layout_marginTop="24dp" - android:id="@+id/invite" - style="?android:attr/buttonStyleSmall" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:text="@string/invite_contacts" - android:layout_gravity="center_horizontal"/> -</LinearLayout> </ScrollView>
\ No newline at end of file diff --git a/res/layout/edit_contact_name.xml b/res/layout/edit_contact_name.xml deleted file mode 100644 index 42f0fb88..00000000 --- a/res/layout/edit_contact_name.xml +++ /dev/null @@ -1,28 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:orientation="vertical" - android:padding="8dp"> - - <TextView - android:id="@+id/textView1" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:text="@string/enter_new_name" - android:textColor="@color/primarytext" - android:textSize="18sp" /> - - <EditText - android:paddingTop="16dp" - android:paddingBottom="8dp" - android:id="@+id/editText1" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:ems="10" - android:inputType="textPersonName" > - - <requestFocus /> - </EditText> - -</LinearLayout> diff --git a/res/layout/quickedit.xml b/res/layout/quickedit.xml new file mode 100644 index 00000000..07a7ac3b --- /dev/null +++ b/res/layout/quickedit.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="utf-8"?> +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical" + android:padding="16dp"> + <EditText + android:id="@+id/editor" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:ems="10" + android:inputType="textPersonName" + android:textColor="@color/primarytext"> + + <requestFocus /> + </EditText> + +</LinearLayout> diff --git a/res/menu/muc_details.xml b/res/menu/muc_details.xml index 4f9b6da0..685109cd 100644 --- a/res/menu/muc_details.xml +++ b/res/menu/muc_details.xml @@ -1,6 +1,12 @@ <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" > <item + android:id="@+id/action_edit_subject" + android:orderInCategory="10" + android:showAsAction="always" + android:icon="@drawable/ic_action_edit" + android:title="@string/action_edit_subject" /> + <item android:id="@+id/action_accounts" android:orderInCategory="90" android:showAsAction="never" diff --git a/res/values/colors.xml b/res/values/colors.xml index 4ede1c10..b6477939 100644 --- a/res/values/colors.xml +++ b/res/values/colors.xml @@ -1,5 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> <resources> + <color name="primary" type="color">#ff259b24</color> + <color name="primarydark" type="color">#ff0a7e07</color> <color name="primarytext" type="color">#de000000</color> <color name="secondarytext" type="color">#8a000000</color> <color name="ondarktext" type="color">#fffafafa</color> diff --git a/res/values/strings.xml b/res/values/strings.xml index 5aa7afe1..26e5dda5 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -270,4 +270,6 @@ <string name="save_as_bookmark">Save as bookmark</string> <string name="delete_bookmark">Delete bookmark</string> <string name="bookmark_already_exists">This bookmark already exists</string> + <string name="you">You</string> + <string name="action_edit_subject">Edit conference subject</string> </resources> diff --git a/res/values/styles.xml b/res/values/styles.xml index 1468283e..a827fe36 100644 --- a/res/values/styles.xml +++ b/res/values/styles.xml @@ -6,14 +6,14 @@ <item name="android:layout_marginTop">8dp</item> <item name="android:textSize">14sp</item> <item name="android:textAllCaps">true</item> - <item name="android:textColor">#5b5b5b</item> + <item name="android:textColor">@color/primarytext</item> <item name="android:textStyle">bold</item> </style> <style name="Divider"> <item name="android:layout_width">match_parent</item> <item name="android:layout_height">1.5dp</item> - <item name="android:background">#b7b7b7</item> + <item name="android:background">@color/divider</item> </style> </resources>
\ No newline at end of file diff --git a/res/values/themes.xml b/res/values/themes.xml index 0c4ddc39..97f1db8f 100644 --- a/res/values/themes.xml +++ b/res/values/themes.xml @@ -8,8 +8,8 @@ </style> <style name="ConversationsActionBar" parent="@android:style/Widget.Holo.Light.ActionBar.Solid.Inverse"> - <item name="android:background">#259b24</item> - <item name="android:backgroundStacked">#0a7e07</item> + <item name="android:background">@color/primary</item> + <item name="android:backgroundStacked">@color/primarydark</item> <item name="android:displayOptions">showHome|homeAsUp|showTitle</item> <item name="android:icon">@android:color/transparent</item> </style> diff --git a/src/eu/siacs/conversations/entities/MucOptions.java b/src/eu/siacs/conversations/entities/MucOptions.java index 3c5190de..766300ff 100644 --- a/src/eu/siacs/conversations/entities/MucOptions.java +++ b/src/eu/siacs/conversations/entities/MucOptions.java @@ -87,7 +87,7 @@ public class MucOptions { private boolean aboutToRename = false; private User self = new User(); private String subject = null; - private String nick; + private String joinnick; public MucOptions(Account account) { this.account = account; @@ -124,10 +124,16 @@ public class MucOptions { user.setAffiliation(item.getAttribute("affiliation")); user.setRole(item.getAttribute("role")); user.setName(name); - if (name.equals(getJoinNick())) { + if (name.equals(this.joinnick)) { this.isOnline = true; this.error = 0; self = user; + if (aboutToRename) { + if (renameListener!=null) { + renameListener.onRename(true); + } + aboutToRename = false; + } } else { addUser(user); } @@ -146,16 +152,6 @@ public class MucOptions { } } } else if (type.equals("unavailable")) { - if (name.equals(self.getName())) { - Element item = packet.findChild("x","http://jabber.org/protocol/muc#user").findChild("item"); - String nick = item.getAttribute("nick"); - if (nick!=null) { - aboutToRename = false; - if (renameListener!=null) { - renameListener.onRename(true); - } - } - } deleteUser(packet.getAttribute("from").split("/")[1]); } else if (type.equals("error")) { Element error = packet.findChild("error"); @@ -191,10 +187,6 @@ public class MucOptions { } } - public String getJoinNick() { - return this.nick; - } - public String getActualNick() { if (this.self.getName()!=null) { return this.self.getName(); @@ -204,7 +196,7 @@ public class MucOptions { } public void setJoinNick(String nick) { - this.nick = nick; + this.joinnick = nick; } public void setConversation(Conversation conversation) { @@ -282,6 +274,6 @@ public class MucOptions { } public String getJoinJid() { - return this.conversation.getContactJid().split("/")[0]+"/"+this.getJoinNick(); + return this.conversation.getContactJid().split("/")[0]+"/"+this.joinnick; } }
\ No newline at end of file diff --git a/src/eu/siacs/conversations/ui/ContactDetailsActivity.java b/src/eu/siacs/conversations/ui/ContactDetailsActivity.java index 9321f229..3413353d 100644 --- a/src/eu/siacs/conversations/ui/ContactDetailsActivity.java +++ b/src/eu/siacs/conversations/ui/ContactDetailsActivity.java @@ -141,15 +141,15 @@ public class ContactDetailsActivity extends XmppActivity { break; case R.id.action_edit_contact: if (contact.getSystemAccount() == null) { - - View view = (View) getLayoutInflater().inflate( - R.layout.edit_contact_name, null); - name = (EditText) view.findViewById(R.id.editText1); - name.setText(contact.getDisplayName()); - builder.setView(view).setTitle(contact.getJid()) - .setPositiveButton(getString(R.string.edit), editContactNameListener) - .create().show(); - + quickEdit(contact.getDisplayName(), new OnValueEdited() { + + @Override + public void onValueEdited(String value) { + contact.setServerName(value); + activity.xmppConnectionService.pushContactToServer(contact); + populateView(); + } + }); } else { Intent intent = new Intent(Intent.ACTION_EDIT); String[] systemAccount = contact.getSystemAccount().split("#"); diff --git a/src/eu/siacs/conversations/ui/ConversationFragment.java b/src/eu/siacs/conversations/ui/ConversationFragment.java index a21246af..47c764ac 100644 --- a/src/eu/siacs/conversations/ui/ConversationFragment.java +++ b/src/eu/siacs/conversations/ui/ConversationFragment.java @@ -654,34 +654,6 @@ public class ConversationFragment extends Fragment { activity.invalidateOptionsMenu(); } } - if (conversation.getMode() == Conversation.MODE_MULTI) { - activity.xmppConnectionService - .setOnRenameListener(new OnRenameListener() { - - @Override - public void onRename(final boolean success) { - activity.xmppConnectionService - .updateConversation(conversation); - getActivity().runOnUiThread(new Runnable() { - - @Override - public void run() { - if (success) { - Toast.makeText( - getActivity(), - getString(R.string.your_nick_has_been_changed), - Toast.LENGTH_SHORT).show(); - } else { - Toast.makeText( - getActivity(), - getString(R.string.nick_in_use), - Toast.LENGTH_SHORT).show(); - } - } - }); - } - }); - } } private void decryptMessage(Message message) { diff --git a/src/eu/siacs/conversations/ui/MucDetailsActivity.java b/src/eu/siacs/conversations/ui/MucDetailsActivity.java index a81e49d6..65f70a6d 100644 --- a/src/eu/siacs/conversations/ui/MucDetailsActivity.java +++ b/src/eu/siacs/conversations/ui/MucDetailsActivity.java @@ -9,108 +9,124 @@ import eu.siacs.conversations.R; import eu.siacs.conversations.crypto.PgpEngine; import eu.siacs.conversations.entities.Conversation; import eu.siacs.conversations.entities.MucOptions; +import eu.siacs.conversations.entities.MucOptions.OnRenameListener; import eu.siacs.conversations.entities.MucOptions.User; +import eu.siacs.conversations.services.XmppConnectionService.OnConversationUpdate; import eu.siacs.conversations.utils.UIHelper; import eu.siacs.conversations.xmpp.stanzas.MessagePacket; import android.app.PendingIntent; import android.content.Context; -import android.content.SharedPreferences; import android.content.IntentSender.SendIntentException; +import android.graphics.Bitmap; import android.os.Bundle; -import android.preference.PreferenceManager; -import android.util.Log; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; -import android.widget.EditText; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; +import android.widget.Toast; public class MucDetailsActivity extends XmppActivity { public static final String ACTION_VIEW_MUC = "view_muc"; private Conversation conversation; - private EditText mYourNick; - private EditText mSubject; + private TextView mYourNick; + private ImageView mYourPhoto; + private ImageButton mEditNickButton; private TextView mRoleAffiliaton; private TextView mFullJid; private LinearLayout membersView; private LinearLayout mMoreDetails; private Button mInviteButton; private String uuid = null; - private OnClickListener changeNickListener = new OnClickListener() { - @Override - public void onClick(View arg0) { - MucOptions options = conversation.getMucOptions(); - String nick = mYourNick.getText().toString(); - if (!options.getActualNick().equals(nick)) { - xmppConnectionService.renameInMuc(conversation, nick); - finish(); - } - } - }; - - private OnClickListener changeSubjectListener = new OnClickListener() { + private OnClickListener inviteListener = new OnClickListener() { @Override - public void onClick(View arg0) { - String subject = mSubject.getText().toString(); - MucOptions options = conversation.getMucOptions(); - if (!subject.equals(options.getSubject())) { - MessagePacket packet = xmppConnectionService.getMessageGenerator().conferenceSubject(conversation, subject); - xmppConnectionService.sendMessagePacket(conversation.getAccount(), packet); - finish(); - } + public void onClick(View v) { + /* + * Intent intent = new Intent(getApplicationContext(), + * ContactsActivity.class); intent.setAction("invite"); + * intent.putExtra("uuid",conversation.getUuid()); + * startActivity(intent); + */ } }; - - private OnClickListener inviteListener = new OnClickListener() { + + private List<User> users = new ArrayList<MucOptions.User>(); + private OnConversationUpdate onConvChanged = new OnConversationUpdate() { @Override - public void onClick(View v) { - /*Intent intent = new Intent(getApplicationContext(), - ContactsActivity.class); - intent.setAction("invite"); - intent.putExtra("uuid",conversation.getUuid()); - startActivity(intent);*/ + public void onConversationUpdate() { + runOnUiThread(new Runnable() { + + @Override + public void run() { + populateView(); + } + }); } }; - - private List<User> users = new ArrayList<MucOptions.User>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_muc_details); - mYourNick = (EditText) findViewById(R.id.muc_your_nick); + mYourNick = (TextView) findViewById(R.id.muc_your_nick); + mYourPhoto = (ImageView) findViewById(R.id.your_photo); + mEditNickButton = (ImageButton) findViewById(R.id.edit_nick_button); mFullJid = (TextView) findViewById(R.id.muc_jabberid); - ImageButton editNickButton = (ImageButton) findViewById(R.id.muc_edit_nick); - editNickButton.setOnClickListener(this.changeNickListener); - ImageButton editSubjectButton = (ImageButton) findViewById(R.id.muc_edit_subject); - editSubjectButton.setOnClickListener(this.changeSubjectListener); membersView = (LinearLayout) findViewById(R.id.muc_members); mMoreDetails = (LinearLayout) findViewById(R.id.muc_more_details); mMoreDetails.setVisibility(View.GONE); - mSubject = (EditText) findViewById(R.id.muc_subject); mInviteButton = (Button) findViewById(R.id.invite); mInviteButton.setOnClickListener(inviteListener); getActionBar().setHomeButtonEnabled(true); getActionBar().setDisplayHomeAsUpEnabled(true); - + mEditNickButton.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + quickEdit(conversation.getMucOptions().getActualNick(), + new OnValueEdited() { + + @Override + public void onValueEdited(String value) { + xmppConnectionService.renameInMuc(conversation, + value); + } + }); + } + }); } - + @Override public boolean onOptionsItemSelected(MenuItem menuItem) { - switch (menuItem.getItemId()) { - case android.R.id.home: - finish(); - } - return super.onOptionsItemSelected(menuItem); + switch (menuItem.getItemId()) { + case android.R.id.home: + finish(); + break; + case R.id.action_edit_subject: + if (conversation != null) { + quickEdit(conversation.getName(true), new OnValueEdited() { + + @Override + public void onValueEdited(String value) { + MessagePacket packet = xmppConnectionService + .getMessageGenerator().conferenceSubject( + conversation, value); + xmppConnectionService.sendMessagePacket( + conversation.getAccount(), packet); + } + }); + } + break; + } + return super.onOptionsItemSelected(menuItem); } public String getReadableRole(int role) { @@ -125,7 +141,7 @@ public class MucDetailsActivity extends XmppActivity { return ""; } } - + @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.muc_details, menu); @@ -134,8 +150,7 @@ public class MucDetailsActivity extends XmppActivity { @Override void onBackendConnected() { - SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); - boolean useSubject = preferences.getBoolean("use_subject_in_muc", true); + registerListener(); if (getIntent().getAction().equals(ACTION_VIEW_MUC)) { this.uuid = getIntent().getExtras().getString("uuid"); } @@ -146,69 +161,117 @@ public class MucDetailsActivity extends XmppActivity { } } if (this.conversation != null) { - mSubject.setText(conversation.getMucOptions().getSubject()); - setTitle(conversation.getName(useSubject)); - mFullJid.setText(conversation.getContactJid().split("/")[0]); - mYourNick.setText(conversation.getMucOptions().getActualNick()); - mRoleAffiliaton = (TextView) findViewById(R.id.muc_role); - if (conversation.getMucOptions().online()) { - mMoreDetails.setVisibility(View.VISIBLE); - User self = conversation.getMucOptions().getSelf(); - switch (self.getAffiliation()) { - case User.AFFILIATION_ADMIN: - mRoleAffiliaton.setText(getReadableRole(self.getRole()) - + " (" + getString(R.string.admin) + ")"); - break; - case User.AFFILIATION_OWNER: - mRoleAffiliaton.setText(getReadableRole(self.getRole()) - + " (" + getString(R.string.owner) + ")"); - break; - default: - mRoleAffiliaton - .setText(getReadableRole(self.getRole())); - break; + populateView(); + } + } + } + + @Override + protected void onStop() { + if (xmppConnectionServiceBound) { + xmppConnectionService.removeOnConversationListChangedListener(); + } + super.onStop(); + } + + protected void registerListener() { + if (xmppConnectionServiceBound) { + xmppConnectionService + .setOnConversationListChangedListener(this.onConvChanged); + xmppConnectionService.setOnRenameListener(new OnRenameListener() { + + @Override + public void onRename(final boolean success) { + runOnUiThread(new Runnable() { + + @Override + public void run() { + populateView(); + if (success) { + Toast.makeText(MucDetailsActivity.this, + getString(R.string.your_nick_has_been_changed), + Toast.LENGTH_SHORT).show(); + } else { + Toast.makeText(MucDetailsActivity.this, + getString(R.string.nick_in_use), + Toast.LENGTH_SHORT).show(); + } } - } - this.users.clear(); - this.users.addAll(conversation.getMucOptions().getUsers()); - LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); - membersView.removeAllViews(); - for(final User contact : conversation.getMucOptions().getUsers()) { - View view = (View) inflater.inflate(R.layout.contact, null); - TextView displayName = (TextView) view.findViewById(R.id.contact_display_name); - TextView key = (TextView) view.findViewById(R.id.key); - displayName.setText(contact.getName()); - TextView role = (TextView) view.findViewById(R.id.contact_jid); - role.setText(getReadableRole(contact.getRole())); - if (contact.getPgpKeyId()!=0) { - key.setVisibility(View.VISIBLE); - key.setOnClickListener(new OnClickListener() { - - @Override - public void onClick(View v) { - PgpEngine pgp = xmppConnectionService.getPgpEngine(); - if (pgp!=null) { - PendingIntent intent = pgp.getIntentForKey(conversation.getAccount(), contact.getPgpKeyId()); - if (intent!=null) { - try { - startIntentSenderForResult(intent.getIntentSender(), 0, null, 0, 0, 0); - } catch (SendIntentException e) { - - } - } - } - } - }); - key.setText(OpenPgpUtils.convertKeyIdToHex(contact.getPgpKeyId())); + }); + } + }); + } + } + + private void populateView() { + mYourPhoto.setImageBitmap(UIHelper.getContactPicture(conversation + .getMucOptions().getActualNick(), 48, this, false)); + setTitle(conversation.getName(true)); + mFullJid.setText(conversation.getContactJid().split("/")[0]); + mYourNick.setText(conversation.getMucOptions().getActualNick()); + mRoleAffiliaton = (TextView) findViewById(R.id.muc_role); + if (conversation.getMucOptions().online()) { + mMoreDetails.setVisibility(View.VISIBLE); + User self = conversation.getMucOptions().getSelf(); + switch (self.getAffiliation()) { + case User.AFFILIATION_ADMIN: + mRoleAffiliaton.setText(getReadableRole(self.getRole()) + " (" + + getString(R.string.admin) + ")"); + break; + case User.AFFILIATION_OWNER: + mRoleAffiliaton.setText(getReadableRole(self.getRole()) + " (" + + getString(R.string.owner) + ")"); + break; + default: + mRoleAffiliaton.setText(getReadableRole(self.getRole())); + break; + } + } + this.users.clear(); + this.users.addAll(conversation.getMucOptions().getUsers()); + LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); + membersView.removeAllViews(); + for (final User contact : conversation.getMucOptions().getUsers()) { + View view = (View) inflater.inflate(R.layout.contact, null); + TextView displayName = (TextView) view + .findViewById(R.id.contact_display_name); + TextView key = (TextView) view.findViewById(R.id.key); + displayName.setText(contact.getName()); + TextView role = (TextView) view.findViewById(R.id.contact_jid); + role.setText(getReadableRole(contact.getRole())); + if (contact.getPgpKeyId() != 0) { + key.setVisibility(View.VISIBLE); + key.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + viewPgpKey(contact); } - ImageView imageView = (ImageView) view - .findViewById(R.id.contact_photo); - imageView.setImageBitmap(UIHelper.getContactPicture(contact.getName(), 48,this.getApplicationContext(), false)); - membersView.addView(view); + }); + key.setText(OpenPgpUtils.convertKeyIdToHex(contact + .getPgpKeyId())); + } + Bitmap bm = UIHelper.getContactPicture(contact.getName(), 48, this, + false); + ImageView iv = (ImageView) view.findViewById(R.id.contact_photo); + iv.setImageBitmap(bm); + membersView.addView(view); + } + } + + private void viewPgpKey(User user) { + PgpEngine pgp = xmppConnectionService.getPgpEngine(); + if (pgp != null) { + PendingIntent intent = pgp.getIntentForKey( + conversation.getAccount(), user.getPgpKeyId()); + if (intent != null) { + try { + startIntentSenderForResult(intent.getIntentSender(), 0, + null, 0, 0, 0); + } catch (SendIntentException e) { + } } - } else { - Log.d("xmppService","uuid in muc details was null"); } } } diff --git a/src/eu/siacs/conversations/ui/XmppActivity.java b/src/eu/siacs/conversations/ui/XmppActivity.java index 217bae55..2592bebc 100644 --- a/src/eu/siacs/conversations/ui/XmppActivity.java +++ b/src/eu/siacs/conversations/ui/XmppActivity.java @@ -23,10 +23,10 @@ import android.content.ServiceConnection; import android.net.Uri; import android.os.Bundle; import android.os.IBinder; -import android.util.Log; import android.view.MenuItem; import android.view.View; import android.view.inputmethod.InputMethodManager; +import android.widget.EditText; public abstract class XmppActivity extends Activity { @@ -37,6 +37,10 @@ public abstract class XmppActivity extends Activity { public XmppConnectionService xmppConnectionService; public boolean xmppConnectionServiceBound = false; protected boolean handledViewIntent = false; + + protected interface OnValueEdited { + public void onValueEdited(String value); + } protected ServiceConnection mConnection = new ServiceConnection() { @@ -193,10 +197,7 @@ public abstract class XmppActivity extends Activity { try { startIntentSenderForResult(pi.getIntentSender(), REQUEST_ANNOUNCE_PGP, null, 0, 0, 0); - } catch (SendIntentException e) { - Log.d("xmppService", - "coulnd start intent for pgp anncouncment"); - } + } catch (SendIntentException e) {} } @Override @@ -256,6 +257,26 @@ public abstract class XmppActivity extends Activity { builder.create().show(); } + protected void quickEdit(final String previousValue, final OnValueEdited callback) { + AlertDialog.Builder builder = new AlertDialog.Builder(this); + View view = (View) getLayoutInflater().inflate(R.layout.quickedit, null); + final EditText editor = (EditText) view.findViewById(R.id.editor); + editor.setText(previousValue); + builder.setView(view); + builder.setNegativeButton(R.string.cancel, null); + builder.setPositiveButton(R.string.edit, new OnClickListener() { + + @Override + public void onClick(DialogInterface dialog, int which) { + String value = editor.getText().toString(); + if (!previousValue.equals(value) && value.trim().length() > 0) { + callback.onValueEdited(value); + } + } + }); + builder.create().show(); + } + public void selectPresence(final Conversation conversation, final OnPresenceSelected listener) { Contact contact = conversation.getContact(); |