1 /* 2 * Copyright (C) 2024 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.adservices.service.common; 18 19 import com.android.adservices.concurrency.AdServicesExecutors; 20 import com.android.internal.annotations.VisibleForTesting; 21 22 import java.util.concurrent.ExecutorService; 23 24 /** Class to instantiate {@link RetryStrategy} based on feature flag */ 25 public class RetryStrategyFactory { 26 27 private final boolean mIsRetryStrategyEnabled; 28 private final ExecutorService mExecutorService; 29 RetryStrategyFactory(boolean isRetryStrategyEnabled, ExecutorService executorService)30 private RetryStrategyFactory(boolean isRetryStrategyEnabled, ExecutorService executorService) { 31 mIsRetryStrategyEnabled = isRetryStrategyEnabled; 32 mExecutorService = executorService; 33 } 34 35 /** provides instance of {@link RetryStrategyFactory}. */ createInstance( boolean isAdServicesRetryStrategyEnabled, ExecutorService executorService)36 public static RetryStrategyFactory createInstance( 37 boolean isAdServicesRetryStrategyEnabled, ExecutorService executorService) { 38 return new RetryStrategyFactory(isAdServicesRetryStrategyEnabled, executorService); 39 } 40 41 /** 42 * provides instance of {@link RetryStrategyFactory} which will always return {@link 43 * NoOpRetryStrategyImpl }. 44 */ 45 @VisibleForTesting createInstanceForTesting()46 public static RetryStrategyFactory createInstanceForTesting() { 47 return new RetryStrategyFactory(false, AdServicesExecutors.getLightWeightExecutor()); 48 } 49 50 /** 51 * @return the correct instance of {@link RetryStrategy} based on the feature flag. 52 */ createRetryStrategy(int maxRetryAttempts)53 public RetryStrategy createRetryStrategy(int maxRetryAttempts) { 54 return mIsRetryStrategyEnabled 55 ? new RetryStrategyImpl(maxRetryAttempts, mExecutorService) 56 : new NoOpRetryStrategyImpl(); 57 } 58 } 59