Unset all PGP signatures once

... so they will be redone to match the changed status.
This commit is contained in:
fiaxh 2015-12-02 15:43:55 +00:00
parent 02c6793ca9
commit e5f154316c
3 changed files with 94 additions and 72 deletions

View File

@ -413,13 +413,13 @@ public class Account extends AbstractEntity {
} }
public String getPgpSignature() { public String getPgpSignature() {
if (keys.has(KEY_PGP_SIGNATURE)) { try {
try { if (keys.has(KEY_PGP_SIGNATURE) && !"null".equals(keys.getString(KEY_PGP_SIGNATURE))) {
return keys.getString(KEY_PGP_SIGNATURE); return keys.getString(KEY_PGP_SIGNATURE);
} catch (final JSONException e) { } else {
return null; return null;
} }
} else { } catch (final JSONException e) {
return null; return null;
} }
} }
@ -433,6 +433,15 @@ public class Account extends AbstractEntity {
return true; return true;
} }
public boolean unsetPgpSignature() {
try {
keys.put(KEY_PGP_SIGNATURE, JSONObject.NULL);
} catch (JSONException e) {
return false;
}
return true;
}
public long getPgpId() { public long getPgpId() {
if (keys.has(KEY_PGP_ID)) { if (keys.has(KEY_PGP_ID)) {
try { try {

View File

@ -43,7 +43,7 @@ public class DatabaseBackend extends SQLiteOpenHelper {
private static DatabaseBackend instance = null; private static DatabaseBackend instance = null;
private static final String DATABASE_NAME = "history"; private static final String DATABASE_NAME = "history";
private static final int DATABASE_VERSION = 20; private static final int DATABASE_VERSION = 21;
private static String CREATE_CONTATCS_STATEMENT = "create table " private static String CREATE_CONTATCS_STATEMENT = "create table "
+ Contact.TABLENAME + "(" + Contact.ACCOUNT + " TEXT, " + Contact.TABLENAME + "(" + Contact.ACCOUNT + " TEXT, "
@ -335,6 +335,15 @@ public class DatabaseBackend extends SQLiteOpenHelper {
if (oldVersion < 18 && newVersion >= 18) { if (oldVersion < 18 && newVersion >= 18) {
db.execSQL("ALTER TABLE " + Message.TABLENAME + " ADD COLUMN " + Message.READ + " NUMBER DEFAULT 1"); db.execSQL("ALTER TABLE " + Message.TABLENAME + " ADD COLUMN " + Message.READ + " NUMBER DEFAULT 1");
} }
if (oldVersion < 21 && newVersion >= 21) {
List<Account> accounts = getAccounts(db);
for (Account account : accounts) {
account.unsetPgpSignature();
db.update(Account.TABLENAME, account.getContentValues(), Account.UUID
+ "=?", new String[]{account.getUuid()});
}
}
} }
public static synchronized DatabaseBackend getInstance(Context context) { public static synchronized DatabaseBackend getInstance(Context context) {

View File

@ -1062,81 +1062,85 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa
final ConversationActivity activity = (ConversationActivity) getActivity(); final ConversationActivity activity = (ConversationActivity) getActivity();
final XmppConnectionService xmppService = activity.xmppConnectionService; final XmppConnectionService xmppService = activity.xmppConnectionService;
final Contact contact = message.getConversation().getContact(); final Contact contact = message.getConversation().getContact();
if (activity.hasPgp()) { if (!activity.hasPgp()) {
if (conversation.getMode() == Conversation.MODE_SINGLE) { activity.showInstallPgpDialog();
if (contact.getPgpKeyId() != 0) { return;
xmppService.getPgpEngine().hasKey(contact, }
new UiCallback<Contact>() { if (conversation.getAccount().getPgpSignature() == null) {
activity.announcePgp(conversation.getAccount(), conversation);
return;
}
if (conversation.getMode() == Conversation.MODE_SINGLE) {
if (contact.getPgpKeyId() != 0) {
xmppService.getPgpEngine().hasKey(contact,
new UiCallback<Contact>() {
@Override @Override
public void userInputRequried(PendingIntent pi, public void userInputRequried(PendingIntent pi,
Contact contact) { Contact contact) {
activity.runIntent( activity.runIntent(
pi, pi,
ConversationActivity.REQUEST_ENCRYPT_MESSAGE); ConversationActivity.REQUEST_ENCRYPT_MESSAGE);
} }
@Override @Override
public void success(Contact contact) { public void success(Contact contact) {
messageSent(); messageSent();
activity.encryptTextMessage(message); activity.encryptTextMessage(message);
} }
@Override @Override
public void error(int error, Contact contact) { public void error(int error, Contact contact) {
System.out.println();
}
});
}
});
} else {
showNoPGPKeyDialog(false,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
conversation
.setNextEncryption(Message.ENCRYPTION_NONE);
xmppService.databaseBackend
.updateConversation(conversation);
message.setEncryption(Message.ENCRYPTION_NONE);
xmppService.sendMessage(message);
messageSent();
}
});
}
} else { } else {
if (conversation.getMucOptions().pgpKeysInUse()) { showNoPGPKeyDialog(false,
if (!conversation.getMucOptions().everybodyHasKeys()) { new DialogInterface.OnClickListener() {
Toast warning = Toast
.makeText(getActivity(),
R.string.missing_public_keys,
Toast.LENGTH_LONG);
warning.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
warning.show();
}
activity.encryptTextMessage(message);
messageSent();
} else {
showNoPGPKeyDialog(true,
new DialogInterface.OnClickListener() {
@Override @Override
public void onClick(DialogInterface dialog, public void onClick(DialogInterface dialog,
int which) { int which) {
conversation conversation
.setNextEncryption(Message.ENCRYPTION_NONE); .setNextEncryption(Message.ENCRYPTION_NONE);
message.setEncryption(Message.ENCRYPTION_NONE); xmppService.databaseBackend
xmppService.databaseBackend .updateConversation(conversation);
.updateConversation(conversation); message.setEncryption(Message.ENCRYPTION_NONE);
xmppService.sendMessage(message); xmppService.sendMessage(message);
messageSent(); messageSent();
} }
}); });
}
} }
} else { } else {
activity.showInstallPgpDialog(); if (conversation.getMucOptions().pgpKeysInUse()) {
if (!conversation.getMucOptions().everybodyHasKeys()) {
Toast warning = Toast
.makeText(getActivity(),
R.string.missing_public_keys,
Toast.LENGTH_LONG);
warning.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
warning.show();
}
activity.encryptTextMessage(message);
messageSent();
} else {
showNoPGPKeyDialog(true,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
conversation
.setNextEncryption(Message.ENCRYPTION_NONE);
message.setEncryption(Message.ENCRYPTION_NONE);
xmppService.databaseBackend
.updateConversation(conversation);
xmppService.sendMessage(message);
messageSent();
}
});
}
} }
} }