refactored account array adapter into seperate class. added account image

iNPUTmice created

Change summary

res/layout/account_row.xml                                |  61 
res/values/colors.xml                                     |   2 
src/eu/siacs/conversations/entities/Account.java          |   6 
src/eu/siacs/conversations/ui/ManageAccountActivity.java  | 475 +++-----
src/eu/siacs/conversations/ui/XmppActivity.java           |  12 
src/eu/siacs/conversations/ui/adapter/AccountAdapter.java | 101 +
6 files changed, 313 insertions(+), 344 deletions(-)

Detailed changes

res/layout/account_row.xml 🔗

@@ -2,55 +2,42 @@
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
-    android:padding="8dp"
-    android:background="?android:attr/activatedBackgroundIndicator">
+    android:background="?android:attr/activatedBackgroundIndicator"
+    android:padding="8dp" >
 
- 
+    <ImageView
+        android:id="@+id/account_image"
+        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_alignParentBottom="true"
-        android:layout_alignParentLeft="true"
-        android:layout_alignParentTop="true"
-        android:orientation="vertical">
+        android:layout_toRightOf="@+id/account_image"
+        android:layout_centerVertical="true"
+        android:orientation="vertical"
+        android:paddingLeft="8dp" >
 
         <TextView
             android:id="@+id/account_jid"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:textSize="18sp"
-            android:textColor="@color/primarytext"
+            android:scrollHorizontally="false"
             android:singleLine="true"
-	        android:scrollHorizontally="false"/>
+            android:textColor="@color/primarytext"
+            android:textSize="18sp" />
 
-        <LinearLayout
-            android:layout_width="match_parent"
+        <TextView
+            android:id="@+id/account_status"
+            android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:orientation="horizontal"
-            android:paddingTop="3dp">
-
-            <TextView
-                android:id="@+id/textView2"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:text="@string/account_status"
-                android:textStyle="bold"
-               	android:textSize="14sp"
-               	android:textColor="@color/primarytext"/>
-
-            <TextView
-                android:id="@+id/account_status"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:paddingLeft="4dp"
-                android:text="@string/account_status_unknown"
-                android:textStyle="bold"
-                android:textSize="14sp"/>
-
-        </LinearLayout>
-
+            android:text="@string/account_status_unknown"
+            android:textSize="14sp"
+            android:textColor="@color/secondarytext"
+            android:textStyle="bold"/>
     </LinearLayout>
 
-    
-</RelativeLayout>
+</RelativeLayout>

res/values/colors.xml 🔗

@@ -9,5 +9,5 @@
     <color name="secondarybackground" type="color">#ffeeeeee</color>
     <color name="darkbackground" type="color">#ff323232</color>
     <color name="divider">#1f000000</color>
-    <color name="red">#ffe51c23</color>
+    <color name="warningtext">#ffe51c23</color>
 </resources>

src/eu/siacs/conversations/entities/Account.java 🔗

@@ -12,10 +12,12 @@ import org.json.JSONException;
 import org.json.JSONObject;
 
 import eu.siacs.conversations.crypto.OtrEngine;
+import eu.siacs.conversations.utils.UIHelper;
 import eu.siacs.conversations.xmpp.XmppConnection;
 import android.content.ContentValues;
 import android.content.Context;
 import android.database.Cursor;
+import android.graphics.Bitmap;
 
 public class Account  extends AbstractEntity{
 	
@@ -318,4 +320,8 @@ public class Account  extends AbstractEntity{
 		}
 		return false;
 	}
+
+	public Bitmap getImage(Context context, int size) {
+		return UIHelper.getContactPicture(getJid(), size, context, false);
+	}
 }

src/eu/siacs/conversations/ui/ManageAccountActivity.java 🔗

@@ -7,26 +7,23 @@ import eu.siacs.conversations.R;
 import eu.siacs.conversations.entities.Account;
 import eu.siacs.conversations.services.XmppConnectionService.OnAccountUpdate;
 import eu.siacs.conversations.ui.EditAccountDialog.EditAccountListener;
+import eu.siacs.conversations.ui.adapter.AccountAdapter;
 import eu.siacs.conversations.xmpp.XmppConnection;
 import android.app.Activity;
 import android.app.AlertDialog;
