1 /*
2  * Copyright 2018 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 androidx.work.impl.background.systemalarm;
18 
19 import android.content.BroadcastReceiver;
20 import android.content.Context;
21 import android.content.Intent;
22 import android.util.Log;
23 
24 import androidx.work.impl.background.systemalarm.ConstraintProxy.BatteryChargingProxy;
25 import androidx.work.impl.background.systemalarm.ConstraintProxy.BatteryNotLowProxy;
26 import androidx.work.impl.background.systemalarm.ConstraintProxy.NetworkStateProxy;
27 import androidx.work.impl.background.systemalarm.ConstraintProxy.StorageNotLowProxy;
28 import androidx.work.impl.utils.PackageManagerHelper;
29 
30 
31 /**
32  * The {@link BroadcastReceiver} responsible for updating constraint proxies.
33  */
34 public class ConstraintProxyUpdateReceiver extends BroadcastReceiver {
35     private static final String TAG = "ConstrntProxyUpdtRecvr";
36 
37     static final String ACTION = "androidx.work.impl.background.systemalarm.UpdateProxies";
38 
39     static final String KEY_BATTERY_NOT_LOW_PROXY_ENABLED = "KEY_BATTERY_NOT_LOW_PROXY_ENABLED";
40     static final String KEY_BATTERY_CHARGING_PROXY_ENABLED = "KEY_BATTERY_CHARGING_PROXY_ENABLED";
41     static final String KEY_STORAGE_NOT_LOW_PROXY_ENABLED = "KEY_STORAGE_NOT_LOW_PROXY_ENABLED";
42     static final String KEY_NETWORK_STATE_PROXY_ENABLED = "KEY_NETWORK_STATE_PROXY_ENABLED";
43 
44     /**
45      * @param batteryNotLowProxyEnabled   {@code true} if {@link BatteryNotLowProxy needs to be
46      *                                    enabled.}
47      * @param batteryChargingProxyEnabled {@code true} if {@link BatteryChargingProxy needs to be
48      *                                    enabled.}
49      * @param storageNotLowProxyEnabled   {@code true} if {@link StorageNotLowProxy needs to be
50      *                                    enabled.}
51      * @param networkStateProxyEnabled    {@code true} if {@link NetworkStateProxy needs to be
52      *                                    enabled.}
53      * @return an {@link Intent} with information about the constraint proxies which need to be
54      * enabled.
55      */
newConstraintProxyUpdateIntent( boolean batteryNotLowProxyEnabled, boolean batteryChargingProxyEnabled, boolean storageNotLowProxyEnabled, boolean networkStateProxyEnabled)56     public static Intent newConstraintProxyUpdateIntent(
57             boolean batteryNotLowProxyEnabled,
58             boolean batteryChargingProxyEnabled,
59             boolean storageNotLowProxyEnabled,
60             boolean networkStateProxyEnabled) {
61 
62         Intent intent = new Intent(ACTION);
63         intent.putExtra(KEY_BATTERY_NOT_LOW_PROXY_ENABLED, batteryNotLowProxyEnabled)
64                 .putExtra(KEY_BATTERY_CHARGING_PROXY_ENABLED, batteryChargingProxyEnabled)
65                 .putExtra(KEY_STORAGE_NOT_LOW_PROXY_ENABLED, storageNotLowProxyEnabled)
66                 .putExtra(KEY_NETWORK_STATE_PROXY_ENABLED, networkStateProxyEnabled);
67 
68         return intent;
69     }
70 
71     @Override
onReceive(Context context, Intent intent)72     public void onReceive(Context context, Intent intent) {
73         String action = intent != null ? intent.getAction() : null;
74         if (!ACTION.equals(action)) {
75             Log.d(TAG, String.format("Ignoring unknown action %s", action));
76         } else {
77             boolean batteryNotLowProxyEnabled = intent.getBooleanExtra(
78                     KEY_BATTERY_NOT_LOW_PROXY_ENABLED, false);
79             boolean batteryChargingProxyEnabled = intent.getBooleanExtra(
80                     KEY_BATTERY_CHARGING_PROXY_ENABLED, false);
81             boolean storageNotLowProxyEnabled = intent.getBooleanExtra(
82                     KEY_STORAGE_NOT_LOW_PROXY_ENABLED, false);
83             boolean networkStateProxyEnabled = intent.getBooleanExtra(
84                     KEY_NETWORK_STATE_PROXY_ENABLED, false);
85 
86             Log.d(TAG, String.format("Updating proxies: BatteryNotLowProxy enabled (%s), "
87                             + "BatteryChargingProxy enabled (%s), "
88                             + "StorageNotLowProxy (%s), "
89                             + "NetworkStateProxy enabled (%s)", batteryNotLowProxyEnabled,
90                     batteryChargingProxyEnabled, storageNotLowProxyEnabled,
91                     networkStateProxyEnabled));
92 
93             PackageManagerHelper.setComponentEnabled(context, BatteryNotLowProxy.class,
94                     batteryNotLowProxyEnabled);
95             PackageManagerHelper.setComponentEnabled(context, BatteryChargingProxy.class,
96                     batteryChargingProxyEnabled);
97             PackageManagerHelper.setComponentEnabled(context, StorageNotLowProxy.class,
98                     storageNotLowProxyEnabled);
99             PackageManagerHelper.setComponentEnabled(context, NetworkStateProxy.class,
100                     networkStateProxyEnabled);
101         }
102     }
103 }
104