• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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