blob: 6580f90912000d76dbaaf5aeee8c56c927174977 [file] [log] [blame]
package com.android.providers.downloads;
import android.app.DownloadManager;
import android.app.Notification;
import android.app.NotificationManager;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager.NameNotFoundException;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.provider.Settings;
import android.provider.Settings.SettingNotFoundException;
import android.telephony.TelephonyManager;
import android.util.Log;
class RealSystemFacade implements SystemFacade {
private Context mContext;
private NotificationManager mNotificationManager;
public RealSystemFacade(Context context) {
mContext = context;
mNotificationManager = (NotificationManager)
mContext.getSystemService(Context.NOTIFICATION_SERVICE);
}
public long currentTimeMillis() {
return System.currentTimeMillis();
}
public NetworkInfo getActiveNetworkInfo(int uid) {
ConnectivityManager connectivity =
(ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivity == null) {
Log.w(Constants.TAG, "couldn't get connectivity manager");
return null;
}
final NetworkInfo activeInfo = connectivity.getActiveNetworkInfoForUid(uid);
if (activeInfo == null && Constants.LOGVV) {
Log.v(Constants.TAG, "network is not available");
}
return activeInfo;
}
@Override
public boolean isActiveNetworkMetered() {
final ConnectivityManager conn = ConnectivityManager.from(mContext);
return conn.isActiveNetworkMetered();
}
public boolean isNetworkRoaming() {
ConnectivityManager connectivity =
(ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivity == null) {
Log.w(Constants.TAG, "couldn't get connectivity manager");
return false;
}
NetworkInfo info = connectivity.getActiveNetworkInfo();
boolean isMobile = (info != null && info.getType() == ConnectivityManager.TYPE_MOBILE);
boolean isRoaming = isMobile && TelephonyManager.getDefault().isNetworkRoaming();
if (Constants.LOGVV && isRoaming) {
Log.v(Constants.TAG, "network is roaming");
}
return isRoaming;
}
public Long getMaxBytesOverMobile() {
return DownloadManager.getMaxBytesOverMobile(mContext);
}
@Override
public Long getRecommendedMaxBytesOverMobile() {
return DownloadManager.getRecommendedMaxBytesOverMobile(mContext);
}
@Override
public void sendBroadcast(Intent intent) {
mContext.sendBroadcast(intent);
}
@Override
public boolean userOwnsPackage(int uid, String packageName) throws NameNotFoundException {
return mContext.getPackageManager().getApplicationInfo(packageName, 0).uid == uid;
}
@Override
public void postNotification(long id, Notification notification) {
/**
* TODO: The system notification manager takes ints, not longs, as IDs, but the download
* manager uses IDs take straight from the database, which are longs. This will have to be
* dealt with at some point.
*/
mNotificationManager.notify((int) id, notification);
}
@Override
public void cancelNotification(long id) {
mNotificationManager.cancel((int) id);
}
@Override
public void cancelAllNotifications() {
mNotificationManager.cancelAll();
}
@Override
public void startThread(Thread thread) {
thread.start();
}
}