ui flow for first startup with no existing account

This commit is contained in:
Daniel Gultsch 2014-01-28 23:15:30 +01:00
parent efba73ffd0
commit 76cfab03ec
3 changed files with 83 additions and 37 deletions

View file

@ -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();

View file

@ -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");
}
}

View file

@ -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<Account> 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() {