ConnectivityManagerCompat.java revision 5d79c2b6211936177817f2492816c1dba76dac3e
15d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey/* 25d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey * Copyright (C) 2012 The Android Open Source Project 35d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey * 45d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey * Licensed under the Apache License, Version 2.0 (the "License"); 55d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey * you may not use this file except in compliance with the License. 65d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey * You may obtain a copy of the License at 75d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey * 85d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey * http://www.apache.org/licenses/LICENSE-2.0 95d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey * 105d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey * Unless required by applicable law or agreed to in writing, software 115d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey * distributed under the License is distributed on an "AS IS" BASIS, 125d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 135d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey * See the License for the specific language governing permissions and 145d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey * limitations under the License. 155d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey */ 165d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey 175d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkeypackage android.support.v4.net; 185d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey 195d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkeyimport static android.net.ConnectivityManager.TYPE_MOBILE; 205d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkeyimport static android.net.ConnectivityManager.TYPE_WIFI; 215d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey 225d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkeyimport android.net.ConnectivityManager; 235d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkeyimport android.net.NetworkInfo; 245d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkeyimport android.os.Build; 255d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey 265d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey/** 275d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey * Helper for accessing features in {@link ConnectivityManager} introduced after 285d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey * API level 16 in a backwards compatible fashion. 295d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey */ 305d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkeypublic class ConnectivityManagerCompat { 315d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey 325d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey interface ConnectivityManagerCompatImpl { 335d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey boolean isActiveNetworkMetered(ConnectivityManager cm); 345d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey } 355d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey 365d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey static class BaseConnectivityManagerCompatImpl implements ConnectivityManagerCompatImpl { 375d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey @Override 385d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey public boolean isActiveNetworkMetered(ConnectivityManager cm) { 395d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey final NetworkInfo info = cm.getActiveNetworkInfo(); 405d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey if (info == null) { 415d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey // err on side of caution 425d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey return true; 435d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey } 445d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey 455d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey final int type = info.getType(); 465d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey switch (type) { 475d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey case TYPE_MOBILE: 485d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey return true; 495d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey case TYPE_WIFI: 505d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey return false; 515d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey default: 525d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey // err on side of caution 535d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey return true; 545d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey } 555d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey } 565d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey } 575d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey 585d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey static class GingerbreadConnectivityManagerCompatImpl implements ConnectivityManagerCompatImpl { 595d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey @Override 605d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey public boolean isActiveNetworkMetered(ConnectivityManager cm) { 615d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey return ConnectivityManagerCompatGingerbread.isActiveNetworkMetered(cm); 625d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey } 635d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey } 645d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey 655d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey static class HoneycombMR2ConnectivityManagerCompatImpl 665d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey implements ConnectivityManagerCompatImpl { 675d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey @Override 685d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey public boolean isActiveNetworkMetered(ConnectivityManager cm) { 695d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey return ConnectivityManagerCompatHoneycombMR2.isActiveNetworkMetered(cm); 705d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey } 715d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey } 725d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey 735d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey static class JellyBeanConnectivityManagerCompatImpl implements ConnectivityManagerCompatImpl { 745d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey @Override 755d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey public boolean isActiveNetworkMetered(ConnectivityManager cm) { 765d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey return ConnectivityManagerCompatJellyBean.isActiveNetworkMetered(cm); 775d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey } 785d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey } 795d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey 805d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey private static final ConnectivityManagerCompatImpl IMPL; 815d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey 825d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey static { 835d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey if (Build.VERSION.SDK_INT >= 16) { 845d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey IMPL = new JellyBeanConnectivityManagerCompatImpl(); 855d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey } else if (Build.VERSION.SDK_INT >= 13) { 865d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey IMPL = new HoneycombMR2ConnectivityManagerCompatImpl(); 875d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey } else if (Build.VERSION.SDK_INT >= 8) { 885d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey IMPL = new GingerbreadConnectivityManagerCompatImpl(); 895d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey } else { 905d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey IMPL = new BaseConnectivityManagerCompatImpl(); 915d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey } 925d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey } 935d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey 945d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey /** 955d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey * Returns if the currently active data network is metered. A network is 965d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey * classified as metered when the user is sensitive to heavy data usage on 975d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey * that connection. You should check this before doing large data transfers, 985d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey * and warn the user or delay the operation until another network is 995d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey * available. 1005d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey */ 1015d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey public boolean isActiveNetworkMetered(ConnectivityManager cm) { 1025d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey return IMPL.isActiveNetworkMetered(cm); 1035d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey } 1045d79c2b6211936177817f2492816c1dba76dac3eJeff Sharkey} 105