1 /* 2 * Copyright (C) 2022 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.safetycenter; 18 19 import static android.os.Build.VERSION_CODES.TIRAMISU; 20 import static android.os.Build.VERSION_CODES.UPSIDE_DOWN_CAKE; 21 import static android.safetycenter.SafetyCenterManager.EXTRA_REFRESH_REQUEST_TYPE_FETCH_FRESH_DATA; 22 import static android.safetycenter.SafetyCenterManager.EXTRA_REFRESH_REQUEST_TYPE_GET_DATA; 23 import static android.safetycenter.SafetyCenterManager.REFRESH_REASON_DEVICE_LOCALE_CHANGE; 24 import static android.safetycenter.SafetyCenterManager.REFRESH_REASON_DEVICE_REBOOT; 25 import static android.safetycenter.SafetyCenterManager.REFRESH_REASON_OTHER; 26 import static android.safetycenter.SafetyCenterManager.REFRESH_REASON_PAGE_OPEN; 27 import static android.safetycenter.SafetyCenterManager.REFRESH_REASON_PERIODIC; 28 import static android.safetycenter.SafetyCenterManager.REFRESH_REASON_RESCAN_BUTTON_CLICK; 29 import static android.safetycenter.SafetyCenterManager.REFRESH_REASON_SAFETY_CENTER_ENABLED; 30 31 import android.annotation.TargetApi; 32 import android.safetycenter.SafetyCenterManager.RefreshReason; 33 import android.safetycenter.SafetyCenterManager.RefreshRequestType; 34 import android.util.Log; 35 36 import androidx.annotation.RequiresApi; 37 38 import com.android.modules.utils.build.SdkLevel; 39 40 /** Helpers to do with {@link RefreshReason}. */ 41 @RequiresApi(TIRAMISU) 42 final class RefreshReasons { 43 44 private static final String TAG = "RefreshReasons"; 45 RefreshReasons()46 private RefreshReasons() {} 47 48 /** 49 * Validates the given {@link RefreshReason}, and throws an {@link IllegalArgumentException} in 50 * case of unexpected value. 51 */ validate(@efreshReason int refreshReason)52 static void validate(@RefreshReason int refreshReason) { 53 switch (refreshReason) { 54 case REFRESH_REASON_RESCAN_BUTTON_CLICK: 55 case REFRESH_REASON_PAGE_OPEN: 56 case REFRESH_REASON_DEVICE_REBOOT: 57 case REFRESH_REASON_DEVICE_LOCALE_CHANGE: 58 case REFRESH_REASON_SAFETY_CENTER_ENABLED: 59 case REFRESH_REASON_OTHER: 60 return; 61 } 62 if (SdkLevel.isAtLeastU() && refreshReason == REFRESH_REASON_PERIODIC) { 63 return; 64 } 65 throw new IllegalArgumentException("Unexpected refresh reason: " + refreshReason); 66 } 67 68 /** Converts the given {@link RefreshReason} to a {@link RefreshRequestType}. */ 69 @TargetApi(UPSIDE_DOWN_CAKE) 70 @RefreshRequestType toRefreshRequestType(@efreshReason int refreshReason)71 static int toRefreshRequestType(@RefreshReason int refreshReason) { 72 switch (refreshReason) { 73 case REFRESH_REASON_RESCAN_BUTTON_CLICK: 74 return EXTRA_REFRESH_REQUEST_TYPE_FETCH_FRESH_DATA; 75 case REFRESH_REASON_PAGE_OPEN: 76 case REFRESH_REASON_DEVICE_REBOOT: 77 case REFRESH_REASON_DEVICE_LOCALE_CHANGE: 78 case REFRESH_REASON_SAFETY_CENTER_ENABLED: 79 case REFRESH_REASON_OTHER: 80 case REFRESH_REASON_PERIODIC: 81 return EXTRA_REFRESH_REQUEST_TYPE_GET_DATA; 82 } 83 Log.w(TAG, "Unexpected refresh reason: " + refreshReason); 84 return EXTRA_REFRESH_REQUEST_TYPE_GET_DATA; 85 } 86 87 /** 88 * Returns {@code true} if the given {@link RefreshReason} corresponds to a background refresh. 89 */ 90 @TargetApi(UPSIDE_DOWN_CAKE) isBackgroundRefresh(@efreshReason int refreshReason)91 static boolean isBackgroundRefresh(@RefreshReason int refreshReason) { 92 switch (refreshReason) { 93 case REFRESH_REASON_DEVICE_REBOOT: 94 case REFRESH_REASON_DEVICE_LOCALE_CHANGE: 95 case REFRESH_REASON_SAFETY_CENTER_ENABLED: 96 case REFRESH_REASON_OTHER: 97 case REFRESH_REASON_PERIODIC: 98 return true; 99 case REFRESH_REASON_PAGE_OPEN: 100 case REFRESH_REASON_RESCAN_BUTTON_CLICK: 101 return false; 102 } 103 Log.w(TAG, "Unexpected refresh reason: " + refreshReason); 104 return false; 105 } 106 } 107