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
|
|
|
}
|