redesigned muc details a little bit

This commit is contained in:
iNPUTmice 2014-07-16 12:34:09 +02:00
parent eb8253d49a
commit e79a34b651
17 changed files with 374 additions and 345 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 884 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 587 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

@ -2,147 +2,128 @@
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="@color/secondarybackground"> android:background="@color/primarybackground" >
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView
style="@style/sectionHeader"
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" >
<EditText
android:id="@+id/muc_subject"
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: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"/>
<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" >
<EditText
android:id="@+id/muc_your_nick"
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: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: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"/>
<LinearLayout <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>
</LinearLayout>
<Button
android:layout_marginTop="24dp"
android:id="@+id/invite"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/invite_contacts" android:orientation="vertical" >
android:layout_gravity="center_horizontal"/>
</LinearLayout> <TextView
style="@style/sectionHeader"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="8dp"
android:text="@string/muc_details_conference" />
<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"/>
<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/you" />
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="?android:attr/activatedBackgroundIndicator"
android:padding="8dp"
android:paddingBottom="8dp" >
<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>
</ScrollView> </ScrollView>

View File

@ -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>

18
res/layout/quickedit.xml Normal file
View File

@ -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>

View File

@ -1,5 +1,11 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" > <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 <item
android:id="@+id/action_accounts" android:id="@+id/action_accounts"
android:orderInCategory="90" android:orderInCategory="90"

View File

@ -1,5 +1,7 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources> <resources>
<color name="primary" type="color">#ff259b24</color>
<color name="primarydark" type="color">#ff0a7e07</color>
<color name="primarytext" type="color">#de000000</color> <color name="primarytext" type="color">#de000000</color>
<color name="secondarytext" type="color">#8a000000</color> <color name="secondarytext" type="color">#8a000000</color>
<color name="ondarktext" type="color">#fffafafa</color> <color name="ondarktext" type="color">#fffafafa</color>

View File

@ -270,4 +270,6 @@
<string name="save_as_bookmark">Save as bookmark</string> <string name="save_as_bookmark">Save as bookmark</string>
<string name="delete_bookmark">Delete bookmark</string> <string name="delete_bookmark">Delete bookmark</string>
<string name="bookmark_already_exists">This bookmark already exists</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> </resources>

View File

@ -6,14 +6,14 @@
<item name="android:layout_marginTop">8dp</item> <item name="android:layout_marginTop">8dp</item>
<item name="android:textSize">14sp</item> <item name="android:textSize">14sp</item>
<item name="android:textAllCaps">true</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> <item name="android:textStyle">bold</item>
</style> </style>
<style name="Divider"> <style name="Divider">
<item name="android:layout_width">match_parent</item> <item name="android:layout_width">match_parent</item>
<item name="android:layout_height">1.5dp</item> <item name="android:layout_height">1.5dp</item>
<item name="android:background">#b7b7b7</item> <item name="android:background">@color/divider</item>
</style> </style>
</resources> </resources>

View File

@ -8,8 +8,8 @@
</style> </style>
<style name="ConversationsActionBar" parent="@android:style/Widget.Holo.Light.ActionBar.Solid.Inverse"> <style name="ConversationsActionBar" parent="@android:style/Widget.Holo.Light.ActionBar.Solid.Inverse">
<item name="android:background">#259b24</item> <item name="android:background">@color/primary</item>
<item name="android:backgroundStacked">#0a7e07</item> <item name="android:backgroundStacked">@color/primarydark</item>
<item name="android:displayOptions">showHome|homeAsUp|showTitle</item> <item name="android:displayOptions">showHome|homeAsUp|showTitle</item>
<item name="android:icon">@android:color/transparent</item> <item name="android:icon">@android:color/transparent</item>
</style> </style>

View File

