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