1package eu.siacs.conversations.services;
2
3
4import android.util.Log;
5
6import java.security.SecureRandom;
7import java.util.Collections;
8import java.util.Set;
9import java.util.WeakHashMap;
10
11import eu.siacs.conversations.Config;
12import eu.siacs.conversations.entities.Account;
13import eu.siacs.conversations.utils.CryptoHelper;
14import eu.siacs.conversations.utils.PhoneNumberUtilWrapper;
15import io.michaelrocks.libphonenumber.android.Phonenumber;
16import rocks.xmpp.addr.Jid;
17
18public class QuickConversationsService {
19
20 private final XmppConnectionService service;
21
22 private final Set<OnVerificationRequested> mOnVerificationRequested = Collections.newSetFromMap(new WeakHashMap<>());
23 private final Set<OnVerified> mOnVerified = Collections.newSetFromMap(new WeakHashMap<>());
24
25 QuickConversationsService(XmppConnectionService xmppConnectionService) {
26 this.service = xmppConnectionService;
27 }
28
29 public void addOnVerificationRequestedListener(OnVerificationRequested onVerificationRequested) {
30 synchronized (mOnVerificationRequested) {
31 mOnVerificationRequested.add(onVerificationRequested);
32 }
33 }
34
35 public void removeOnVerificationRequestedListener(OnVerificationRequested onVerificationRequested) {
36 synchronized (mOnVerificationRequested) {
37 mOnVerificationRequested.remove(onVerificationRequested);
38 }
39 }
40
41 public void requestVerification(Phonenumber.PhoneNumber phoneNumber) {
42 String local = PhoneNumberUtilWrapper.normalize(service, phoneNumber);
43 Log.d(Config.LOGTAG,"requesting verification for "+PhoneNumberUtilWrapper.normalize(service,phoneNumber));
44 Account account = new Account(Jid.of(local,"quick.conversations.im",null), CryptoHelper.createPassword(new SecureRandom()));
45 account.setOption(Account.OPTION_DISABLED, true);
46 account.setOption(Account.OPTION_UNVERIFIED, true);
47 service.createAccount(account);
48 synchronized (mOnVerificationRequested) {
49 for(OnVerificationRequested onVerificationRequested : mOnVerificationRequested) {
50 onVerificationRequested.onVerificationRequested();
51 }
52 }
53 }
54
55 public interface OnVerificationRequested {
56 void onVerificationRequestFailed(int code);
57 void onVerificationRequested();
58 }
59
60 public interface OnVerified {
61 void onVerificationFailed();
62 void onVerificationSucceeded();
63 }
64}