@ -87,7 +87,7 @@ public class MucOptions {
private boolean aboutToRename = false; private boolean aboutToRename = false;
private User self = new User(); private User self = new User();
private String subject = null; private String subject = null;
private String nick; private String joinnick;
public MucOptions(Account account) { public MucOptions(Account account) {
this.account = account; this.account = account;
@ -124,10 +124,16 @@ public class MucOptions {
user.setAffiliation(item.getAttribute("affiliation")); user.setAffiliation(item.getAttribute("affiliation"));
user.setRole(item.getAttribute("role")); user.setRole(item.getAttribute("role"));
user.setName(name); user.setName(name);
if (name.equals(getJoinNick())) { if (name.equals(this.joinnick)) {
this.isOnline = true; this.isOnline = true;
this.error = 0; this.error = 0;
self = user; self = user;
if (aboutToRename) {
if (renameListener!=null) {
renameListener.onRename(true);
}
aboutToRename = false;
}
} else { } else {
addUser(user); addUser(user);
} }
@ -146,16 +152,6 @@ public class MucOptions {
} }
} }
} else if (type.equals("unavailable")) { } 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]); deleteUser(packet.getAttribute("from").split("/")[1]);
} else if (type.equals("error")) { } else if (type.equals("error")) {
Element error = packet.findChild("error"); Element error = packet.findChild("error");
@ -191,10 +187,6 @@ public class MucOptions {
} }
} }
public String getJoinNick() {
return this.nick;
}
public String getActualNick() { public String getActualNick() {
if (this.self.getName()!=null) { if (this.self.getName()!=null) {
return this.self.getName(); return this.self.getName();
@ -204,7 +196,7 @@ public class MucOptions {
} }
public void setJoinNick(String nick) { public void setJoinNick(String nick) {
this.nick = nick; this.joinnick = nick;
} }
public void setConversation(Conversation conversation) { public void setConversation(Conversation conversation) {
@ -282,6 +274,6 @@ public class MucOptions {
} }
public String getJoinJid() { public String getJoinJid() {
return this.conversation.getContactJid().split("/")[0]+"/"+this.getJoinNick(); return this.conversation.getContactJid().split("/")[0]+"/"+this.joinnick;
} }
} }

View File

@ -141,15 +141,15 @@ public class ContactDetailsActivity extends XmppActivity {
break; break;
case R.id.action_edit_contact: case R.id.action_edit_contact:
if (contact.getSystemAccount() == null) { if (contact.getSystemAccount() == null) {
quickEdit(contact.getDisplayName(), new OnValueEdited() {
View view = (View) getLayoutInflater().inflate(
R.layout.edit_contact_name, null); @Override
name = (EditText) view.findViewById(R.id.editText1); public void onValueEdited(String value) {
name.setText(contact.getDisplayName()); contact.setServerName(value);
builder.setView(view).setTitle(contact.getJid()) activity.xmppConnectionService.pushContactToServer(contact);
.setPositiveButton(getString(R.string.edit), editContactNameListener) populateView();
.create().show(); }
});
} else { } else {
Intent intent = new Intent(Intent.ACTION_EDIT); Intent intent = new Intent(Intent.ACTION_EDIT);
String[] systemAccount = contact.getSystemAccount().split("#"); String[] systemAccount = contact.getSystemAccount().split("#");

View File

@ -654,34 +654,6 @@ public class ConversationFragment extends Fragment {
activity.invalidateOptionsMenu(); 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) { private void decryptMessage(Message message) {

View File

@ -9,108 +9,124 @@ import eu.siacs.conversations.R;
import eu.siacs.conversations.crypto.PgpEngine; import eu.siacs.conversations.crypto.PgpEngine;
import eu.siacs.conversations.entities.Conversation; import eu.siacs.conversations.entities.Conversation;
import eu.siacs.conversations.entities.MucOptions; import eu.siacs.conversations.entities.MucOptions;
import eu.siacs.conversations.entities.MucOptions.OnRenameListener;
import eu.siacs.conversations.entities.MucOptions.User; import eu.siacs.conversations.entities.MucOptions.User;
import eu.siacs.conversations.services.XmppConnectionService.OnConversationUpdate;
import eu.siacs.conversations.utils.UIHelper; import eu.siacs.conversations.utils.UIHelper;
import eu.siacs.conversations.xmpp.stanzas.MessagePacket; import eu.siacs.conversations.xmpp.stanzas.MessagePacket;
import android.app.PendingIntent; import android.app.PendingIntent;
import android.content.Context; import android.content.Context;
import android.content.SharedPreferences;
import android.content.IntentSender.SendIntentException; import android.content.IntentSender.SendIntentException;
import android.graphics.Bitmap;
import android.os.Bundle; import android.os.Bundle;
import android.preference.PreferenceManager;
import android.util.Log;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.Menu; import android.view.Menu;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.view.View.OnClickListener; import android.view.View.OnClickListener;
import android.widget.Button; import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton; import android.widget.ImageButton;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.TextView; import android.widget.TextView;
import android.widget.Toast;
public class MucDetailsActivity extends XmppActivity { public class MucDetailsActivity extends XmppActivity {
public static final String ACTION_VIEW_MUC = "view_muc"; public static final String ACTION_VIEW_MUC = "view_muc";
private Conversation conversation; private Conversation conversation;
private EditText mYourNick; private TextView mYourNick;
private EditText mSubject; private ImageView mYourPhoto;
private ImageButton mEditNickButton;
private TextView mRoleAffiliaton; private TextView mRoleAffiliaton;
private TextView mFullJid; private TextView mFullJid;
private LinearLayout membersView; private LinearLayout membersView;
private LinearLayout mMoreDetails; private LinearLayout mMoreDetails;
private Button mInviteButton; private Button mInviteButton;
private String uuid = null; 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() {
@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();
}
}
};
private OnClickListener inviteListener = new OnClickListener() { private OnClickListener inviteListener = new OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
/*Intent intent = new Intent(getApplicationContext(), /*
ContactsActivity.class); * Intent intent = new Intent(getApplicationContext(),
intent.setAction("invite"); * ContactsActivity.class); intent.setAction("invite");
intent.putExtra("uuid",conversation.getUuid()); * intent.putExtra("uuid",conversation.getUuid());
startActivity(intent);*/ * startActivity(intent);
*/
} }
}; };
private List<User> users = new ArrayList<MucOptions.User>(); private List<User> users = new ArrayList<MucOptions.User>();
private OnConversationUpdate onConvChanged = new OnConversationUpdate() {
@Override
public void onConversationUpdate() {
runOnUiThread(new Runnable() {
@Override
public void run() {
populateView();
}
});
}
};
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setContentView(R.layout.activity_muc_details); 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); 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); membersView = (LinearLayout) findViewById(R.id.muc_members);
mMoreDetails = (LinearLayout) findViewById(R.id.muc_more_details); mMoreDetails = (LinearLayout) findViewById(R.id.muc_more_details);
mMoreDetails.setVisibility(View.GONE); mMoreDetails.setVisibility(View.GONE);
mSubject = (EditText) findViewById(R.id.muc_subject);
mInviteButton = (Button) findViewById(R.id.invite); mInviteButton = (Button) findViewById(R.id.invite);
mInviteButton.setOnClickListener(inviteListener); mInviteButton.setOnClickListener(inviteListener);
getActionBar().setHomeButtonEnabled(true); getActionBar().setHomeButtonEnabled(true);
getActionBar().setDisplayHomeAsUpEnabled(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 @Override
public boolean onOptionsItemSelected(MenuItem menuItem) { public boolean onOptionsItemSelected(MenuItem menuItem) {
switch (menuItem.getItemId()) { switch (menuItem.getItemId()) {
case android.R.id.home: case android.R.id.home:
finish(); finish();
} break;
return super.onOptionsItemSelected(menuItem); 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) { public String getReadableRole(int role) {
@ -125,7 +141,7 @@ public class MucDetailsActivity extends XmppActivity {
return ""; return "";
} }
} }
@Override @Override
public boolean onCreateOptionsMenu(Menu menu) { public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.muc_details, menu); getMenuInflater().inflate(R.menu.muc_details, menu);
@ -134,8 +150,7 @@ public class MucDetailsActivity extends XmppActivity {
@Override @Override
void onBackendConnected() { void onBackendConnected() {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); registerListener();
boolean useSubject = preferences.getBoolean("use_subject_in_muc", true);
if (getIntent().getAction().equals(ACTION_VIEW_MUC)) { if (getIntent().getAction().equals(ACTION_VIEW_MUC)) {
this.uuid = getIntent().getExtras().getString("uuid"); this.uuid = getIntent().getExtras().getString("uuid");
} }
@ -146,69 +161,117 @@ public class MucDetailsActivity extends XmppActivity {
} }
} }
if (this.conversation != null) { if (this.conversation != null) {
mSubject.setText(conversation.getMucOptions().getSubject()); populateView();
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()) { @Override
mMoreDetails.setVisibility(View.VISIBLE); protected void onStop() {
User self = conversation.getMucOptions().getSelf(); if (xmppConnectionServiceBound) {
switch (self.getAffiliation()) { xmppConnectionService.removeOnConversationListChangedListener();
case User.AFFILIATION_ADMIN: }
mRoleAffiliaton.setText(getReadableRole(self.getRole()) super.onStop();
+ " (" + getString(R.string.admin) + ")"); }
break;
case User.AFFILIATION_OWNER: protected void registerListener() {
mRoleAffiliaton.setText(getReadableRole(self.getRole()) if (xmppConnectionServiceBound) {
+ " (" + getString(R.string.owner) + ")"); xmppConnectionService
break; .setOnConversationListChangedListener(this.onConvChanged);
default: xmppConnectionService.setOnRenameListener(new OnRenameListener() {
mRoleAffiliaton
.setText(getReadableRole(self.getRole())); @Override
break; 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); private void populateView() {
TextView displayName = (TextView) view.findViewById(R.id.contact_display_name); mYourPhoto.setImageBitmap(UIHelper.getContactPicture(conversation
TextView key = (TextView) view.findViewById(R.id.key); .getMucOptions().getActualNick(), 48, this, false));
displayName.setText(contact.getName()); setTitle(conversation.getName(true));
TextView role = (TextView) view.findViewById(R.id.contact_jid); mFullJid.setText(conversation.getContactJid().split("/")[0]);
role.setText(getReadableRole(contact.getRole())); mYourNick.setText(conversation.getMucOptions().getActualNick());
if (contact.getPgpKeyId()!=0) { mRoleAffiliaton = (TextView) findViewById(R.id.muc_role);
key.setVisibility(View.VISIBLE); if (conversation.getMucOptions().online()) {
key.setOnClickListener(new OnClickListener() { mMoreDetails.setVisibility(View.VISIBLE);
User self = conversation.getMucOptions().getSelf();
@Override switch (self.getAffiliation()) {
public void onClick(View v) { case User.AFFILIATION_ADMIN:
PgpEngine pgp = xmppConnectionService.getPgpEngine(); mRoleAffiliaton.setText(getReadableRole(self.getRole()) + " ("
if (pgp!=null) { + getString(R.string.admin) + ")");
PendingIntent intent = pgp.getIntentForKey(conversation.getAccount(), contact.getPgpKeyId()); break;
if (intent!=null) { case User.AFFILIATION_OWNER:
try { mRoleAffiliaton.setText(getReadableRole(self.getRole()) + " ("
startIntentSenderForResult(intent.getIntentSender(), 0, null, 0, 0, 0); + getString(R.string.owner) + ")");
} catch (SendIntentException e) { break;
default:
} mRoleAffiliaton.setText(getReadableRole(self.getRole()));
} break;
} }
} }
}); this.users.clear();
key.setText(OpenPgpUtils.convertKeyIdToHex(contact.getPgpKeyId())); 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); key.setText(OpenPgpUtils.convertKeyIdToHex(contact
imageView.setImageBitmap(UIHelper.getContactPicture(contact.getName(), 48,this.getApplicationContext(), false)); .getPgpKeyId()));
membersView.addView(view); }
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");
} }
} }
} }

View File

@ -23,10 +23,10 @@ import android.content.ServiceConnection;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.os.IBinder; import android.os.IBinder;
import android.util.Log;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.view.inputmethod.InputMethodManager; import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
public abstract class XmppActivity extends Activity { public abstract class XmppActivity extends Activity {
@ -37,6 +37,10 @@ public abstract class XmppActivity extends Activity {
public XmppConnectionService xmppConnectionService; public XmppConnectionService xmppConnectionService;
public boolean xmppConnectionServiceBound = false; public boolean xmppConnectionServiceBound = false;
protected boolean handledViewIntent = false; protected boolean handledViewIntent = false;
protected interface OnValueEdited {
public void onValueEdited(String value);
}
protected ServiceConnection mConnection = new ServiceConnection() { protected ServiceConnection mConnection = new ServiceConnection() {
@ -193,10 +197,7 @@ public abstract class XmppActivity extends Activity {
try { try {
startIntentSenderForResult(pi.getIntentSender(), startIntentSenderForResult(pi.getIntentSender(),
REQUEST_ANNOUNCE_PGP, null, 0, 0, 0); REQUEST_ANNOUNCE_PGP, null, 0, 0, 0);
} catch (SendIntentException e) { } catch (SendIntentException e) {}
Log.d("xmppService",
"coulnd start intent for pgp anncouncment");
}
} }
@Override @Override
@ -256,6 +257,26 @@ public abstract class XmppActivity extends Activity {
builder.create().show(); 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, public void selectPresence(final Conversation conversation,
final OnPresenceSelected listener) { final OnPresenceSelected listener) {
Contact contact = conversation.getContact(); Contact contact = conversation.getContact();