-import android.content.Context;
 import android.content.DialogInterface;
 import android.content.DialogInterface.OnClickListener;
 import android.content.Intent;
 import android.os.Bundle;
 import android.os.SystemClock;
 import android.view.ActionMode;
-import android.view.LayoutInflater;
 import android.view.Menu;
 import android.view.MenuInflater;
 import android.view.MenuItem;
 import android.view.View;
-import android.view.ViewGroup;
 import android.widget.AdapterView;
 import android.widget.AdapterView.OnItemClickListener;
 import android.widget.AdapterView.OnItemLongClickListener;
-import android.widget.ArrayAdapter;
 import android.widget.ListView;
 import android.widget.TextView;
 
@@ -41,7 +38,7 @@ public class ManageAccountActivity extends XmppActivity {
 
 	protected List<Account> accountList = new ArrayList<Account>();
 	protected ListView accountListView;
-	protected ArrayAdapter<Account> accountListViewAdapter;
+	protected AccountAdapter mAccountAdapter;
 	protected OnAccountUpdate accountChanged = new OnAccountUpdate() {
 
 		@Override
@@ -52,12 +49,172 @@ public class ManageAccountActivity extends XmppActivity {
 
 				@Override
 				public void run() {
-					accountListViewAdapter.notifyDataSetChanged();
+					mAccountAdapter.notifyDataSetChanged();
 				}
 			});
 		}
 	};
 
