Skip to content

Commit 1fc3663

Browse files
committed
collect more data
1 parent 537fbc7 commit 1fc3663

10 files changed

Lines changed: 200 additions & 21 deletions

File tree

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ captures/
4141

4242
# Keystore files
4343
*.jks
44+
*.keystore
4445

4546
# vim
4647
*.swp

app/build.gradle

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,34 @@ android {
44
compileSdkVersion 23
55
buildToolsVersion "23.0.3"
66

7+
signingConfigs {
8+
config {
9+
if(project.hasProperty('atgSigningConfigKeyPassword')) {
10+
keyAlias 'AndroidTcpdumpGui'
11+
keyPassword atgSigningConfigKeyPassword
12+
storeFile file('../sign/release-keystore.keystore')
13+
storePassword atgSigningConfigKeyPassword
14+
}
15+
}
16+
}
17+
718
defaultConfig {
819
applicationId "com.voxlearning.androidtcpdumpgui"
9-
minSdkVersion 11
20+
minSdkVersion 14
1021
targetSdkVersion 23
1122
versionCode 1
1223
versionName "1.0"
1324
}
25+
1426
buildTypes {
1527
release {
1628
minifyEnabled false
1729
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
30+
signingConfig signingConfigs.config
31+
}
32+
33+
debug {
34+
signingConfig signingConfigs.config
1835
}
1936
}
2037
}

app/src/main/AndroidManifest.xml

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,16 @@
44
package="com.voxlearning.androidtcpdumpgui">
55

66
<uses-permission android:name="android.permission.INTERNET" />
7+
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
78
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
89
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
10+
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
11+
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
12+
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
13+
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
914
<uses-permission android:name="android.permission.ACCESS_SUPERUSER" />
1015

16+
1117
<!-- suppress DeprecatedClassUsageInspection -->
1218
<uses-permission android:name="android.permission.GET_TASKS" />
1319
<uses-permission
@@ -38,4 +44,4 @@
3844
<activity android:name=".ViewActivity"></activity>
3945
</application>
4046

41-
</manifest>
47+
</manifest>

