Skip to content

Commit 571ee66

Browse files
committed
Add "Share for Research" action
- closes #6 - adds an action option to share results via a Google Form (https URL) - the user will be prompted to select a suitable application to handle the URL which encodes the device build info, and vulnerability results. - the users will be able to see previous responses from others.
1 parent 0351bc2 commit 571ee66

File tree

4 files changed

+89
-10
lines changed

4 files changed

+89
-10
lines changed
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
package fuzion24.device.vulnerability.test;
2+
3+
4+
import android.net.Uri;
5+
6+
import org.json.JSONException;
7+
import org.json.JSONObject;
8+
9+
import java.util.HashMap;
10+
import java.util.Iterator;
11+
import java.util.Map;
12+
13+
public class ShareViaGoogleForm {
14+
private static final String mFormUrl;
15+
private static Map<String, String> submitMapping = new HashMap<>();
16+
private final JSONObject mCombinedResults;
17+
18+
static {
19+
mFormUrl = "https://docs.google.com/forms/d/1hAoRFCmPmIEzKD_gQBZhne2Jkr24E5VTuI_yGXKnVyE/formResponse";
20+
21+
submitMapping.put("fingerprint", "entry.957780611");
22+
submitMapping.put("kernelVersion", "entry.173229528");
23+
submitMapping.put("brand", "entry.1413588413");
24+
submitMapping.put("manufacturer", "entry.2048857005");
25+
submitMapping.put("model", "entry.2054096086");
26+
submitMapping.put("release", "entry.1474130928");
27+
submitMapping.put("sdk", "entry.1701379105");
28+
submitMapping.put("versionCode", "entry.275175001");
29+
submitMapping.put("versionName", "entry.506488905");
30+
submitMapping.put("id", "entry.218715471");
31+
submitMapping.put("combinedResults", "entry.2112177772");
32+
33+
}
34+
35+
public ShareViaGoogleForm(JSONObject combinedResults) {
36+
mCombinedResults = combinedResults;
37+
}
38+
39+
public Uri buildUri() throws JSONException {
40+
JSONObject buildInfo = mCombinedResults.getJSONObject("buildInfo");
41+
Uri.Builder builder = Uri.parse(mFormUrl).buildUpon();
42+
43+
Iterator<String> keys = buildInfo.keys();
44+
while (keys.hasNext()) {
45+
String curKey = keys.next();
46+
if (!submitMapping.containsKey(curKey)) {
47+
continue;
48+
}
49+
50+
String result = buildInfo.getString(curKey);
51+
String formKey = submitMapping.get(curKey);
52+
builder.appendQueryParameter(formKey, result);
53+
}
54+
55+
// lastly put the JSON string as the combinedResults form value
56+
String combinedResultsFormKey = submitMapping.get("combinedResults");
57+
String results = mCombinedResults.toString();
58+
builder.appendQueryParameter(combinedResultsFormKey, results);
59+
60+
return builder.build();
61+
}
62+
}

app/src/main/java/fuzion24/device/vulnerability/test/ui/MainActivity.java

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import android.content.Intent;
44
import android.content.res.Configuration;
55
import android.graphics.Color;
6+
import android.net.Uri;
67
import android.os.Bundle;
78
import android.support.design.widget.CoordinatorLayout;
89
import android.support.design.widget.FloatingActionButton;
@@ -27,6 +28,7 @@
2728
import java.util.List;
2829

2930
import fuzion24.device.vulnerability.test.ResultsCallback;
31+
import fuzion24.device.vulnerability.test.ShareViaGoogleForm;
3032
import fuzion24.device.vulnerability.test.VulnerabilityTestResult;
3133
import fuzion24.device.vulnerability.test.VulnerabilityTestRunner;
3234
import fuzion24.device.vulnerability.test.adapter.RecyclerAdapter;
@@ -94,9 +96,11 @@ public boolean onCreateOptionsMenu(Menu menu) {
9496

9597
@Override
9698
public boolean onOptionsItemSelected(MenuItem item) {
97-
switch (item.getItemId()) {
98-
case R.id.menu_export_results:
99+
int itemId = item.getItemId();
99100

101+
switch (itemId) {
102+
case R.id.menu_export_results:
103+
case R.id.menu_share_results:
100104
if (testResults == null) {
101105
Snackbar.make(coordinatorLayout, R.string.run_tests, Snackbar.LENGTH_LONG).setAction(R.string.start, new View.OnClickListener() {
102106
@Override
@@ -105,24 +109,31 @@ public void onClick(View v) {
105109
}
106110

107111
}).show();
108-
112+
109113
return true;
110114
}
111115

112-
Intent shareIntent = new Intent(Intent.ACTION_SEND);
113-
114-
shareIntent.setType("text/plain");
115-
shareIntent.putExtra(Intent.EXTRA_SUBJECT, "Android VTS Results");
116+
Intent intent = null;
116117
try {
117118
JSONObject json = serializeResults(testResults, devInfo);
118-
shareIntent.putExtra(Intent.EXTRA_TEXT, json.toString(4));
119-
120-
startActivity(Intent.createChooser(shareIntent, getString(R.string.share_results_via)));
119+
if (itemId == R.id.menu_export_results) {
120+
intent = new Intent(Intent.ACTION_SEND);
121+
intent.setType("text/plain");
122+
intent.putExtra(Intent.EXTRA_SUBJECT, "Android VTS Results");
123+
intent.putExtra(Intent.EXTRA_TEXT, json.toString(4));
124+
} else if(itemId == R.id.menu_share_results) {
125+
Uri formUri = new ShareViaGoogleForm(json).buildUri();
126+
intent = new Intent(Intent.ACTION_VIEW, formUri);
127+
}
121128
} catch (JSONException e) {
122129
Log.d(TAG, "Json exception: " + e.getMessage());
123130
Snackbar.make(coordinatorLayout, R.string.error_exporting_results, Snackbar.LENGTH_LONG).show();
124131
}
125132

133+
if (intent != null) {
134+
startActivity(Intent.createChooser(intent, getString(R.string.share_results_via)));
135+
}
136+
126137
return true;
127138

128139
default:

app/src/main/res/menu/main_menu.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,9 @@
77
android:title="@string/export_results"
88
app:showAsAction="never" />
99

10+
<item
11+
android:id="@+id/menu_share_results"
12+
android:title="@string/submit_results"
13+
app:showAsAction="never" />
14+
1015
</menu>

app/src/main/res/values/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
<string name="test_result_success">Not Vulnerable</string>
1515
<string name="test_result_failure">Vulnerable</string>
1616
<string name="export_results">Export results</string>
17+
<string name="submit_results">Share for Research</string>
1718
<string name="share_results_via">Share results via</string>
1819
<string name="error_exporting_results">Error exporting the results.</string>
1920
<string name="run_tests">Please run the tests first</string>

0 commit comments

Comments
 (0)