136612d27b67ff2e79ffff8eb12d95d2058abde02Jeff Sharkey/* 236612d27b67ff2e79ffff8eb12d95d2058abde02Jeff Sharkey * Copyright (C) 2008 The Android Open Source Project 336612d27b67ff2e79ffff8eb12d95d2058abde02Jeff Sharkey * 436612d27b67ff2e79ffff8eb12d95d2058abde02Jeff Sharkey * Licensed under the Apache License, Version 2.0 (the "License"); 536612d27b67ff2e79ffff8eb12d95d2058abde02Jeff Sharkey * you may not use this file except in compliance with the License. 636612d27b67ff2e79ffff8eb12d95d2058abde02Jeff Sharkey * You may obtain a copy of the License at 736612d27b67ff2e79ffff8eb12d95d2058abde02Jeff Sharkey * 836612d27b67ff2e79ffff8eb12d95d2058abde02Jeff Sharkey * http://www.apache.org/licenses/LICENSE-2.0 936612d27b67ff2e79ffff8eb12d95d2058abde02Jeff Sharkey * 1036612d27b67ff2e79ffff8eb12d95d2058abde02Jeff Sharkey * Unless required by applicable law or agreed to in writing, software 1136612d27b67ff2e79ffff8eb12d95d2058abde02Jeff Sharkey * distributed under the License is distributed on an "AS IS" BASIS, 1236612d27b67ff2e79ffff8eb12d95d2058abde02Jeff Sharkey * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1336612d27b67ff2e79ffff8eb12d95d2058abde02Jeff Sharkey * See the License for the specific language governing permissions and 1436612d27b67ff2e79ffff8eb12d95d2058abde02Jeff Sharkey * limitations under the License. 1536612d27b67ff2e79ffff8eb12d95d2058abde02Jeff Sharkey */ 1636612d27b67ff2e79ffff8eb12d95d2058abde02Jeff Sharkey 1723357198c440e6872d3aef3e608295db7f8273bcSteve Howardpackage com.android.providers.downloads; 1823357198c440e6872d3aef3e608295db7f8273bcSteve Howard 199b4371da26f27cfa85d78e0bd4728309f9a445c9Vasu Noriimport android.app.DownloadManager; 20af28400b74de05862b470412a5c92f68e99f59f8Steve Howardimport android.content.Context; 210a77c62a82503b38c484e0079648f0231dd85d53Steve Howardimport android.content.Intent; 220a77c62a82503b38c484e0079648f0231dd85d53Steve Howardimport android.content.pm.PackageManager.NameNotFoundException; 23af28400b74de05862b470412a5c92f68e99f59f8Steve Howardimport android.net.ConnectivityManager; 24af28400b74de05862b470412a5c92f68e99f59f8Steve Howardimport android.net.NetworkInfo; 25af28400b74de05862b470412a5c92f68e99f59f8Steve Howardimport android.telephony.TelephonyManager; 26af28400b74de05862b470412a5c92f68e99f59f8Steve Howardimport android.util.Log; 27af28400b74de05862b470412a5c92f68e99f59f8Steve Howard 2823357198c440e6872d3aef3e608295db7f8273bcSteve Howardclass RealSystemFacade implements SystemFacade { 29af28400b74de05862b470412a5c92f68e99f59f8Steve Howard private Context mContext; 30af28400b74de05862b470412a5c92f68e99f59f8Steve Howard 31af28400b74de05862b470412a5c92f68e99f59f8Steve Howard public RealSystemFacade(Context context) { 32af28400b74de05862b470412a5c92f68e99f59f8Steve Howard mContext = context; 33af28400b74de05862b470412a5c92f68e99f59f8Steve Howard } 34af28400b74de05862b470412a5c92f68e99f59f8Steve Howard 358ac10e0e0667a4fe35191deebb5fa9786bf4226cJeff Sharkey @Override 3623357198c440e6872d3aef3e608295db7f8273bcSteve Howard public long currentTimeMillis() { 3723357198c440e6872d3aef3e608295db7f8273bcSteve Howard return System.currentTimeMillis(); 3823357198c440e6872d3aef3e608295db7f8273bcSteve Howard } 39af28400b74de05862b470412a5c92f68e99f59f8Steve Howard 408ac10e0e0667a4fe35191deebb5fa9786bf4226cJeff Sharkey @Override 41961024389b3782936a40a7d090d670290bb66c3cJeff Sharkey public NetworkInfo getActiveNetworkInfo(int uid) { 42af28400b74de05862b470412a5c92f68e99f59f8Steve Howard ConnectivityManager connectivity = 43af28400b74de05862b470412a5c92f68e99f59f8Steve Howard (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE); 44af28400b74de05862b470412a5c92f68e99f59f8Steve Howard if (connectivity == null) { 45af28400b74de05862b470412a5c92f68e99f59f8Steve Howard Log.w(Constants.TAG, "couldn't get connectivity manager"); 46071bd7acb3185f4f1e807855605c5e6018e9742fSteve Howard return null; 47af28400b74de05862b470412a5c92f68e99f59f8Steve Howard } 48af28400b74de05862b470412a5c92f68e99f59f8Steve Howard 49961024389b3782936a40a7d090d670290bb66c3cJeff Sharkey final NetworkInfo activeInfo = connectivity.getActiveNetworkInfoForUid(uid); 50961024389b3782936a40a7d090d670290bb66c3cJeff Sharkey if (activeInfo == null && Constants.LOGVV) { 51961024389b3782936a40a7d090d670290bb66c3cJeff Sharkey Log.v(Constants.TAG, "network is not available"); 52af28400b74de05862b470412a5c92f68e99f59f8Steve Howard } 53961024389b3782936a40a7d090d670290bb66c3cJeff Sharkey return activeInfo; 54af28400b74de05862b470412a5c92f68e99f59f8Steve Howard } 55af28400b74de05862b470412a5c92f68e99f59f8Steve Howard 56a7ae77fdae69bcc6d6609d4639fed5d96e55eeaaJeff Sharkey @Override 57a7ae77fdae69bcc6d6609d4639fed5d96e55eeaaJeff Sharkey public boolean isActiveNetworkMetered() { 58a7ae77fdae69bcc6d6609d4639fed5d96e55eeaaJeff Sharkey final ConnectivityManager conn = ConnectivityManager.from(mContext); 59a7ae77fdae69bcc6d6609d4639fed5d96e55eeaaJeff Sharkey return conn.isActiveNetworkMetered(); 60a7ae77fdae69bcc6d6609d4639fed5d96e55eeaaJeff Sharkey } 61a7ae77fdae69bcc6d6609d4639fed5d96e55eeaaJeff Sharkey 628ac10e0e0667a4fe35191deebb5fa9786bf4226cJeff Sharkey @Override 63af28400b74de05862b470412a5c92f68e99f59f8Steve Howard public boolean isNetworkRoaming() { 64af28400b74de05862b470412a5c92f68e99f59f8Steve Howard ConnectivityManager connectivity = 65af28400b74de05862b470412a5c92f68e99f59f8Steve Howard (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE); 66af28400b74de05862b470412a5c92f68e99f59f8Steve Howard if (connectivity == null) { 67af28400b74de05862b470412a5c92f68e99f59f8Steve Howard Log.w(Constants.TAG, "couldn't get connectivity manager"); 68af28400b74de05862b470412a5c92f68e99f59f8Steve Howard return false; 69af28400b74de05862b470412a5c92f68e99f59f8Steve Howard } 70af28400b74de05862b470412a5c92f68e99f59f8Steve Howard 71af28400b74de05862b470412a5c92f68e99f59f8Steve Howard NetworkInfo info = connectivity.getActiveNetworkInfo(); 72af28400b74de05862b470412a5c92f68e99f59f8Steve Howard boolean isMobile = (info != null && info.getType() == ConnectivityManager.TYPE_MOBILE); 73af28400b74de05862b470412a5c92f68e99f59f8Steve Howard boolean isRoaming = isMobile && TelephonyManager.getDefault().isNetworkRoaming(); 74071bd7acb3185f4f1e807855605c5e6018e9742fSteve Howard if (Constants.LOGVV && isRoaming) { 75071bd7acb3185f4f1e807855605c5e6018e9742fSteve Howard Log.v(Constants.TAG, "network is roaming"); 76af28400b74de05862b470412a5c92f68e99f59f8Steve Howard } 77071bd7acb3185f4f1e807855605c5e6018e9742fSteve Howard return isRoaming; 78071bd7acb3185f4f1e807855605c5e6018e9742fSteve Howard } 79071bd7acb3185f4f1e807855605c5e6018e9742fSteve Howard 808ac10e0e0667a4fe35191deebb5fa9786bf4226cJeff Sharkey @Override 810d4f9f105c3a31475a36e9a1edfa868c66ff455fSteve Howard public Long getMaxBytesOverMobile() { 829b4371da26f27cfa85d78e0bd4728309f9a445c9Vasu Nori return DownloadManager.getMaxBytesOverMobile(mContext); 83af28400b74de05862b470412a5c92f68e99f59f8Steve Howard } 840a77c62a82503b38c484e0079648f0231dd85d53Steve Howard 850a77c62a82503b38c484e0079648f0231dd85d53Steve Howard @Override 86d319729622da1893e895f2e35f41d01ecdca3705Steve Howard public Long getRecommendedMaxBytesOverMobile() { 879b4371da26f27cfa85d78e0bd4728309f9a445c9Vasu Nori return DownloadManager.getRecommendedMaxBytesOverMobile(mContext); 88d319729622da1893e895f2e35f41d01ecdca3705Steve Howard } 89d319729622da1893e895f2e35f41d01ecdca3705Steve Howard 90d319729622da1893e895f2e35f41d01ecdca3705Steve Howard @Override 910a77c62a82503b38c484e0079648f0231dd85d53Steve Howard public void sendBroadcast(Intent intent) { 920a77c62a82503b38c484e0079648f0231dd85d53Steve Howard mContext.sendBroadcast(intent); 930a77c62a82503b38c484e0079648f0231dd85d53Steve Howard } 940a77c62a82503b38c484e0079648f0231dd85d53Steve Howard 950a77c62a82503b38c484e0079648f0231dd85d53Steve Howard @Override 960a77c62a82503b38c484e0079648f0231dd85d53Steve Howard public boolean userOwnsPackage(int uid, String packageName) throws NameNotFoundException { 970a77c62a82503b38c484e0079648f0231dd85d53Steve Howard return mContext.getPackageManager().getApplicationInfo(packageName, 0).uid == uid; 980a77c62a82503b38c484e0079648f0231dd85d53Steve Howard } 9923357198c440e6872d3aef3e608295db7f8273bcSteve Howard} 100