• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package com.android.providers.downloads;
2 
3 import static android.net.NetworkCapabilities.NET_CAPABILITY_NOT_METERED;
4 import static android.net.NetworkCapabilities.NET_CAPABILITY_NOT_ROAMING;
5 
6 import static org.mockito.ArgumentMatchers.any;
7 import static org.mockito.Mockito.mock;
8 import static org.mockito.Mockito.when;
9 
10 import android.app.job.JobParameters;
11 import android.content.Context;
12 import android.content.Intent;
13 import android.content.pm.PackageManager.NameNotFoundException;
14 import android.net.ConnectivityManager;
15 import android.net.Network;
16 import android.net.NetworkCapabilities;
17 import android.net.NetworkInfo;
18 import android.net.NetworkInfo.DetailedState;
19 import android.os.Bundle;
20 
21 import org.mockito.invocation.InvocationOnMock;
22 import org.mockito.stubbing.Answer;
23 
24 import java.io.IOException;
25 import java.net.URL;
26 import java.net.URLConnection;
27 import java.security.GeneralSecurityException;
28 import java.util.ArrayList;
29 import java.util.List;
30 
31 import javax.net.ssl.SSLContext;
32 
33 public class FakeSystemFacade implements SystemFacade {
34     long mTimeMillis = 0;
35     Integer mActiveNetworkType = ConnectivityManager.TYPE_WIFI;
36     boolean mIsRoaming = false;
37     boolean mIsMetered = false;
38     long mMaxBytesOverMobile = Long.MAX_VALUE;
39     long mRecommendedMaxBytesOverMobile = Long.MAX_VALUE;
40     List<Intent> mBroadcastsSent = new ArrayList<Intent>();
41     Bundle mLastBroadcastOptions;
42     boolean mCleartextTrafficPermitted = true;
43     private boolean mReturnActualTime = false;
44     private SSLContext mSSLContext = null;
45 
setUp()46     public void setUp() {
47         mTimeMillis = 0;
48         mActiveNetworkType = ConnectivityManager.TYPE_WIFI;
49         mIsRoaming = false;
50         mIsMetered = false;
51         mMaxBytesOverMobile = Long.MAX_VALUE;
52         mRecommendedMaxBytesOverMobile = Long.MAX_VALUE;
53         mBroadcastsSent.clear();
54         mLastBroadcastOptions = null;
55         mReturnActualTime = false;
56         try {
57             mSSLContext = SSLContext.getDefault();
58         } catch (GeneralSecurityException e) {
59             throw new RuntimeException(e);
60         }
61     }
62 
incrementTimeMillis(long delta)63     void incrementTimeMillis(long delta) {
64         mTimeMillis += delta;
65     }
66 
67     @Override
currentTimeMillis()68     public long currentTimeMillis() {
69         if (mReturnActualTime) {
70             return System.currentTimeMillis();
71         }
72         return mTimeMillis;
73     }
74 
75     @Override
getNetwork(JobParameters params)76     public Network getNetwork(JobParameters params) {
77         if (mActiveNetworkType == null) {
78             return null;
79         } else {
80             final Network network = mock(Network.class);
81             try {
82                 when(network.openConnection(any())).then(new Answer<URLConnection>() {
83                     @Override
84                     public URLConnection answer(InvocationOnMock invocation) throws Throwable {
85                         final URL url = (URL) invocation.getArguments()[0];
86                         return url.openConnection();
87                     }
88                 });
89             } catch (IOException ignored) {
90             }
91             return network;
92         }
93     }
94 
95     @Override
getNetworkCapabilities(Network network)96     public NetworkCapabilities getNetworkCapabilities(Network network) {
97         if (mActiveNetworkType == null) {
98             return null;
99         } else {
100             final NetworkCapabilities.Builder builder = new NetworkCapabilities.Builder();
101             if (!mIsMetered) builder.addCapability(NET_CAPABILITY_NOT_METERED);
102             if (!mIsRoaming) builder.addCapability(NET_CAPABILITY_NOT_ROAMING);
103             return builder.build();
104         }
105     }
106 
107     @Override
getMaxBytesOverMobile()108     public long getMaxBytesOverMobile() {
109         return mMaxBytesOverMobile;
110     }
111 
112     @Override
getRecommendedMaxBytesOverMobile()113     public long getRecommendedMaxBytesOverMobile() {
114         return mRecommendedMaxBytesOverMobile;
115     }
116 
117     @Override
sendBroadcast(Intent intent)118     public void sendBroadcast(Intent intent) {
119         mBroadcastsSent.add(intent);
120         mLastBroadcastOptions = null;
121     }
122 
123     @Override
sendBroadcast(Intent intent, String receiverPermission, Bundle options)124     public void sendBroadcast(Intent intent, String receiverPermission, Bundle options) {
125         mBroadcastsSent.add(intent);
126         mLastBroadcastOptions = options;
127     }
128 
129     @Override
userOwnsPackage(int uid, String pckg)130     public boolean userOwnsPackage(int uid, String pckg) throws NameNotFoundException {
131         return true;
132     }
133 
134     @Override
isCleartextTrafficPermitted(String packageName, String hostname)135     public boolean isCleartextTrafficPermitted(String packageName, String hostname) {
136         return mCleartextTrafficPermitted;
137     }
138 
139     @Override
getSSLContextForPackage(Context context, String pckg)140     public SSLContext getSSLContextForPackage(Context context, String pckg) {
141         return mSSLContext;
142     }
143 
setSSLContext(SSLContext context)144     public void setSSLContext(SSLContext context) {
145         mSSLContext = context;
146     }
147 
setReturnActualTime(boolean flag)148     public void setReturnActualTime(boolean flag) {
149         mReturnActualTime = flag;
150     }
151 }
152