• 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 
44     boolean hasPerDomainConfig = false;
45 
46     private boolean mReturnActualTime = false;
47     private SSLContext mSSLContext = null;
48 
setUp()49     public void setUp() {
50         mTimeMillis = 0;
51         mActiveNetworkType = ConnectivityManager.TYPE_WIFI;
52         mIsRoaming = false;
53         mIsMetered = false;
54         mMaxBytesOverMobile = Long.MAX_VALUE;
55         mRecommendedMaxBytesOverMobile = Long.MAX_VALUE;
56         mBroadcastsSent.clear();
57         mLastBroadcastOptions = null;
58         mReturnActualTime = false;
59         try {
60             mSSLContext = SSLContext.getDefault();
61         } catch (GeneralSecurityException e) {
62             throw new RuntimeException(e);
63         }
64     }
65 
incrementTimeMillis(long delta)66     void incrementTimeMillis(long delta) {
67         mTimeMillis += delta;
68     }
69 
70     @Override
currentTimeMillis()71     public long currentTimeMillis() {
72         if (mReturnActualTime) {
73             return System.currentTimeMillis();
74         }
75         return mTimeMillis;
76     }
77 
78     @Override
getNetwork(JobParameters params)79     public Network getNetwork(JobParameters params) {
80         if (mActiveNetworkType == null) {
81             return null;
82         } else {
83             final Network network = mock(Network.class);
84             try {
85                 when(network.openConnection(any())).then(new Answer<URLConnection>() {
86                     @Override
87                     public URLConnection answer(InvocationOnMock invocation) throws Throwable {
88                         final URL url = (URL) invocation.getArguments()[0];
89                         return url.openConnection();
90                     }
91                 });
92             } catch (IOException ignored) {
93             }
94             return network;
95         }
96     }
97 
98     @Override
getNetworkCapabilities(Network network)99     public NetworkCapabilities getNetworkCapabilities(Network network) {
100         if (mActiveNetworkType == null) {
101             return null;
102         } else {
103             final NetworkCapabilities.Builder builder = new NetworkCapabilities.Builder();
104             if (!mIsMetered) builder.addCapability(NET_CAPABILITY_NOT_METERED);
105             if (!mIsRoaming) builder.addCapability(NET_CAPABILITY_NOT_ROAMING);
106             return builder.build();
107         }
108     }
109 
110     @Override
getMaxBytesOverMobile()111     public long getMaxBytesOverMobile() {
112         return mMaxBytesOverMobile;
113     }
114 
115     @Override
getRecommendedMaxBytesOverMobile()116     public long getRecommendedMaxBytesOverMobile() {
117         return mRecommendedMaxBytesOverMobile;
118     }
119 
120     @Override
sendBroadcast(Intent intent)121     public void sendBroadcast(Intent intent) {
122         mBroadcastsSent.add(intent);
123         mLastBroadcastOptions = null;
124     }
125 
126     @Override
sendBroadcast(Intent intent, String receiverPermission, Bundle options)127     public void sendBroadcast(Intent intent, String receiverPermission, Bundle options) {
128         mBroadcastsSent.add(intent);
129         mLastBroadcastOptions = options;
130     }
131 
132     @Override
userOwnsPackage(int uid, String pckg)133     public boolean userOwnsPackage(int uid, String pckg) throws NameNotFoundException {
134         return true;
135     }
136 
137     @Override
isCleartextTrafficPermitted(String packageName, String hostname)138     public boolean isCleartextTrafficPermitted(String packageName, String hostname) {
139         return mCleartextTrafficPermitted;
140     }
141 
142     @Override
getSSLContextForPackage(Context context, String pckg)143     public SSLContext getSSLContextForPackage(Context context, String pckg) {
144         return mSSLContext;
145     }
146 
147     @Override
hasPerDomainConfig(String pckg)148     public boolean hasPerDomainConfig(String pckg) {
149         return hasPerDomainConfig;
150     }
151 
setSSLContext(SSLContext context)152     public void setSSLContext(SSLContext context) {
153         mSSLContext = context;
154     }
155 
setReturnActualTime(boolean flag)156     public void setReturnActualTime(boolean flag) {
157         mReturnActualTime = flag;
158     }
159 }
160