app/src/main/java/com/voxlearning/androidtcpdumpgui/CaptureFilePath.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ public class CaptureFilePath {
3838
static public final String FileName_Comment = "comment.txt";
3939
static public final String FileName_Apps = "apps.txt";
4040
static public final String FileName_Logs = "logs.txt";
41+
static public final String FileName_Gps = "gps.txt";
4142
static public final String FileName_TcpdumpOut = "tcpdump.out.txt";
4243
static public final String FileName_Packets = "packets.pcap";
4344

app/src/main/java/com/voxlearning/androidtcpdumpgui/CaptureManager.java

Lines changed: 49 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,11 @@
88
import android.content.Context;
99
import android.content.pm.ApplicationInfo;
1010
import android.content.pm.PackageManager;
11+
import android.location.Location;
12+
import android.net.ConnectivityManager;
13+
import android.net.NetworkInfo;
1114
import android.os.Build;
15+
import android.telephony.TelephonyManager;
1216
import android.util.Log;
1317
import android.widget.Toast;
1418

@@ -129,12 +133,12 @@ public void start(Context context, String intf, String expr) {
129133

130134
if(!dirRunning.exists()) {
131135
Log.e(TAG, "can not mkdir " + dirRunning.getPath());
136+
Toast.makeText(context, "Can not write to external storage. Broken sdcard or memory?", Toast.LENGTH_LONG).show();
132137
return;
133138
}
134139

135-
136140
try {
137-
recordStart();
141+
recordStart(context);
138142

139143
String fnPackets = CaptureFilePath.OutputDirRunningFilePath(CaptureFilePath.FileName_Packets);
140144
String fnTcpdumpOut = CaptureFilePath.OutputDirRunningFilePath(CaptureFilePath.FileName_TcpdumpOut);
@@ -255,10 +259,44 @@ public void recordAppName(String appName) {
255259
recordLog("app: " + appName);
256260
}
257261

258-
private void recordStart() {
262+
private void recordStart(Context context) {
259263
String fn = CaptureFilePath.OutputDirRunningFilePath(CaptureFilePath.FileName_Start);
260264
Io.writeFile(fn, "" + System.currentTimeMillis());
261-
recordLog("start");
265+
266+
StringBuilder sb = new StringBuilder();
267+
sb.append("MANUFACTURER=").append(Build.MANUFACTURER).append("; ")
268+
.append("MODEL=").append(Build.MODEL).append("; ")
269+
.append("SERIAL=").append(Build.SERIAL).append("\n")
270+
;
271+
sb.append("FINGERPRINT=").append(Build.FINGERPRINT).append("\n");
272+
sb.append("RadioVersion=").append(Build.getRadioVersion()).append("\n");
273+
274+
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
275+
String tmDevice = "", tmSerial = "", androidId = "";
276+
try {
277+
tmDevice = tm.getDeviceId();
278+
}catch (Exception ignored){}
279+
try {
280+
tmSerial = tm.getSimSerialNumber();
281+
}catch (Exception ignored){}
282+
try{
283+
androidId = android.provider.Settings.Secure.getString(context.getContentResolver(), android.provider.Settings.Secure.ANDROID_ID);
284+
}catch (Exception ignored){}
285+
286+
sb.append("DeviceId=").append(tmDevice).append("; ")
287+
.append("AndroidId=").append(androidId).append("; ")
288+
.append("SimSerialNumber=").append(tmSerial).append("\n");
289+
290+
291+
NetworkInfo ni = null;
292+
try {
293+
ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
294+
ni = cm.getActiveNetworkInfo();
295+
}
296+
catch (Exception ignored) { }
297+
sb.append("NetworkInfo=").append(ni == null ? "null" : ni.toString()).append("\n");
298+
299+
recordLog("start\n" + sb.toString());
262300
}
263301

264302
private void recordStop() {
@@ -267,18 +305,19 @@ private void recordStop() {
267305
recordLog("stop");
268306
}
269307

270-
public void recordComment(String s) {
271-
String fn = CaptureFilePath.OutputDirRunningFilePath(CaptureFilePath.FileName_Comment);
272-
Io.writeFileAppend(fn, nowLogString() + " " + s + "\n");
273-
recordLog("comment: " + s);
274-
}
275-
276308
public void recordLog(String s) {
277309
String fn = CaptureFilePath.OutputDirRunningFilePath(CaptureFilePath.FileName_Logs);
278310
Io.writeFileAppend(fn, nowLogString() + " " + s + "\n");
279311
Log.d(TAG, "recordLog: " + s);
280312
}
281313

314+
public void recordGps(Location location) {
315+
String fn = CaptureFilePath.OutputDirRunningFilePath(CaptureFilePath.FileName_Gps);
316+
String s = location == null ? "(unknown-location)" : location.toString();
317+
318+
Io.writeFileAppend(fn, nowLogString() + " " + s + "\n");
319+
Log.d(TAG, "recordGps: " + s);
320+
}
282321

283322
static public class Stats {
284323
public long mStartTime;

app/src/main/java/com/voxlearning/androidtcpdumpgui/CaptureService.java

Lines changed: 78 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,27 @@
11
package com.voxlearning.androidtcpdumpgui;
22

3+
import android.Manifest;
34
import android.app.AlarmManager;
45
import android.app.PendingIntent;
56
import android.app.Service;
67
import android.content.Context;
8+
import android.content.DialogInterface;
79
import android.content.Intent;
10+
import android.content.pm.PackageManager;
11+
import android.location.Location;
12+
import android.location.LocationListener;
13+
import android.location.LocationManager;
14+
import android.os.Bundle;
815
import android.os.Handler;
916
import android.os.IBinder;
1017
import android.os.Message;
1118
import android.os.SystemClock;
19+
import android.provider.Settings;
20+
import android.support.v4.app.ActivityCompat;
21+
import android.support.v7.app.AlertDialog;
1222
import android.util.Log;
1323

14-
public class CaptureService extends Service {
24+
public class CaptureService extends Service implements LocationListener {
1525

1626
static private final String TAG = "CaptureService";
1727

@@ -23,6 +33,7 @@ public class CaptureService extends Service {
2333

2434
private CaptureManager mCaptureManager;
2535
private AlarmManager mAlarmManager;
36+
private LocationManager mLocationManager;
2637

2738
static final public int AlarmInterval_RestartService = 30 * 1000;
2839
static final public int DelayInterval_PeriodWork = 5 * 1000;
@@ -33,21 +44,21 @@ public class CaptureService extends Service {
3344
public void onCreate() {
3445
mCaptureManager = new CaptureManager();
3546
mAlarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
47+
mLocationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
48+
gpsStart();
3649
}
3750

3851
@Override
3952
public int onStartCommand(Intent intent, int flags, int startId) {
4053

4154
if (intent != null) {
42-
if(ServiceAction_CaptureStart.equals(intent.getAction())) {
55+
if (ServiceAction_CaptureStart.equals(intent.getAction())) {
4356
Log.d(TAG, "capture start");
4457
periodWork();
45-
}
46-
else if(ServiceAction_PeriodWork.equals(intent.getAction())) {
58+
} else if (ServiceAction_PeriodWork.equals(intent.getAction())) {
4759
Log.d(TAG, "period work");
4860
periodWork();
49-
}
50-
else if(ServiceAction_CaptureStop.equals(intent.getAction())) {
61+
} else if (ServiceAction_CaptureStop.equals(intent.getAction())) {
5162
Log.d(TAG, "capture stop");
5263
stopSelf();
5364
}
@@ -65,6 +76,67 @@ public IBinder onBind(Intent intent) {
6576
return null;
6677
}
6778

79+
80+
81+
82+
private static final long GPS_MIN_DISTANCE_UPDATE = 10; // The minimum distance to change Updates in meters
83+
private static final long GPS_MIN_DURATION_UPDATE = 30 * 1000; // The minimum time between updates in milliseconds
84+
85+
@Override
86+
public void onLocationChanged(Location location) {
87+
mCaptureManager.recordGps(location);
88+
}
89+
90+
@Override
91+
public void onStatusChanged(String provider, int status, Bundle extras) {
92+
mCaptureManager.recordLog("gps status changed: provider=" + provider + ", status=" + status);
93+
}
94+
95+
@Override
96+
public void onProviderEnabled(String provider) {
97+
gpsStop();
98+
gpsStart();
99+
}
100+
101+
@Override
102+
public void onProviderDisabled(String provider) {
103+
gpsStop();
104+
gpsStart();
105+
}
106+
107+
public void gpsStart() {
108+
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
109+
return;
110+
}
111+
112+
if (mLocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
113+
114+
mCaptureManager.recordLog("gps start with last known location:" + LocationManager.GPS_PROVIDER);
115+
mCaptureManager.recordGps(mLocationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER));
116+
mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, GPS_MIN_DURATION_UPDATE, GPS_MIN_DISTANCE_UPDATE, this);
117+
118+
} else if (mLocationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
119+
120+
mCaptureManager.recordLog("gps start with last known location:" + LocationManager.NETWORK_PROVIDER);
121+
mCaptureManager.recordGps(mLocationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER));
122+
mLocationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, GPS_MIN_DURATION_UPDATE, GPS_MIN_DISTANCE_UPDATE, this);
123+
124+
}
125+
}
126+
127+
public void gpsStop() {
128+
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
129+
return;
130+
}
131+
132+
mCaptureManager.recordLog("gps stop");
133+
mLocationManager.removeUpdates(this);
134+
}
135+
136+
137+
138+
139+
68140
static public class PeriodWorkHandler extends Handler {
69141

70142
private Context mContext;

0 commit comments

Comments
 (0)