refactored ui listeners a little bit

This commit is contained in:
iNPUTmice 2014-07-12 13:42:17 +02:00
parent fd5760d27a
commit 9968ae5260
9 changed files with 401 additions and 297 deletions

View file

@ -98,8 +98,7 @@ public class PgpEngine {
message.setEncryption(Message.ENCRYPTION_DECRYPTED);
PgpEngine.this.mXmppConnectionService
.updateMessage(message);
PgpEngine.this.mXmppConnectionService.updateUi(
message.getConversation(), false);
PgpEngine.this.mXmppConnectionService.updateConversationUi();
callback.success(message);
return;
case OpenPgpApi.RESULT_CODE_USER_INTERACTION_REQUIRED:

View file

@ -114,7 +114,7 @@ public class MessageParser extends AbstractParser implements
if (packet.hasChild("subject")) {
conversation.getMucOptions().setSubject(
packet.findChild("subject").getContent());
mXmppConnectionService.updateUi(conversation, false);
mXmppConnectionService.updateConversationUi();
return null;
}
if ((fromParts.length == 1)) {
@ -217,10 +217,10 @@ public class MessageParser extends AbstractParser implements
} else if (packet.hasChild("x")) {
Element x = packet.findChild("x");
if (x.hasChild("invite")) {
Conversation conversation = mXmppConnectionService
mXmppConnectionService
.findOrCreateConversation(account,
packet.getAttribute("from"), true);
mXmppConnectionService.updateUi(conversation, false);
mXmppConnectionService.updateConversationUi();
}
}
@ -318,6 +318,6 @@ public class MessageParser extends AbstractParser implements
if (packet.getType() != MessagePacket.TYPE_ERROR) {
mXmppConnectionService.databaseBackend.createMessage(message);
}
mXmppConnectionService.updateUi(conversation, notify);
mXmppConnectionService.notifyUi(conversation, notify);
}
}

View file

@ -33,7 +33,7 @@ public class PresenceParser extends AbstractParser implements
int error = muc.getMucOptions().getError();
muc.getMucOptions().processPacket(packet, mPgpEngine);
if (muc.getMucOptions().getError() != error) {
mXmppConnectionService.updateUi(muc, false);
mXmppConnectionService.updateConversationUi();
}
}
}

View file

