SmsRetrieverWrapper.java

 1package eu.siacs.conversations.utils;
 2
 3import android.content.Context;
 4import android.os.Bundle;
 5import android.util.Log;
 6
 7import com.google.android.gms.auth.api.phone.SmsRetriever;
 8import com.google.android.gms.auth.api.phone.SmsRetrieverClient;
 9import com.google.android.gms.common.api.CommonStatusCodes;
10import com.google.android.gms.common.api.Status;
11import com.google.android.gms.tasks.Task;
12import com.google.common.base.Strings;
13
14import java.util.regex.Matcher;
15import java.util.regex.Pattern;
16
17import eu.siacs.conversations.Config;
18
19public class SmsRetrieverWrapper {
20
21    public static void start(final Context context) {
22        final SmsRetrieverClient client = SmsRetriever.getClient(context);
23        final Task<Void> task = client.startSmsRetriever();
24        task.addOnSuccessListener(aVoid -> Log.d(Config.LOGTAG, "successfully started SMS retriever"));
25        task.addOnFailureListener(e -> Log.d(Config.LOGTAG, "unable to start SMS retriever", e));
26    }
27
28    public static String extractPin(Bundle extras) {
29        final Status status = extras == null ? null : (Status) extras.get(SmsRetriever.EXTRA_STATUS);
30        if (status != null && status.getStatusCode() == CommonStatusCodes.SUCCESS) {
31            Log.d(Config.LOGTAG, "Verification SMS received with status success");
32            final String message = extras.getString(SmsRetriever.EXTRA_SMS_MESSAGE);
33            final Matcher m = Pattern.compile("(?<!\\d)\\d{6}(?!\\d)").matcher(Strings.nullToEmpty(message));
34            if (m.find()) {
35                return m.group();
36            }
37        }
38        return null;
39    }
40}