refactored ui listeners a little bit
This commit is contained in:
parent
fd5760d27a
commit
9968ae5260
|
@ -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:
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +0,0 @@
|
|||
package eu.siacs.conversations.ui;
|
||||
|
||||
public interface OnAccountListChangedListener {
|
||||
public void onAccountListChangedListener();
|
||||
}
|
|
@ -1,5 +0,0 @@
|
|||
package eu.siacs.conversations.ui;
|
||||
|
||||
public interface OnConversationListChangedListener {
|
||||
public void onConversationListChanged();
|
||||
}
|
|
@ -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) {
|
||||
|
|
Loading…
Reference in New Issue