QuickConversationsService.java

 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}