1 // Copyright 2019 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 package org.chromium.content.browser.sms; 6 7 import android.content.BroadcastReceiver; 8 import android.content.Context; 9 import android.content.ContextWrapper; 10 import android.content.Intent; 11 import android.content.IntentFilter; 12 13 import com.google.android.gms.auth.api.phone.SmsCodeBrowserClient; 14 import com.google.android.gms.auth.api.phone.SmsCodeRetriever; 15 import com.google.android.gms.auth.api.phone.SmsRetrieverClient; 16 import com.google.android.gms.tasks.Task; 17 18 class Wrappers { 19 // Prevent instantiation. Wrappers()20 private Wrappers() {} 21 22 /** 23 * Wraps com.google.android.gms.auth.api.phone.SmsRetrieverClient. 24 */ 25 static class SmsRetrieverClientWrapper { 26 // Used for user consent flow. 27 private final SmsRetrieverClient mSmsRetrieverClient; 28 // Used for browser code flow. 29 private final SmsCodeBrowserClient mSmsCodeBrowserClient; 30 private WebOTPServiceContext mContext; 31 SmsRetrieverClientWrapper( SmsRetrieverClient smsRetrieverClient, SmsCodeBrowserClient smsCodeBrowserClient)32 public SmsRetrieverClientWrapper( 33 SmsRetrieverClient smsRetrieverClient, SmsCodeBrowserClient smsCodeBrowserClient) { 34 mSmsRetrieverClient = smsRetrieverClient; 35 mSmsCodeBrowserClient = smsCodeBrowserClient; 36 } 37 setContext(WebOTPServiceContext context)38 public void setContext(WebOTPServiceContext context) { 39 mContext = context; 40 } 41 getContext()42 public WebOTPServiceContext getContext() { 43 return mContext; 44 } 45 startSmsCodeBrowserRetriever()46 public Task<Void> startSmsCodeBrowserRetriever() { 47 return mSmsCodeBrowserClient.startSmsCodeRetriever(); 48 } 49 startSmsUserConsent(String senderAddress)50 public Task<Void> startSmsUserConsent(String senderAddress) { 51 return mSmsRetrieverClient.startSmsUserConsent(senderAddress); 52 } 53 } 54 55 /** 56 * Extends android.content.ContextWrapper to store and retrieve the 57 * registered BroadcastReceiver. 58 */ 59 static class WebOTPServiceContext extends ContextWrapper { 60 private BroadcastReceiver mVerificationReceiver; 61 private BroadcastReceiver mUserConsentReceiver; 62 WebOTPServiceContext(Context context)63 public WebOTPServiceContext(Context context) { 64 super(context); 65 } 66 getRegisteredVerificationReceiver()67 public SmsVerificationReceiver getRegisteredVerificationReceiver() { 68 return (SmsVerificationReceiver) mVerificationReceiver; 69 } 70 getRegisteredUserConsentReceiver()71 public SmsUserConsentReceiver getRegisteredUserConsentReceiver() { 72 return (SmsUserConsentReceiver) mUserConsentReceiver; 73 } 74 75 // --------------------------------------------------------------------- 76 // Context overrides: 77 78 @Override registerReceiver(BroadcastReceiver receiver, IntentFilter filter)79 public Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter) { 80 if (filter.hasAction(SmsCodeRetriever.SMS_CODE_RETRIEVED_ACTION)) { 81 mVerificationReceiver = receiver; 82 } else { 83 mUserConsentReceiver = receiver; 84 } 85 86 return super.registerReceiver(receiver, filter); 87 } 88 89 @Override unregisterReceiver(BroadcastReceiver receiver)90 public void unregisterReceiver(BroadcastReceiver receiver) { 91 if (receiver == mVerificationReceiver) { 92 mVerificationReceiver = null; 93 } else { 94 mUserConsentReceiver = null; 95 } 96 97 super.unregisterReceiver(receiver); 98 } 99 } 100 } 101