123357198c440e6872d3aef3e608295db7f8273bcSteve Howardpackage com.android.providers.downloads; 223357198c440e6872d3aef3e608295db7f8273bcSteve Howard 39b4371da26f27cfa85d78e0bd4728309f9a445c9Vasu Noriimport android.app.DownloadManager; 493155e1da7e89d4925e244f5afa94afb8ada7381Steve Howardimport android.app.Notification; 593155e1da7e89d4925e244f5afa94afb8ada7381Steve Howardimport android.app.NotificationManager; 6af28400b74de05862b470412a5c92f68e99f59f8Steve Howardimport android.content.Context; 70a77c62a82503b38c484e0079648f0231dd85d53Steve Howardimport android.content.Intent; 80a77c62a82503b38c484e0079648f0231dd85d53Steve Howardimport android.content.pm.PackageManager.NameNotFoundException; 9af28400b74de05862b470412a5c92f68e99f59f8Steve Howardimport android.net.ConnectivityManager; 10af28400b74de05862b470412a5c92f68e99f59f8Steve Howardimport android.net.NetworkInfo; 110d4f9f105c3a31475a36e9a1edfa868c66ff455fSteve Howardimport android.provider.Settings; 120d4f9f105c3a31475a36e9a1edfa868c66ff455fSteve Howardimport android.provider.Settings.SettingNotFoundException; 13af28400b74de05862b470412a5c92f68e99f59f8Steve Howardimport android.telephony.TelephonyManager; 14af28400b74de05862b470412a5c92f68e99f59f8Steve Howardimport android.util.Log; 15af28400b74de05862b470412a5c92f68e99f59f8Steve Howard 1623357198c440e6872d3aef3e608295db7f8273bcSteve Howardclass RealSystemFacade implements SystemFacade { 17af28400b74de05862b470412a5c92f68e99f59f8Steve Howard private Context mContext; 1893155e1da7e89d4925e244f5afa94afb8ada7381Steve Howard private NotificationManager mNotificationManager; 19af28400b74de05862b470412a5c92f68e99f59f8Steve Howard 20af28400b74de05862b470412a5c92f68e99f59f8Steve Howard public RealSystemFacade(Context context) { 21af28400b74de05862b470412a5c92f68e99f59f8Steve Howard mContext = context; 2293155e1da7e89d4925e244f5afa94afb8ada7381Steve Howard mNotificationManager = (NotificationManager) 2393155e1da7e89d4925e244f5afa94afb8ada7381Steve Howard mContext.getSystemService(Context.NOTIFICATION_SERVICE); 24af28400b74de05862b470412a5c92f68e99f59f8Steve Howard } 25af28400b74de05862b470412a5c92f68e99f59f8Steve Howard 2623357198c440e6872d3aef3e608295db7f8273bcSteve Howard public long currentTimeMillis() { 2723357198c440e6872d3aef3e608295db7f8273bcSteve Howard return System.currentTimeMillis(); 2823357198c440e6872d3aef3e608295db7f8273bcSteve Howard } 29af28400b74de05862b470412a5c92f68e99f59f8Steve Howard 30961024389b3782936a40a7d090d670290bb66c3cJeff Sharkey public NetworkInfo getActiveNetworkInfo(int uid) { 31af28400b74de05862b470412a5c92f68e99f59f8Steve Howard ConnectivityManager connectivity = 32af28400b74de05862b470412a5c92f68e99f59f8Steve Howard (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE); 33af28400b74de05862b470412a5c92f68e99f59f8Steve Howard if (connectivity == null) { 34af28400b74de05862b470412a5c92f68e99f59f8Steve Howard Log.w(Constants.TAG, "couldn't get connectivity manager"); 35071bd7acb3185f4f1e807855605c5e6018e9742fSteve Howard return null; 36af28400b74de05862b470412a5c92f68e99f59f8Steve Howard } 37af28400b74de05862b470412a5c92f68e99f59f8Steve Howard 38961024389b3782936a40a7d090d670290bb66c3cJeff Sharkey final NetworkInfo activeInfo = connectivity.getActiveNetworkInfoForUid(uid); 39961024389b3782936a40a7d090d670290bb66c3cJeff Sharkey if (activeInfo == null && Constants.LOGVV) { 40961024389b3782936a40a7d090d670290bb66c3cJeff Sharkey Log.v(Constants.TAG, "network is not available"); 41af28400b74de05862b470412a5c92f68e99f59f8Steve Howard } 42961024389b3782936a40a7d090d670290bb66c3cJeff Sharkey return activeInfo; 43af28400b74de05862b470412a5c92f68e99f59f8Steve Howard } 44af28400b74de05862b470412a5c92f68e99f59f8Steve Howard 45af28400b74de05862b470412a5c92f68e99f59f8Steve Howard public boolean isNetworkRoaming() { 46af28400b74de05862b470412a5c92f68e99f59f8Steve Howard ConnectivityManager connectivity = 47af28400b74de05862b470412a5c92f68e99f59f8Steve Howard (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE); 48af28400b74de05862b470412a5c92f68e99f59f8Steve Howard if (connectivity == null) { 49af28400b74de05862b470412a5c92f68e99f59f8Steve Howard Log.w(Constants.TAG, "couldn't get connectivity manager"); 50af28400b74de05862b470412a5c92f68e99f59f8Steve Howard return false; 51af28400b74de05862b470412a5c92f68e99f59f8Steve Howard } 52af28400b74de05862b470412a5c92f68e99f59f8Steve Howard 53af28400b74de05862b470412a5c92f68e99f59f8Steve Howard NetworkInfo info = connectivity.getActiveNetworkInfo(); 54af28400b74de05862b470412a5c92f68e99f59f8Steve Howard boolean isMobile = (info != null && info.getType() == ConnectivityManager.TYPE_MOBILE); 55af28400b74de05862b470412a5c92f68e99f59f8Steve Howard boolean isRoaming = isMobile && TelephonyManager.getDefault().isNetworkRoaming(); 56071bd7acb3185f4f1e807855605c5e6018e9742fSteve Howard if (Constants.LOGVV && isRoaming) { 57071bd7acb3185f4f1e807855605c5e6018e9742fSteve Howard Log.v(Constants.TAG, "network is roaming"); 58af28400b74de05862b470412a5c92f68e99f59f8Steve Howard } 59071bd7acb3185f4f1e807855605c5e6018e9742fSteve Howard return isRoaming; 60071bd7acb3185f4f1e807855605c5e6018e9742fSteve Howard } 61071bd7acb3185f4f1e807855605c5e6018e9742fSteve Howard 620d4f9f105c3a31475a36e9a1edfa868c66ff455fSteve Howard public Long getMaxBytesOverMobile() { 639b4371da26f27cfa85d78e0bd4728309f9a445c9Vasu Nori return DownloadManager.getMaxBytesOverMobile(mContext); 64af28400b74de05862b470412a5c92f68e99f59f8Steve Howard } 650a77c62a82503b38c484e0079648f0231dd85d53Steve Howard 660a77c62a82503b38c484e0079648f0231dd85d53Steve Howard @Override 67d319729622da1893e895f2e35f41d01ecdca3705Steve Howard public Long getRecommendedMaxBytesOverMobile() { 689b4371da26f27cfa85d78e0bd4728309f9a445c9Vasu Nori return DownloadManager.getRecommendedMaxBytesOverMobile(mContext); 69d319729622da1893e895f2e35f41d01ecdca3705Steve Howard } 70d319729622da1893e895f2e35f41d01ecdca3705Steve Howard 71d319729622da1893e895f2e35f41d01ecdca3705Steve Howard @Override 720a77c62a82503b38c484e0079648f0231dd85d53Steve Howard public void sendBroadcast(Intent intent) { 730a77c62a82503b38c484e0079648f0231dd85d53Steve Howard mContext.sendBroadcast(intent); 740a77c62a82503b38c484e0079648f0231dd85d53Steve Howard } 750a77c62a82503b38c484e0079648f0231dd85d53Steve Howard 760a77c62a82503b38c484e0079648f0231dd85d53Steve Howard @Override 770a77c62a82503b38c484e0079648f0231dd85d53Steve Howard public boolean userOwnsPackage(int uid, String packageName) throws NameNotFoundException { 780a77c62a82503b38c484e0079648f0231dd85d53Steve Howard return mContext.getPackageManager().getApplicationInfo(packageName, 0).uid == uid; 790a77c62a82503b38c484e0079648f0231dd85d53Steve Howard } 8093155e1da7e89d4925e244f5afa94afb8ada7381Steve Howard 8193155e1da7e89d4925e244f5afa94afb8ada7381Steve Howard @Override 823398db8f3b195959faa2a7cf09918f364432ac28Steve Howard public void postNotification(long id, Notification notification) { 833398db8f3b195959faa2a7cf09918f364432ac28Steve Howard /** 843398db8f3b195959faa2a7cf09918f364432ac28Steve Howard * TODO: The system notification manager takes ints, not longs, as IDs, but the download 853398db8f3b195959faa2a7cf09918f364432ac28Steve Howard * manager uses IDs take straight from the database, which are longs. This will have to be 863398db8f3b195959faa2a7cf09918f364432ac28Steve Howard * dealt with at some point. 873398db8f3b195959faa2a7cf09918f364432ac28Steve Howard */ 883398db8f3b195959faa2a7cf09918f364432ac28Steve Howard mNotificationManager.notify((int) id, notification); 8993155e1da7e89d4925e244f5afa94afb8ada7381Steve Howard } 9093155e1da7e89d4925e244f5afa94afb8ada7381Steve Howard 9193155e1da7e89d4925e244f5afa94afb8ada7381Steve Howard @Override 923398db8f3b195959faa2a7cf09918f364432ac28Steve Howard public void cancelNotification(long id) { 933398db8f3b195959faa2a7cf09918f364432ac28Steve Howard mNotificationManager.cancel((int) id); 9493155e1da7e89d4925e244f5afa94afb8ada7381Steve Howard } 9593155e1da7e89d4925e244f5afa94afb8ada7381Steve Howard 9693155e1da7e89d4925e244f5afa94afb8ada7381Steve Howard @Override 9793155e1da7e89d4925e244f5afa94afb8ada7381Steve Howard public void cancelAllNotifications() { 9893155e1da7e89d4925e244f5afa94afb8ada7381Steve Howard mNotificationManager.cancelAll(); 9993155e1da7e89d4925e244f5afa94afb8ada7381Steve Howard } 100e6a05a1aa4697440e9630d12b741b3bae321fe49Steve Howard 101e6a05a1aa4697440e9630d12b741b3bae321fe49Steve Howard @Override 102e6a05a1aa4697440e9630d12b741b3bae321fe49Steve Howard public void startThread(Thread thread) { 103e6a05a1aa4697440e9630d12b741b3bae321fe49Steve Howard thread.start(); 104e6a05a1aa4697440e9630d12b741b3bae321fe49Steve Howard } 10523357198c440e6872d3aef3e608295db7f8273bcSteve Howard} 106