@ -33,8 +33,6 @@ import eu.siacs.conversations.parser.MessageParser;
import eu.siacs.conversations.parser.PresenceParser;
import eu.siacs.conversations.persistance.DatabaseBackend;
import eu.siacs.conversations.persistance.FileBackend;
import eu.siacs.conversations.ui.OnAccountListChangedListener;
import eu.siacs.conversations.ui.OnConversationListChangedListener;
import eu.siacs.conversations.ui.UiCallback;
import eu.siacs.conversations.utils.CryptoHelper;
import eu.siacs.conversations.utils.ExceptionHelper;
@ -103,9 +101,9 @@ public class XmppConnectionService extends Service {
private JingleConnectionManager mJingleConnectionManager = new JingleConnectionManager(
this);
private OnConversationListChangedListener convChangedListener = null;
private OnConversationUpdate mOnConversationUpdate = null;
private int convChangedListenerCount = 0;
private OnAccountListChangedListener accountChangedListener = null;
private OnAccountUpdate mOnAccountUpdate = null;
private OnTLSExceptionReceived tlsException = null;
public OnContactStatusChanged onContactStatusChanged = new OnContactStatusChanged() {
@ -144,8 +142,8 @@ public class XmppConnectionService extends Service {
@Override
public void onStatusChanged(Account account) {
if (accountChangedListener != null) {
accountChangedListener.onAccountListChangedListener();
if (mOnAccountUpdate != null) {
mOnAccountUpdate.onAccountUpdate();;
}
if (account.getStatus() == Account.STATUS_ONLINE) {
mJingleConnectionManager.cancelInTransmission();
@ -329,8 +327,8 @@ public class XmppConnectionService extends Service {
// in any case. reschedule wakup call
this.scheduleWakeupCall(PING_MAX_INTERVAL, true);
}
if (accountChangedListener != null) {
accountChangedListener.onAccountListChangedListener();
if (mOnAccountUpdate != null) {
mOnAccountUpdate.onAccountUpdate();
}
}
}
@ -470,9 +468,7 @@ public class XmppConnectionService extends Service {
fetchRosterFromServer(account);
sendPresencePacket(account, mPresenceGenerator.sendPresence(account));
connectMultiModeConversations(account);
if (convChangedListener != null) {
convChangedListener.onConversationListChanged();
}
updateConversationUi();
}
});
return connection;
@ -565,9 +561,7 @@ public class XmppConnectionService extends Service {
databaseBackend.createMessage(message);
}
conv.getMessages().add(message);
if (convChangedListener != null) {
convChangedListener.onConversationListChanged();
}
updateConversationUi();
if ((send) && (packet != null)) {
sendMessagePacket(account, packet);
}
@ -798,9 +792,7 @@ public class XmppConnectionService extends Service {
&& (conversation.getMode() == Conversation.MODE_MULTI)) {
joinMuc(conversation);
}
if (this.convChangedListener != null) {
this.convChangedListener.onConversationListChanged();
}
updateConversationUi();
return conversation;
}
@ -812,18 +804,14 @@ public class XmppConnectionService extends Service {
}
this.databaseBackend.updateConversation(conversation);
this.conversations.remove(conversation);
if (this.convChangedListener != null) {
this.convChangedListener.onConversationListChanged();
}
updateConversationUi();
}
public void clearConversationHistory(Conversation conversation) {
this.databaseBackend.deleteMessagesInConversation(conversation);
this.fileBackend.removeFiles(conversation);
conversation.getMessages().clear();
if (this.convChangedListener != null) {
this.convChangedListener.onConversationListChanged();
}
updateConversationUi();
}
public int getConversationCount() {
@ -834,17 +822,14 @@ public class XmppConnectionService extends Service {
databaseBackend.createAccount(account);
this.accounts.add(account);
this.reconnectAccount(account, false);
if (accountChangedListener != null)
accountChangedListener.onAccountListChangedListener();
updateAccountUi();
}
public void updateAccount(Account account) {
this.statusListener.onStatusChanged(account);
databaseBackend.updateAccount(account);
reconnectAccount(account, false);
if (accountChangedListener != null) {
accountChangedListener.onAccountListChangedListener();
}
updateAccountUi();
UIHelper.showErrorNotification(getApplicationContext(), getAccounts());
}
@ -854,32 +839,29 @@ public class XmppConnectionService extends Service {
}
databaseBackend.deleteAccount(account);
this.accounts.remove(account);
if (accountChangedListener != null) {
accountChangedListener.onAccountListChangedListener();
}
updateAccountUi();
UIHelper.showErrorNotification(getApplicationContext(), getAccounts());
}
public void setOnConversationListChangedListener(
OnConversationListChangedListener listener) {
this.convChangedListener = listener;
OnConversationUpdate listener) {
this.mOnConversationUpdate = listener;
this.convChangedListenerCount++;
}
public void removeOnConversationListChangedListener() {
this.convChangedListenerCount--;
if (this.convChangedListenerCount == 0) {
this.convChangedListener = null;
this.mOnConversationUpdate = null;
}
}
public void setOnAccountListChangedListener(
OnAccountListChangedListener listener) {
this.accountChangedListener = listener;
public void setOnAccountListChangedListener(OnAccountUpdate listener) {
this.mOnAccountUpdate = listener;
}
public void removeOnAccountListChangedListener() {
this.accountChangedListener = null;
this.mOnAccountUpdate = null;
}
public void connectMultiModeConversations(Account account) {
@ -1062,7 +1044,7 @@ public class XmppConnectionService extends Service {
}
}
}
updateUi(conversation, false);
notifyUi(conversation, false);
}
public boolean renewSymmetricKey(Conversation conversation) {
@ -1197,9 +1179,7 @@ public class XmppConnectionService extends Service {
public void markMessage(Message message, int status) {
message.setStatus(status);
databaseBackend.updateMessage(message);
if (convChangedListener != null) {
convChangedListener.onConversationListChanged();
}
updateConversationUi();
}
public SharedPreferences getPreferences() {
@ -1211,14 +1191,26 @@ public class XmppConnectionService extends Service {
return getPreferences().getBoolean("confirm_messages", true);
}
public void updateUi(Conversation conversation, boolean notify) {
if (convChangedListener != null) {
convChangedListener.onConversationListChanged();
public void notifyUi(Conversation conversation, boolean notify) {
if (mOnConversationUpdate != null) {
mOnConversationUpdate.onConversationUpdate();
} else {
UIHelper.updateNotification(getApplicationContext(),
getConversations(), conversation, notify);
}
}
public void updateConversationUi() {
if (mOnConversationUpdate != null) {
mOnConversationUpdate.onConversationUpdate();
}
}
public void updateAccountUi() {
if (mOnAccountUpdate != null) {
mOnAccountUpdate.onAccountUpdate();
}
}
public Account findAccountByJid(String accountJid) {
for (Account account : this.accounts) {
@ -1316,4 +1308,16 @@ public class XmppConnectionService extends Service {
public JingleConnectionManager getJingleConnectionManager() {
return this.mJingleConnectionManager;
}
public interface OnConversationUpdate {
public void onConversationUpdate();
}
public interface OnAccountUpdate {
public void onAccountUpdate();
}
public interface OnRosterUpdate {
public void onRosterUpdate();
}
}

View file

@ -10,6 +10,7 @@ import eu.siacs.conversations.entities.Contact;
import eu.siacs.conversations.entities.Conversation;
import eu.siacs.conversations.entities.Message;
import eu.siacs.conversations.services.ImageProvider;
import eu.siacs.conversations.services.XmppConnectionService.OnConversationUpdate;
import eu.siacs.conversations.utils.ExceptionHelper;
import eu.siacs.conversations.utils.UIHelper;
import android.net.Uri;
@ -83,10 +84,10 @@ public class ConversationActivity extends XmppActivity {
private boolean showLastseen = false;
private ArrayAdapter<Conversation> listAdapter;
private OnConversationListChangedListener onConvChanged = new OnConversationListChangedListener() {
private OnConversationUpdate onConvChanged = new OnConversationUpdate() {
@Override
public void onConversationListChanged() {
public void onConversationUpdate() {
runOnUiThread(new Runnable() {
@Override
@ -655,7 +656,7 @@ public class ConversationActivity extends XmppActivity {
this.onBackendConnected();
}
if (conversationList.size() >= 1) {
onConvChanged.onConversationListChanged();
onConvChanged.onConversationUpdate();
}
}

View file

@ -5,6 +5,7 @@ import java.util.List;
import eu.siacs.conversations.R;
import eu.siacs.conversations.entities.Account;
import eu.siacs.conversations.services.XmppConnectionService.OnAccountUpdate;
import eu.siacs.conversations.ui.EditAccount.EditAccountListener;
import eu.siacs.conversations.xmpp.OnTLSExceptionReceived;
import eu.siacs.conversations.xmpp.XmppConnection;
@ -31,21 +32,21 @@ import android.widget.ListView;
import android.widget.TextView;
public class ManageAccountActivity extends XmppActivity {
protected boolean isActionMode = false;
protected ActionMode actionMode;
protected Account selectedAccountForActionMode = null;
protected ManageAccountActivity activity = this;
protected boolean firstrun = true;
protected List<Account> accountList = new ArrayList<Account>();
protected ListView accountListView;
protected ArrayAdapter<Account> accountListViewAdapter;
protected OnAccountListChangedListener accountChanged = new OnAccountListChangedListener() {
protected OnAccountUpdate accountChanged = new OnAccountUpdate() {
@Override
public void onAccountListChangedListener() {
public void onAccountUpdate() {
accountList.clear();
accountList.addAll(xmppConnectionService.getAccounts());
runOnUiThread(new Runnable() {
@ -57,47 +58,55 @@ public class ManageAccountActivity extends XmppActivity {
});
}
};
protected OnTLSExceptionReceived tlsExceptionReceived = new OnTLSExceptionReceived() {
@Override
public void onTLSExceptionReceived(final String fingerprint, final Account account) {
public void onTLSExceptionReceived(final String fingerprint,
final Account account) {
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
AlertDialog.Builder builder = new AlertDialog.Builder(
activity);
builder.setTitle(getString(R.string.account_status_error));
builder.setIconAttribute(android.R.attr.alertDialogIcon);
View view = (View) getLayoutInflater().inflate(R.layout.cert_warning, null);
View view = (View) getLayoutInflater().inflate(
R.layout.cert_warning, null);
TextView sha = (TextView) view.findViewById(R.id.sha);
TextView hint = (TextView) view.findViewById(R.id.hint);
StringBuilder humanReadableSha = new StringBuilder();
humanReadableSha.append(fingerprint);
for(int i = 2; i < 59; i += 3) {
if ((i==14)||(i==29)||(i==44)) {
for (int i = 2; i < 59; i += 3) {
if ((i == 14) || (i == 29) || (i == 44)) {
humanReadableSha.insert(i, "\n");
} else {
humanReadableSha.insert(i, ":");
}
}
hint.setText(getString(R.string.untrusted_cert_hint,account.getServer()));
hint.setText(getString(R.string.untrusted_cert_hint,
account.getServer()));
sha.setText(humanReadableSha.toString());
builder.setView(view);
builder.setNegativeButton(getString(R.string.certif_no_trust), null);
builder.setPositiveButton(getString(R.string.certif_trust), new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
account.setSSLCertFingerprint(fingerprint);
activity.xmppConnectionService.updateAccount(account);
}
});
builder.setNegativeButton(
getString(R.string.certif_no_trust), null);
builder.setPositiveButton(getString(R.string.certif_trust),
new OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
account.setSSLCertFingerprint(fingerprint);
activity.xmppConnectionService
.updateAccount(account);
}
});
builder.create().show();
}
});
}
};
@ -124,55 +133,68 @@ public class ManageAccountActivity extends XmppActivity {
.findViewById(R.id.account_status);
switch (account.getStatus()) {
case Account.STATUS_DISABLED:
statusView.setText(getString(R.string.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
.setText(getString(R.string.account_status_online));
statusView.setTextColor(0xFF83b600);
break;
case Account.STATUS_CONNECTING:
statusView.setText(getString(R.string.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
.setText(getString(R.string.account_status_offline));
statusView.setTextColor(0xFFe92727);
break;
case Account.STATUS_UNAUTHORIZED:
statusView.setText(getString(R.string.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
.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
.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
.setText(getString(R.string.account_status_requires_tls));
statusView.setTextColor(0xFFe92727);
break;
case Account.STATUS_TLS_ERROR:
statusView.setText(getString(R.string.account_status_error));
statusView
.setText(getString(R.string.account_status_error));
statusView.setTextColor(0xFFe92727);
break;
case Account.STATUS_REGISTRATION_FAILED:
statusView.setText(getString(R.string.account_status_regis_fail));
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
.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));
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
.setText(getString(R.string.account_status_regis_not_sup));
statusView.setTextColor(0xFFe92727);
break;
default:
@ -192,10 +214,14 @@ public class ManageAccountActivity extends XmppActivity {
int position, long arg3) {
if (!isActionMode) {
Account account = accountList.get(position);
if ((account.getStatus() == Account.STATUS_OFFLINE)||(account.getStatus() == Account.STATUS_TLS_ERROR)) {
activity.xmppConnectionService.reconnectAccount(accountList.get(position),true);
if ((account.getStatus() == Account.STATUS_OFFLINE)
|| (account.getStatus() == Account.STATUS_TLS_ERROR)) {
activity.xmppConnectionService.reconnectAccount(
accountList.get(position), true);
} else if (account.getStatus() == Account.STATUS_ONLINE) {
activity.startActivity(new Intent(activity.getApplicationContext(),StartConversation.class));
activity.startActivity(new Intent(activity
.getApplicationContext(),
StartConversation.class));
} else if (account.getStatus() != Account.STATUS_DISABLED) {
editAccount(account);
}
@ -205,159 +231,242 @@ public class ManageAccountActivity extends XmppActivity {
}
}
});
accountListView.setOnItemLongClickListener(new OnItemLongClickListener() {
accountListView
.setOnItemLongClickListener(new OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> arg0, View view,
int position, long arg3) {
if (!isActionMode) {
accountListView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
accountListView.setItemChecked(position,true);
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));
@Override
public boolean onItemLongClick(AdapterView<?> arg0,
View view, int position, long arg3) {
if (!isActionMode) {
accountListView
.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
accountListView.setItemChecked(position, true);
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;
}
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;
}
}));
return true;
} else {
return false;
}
}
});
@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;
}
}));
return true;
} else {
return false;
}
}
});
}
@Override
protected void onStop() {
if (xmppConnectionServiceBound) {
@ -370,11 +479,12 @@ public class ManageAccountActivity extends XmppActivity {
@Override
void onBackendConnected() {
xmppConnectionService.setOnAccountListChangedListener(accountChanged);
xmppConnectionService.setOnTLSExceptionReceivedListener(tlsExceptionReceived);
xmppConnectionService
.setOnTLSExceptionReceivedListener(tlsExceptionReceived);
this.accountList.clear();
this.accountList.addAll(xmppConnectionService.getAccounts());
accountListViewAdapter.notifyDataSetChanged();
if ((this.accountList.size() == 0)&&(this.firstrun)) {
if ((this.accountList.size() == 0) && (this.firstrun)) {
getActionBar().setDisplayHomeAsUpEnabled(false);
getActionBar().setHomeButtonEnabled(false);
addAccount();
@ -405,12 +515,13 @@ public class ManageAccountActivity extends XmppActivity {
if (xmppConnectionService.getConversations().size() == 0) {
Intent contactsIntent = new Intent(this, StartConversation.class);
contactsIntent.setFlags(
// if activity exists in stack, pop the stack and go back to it
// if activity exists in stack, pop the stack and go back to it
Intent.FLAG_ACTIVITY_CLEAR_TOP |
// otherwise, make a new task for it
Intent.FLAG_ACTIVITY_NEW_TASK |
// don't use the new activity animation; finish animation runs instead
Intent.FLAG_ACTIVITY_NO_ANIMATION);
Intent.FLAG_ACTIVITY_NEW_TASK |
// don't use the new activity animation; finish
// animation runs instead
Intent.FLAG_ACTIVITY_NO_ANIMATION);
startActivity(contactsIntent);
finish();
return true;
@ -420,23 +531,23 @@ public class ManageAccountActivity extends XmppActivity {
}
private void editAccount(Account account) {
EditAccount dialog = new EditAccount();
dialog.setAccount(account);
dialog.setEditAccountListener(new EditAccountListener() {
EditAccount dialog = new EditAccount();
dialog.setAccount(account);
dialog.setEditAccountListener(new EditAccountListener() {
@Override
public void onAccountEdited(Account account) {
xmppConnectionService.updateAccount(account);
if (actionMode != null) {
actionMode.finish();
}
@Override
public void onAccountEdited(Account account) {
xmppConnectionService.updateAccount(account);
if (actionMode != null) {
actionMode.finish();
}
});
dialog.show(getFragmentManager(), "edit_account");
dialog.setKnownHosts(xmppConnectionService.getKnownHosts(),this);
}
});
dialog.show(getFragmentManager(), "edit_account");
dialog.setKnownHosts(xmppConnectionService.getKnownHosts(), this);
}
protected void addAccount() {
final Activity activity = this;
EditAccount dialog = new EditAccount();
@ -450,16 +561,15 @@ public class ManageAccountActivity extends XmppActivity {
}
});
dialog.show(getFragmentManager(), "add_account");
dialog.setKnownHosts(xmppConnectionService.getKnownHosts(),this);
dialog.setKnownHosts(xmppConnectionService.getKnownHosts(), this);
}
@Override
public void onActionModeStarted(ActionMode mode) {
super.onActionModeStarted(mode);
this.isActionMode = true;
}
@Override
public void onActionModeFinished(ActionMode mode) {
super.onActionModeFinished(mode);
@ -467,20 +577,20 @@ public class ManageAccountActivity extends XmppActivity {
accountListView.clearChoices();
accountListView.requestLayout();
accountListView.post(new Runnable() {
@Override
public void run() {
accountListView.setChoiceMode(ListView.CHOICE_MODE_NONE);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
if (requestCode == REQUEST_ANNOUNCE_PGP) {
announcePgp(selectedAccountForActionMode,null);
@Override
public void run() {
accountListView.setChoiceMode(ListView.CHOICE_MODE_NONE);
}
}
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
if (requestCode == REQUEST_ANNOUNCE_PGP) {
announcePgp(selectedAccountForActionMode, null);
}
}
}
}

View file

@ -1,5 +0,0 @@
package eu.siacs.conversations.ui;
public interface OnAccountListChangedListener {
public void onAccountListChangedListener();
}

View file

@ -1,5 +0,0 @@
package eu.siacs.conversations.ui;
public interface OnConversationListChangedListener {
public void onConversationListChanged();
}

View file

@ -83,7 +83,7 @@ public class JingleConnection {
sendSuccess();
if (acceptedAutomatically) {
message.markUnread();
JingleConnection.this.mXmppConnectionService.updateUi(message.getConversation(), true);
JingleConnection.this.mXmppConnectionService.notifyUi(message.getConversation(), true);
}
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
@ -277,7 +277,7 @@ public class JingleConnection {
} else {
message.markUnread();
Log.d("xmppService","not auto accepting new file offer with size: "+size+" allowed size:"+this.mJingleConnectionManager.getAutoAcceptFileSize());
this.mXmppConnectionService.updateUi(conversation, true);
this.mXmppConnectionService.notifyUi(conversation, true);
}
this.file = this.mXmppConnectionService.getFileBackend().getJingleFile(message,false);
if (message.getEncryption() == Message.ENCRYPTION_OTR) {