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