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