+	protected ActionMode.Callback mActionModeCallback = new ActionMode.Callback() {
+
+		@Override
+		public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
+			if (selectedAccountForActionMode
+					.isOptionSet(Account.OPTION_DISABLED)) {
+				menu.findItem(R.id.mgmt_account_enable).setVisible(true);
+				menu.findItem(R.id.mgmt_account_disable).setVisible(false);
+			} else {
+				menu.findItem(R.id.mgmt_account_disable).setVisible(true);
+				menu.findItem(R.id.mgmt_account_enable).setVisible(false);
+			}
+			return true;
+		}
+
+		@Override
+		public void onDestroyActionMode(ActionMode mode) {
+			// TODO Auto-generated method stub
+
+		}
+
+		@Override
+		public boolean onCreateActionMode(ActionMode mode, Menu menu) {
+			MenuInflater inflater = mode.getMenuInflater();
+			inflater.inflate(R.menu.manageaccounts_context, menu);
+			return true;
+		}
+
+		@Override
+		public boolean onActionItemClicked(final ActionMode mode, MenuItem item) {
+			if (item.getItemId() == R.id.mgmt_account_edit) {
+				editAccount(selectedAccountForActionMode);
+			} else if (item.getItemId() == R.id.mgmt_account_disable) {
+				selectedAccountForActionMode.setOption(Account.OPTION_DISABLED,
+						true);
+				xmppConnectionService
+						.updateAccount(selectedAccountForActionMode);
+				mode.finish();
+			} else if (item.getItemId() == R.id.mgmt_account_enable) {
+				selectedAccountForActionMode.setOption(Account.OPTION_DISABLED,
+						false);
+				xmppConnectionService
+						.updateAccount(selectedAccountForActionMode);
+				mode.finish();
+			} else if (item.getItemId() == R.id.mgmt_account_delete) {
+				AlertDialog.Builder builder = new AlertDialog.Builder(activity);
+				builder.setTitle(getString(R.string.mgmt_account_are_you_sure));
+				builder.setIconAttribute(android.R.attr.alertDialogIcon);
+				builder.setMessage(getString(R.string.mgmt_account_delete_confirm_text));
+				builder.setPositiveButton(getString(R.string.delete),
+						new OnClickListener() {
+
+							@Override
+							public void onClick(DialogInterface dialog,
+									int which) {
+								xmppConnectionService
+										.deleteAccount(selectedAccountForActionMode);
+								selectedAccountForActionMode = null;
+								mode.finish();
+							}
+						});
+				builder.setNegativeButton(getString(R.string.cancel), null);
+				builder.create().show();
+			} else if (item.getItemId() == R.id.mgmt_account_announce_pgp) {
+				if (activity.hasPgp()) {
+					mode.finish();
+					announcePgp(selectedAccountForActionMode, null);
+				} else {
+					activity.showInstallPgpDialog();
+				}
+			} else if (item.getItemId() == R.id.mgmt_otr_key) {
+				AlertDialog.Builder builder = new AlertDialog.Builder(activity);
+				builder.setTitle("OTR Fingerprint");
+				String fingerprintTxt = selectedAccountForActionMode
+						.getOtrFingerprint(getApplicationContext());
+				View view = (View) getLayoutInflater().inflate(
+						R.layout.otr_fingerprint, null);
+				if (fingerprintTxt != null) {
+					TextView fingerprint = (TextView) view
+							.findViewById(R.id.otr_fingerprint);
+					TextView noFingerprintView = (TextView) view
+							.findViewById(R.id.otr_no_fingerprint);
+					fingerprint.setText(fingerprintTxt);
+					fingerprint.setVisibility(View.VISIBLE);
+					noFingerprintView.setVisibility(View.GONE);
+				}
+				builder.setView(view);
+				builder.setPositiveButton(getString(R.string.done), null);
+				builder.create().show();
+			} else if (item.getItemId() == R.id.mgmt_account_info) {
+				AlertDialog.Builder builder = new AlertDialog.Builder(activity);
+				builder.setTitle(getString(R.string.account_info));
+				if (selectedAccountForActionMode.getStatus() == Account.STATUS_ONLINE) {
+					XmppConnection xmpp = selectedAccountForActionMode
+							.getXmppConnection();
+					long connectionAge = (SystemClock.elapsedRealtime() - xmpp.lastConnect) / 60000;
+					long sessionAge = (SystemClock.elapsedRealtime() - xmpp.lastSessionStarted) / 60000;
+					long connectionAgeHours = connectionAge / 60;
+					long sessionAgeHours = sessionAge / 60;
+					View view = (View) getLayoutInflater().inflate(
+							R.layout.server_info, null);
+					TextView connection = (TextView) view
+							.findViewById(R.id.connection);
+					TextView session = (TextView) view
+							.findViewById(R.id.session);
+					TextView pcks_sent = (TextView) view
+							.findViewById(R.id.pcks_sent);
+					TextView pcks_received = (TextView) view
+							.findViewById(R.id.pcks_received);
+					TextView carbon = (TextView) view.findViewById(R.id.carbon);
+					TextView stream = (TextView) view.findViewById(R.id.stream);
+					TextView roster = (TextView) view.findViewById(R.id.roster);
+					TextView presences = (TextView) view
+							.findViewById(R.id.number_presences);
+					presences.setText(selectedAccountForActionMode
+							.countPresences() + "");
+					pcks_received.setText("" + xmpp.getReceivedStanzas());
+					pcks_sent.setText("" + xmpp.getSentStanzas());
+					if (connectionAgeHours >= 2) {
+						connection.setText(connectionAgeHours + " "
+								+ getString(R.string.hours));
+					} else {
+						connection.setText(connectionAge + " "
+								+ getString(R.string.mins));
+					}
+					if (xmpp.hasFeatureStreamManagment()) {
+						if (sessionAgeHours >= 2) {
+							session.setText(sessionAgeHours + " "
+									+ getString(R.string.hours));
+						} else {
+							session.setText(sessionAge + " "
+									+ getString(R.string.mins));
+						}
+						stream.setText(getString(R.string.yes));
+					} else {
+						stream.setText(getString(R.string.no));
+						session.setText(connection.getText());
+					}
+					if (xmpp.hasFeaturesCarbon()) {
+						carbon.setText(getString(R.string.yes));
+					} else {
+						carbon.setText(getString(R.string.no));
+					}
+					if (xmpp.hasFeatureRosterManagment()) {
+						roster.setText(getString(R.string.yes));
+					} else {
+						roster.setText(getString(R.string.no));
+					}
+					builder.setView(view);
+				} else {
+					builder.setMessage(getString(R.string.mgmt_account_account_offline));
+				}
+				builder.setPositiveButton(getString(R.string.hide), null);
+				builder.create().show();
+			}
+			return true;
+		}
+
+	};
+
 	@Override
 	protected void onCreate(Bundle savedInstanceState) {
 
@@ -66,90 +223,9 @@ public class ManageAccountActivity extends XmppActivity {
 		setContentView(R.layout.manage_accounts);
 
 		accountListView = (ListView) findViewById(R.id.account_list);
-		accountListViewAdapter = new ArrayAdapter<Account>(
-				getApplicationContext(), R.layout.account_row, this.accountList) {
-			@Override
-			public View getView(int position, View view, ViewGroup parent) {
-				Account account = getItem(position);
-				if (view == null) {
-					LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
-					view = (View) inflater.inflate(R.layout.account_row, null);
-				}
-				((TextView) view.findViewById(R.id.account_jid))
-						.setText(account.getJid());
-				TextView statusView = (TextView) view
-						.findViewById(R.id.account_status);
-				switch (account.getStatus()) {
-				case Account.STATUS_DISABLED:
-					statusView
-							.setText(getString(R.string.account_status_disabled));
-					statusView.setTextColor(0xFF1da9da);
-					break;
-				case Account.STATUS_ONLINE:
-					statusView
-							.setText(getString(R.string.account_status_online));
-					statusView.setTextColor(0xFF83b600);
-					break;
-				case Account.STATUS_CONNECTING:
-					statusView
-							.setText(getString(R.string.account_status_connecting));
-					statusView.setTextColor(0xFF1da9da);
-					break;
-				case Account.STATUS_OFFLINE:
-					statusView
-							.setText(getString(R.string.account_status_offline));
-					statusView.setTextColor(0xFFe92727);
-					break;
-				case Account.STATUS_UNAUTHORIZED:
-					statusView
-							.setText(getString(R.string.account_status_unauthorized));
-					statusView.setTextColor(0xFFe92727);
-					break;
-				case Account.STATUS_SERVER_NOT_FOUND:
-					statusView
-							.setText(getString(R.string.account_status_not_found));
-					statusView.setTextColor(0xFFe92727);
-					break;
-				case Account.STATUS_NO_INTERNET:
-					statusView
-							.setText(getString(R.string.account_status_no_internet));
-					statusView.setTextColor(0xFFe92727);
-					break;
-				case Account.STATUS_SERVER_REQUIRES_TLS:
-					statusView
-							.setText(getString(R.string.account_status_requires_tls));
-					statusView.setTextColor(0xFFe92727);
-					break;
-				case Account.STATUS_REGISTRATION_FAILED:
-					statusView
-							.setText(getString(R.string.account_status_regis_fail));
-					statusView.setTextColor(0xFFe92727);
-					break;
-				case Account.STATUS_REGISTRATION_CONFLICT:
-					statusView
-							.setText(getString(R.string.account_status_regis_conflict));
-					statusView.setTextColor(0xFFe92727);
-					break;
-				case Account.STATUS_REGISTRATION_SUCCESSFULL:
-					statusView
-							.setText(getString(R.string.account_status_regis_success));
-					statusView.setTextColor(0xFF83b600);
-					break;
-				case Account.STATUS_REGISTRATION_NOT_SUPPORTED:
-					statusView
-							.setText(getString(R.string.account_status_regis_not_sup));
-					statusView.setTextColor(0xFFe92727);
-					break;
-				default:
-					statusView.setText("");
-					break;
-				}
-
-				return view;
-			}
-		};
 		final XmppActivity activity = this;
-		accountListView.setAdapter(this.accountListViewAdapter);
+		this.mAccountAdapter = new AccountAdapter(this, accountList);
+		accountListView.setAdapter(this.mAccountAdapter);
 		accountListView.setOnItemClickListener(new OnItemClickListener() {
 
 			@Override
@@ -186,221 +262,7 @@ public class ManageAccountActivity extends XmppActivity {
 							selectedAccountForActionMode = accountList
 									.get(position);
 							actionMode = activity
-									.startActionMode((new ActionMode.Callback() {
-
-										@Override
-										public boolean onPrepareActionMode(
-												ActionMode mode, Menu menu) {
-											if (selectedAccountForActionMode
-													.isOptionSet(Account.OPTION_DISABLED)) {
-												menu.findItem(
-														R.id.mgmt_account_enable)
-														.setVisible(true);
-												menu.findItem(
-														R.id.mgmt_account_disable)
-														.setVisible(false);
-											} else {
-												menu.findItem(
-														R.id.mgmt_account_disable)
-														.setVisible(true);
-												menu.findItem(
-														R.id.mgmt_account_enable)
-														.setVisible(false);
-											}
-											return true;
-										}
-
-										@Override
-										public void onDestroyActionMode(
-												ActionMode mode) {
-											// TODO Auto-generated method stub
-
-										}
-
-										@Override
-										public boolean onCreateActionMode(
-												ActionMode mode, Menu menu) {
-											MenuInflater inflater = mode
-													.getMenuInflater();
-											inflater.inflate(
-													R.menu.manageaccounts_context,
-													menu);
-											return true;
-										}
-
-										@Override
-										public boolean onActionItemClicked(
-												final ActionMode mode,
-												MenuItem item) {
-											if (item.getItemId() == R.id.mgmt_account_edit) {
-												editAccount(selectedAccountForActionMode);
-											} else if (item.getItemId() == R.id.mgmt_account_disable) {
-												selectedAccountForActionMode
-														.setOption(
-																Account.OPTION_DISABLED,
-																true);
-												xmppConnectionService
-														.updateAccount(selectedAccountForActionMode);
-												mode.finish();
-											} else if (item.getItemId() == R.id.mgmt_account_enable) {
-												selectedAccountForActionMode
-														.setOption(
-																Account.OPTION_DISABLED,
-																false);
-												xmppConnectionService
-														.updateAccount(selectedAccountForActionMode);
-												mode.finish();
-											} else if (item.getItemId() == R.id.mgmt_account_delete) {
-												AlertDialog.Builder builder = new AlertDialog.Builder(
-														activity);
-												builder.setTitle(getString(R.string.mgmt_account_are_you_sure));
-												builder.setIconAttribute(android.R.attr.alertDialogIcon);
-												builder.setMessage(getString(R.string.mgmt_account_delete_confirm_text));
-												builder.setPositiveButton(
-														getString(R.string.delete),
-														new OnClickListener() {
-
-															@Override
-															public void onClick(
-																	DialogInterface dialog,
-																	int which) {
-																xmppConnectionService
-																		.deleteAccount(selectedAccountForActionMode);
-																selectedAccountForActionMode = null;
-																mode.finish();
-															}
-														});
-												builder.setNegativeButton(
-														getString(R.string.cancel),
-														null);
-												builder.create().show();
-											} else if (item.getItemId() == R.id.mgmt_account_announce_pgp) {
-												if (activity.hasPgp()) {
-													mode.finish();
-													announcePgp(
-															selectedAccountForActionMode,
-															null);
-												} else {
-													activity.showInstallPgpDialog();
-												}
-											} else if (item.getItemId() == R.id.mgmt_otr_key) {
-												AlertDialog.Builder builder = new AlertDialog.Builder(
-														activity);
-												builder.setTitle("OTR Fingerprint");
-												String fingerprintTxt = selectedAccountForActionMode
-														.getOtrFingerprint(getApplicationContext());
-												View view = (View) getLayoutInflater()
-														.inflate(
-																R.layout.otr_fingerprint,
-																null);
-												if (fingerprintTxt != null) {
-													TextView fingerprint = (TextView) view
-															.findViewById(R.id.otr_fingerprint);
-													TextView noFingerprintView = (TextView) view
-															.findViewById(R.id.otr_no_fingerprint);
-													fingerprint
-															.setText(fingerprintTxt);
-													fingerprint
-															.setVisibility(View.VISIBLE);
-													noFingerprintView
-															.setVisibility(View.GONE);
-												}
-												builder.setView(view);
-												builder.setPositiveButton(
-														getString(R.string.done),
-														null);
-												builder.create().show();
-											} else if (item.getItemId() == R.id.mgmt_account_info) {
-												AlertDialog.Builder builder = new AlertDialog.Builder(
-														activity);
-												builder.setTitle(getString(R.string.account_info));
-												if (selectedAccountForActionMode
-														.getStatus() == Account.STATUS_ONLINE) {
-													XmppConnection xmpp = selectedAccountForActionMode
-															.getXmppConnection();
-													long connectionAge = (SystemClock
-															.elapsedRealtime() - xmpp.lastConnect) / 60000;
-													long sessionAge = (SystemClock
-															.elapsedRealtime() - xmpp.lastSessionStarted) / 60000;
-													long connectionAgeHours = connectionAge / 60;
-													long sessionAgeHours = sessionAge / 60;
-													View view = (View) getLayoutInflater()
-															.inflate(
-																	R.layout.server_info,
-																	null);
-													TextView connection = (TextView) view
-															.findViewById(R.id.connection);
-													TextView session = (TextView) view
-															.findViewById(R.id.session);
-													TextView pcks_sent = (TextView) view
-															.findViewById(R.id.pcks_sent);
-													TextView pcks_received = (TextView) view
-															.findViewById(R.id.pcks_received);
-													TextView carbon = (TextView) view
-															.findViewById(R.id.carbon);
-													TextView stream = (TextView) view
-															.findViewById(R.id.stream);
-													TextView roster = (TextView) view
-															.findViewById(R.id.roster);
-													TextView presences = (TextView) view
-															.findViewById(R.id.number_presences);
-													presences.setText(selectedAccountForActionMode
-															.countPresences()
-															+ "");
-													pcks_received.setText(""
-															+ xmpp.getReceivedStanzas());
-													pcks_sent.setText(""
-															+ xmpp.getSentStanzas());
-													if (connectionAgeHours >= 2) {
-														connection
-																.setText(connectionAgeHours
-																		+ " "
-																		+ getString(R.string.hours));
-													} else {
-														connection
-																.setText(connectionAge
-																		+ " "
-																		+ getString(R.string.mins));
-													}
-													if (xmpp.hasFeatureStreamManagment()) {
-														if (sessionAgeHours >= 2) {
-															session.setText(sessionAgeHours
-																	+ " "
-																	+ getString(R.string.hours));
-														} else {
-															session.setText(sessionAge
-																	+ " "
-																	+ getString(R.string.mins));
-														}
-														stream.setText(getString(R.string.yes));
-													} else {
-														stream.setText(getString(R.string.no));
-														session.setText(connection
-																.getText());
-													}
-													if (xmpp.hasFeaturesCarbon()) {
-														carbon.setText(getString(R.string.yes));
-													} else {
-														carbon.setText(getString(R.string.no));
-													}
-													if (xmpp.hasFeatureRosterManagment()) {
-														roster.setText(getString(R.string.yes));
-													} else {
-														roster.setText(getString(R.string.no));
-													}
-													builder.setView(view);
-												} else {
-													builder.setMessage(getString(R.string.mgmt_account_account_offline));
-												}
-												builder.setPositiveButton(
-														getString(R.string.hide),
-														null);
-												builder.create().show();
-											}
-											return true;
-										}
-
-									}));
+									.startActionMode(mActionModeCallback);
 							return true;
 						} else {
 							return false;
@@ -422,7 +284,7 @@ public class ManageAccountActivity extends XmppActivity {
 		xmppConnectionService.setOnAccountListChangedListener(accountChanged);
 		this.accountList.clear();
 		this.accountList.addAll(xmppConnectionService.getAccounts());
-		accountListViewAdapter.notifyDataSetChanged();
+		mAccountAdapter.notifyDataSetChanged();
 		if ((this.accountList.size() == 0) && (this.firstrun)) {
 			getActionBar().setDisplayHomeAsUpEnabled(false);
 			getActionBar().setHomeButtonEnabled(false);
@@ -452,7 +314,8 @@ public class ManageAccountActivity extends XmppActivity {
 	@Override
 	public boolean onNavigateUp() {
 		if (xmppConnectionService.getConversations().size() == 0) {
-			Intent contactsIntent = new Intent(this, StartConversationActivity.class);
+			Intent contactsIntent = new Intent(this,
+					StartConversationActivity.class);
 			contactsIntent.setFlags(
 			// if activity exists in stack, pop the stack and go back to it
 					Intent.FLAG_ACTIVITY_CLEAR_TOP |

src/eu/siacs/conversations/ui/XmppActivity.java 🔗

@@ -42,6 +42,8 @@ public abstract class XmppActivity extends Activity {
 	
 	protected int mPrimaryTextColor;
 	protected int mSecondaryTextColor;
+	protected int mWarningTextColor;
+	protected int mPrimaryColor;
 	
 	protected interface OnValueEdited {
 		public void onValueEdited(String value);
@@ -162,6 +164,8 @@ public abstract class XmppActivity extends Activity {
 		ExceptionHelper.init(getApplicationContext());
 		mPrimaryTextColor = getResources().getColor(R.color.primarytext);
 		mSecondaryTextColor = getResources().getColor(R.color.secondarytext);
+		mWarningTextColor = getResources().getColor(R.color.warningtext);
+		mPrimaryColor = getResources().getColor(R.color.primary);
 	}
 
 	public void switchToConversation(Conversation conversation) {
@@ -368,4 +372,12 @@ public abstract class XmppActivity extends Activity {
 	public int getPrimaryTextColor() {
 		return this.mPrimaryTextColor;
 	}
+	
+	public int getWarningTextColor() {
+		return this.mWarningTextColor;
+	}
+	
+	public int getPrimaryColor() {
+		return this.mPrimaryColor;
+	}
 }

src/eu/siacs/conversations/ui/adapter/AccountAdapter.java 🔗

@@ -0,0 +1,101 @@
+package eu.siacs.conversations.ui.adapter;
+
+import java.util.List;
+
+import eu.siacs.conversations.R;
+import eu.siacs.conversations.entities.Account;
+import eu.siacs.conversations.ui.XmppActivity;
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ArrayAdapter;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+public class AccountAdapter extends ArrayAdapter<Account> {
+	
+	private XmppActivity activity;
+	
+	public AccountAdapter(XmppActivity activity, List<Account> objects) {
+		super(activity, 0, objects);
+		this.activity = activity;
+	}
+
+	@Override
+	public View getView(int position, View view, ViewGroup parent) {
+		Account account = getItem(position);
+		if (view == null) {
+			LayoutInflater inflater = (LayoutInflater) getContext()
+					.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+			view = (View) inflater.inflate(R.layout.account_row, parent, false);
+		}
+		TextView jid = (TextView) view.findViewById(R.id.account_jid);
+		jid.setText(account.getJid());
+		TextView statusView = (TextView) view.findViewById(R.id.account_status);
+		ImageView imageView = (ImageView) view.findViewById(R.id.account_image);
+		imageView.setImageBitmap(account.getImage(activity,48));
+		switch (account.getStatus()) {
+		case Account.STATUS_DISABLED:
+			statusView.setText(getContext().getString(
+					R.string.account_status_disabled));
+			statusView.setTextColor(activity.getSecondaryTextColor());
+			break;
+		case Account.STATUS_ONLINE:
+			statusView.setText(getContext().getString(
+					R.string.account_status_online));
+			statusView.setTextColor(activity.getPrimaryColor());
+			break;
+		case Account.STATUS_CONNECTING:
+			statusView.setText(getContext().getString(
+					R.string.account_status_connecting));
+			statusView.setTextColor(activity.getSecondaryTextColor());
+			break;
+		case Account.STATUS_OFFLINE:
+			statusView.setText(getContext().getString(
+					R.string.account_status_offline));
+			statusView.setTextColor(activity.getWarningTextColor());
+			break;
+		case Account.STATUS_UNAUTHORIZED:
+			statusView.setText(getContext().getString(
+					R.string.account_status_unauthorized));
+			statusView.setTextColor(activity.getWarningTextColor());
+			break;
+		case Account.STATUS_SERVER_NOT_FOUND:
+			statusView.setText(getContext().getString(
+					R.string.account_status_not_found));
+			statusView.setTextColor(activity.getWarningTextColor());
+			break;
+		case Account.STATUS_NO_INTERNET:
+			statusView.setText(getContext().getString(
+					R.string.account_status_no_internet));
+			statusView.setTextColor(activity.getWarningTextColor());
+			break;
+		case Account.STATUS_REGISTRATION_FAILED:
+			statusView.setText(getContext().getString(
+					R.string.account_status_regis_fail));
+			statusView.setTextColor(activity.getWarningTextColor());
+			break;
+		case Account.STATUS_REGISTRATION_CONFLICT:
+			statusView.setText(getContext().getString(
+					R.string.account_status_regis_conflict));
+			statusView.setTextColor(activity.getWarningTextColor());
+			break;
+		case Account.STATUS_REGISTRATION_SUCCESSFULL:
+			statusView.setText(getContext().getString(
+					R.string.account_status_regis_success));
+			statusView.setTextColor(activity.getSecondaryTextColor());
+			break;
+		case Account.STATUS_REGISTRATION_NOT_SUPPORTED:
+			statusView.setText(getContext().getString(
+					R.string.account_status_regis_not_sup));
+			statusView.setTextColor(activity.getWarningTextColor());
+			break;
+		default:
+			statusView.setText("");
+			break;
+		}
+
+		return view;
+	}
+}