From 76cfab03ec712173ba37a98306c448f5930f0474 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Tue, 28 Jan 2014 23:15:30 +0100 Subject: [PATCH] ui flow for first startup with no existing account --- .../gultsch/chat/ui/ConversationActivity.java | 5 +- .../chat/ui/ManageAccountActivity.java | 51 ++++++++++----- .../chat/ui/NewConversationActivity.java | 64 +++++++++++++------ 3 files changed, 83 insertions(+), 37 deletions(-) diff --git a/src/de/gultsch/chat/ui/ConversationActivity.java b/src/de/gultsch/chat/ui/ConversationActivity.java index 90fc1d40..d831f9b8 100644 --- a/src/de/gultsch/chat/ui/ConversationActivity.java +++ b/src/de/gultsch/chat/ui/ConversationActivity.java @@ -280,7 +280,10 @@ public class ConversationActivity extends XmppActivity { swapConversationFragment(); } } else { - if (conversationList.size() <= 0) { + if (xmppConnectionService.getAccounts().size() == 0) { + startActivity(new Intent(this, ManageAccountActivity.class)); + finish(); + } else if (conversationList.size() <= 0) { //add no history startActivity(new Intent(this, NewConversationActivity.class)); finish(); diff --git a/src/de/gultsch/chat/ui/ManageAccountActivity.java b/src/de/gultsch/chat/ui/ManageAccountActivity.java index 8ba092db..c7d6ce58 100644 --- a/src/de/gultsch/chat/ui/ManageAccountActivity.java +++ b/src/de/gultsch/chat/ui/ManageAccountActivity.java @@ -6,6 +6,8 @@ import java.util.List; import de.gultsch.chat.R; import de.gultsch.chat.entities.Account; import de.gultsch.chat.ui.EditAccount.EditAccountListener; +import android.app.ActionBar; +import android.app.Activity; import android.content.Context; import android.content.Intent; import android.os.Bundle; @@ -87,11 +89,13 @@ public class ManageAccountActivity extends XmppActivity { public void onStart() { super.onStart(); if (xmppConnectionServiceBound) { - Log.d("gultsch","already bound"); this.accountList.clear(); this.accountList.addAll(xmppConnectionService .getAccounts()); accountListViewAdapter.notifyDataSetChanged(); + if (this.accountList.size() == 0) { + getActionBar().setDisplayHomeAsUpEnabled(false); + } } } @@ -101,6 +105,10 @@ public class ManageAccountActivity extends XmppActivity { this.accountList.clear(); this.accountList.addAll(xmppConnectionService.getAccounts()); accountListViewAdapter.notifyDataSetChanged(); + if (this.accountList.size() == 0) { + getActionBar().setDisplayHomeAsUpEnabled(false); + addAccount(); + } } @Override @@ -117,26 +125,35 @@ public class ManageAccountActivity extends XmppActivity { startActivity(new Intent(this, SettingsActivity.class)); break; case R.id.action_add_account: - EditAccount dialog = new EditAccount(); - dialog.setEditAccountListener(new EditAccountListener() { - - @Override - public void onAccountEdited(Account account) { - xmppConnectionService.createAccount(account); - accountList.add(account); - accountListViewAdapter.notifyDataSetChanged(); - } - - @Override - public void onAccountDelete(Account account) { - //this will never be called - } - }); - dialog.show(getFragmentManager(),"add_account"); + addAccount(); break; default: break; } return super.onOptionsItemSelected(item); } + + protected void addAccount() { + final Activity activity = this; + EditAccount dialog = new EditAccount(); + dialog.setEditAccountListener(new EditAccountListener() { + + @Override + public void onAccountEdited(Account account) { + xmppConnectionService.createAccount(account); + accountList.add(account); + accountListViewAdapter.notifyDataSetChanged(); + activity.getActionBar().setDisplayHomeAsUpEnabled(true); + if (accountList.size() == 1) { + activity.startActivity(new Intent(activity,NewConversationActivity.class)); + } + } + + @Override + public void onAccountDelete(Account account) { + //this will never be called + } + }); + dialog.show(getFragmentManager(),"add_account"); + } } diff --git a/src/de/gultsch/chat/ui/NewConversationActivity.java b/src/de/gultsch/chat/ui/NewConversationActivity.java index 2725178d..9df5d5eb 100644 --- a/src/de/gultsch/chat/ui/NewConversationActivity.java +++ b/src/de/gultsch/chat/ui/NewConversationActivity.java @@ -27,8 +27,12 @@ import android.widget.EditText; import android.widget.ListView; import android.widget.TextView; import android.widget.ImageView; +import android.app.Activity; +import android.app.AlertDialog; import android.content.Context; import android.content.CursorLoader; +import android.content.DialogInterface; +import android.content.DialogInterface.OnClickListener; import android.content.Intent; import android.content.Loader; import android.content.Loader.OnLoadCompleteListener; @@ -152,34 +156,56 @@ public class NewConversationActivity extends XmppActivity { } }; contactsView.setAdapter(contactsAdapter); + final Activity activity = this; contactsView.setOnItemClickListener(new OnItemClickListener() { @Override - public void onItemClick(AdapterView arg0, View view, int pos, + public void onItemClick(AdapterView arg0, final View view, int pos, long arg3) { - Contact clickedContact = aggregatedContacts.get(pos); + final Contact clickedContact = aggregatedContacts.get(pos); Log.d("gultsch", "clicked on " + clickedContact.getDisplayName()); - - Account account = new Account(); - - Conversation conversation = xmppConnectionService - .findOrCreateConversation(account, clickedContact); - - Intent viewConversationIntent = new Intent(view.getContext(), - ConversationActivity.class); - viewConversationIntent.setAction(Intent.ACTION_VIEW); - viewConversationIntent.putExtra( - ConversationActivity.CONVERSATION, - conversation.getUuid()); - viewConversationIntent - .setType(ConversationActivity.VIEW_CONVERSATION); - viewConversationIntent.setFlags(viewConversationIntent - .getFlags() | Intent.FLAG_ACTIVITY_CLEAR_TOP); - startActivity(viewConversationIntent); + + final List accounts = xmppConnectionService.getAccounts(); + if (accounts.size() == 1) { + startConversation(clickedContact, accounts.get(0)); + } else { + String[] accountList = new String[accounts.size()]; + for(int i = 0; i < accounts.size(); ++i) { + accountList[i] = accounts.get(i).getJid(); + } + + AlertDialog.Builder builder = new AlertDialog.Builder(activity); + builder.setTitle("Choose account"); + builder.setSingleChoiceItems(accountList,0,new OnClickListener() { + + @Override + public void onClick(DialogInterface dialog, int which) { + Account account = accounts.get(which); + startConversation(clickedContact, account); + } + }); + builder.create().show(); + } } }); } + + public void startConversation(Contact contact, Account account) { + Conversation conversation = xmppConnectionService + .findOrCreateConversation(account, contact); + + Intent viewConversationIntent = new Intent(this,ConversationActivity.class); + viewConversationIntent.setAction(Intent.ACTION_VIEW); + viewConversationIntent.putExtra( + ConversationActivity.CONVERSATION, + conversation.getUuid()); + viewConversationIntent + .setType(ConversationActivity.VIEW_CONVERSATION); + viewConversationIntent.setFlags(viewConversationIntent + .getFlags() | Intent.FLAG_ACTIVITY_CLEAR_TOP); + startActivity(viewConversationIntent); + } @Override public void onStart() {