Added demo accounts

master
M66B 2 weeks ago
parent 6f3b64e891
commit e98d2623e6

@ -167,6 +167,11 @@ class Core {
State state, long serial) State state, long serial)
throws JSONException, FolderClosedException { throws JSONException, FolderClosedException {
try { try {
if (EntityAccount.isTestAccount(account.user)) {
ops.clear();
return;
}
Log.i(folder.name + " start process"); Log.i(folder.name + " start process");
Store istore = iservice.getStore(); Store istore = iservice.getStore();

@ -908,12 +908,14 @@ public class EmailService implements AutoCloseable {
if ("pop3".equals(protocol) || "pop3s".equals(protocol)) { if ("pop3".equals(protocol) || "pop3s".equals(protocol)) {
iservice = isession.getStore(protocol); iservice = isession.getStore(protocol);
if (!EntityAccount.isTestAccount(user))
iservice.connect(address.getHostAddress(), port, user, null); iservice.connect(address.getHostAddress(), port, user, null);
} else if ("imap".equals(protocol) || "imaps".equals(protocol) || "gimaps".equals(protocol)) { } else if ("imap".equals(protocol) || "imaps".equals(protocol) || "gimaps".equals(protocol)) {
iservice = isession.getStore(protocol); iservice = isession.getStore(protocol);
if (listener != null) if (listener != null)
((IMAPStore) iservice).addStoreListener(listener); ((IMAPStore) iservice).addStoreListener(listener);
if (!EntityAccount.isTestAccount(user)) {
iservice.connect(address.getHostAddress(), port, user, null); iservice.connect(address.getHostAddress(), port, user, null);
// https://www.ietf.org/rfc/rfc2971.txt // https://www.ietf.org/rfc/rfc2971.txt
@ -948,6 +950,7 @@ public class EmailService implements AutoCloseable {
} catch (ProtocolException ex) { } catch (ProtocolException ex) {
Log.e(ex); Log.e(ex);
} }
}
} else if ("smtp".equals(protocol) || "smtps".equals(protocol)) { } else if ("smtp".equals(protocol) || "smtps".equals(protocol)) {
// https://tools.ietf.org/html/rfc5321#section-4.1.3 // https://tools.ietf.org/html/rfc5321#section-4.1.3
@ -959,6 +962,7 @@ public class EmailService implements AutoCloseable {
Log.i("Using localhost=" + properties.getProperty("mail." + protocol + ".localhost")); Log.i("Using localhost=" + properties.getProperty("mail." + protocol + ".localhost"));
iservice = isession.getTransport(protocol); iservice = isession.getTransport(protocol);
if (!EntityAccount.isTestAccount(user))
try { try {
iservice.connect(address.getHostAddress(), port, user, null); iservice.connect(address.getHostAddress(), port, user, null);
} catch (MessagingException ex) { } catch (MessagingException ex) {

@ -26,9 +26,11 @@ import android.app.NotificationManager;
import android.content.Context; import android.content.Context;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.os.Build; import android.os.Build;
import android.os.Bundle;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi; import androidx.annotation.RequiresApi;
import androidx.fragment.app.Fragment;
import androidx.preference.PreferenceManager; import androidx.preference.PreferenceManager;
import androidx.room.ColumnInfo; import androidx.room.ColumnInfo;
import androidx.room.Entity; import androidx.room.Entity;
@ -563,6 +565,66 @@ public class EntityAccount extends EntityOrder implements Serializable {
}; };
} }
static boolean isTestAccount(String user) {
return (user != null && user.endsWith("@demo.faircode.eu"));
}
static EntityAccount getTestAccount(String user) {
EntityAccount account = new EntityAccount();
account.name = "Test account";
account.host = "";
account.port = 0;
account.encryption = 0;
account.auth_type = ServiceAuthenticator.AUTH_TYPE_PASSWORD;
account.user = user;
account.password = "";
account.synchronize = false;
account.primary = false;
return account;
}
static void createTestUser(Fragment fragment, String user, Runnable ready) {
Bundle args = new Bundle();
args.putString("user", user);
new SimpleTask<Void>() {
@Override
protected Void onExecute(Context context, Bundle args) {
String user = args.getString("user");
boolean sync = "test2".equals(UriHelper.getEmailUser(user));
DB db = DB.getInstance(context);
EntityAccount account = EntityAccount.getTestAccount(user);
account.synchronize = sync;
account.id = db.account().insertAccount(account);
if (sync) {
EntityFolder folder = new EntityFolder();
folder.account = account.id;
folder.name = "Inbox";
folder.type = EntityFolder.INBOX;
folder.synchronize = false;
folder.sync_days = EntityFolder.DEFAULT_SYNC;
folder.keep_days = EntityFolder.DEFAULT_KEEP;
db.folder().insertFolder(folder);
folder.name = context.getString(R.string.title_folder_local_drafts);
folder.type = EntityFolder.DRAFTS;
folder.local = true;
db.folder().insertFolder(folder);
}
return null;
}
@Override
protected void onExecuted(Bundle args, Void data) {
ready.run();
}
@Override
protected void onException(Bundle args, Throwable ex) {
}
}.execute(fragment, args, "dummy");
}
@NonNull @NonNull
@Override @Override
public String toString() { public String toString() {

@ -21,9 +21,12 @@ package eu.faircode.email;
import static androidx.room.ForeignKey.CASCADE; import static androidx.room.ForeignKey.CASCADE;
import android.content.Context;
import android.os.Bundle;
import android.text.TextUtils; import android.text.TextUtils;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.room.ColumnInfo; import androidx.room.ColumnInfo;
import androidx.room.Entity; import androidx.room.Entity;
import androidx.room.ForeignKey; import androidx.room.ForeignKey;
@ -455,6 +458,49 @@ public class EntityIdentity {
return (display == null ? name : display); return (display == null ? name : display);
} }
static EntityIdentity getTestAccount(Long account, String user) {
EntityIdentity identity = new EntityIdentity();
identity.account = account;
identity.name = "Test identity";
identity.email = user;
identity.host = "";
identity.port = 0;
identity.encryption = 0;
identity.auth_type = ServiceAuthenticator.AUTH_TYPE_PASSWORD;
identity.user = user;
identity.password = "";
identity.synchronize = true;
identity.primary = false;
return identity;
}
static void createTestUser(Fragment fragment, long account, String user, Runnable ready) {
Bundle args = new Bundle();
args.putLong("account", account);
args.putString("user", user);
new SimpleTask<Void>() {
@Override
protected Void onExecute(Context context, Bundle args) {
long account = args.getLong("account");
String user = args.getString("user");
DB db = DB.getInstance(context);
EntityIdentity identity = EntityIdentity.getTestAccount(account, user);
identity.id = db.identity().insertIdentity(identity);
return null;
}
@Override
protected void onExecuted(Bundle args, Void data) {
ready.run();
}
@Override
protected void onException(Bundle args, Throwable ex) {
}
}.execute(fragment, args, "dummy");
}
@NonNull @NonNull
@Override @Override
public String toString() { public String toString() {

@ -792,6 +792,16 @@ public class FragmentAccount extends FragmentBase {
} }
private void onCheck() { private void onCheck() {
if (EntityAccount.isTestAccount(etUser.getText().toString())) {
EntityAccount.createTestUser(this, etUser.getText().toString(), new Runnable() {
@Override
public void run() {
finish();
}
});
return;
}
int encryption; int encryption;
if (rgEncryption.getCheckedRadioButtonId() == R.id.radio_starttls) if (rgEncryption.getCheckedRadioButtonId() == R.id.radio_starttls)
encryption = EmailService.ENCRYPTION_STARTTLS; encryption = EmailService.ENCRYPTION_STARTTLS;

@ -785,6 +785,16 @@ public class FragmentIdentity extends FragmentBase {
private void onSave(boolean should) { private void onSave(boolean should) {
EntityAccount account = (EntityAccount) spAccount.getSelectedItem(); EntityAccount account = (EntityAccount) spAccount.getSelectedItem();
if (account != null && EntityAccount.isTestAccount(etUser.getText().toString())) {
EntityIdentity.createTestUser(this, account.id, etUser.getText().toString(), new Runnable() {
@Override
public void run() {
finish();
}
});
return;
}
String name = etName.getText().toString(); String name = etName.getText().toString();
if (TextUtils.isEmpty(name)) { if (TextUtils.isEmpty(name)) {
CharSequence hint = etName.getHint(); CharSequence hint = etName.getHint();

@ -379,6 +379,16 @@ public class FragmentOAuth extends FragmentBase {
String name = etName.getText().toString().trim(); String name = etName.getText().toString().trim();
String email = etEmail.getText().toString().trim(); String email = etEmail.getText().toString().trim();
if (EntityAccount.isTestAccount(email)) {
EntityAccount.createTestUser(this, email, new Runnable() {
@Override
public void run() {
finish();
}
});
return;
}
if (TextUtils.isEmpty(name)) if (TextUtils.isEmpty(name))
throw new IllegalArgumentException(getString(R.string.title_no_name)); throw new IllegalArgumentException(getString(R.string.title_no_name));

@ -473,6 +473,16 @@ public class FragmentPop extends FragmentBase {
} }
private void onSave(boolean should) { private void onSave(boolean should) {
if (EntityAccount.isTestAccount(etUser.getText().toString())) {
EntityAccount.createTestUser(this, etUser.getText().toString(), new Runnable() {
@Override
public void run() {
finish();
}
});
return;
}
Bundle args = new Bundle(); Bundle args = new Bundle();
args.putLong("id", id); args.putLong("id", id);

@ -672,6 +672,11 @@ public class ServiceSend extends ServiceBase implements SharedPreferences.OnShar
throw new IllegalArgumentException("Message body missing"); throw new IllegalArgumentException("Message body missing");
EntityAccount account = db.account().getAccount(message.account); EntityAccount account = db.account().getAccount(message.account);
if (EntityAccount.isTestAccount(account.user)){
db.operation().deleteOperation(operation.id);
db.message().deleteMessage(message.id);
return;
}
EntityIdentity ident = db.identity().getIdentity(message.identity); EntityIdentity ident = db.identity().getIdentity(message.identity);
if (ident == null) if (ident == null)

@ -864,7 +864,7 @@
starttls="false" /--> starttls="false" /-->
<!-- No OAuth/POP3 support --> <!-- No OAuth/POP3 support -->
<oauth <oauth
askAccount="false" askAccount="true"
authorizationEndpoint="https://oauth.mail.ru/login" authorizationEndpoint="https://oauth.mail.ru/login"
clientId="ce54d27dc1574b3a8b50e6789cd1a44a" clientId="ce54d27dc1574b3a8b50e6789cd1a44a"
clientSecret="5f1525783e1d4defb3bc9c2c4b7d0c54" clientSecret="5f1525783e1d4defb3bc9c2c4b7d0c54"

Loading…
Cancel
Save