Conversations/src/quick/java/eu/siacs/conversations/services/QuickConversationsService.java

102 lines
3.7 KiB
Java
Raw Normal View History

2018-10-19 20:43:38 +02:00
package eu.siacs.conversations.services;
2018-10-19 23:29:17 +02:00
import android.util.Log;
2018-10-20 16:37:59 +02:00
import java.security.SecureRandom;
2018-10-19 23:29:17 +02:00
import java.util.Collections;
import java.util.Set;
import java.util.WeakHashMap;
2018-10-21 16:27:56 +02:00
import java.util.concurrent.atomic.AtomicBoolean;
2018-10-19 23:29:17 +02:00
import eu.siacs.conversations.Config;
import eu.siacs.conversations.entities.Account;
2018-10-20 16:37:59 +02:00
import eu.siacs.conversations.utils.CryptoHelper;
2018-10-19 23:29:17 +02:00
import eu.siacs.conversations.utils.PhoneNumberUtilWrapper;
import io.michaelrocks.libphonenumber.android.Phonenumber;
import rocks.xmpp.addr.Jid;
2018-10-19 20:43:38 +02:00
public class QuickConversationsService {
private final XmppConnectionService service;
2018-10-19 23:29:17 +02:00
private final Set<OnVerificationRequested> mOnVerificationRequested = Collections.newSetFromMap(new WeakHashMap<>());
2018-10-21 16:27:56 +02:00
private final Set<OnVerification> mOnVerification = Collections.newSetFromMap(new WeakHashMap<>());
private final AtomicBoolean mVerificationInProgress = new AtomicBoolean(false);
2018-10-19 23:29:17 +02:00
2018-10-19 20:43:38 +02:00
QuickConversationsService(XmppConnectionService xmppConnectionService) {
this.service = xmppConnectionService;
}
2018-10-19 23:29:17 +02:00
public void addOnVerificationRequestedListener(OnVerificationRequested onVerificationRequested) {
synchronized (mOnVerificationRequested) {
mOnVerificationRequested.add(onVerificationRequested);
}
}
public void removeOnVerificationRequestedListener(OnVerificationRequested onVerificationRequested) {
synchronized (mOnVerificationRequested) {
mOnVerificationRequested.remove(onVerificationRequested);
}
}
2018-10-21 16:27:56 +02:00
public void addOnVerificationListener(OnVerification onVerification) {
synchronized (mOnVerification) {
mOnVerification.add(onVerification);
}
}
public void removeOnVerificationListener(OnVerification onVerification) {
synchronized (mOnVerification) {
mOnVerification.remove(onVerification);
}
}
2018-10-19 23:29:17 +02:00
public void requestVerification(Phonenumber.PhoneNumber phoneNumber) {
String local = PhoneNumberUtilWrapper.normalize(service, phoneNumber);
Log.d(Config.LOGTAG,"requesting verification for "+PhoneNumberUtilWrapper.normalize(service,phoneNumber));
2018-10-20 16:37:59 +02:00
Account account = new Account(Jid.of(local,"quick.conversations.im",null), CryptoHelper.createPassword(new SecureRandom()));
account.setOption(Account.OPTION_DISABLED, true);
account.setOption(Account.OPTION_UNVERIFIED, true);
2018-10-19 23:29:17 +02:00
service.createAccount(account);
synchronized (mOnVerificationRequested) {
for(OnVerificationRequested onVerificationRequested : mOnVerificationRequested) {
onVerificationRequested.onVerificationRequested();
}
}
}
2018-10-21 16:27:56 +02:00
public void verify(Account account, String pin) {
if (mVerificationInProgress.compareAndSet(false, true)) {
new Thread(() -> {
try {
Thread.sleep(5000);
synchronized (mOnVerification) {
for (OnVerification onVerification : mOnVerification) {
onVerification.onVerificationFailed();
}
}
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
mVerificationInProgress.set(false);
}
}).start();
}
}
public boolean isVerifying() {
return mVerificationInProgress.get();
}
2018-10-19 23:29:17 +02:00
public interface OnVerificationRequested {
void onVerificationRequestFailed(int code);
void onVerificationRequested();
}
2018-10-21 16:27:56 +02:00
public interface OnVerification {
2018-10-19 23:29:17 +02:00
void onVerificationFailed();
void onVerificationSucceeded();
}
2018-10-19 20:43:38 +02:00
}