1215690c1c18a80b4743ba14895829380869c8493Jan Clarin/*
29303723d17a274e54c23e9e6ae4b3d52408d3addJan Clarin * Copyright 2017 The Android Open Source Project
3215690c1c18a80b4743ba14895829380869c8493Jan Clarin *
4215690c1c18a80b4743ba14895829380869c8493Jan Clarin * Licensed under the Apache License, Version 2.0 (the "License");
5215690c1c18a80b4743ba14895829380869c8493Jan Clarin * you may not use this file except in compliance with the License.
6215690c1c18a80b4743ba14895829380869c8493Jan Clarin * You may obtain a copy of the License at
7215690c1c18a80b4743ba14895829380869c8493Jan Clarin *
8215690c1c18a80b4743ba14895829380869c8493Jan Clarin *      http://www.apache.org/licenses/LICENSE-2.0
9215690c1c18a80b4743ba14895829380869c8493Jan Clarin *
10215690c1c18a80b4743ba14895829380869c8493Jan Clarin * Unless required by applicable law or agreed to in writing, software
11215690c1c18a80b4743ba14895829380869c8493Jan Clarin * distributed under the License is distributed on an "AS IS" BASIS,
12215690c1c18a80b4743ba14895829380869c8493Jan Clarin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13215690c1c18a80b4743ba14895829380869c8493Jan Clarin * See the License for the specific language governing permissions and
14215690c1c18a80b4743ba14895829380869c8493Jan Clarin * limitations under the License.
15215690c1c18a80b4743ba14895829380869c8493Jan Clarin */
16215690c1c18a80b4743ba14895829380869c8493Jan Clarin
17564e43098c323d1a90be53c190b8fdbdde973505Sumir Katariapackage androidx.work.impl.constraints.controllers;
18215690c1c18a80b4743ba14895829380869c8493Jan Clarin
19564e43098c323d1a90be53c190b8fdbdde973505Sumir Katariaimport static androidx.work.NetworkType.CONNECTED;
20a10969c4800ce698191b23836df2b31c2663c17dJan Clarin
21215690c1c18a80b4743ba14895829380869c8493Jan Clarinimport android.content.Context;
22eb4198d5a50632a246a6438c6ca98ab07608ab10Jan Clarinimport android.os.Build;
23215690c1c18a80b4743ba14895829380869c8493Jan Clarinimport android.support.annotation.NonNull;
24215690c1c18a80b4743ba14895829380869c8493Jan Clarin
25564e43098c323d1a90be53c190b8fdbdde973505Sumir Katariaimport androidx.work.impl.constraints.NetworkState;
26564e43098c323d1a90be53c190b8fdbdde973505Sumir Katariaimport androidx.work.impl.constraints.trackers.Trackers;
27564e43098c323d1a90be53c190b8fdbdde973505Sumir Katariaimport androidx.work.impl.model.WorkSpec;
28564e43098c323d1a90be53c190b8fdbdde973505Sumir Kataria
29215690c1c18a80b4743ba14895829380869c8493Jan Clarin/**
30215690c1c18a80b4743ba14895829380869c8493Jan Clarin * A {@link ConstraintController} for monitoring that any usable network connection is available.
31eb4198d5a50632a246a6438c6ca98ab07608ab10Jan Clarin * <p>
32eb4198d5a50632a246a6438c6ca98ab07608ab10Jan Clarin * For API 26 and above, usable means that the {@link NetworkState} is validated, i.e.
33eb4198d5a50632a246a6438c6ca98ab07608ab10Jan Clarin * it has a working internet connection.
34eb4198d5a50632a246a6438c6ca98ab07608ab10Jan Clarin * <p>
35eb4198d5a50632a246a6438c6ca98ab07608ab10Jan Clarin * For API 25 and below, usable simply means that {@link NetworkState} is connected.
36215690c1c18a80b4743ba14895829380869c8493Jan Clarin */
37215690c1c18a80b4743ba14895829380869c8493Jan Clarin
38a0d0d16f358a6cd71033a9d12c934c1c90b07973Xyan Bhatnagarpublic class NetworkConnectedController extends ConstraintController<NetworkState> {
39a10969c4800ce698191b23836df2b31c2663c17dJan Clarin    public NetworkConnectedController(Context context, OnConstraintUpdatedCallback callback) {
40a10969c4800ce698191b23836df2b31c2663c17dJan Clarin        super(Trackers.getInstance(context).getNetworkStateTracker(), callback);
41a10969c4800ce698191b23836df2b31c2663c17dJan Clarin    }
42a10969c4800ce698191b23836df2b31c2663c17dJan Clarin
43a10969c4800ce698191b23836df2b31c2663c17dJan Clarin    @Override
44a10969c4800ce698191b23836df2b31c2663c17dJan Clarin    boolean hasConstraint(@NonNull WorkSpec workSpec) {
45b5728f4e1a4b3f4f1fabf033b1363ca6b1cffdefSumir Kataria        return workSpec.constraints.getRequiredNetworkType() == CONNECTED;
46215690c1c18a80b4743ba14895829380869c8493Jan Clarin    }
47215690c1c18a80b4743ba14895829380869c8493Jan Clarin
48215690c1c18a80b4743ba14895829380869c8493Jan Clarin    @Override
49a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagar    boolean isConstrained(@NonNull NetworkState state) {
50a0d0d16f358a6cd71033a9d12c934c1c90b07973Xyan Bhatnagar        if (Build.VERSION.SDK_INT >= 26) {
51a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagar            return !state.isConnected() || !state.isValidated();
52a0d0d16f358a6cd71033a9d12c934c1c90b07973Xyan Bhatnagar        } else {
53a20fe146d0b328cc012b110562ca5ff1a456b758Xyan Bhatnagar            return !state.isConnected();
54a0d0d16f358a6cd71033a9d12c934c1c90b07973Xyan Bhatnagar        }
55215690c1c18a80b4743ba14895829380869c8493Jan Clarin    }
56215690c1c18a80b4743ba14895829380869c8493Jan Clarin}
57