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}