Skip to content

Commit 48fdada

Browse files
authored
Merge pull request #25 from omnt/rel/0.4
Create Release 0.4
2 parents 0b9b316 + 4831b74 commit 48fdada

File tree

90 files changed

+6026
-2603
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

90 files changed

+6026
-2603
lines changed

.github/ISSUE_TEMPLATE/bug.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
name: Bug Report
33
about: Use this template for creating bug report.
4-
title: "[BUG] - BUG_DESCRIPTION"
4+
title: "BUG_DESCRIPTION"
55
labels: bug
66
assignees: ""
77
---

.github/ISSUE_TEMPLATE/feature.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
name: Feature Request
33
about: Use this template for creating feature request.
4-
title: "[FEATURE] - FEATURE_DESCRIPTION"
4+
title: "FEATURE_DESCRIPTION"
55
labels: feature
66
assignees: ""
77
---

CHANGELOG.md

+20-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,22 @@
1+
# OpenMobileNetworkToolkit Changelog
2+
## Release [0.4] - Stralsund
3+
4+
### Added
5+
- WiFi Data logging and display on the home screen
6+
- New Quick View on home screen for Cell Information
7+
- Import / Export application settings
8+
9+
### Changed
10+
- code clean up around soon to be deprecated functions
11+
- refactored code that causes warnings
12+
- refactored data model for cell information
13+
- Bump lib dependencies
14+
- Bump gradle version
15+
16+
### Fixed
17+
- Fix crash where no UICC or Cell is available
18+
- Wrong value in Wifi RSSI filed
19+
120
# OpenMobileNetworkToolkit Changelog
221
## Release [0.3.1]
322

@@ -7,7 +26,7 @@
726
### Changed
827
- Use [TelephonyCallback](https://developer.android.com/reference/android/telephony/TelephonyCallback) instead of [PhoneStateListener](https://developer.android.com/reference/android/telephony/PhoneStateListener)
928
- Bump gradle to 8.5.0
10-
- Bump lib depencies
29+
- Bump lib decencies
1130
- disable Radio Settings if Carrier Permissions are not available
1231
- minor documentation update
1332

README.md

+9-4
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,26 @@
22

33
OMNT provides tooling to researchers and developers of mobile communication networks like 3GPP 2/3/4/5G.
44
The main objective of OMNT is the collection of measurement data on the mobile network like RSSI, RSRQ, RSRP, GNSS position, Cell ID, PLNM and much more.
5-
On top of those passive measurements on the radio environment and network parameters, OMNT can also run a iPerf3 server / client for bandwidth, latency and jitter evaluation as well as
5+
On top of those passive measurements on the radio environment and network parameters, OMNT can also run an iPerf3 server / client for bandwidth, latency and jitter evaluation as well as
66
round-trip-time and jitter evaluation via ICMP (Ping). Measurement data can be stored locally and / or send to an InfluxDB 2.x server.
7-
Measurement results can be visualized e.g. via provided Graphana Dashboards or be further processed e.g. with python.
8-
Besides its measurement capabilities, OMNT provides a deep insight in the state of the phone e.g. software versions, connectivity states, SIM card content and much more.
7+
Measurement results can be visualized e.g. via provided Grafana Dashboards or be further processed e.g. with python.
8+
Besides its measurement capabilities, OMNT provides a deep insight into the state of the phone e.g. software versions, connectivity states, SIM card content and much more.
99
Network related Carrier Settings can be configured (if the app is granted the corresponding privileges).
1010
Also, OMNT provides access to different "secret" settings in Android phones.
1111

1212
The current state of the app can be described as "research software", it fits our needs but does not aim to be complete or bug free.
1313
Use the app at your own risk. If you find it useful for your research, please cite the app in publications.
1414

15-
1615
* [Quick Start HowTo](docs/quick-start.md)
1716
* [User Manual](docs/OpenMobileNetworkToolkit.md)
1817
* [Signing HowTo](docs/signing.md)
1918

19+
## Requirements
20+
21+
OMNT currently supports Android 11 (API Level 30) and is tested up to Android 15 (API Level 35). While it would be technical possible to support lower API levels,
22+
it would be a lot of work and would require some duplicate implementations. If you can, try to update your phone to the latest software update. If there is no recent enough
23+
firmware from you phone vendor you might have luck with LineageOS or other after market firmware.
24+
2025
## Why use this app
2126

2227
* As apps like OMNT can can access a lot of private information. It is important for users to be able to make sure that those data is not

app/build.gradle

+16-8
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,8 @@ android {
5555
applicationId "de.fraunhofer.fokus.OpenMobileNetworkToolkit"
5656
minSdk 31
5757
targetSdk 34
58-
versionCode 3
59-
versionName "0.3"
58+
versionCode 4
59+
versionName "0.4"
6060
resValue("string", "git_hash", getGitHash())
6161

6262
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
@@ -84,6 +84,13 @@ android {
8484
compileOptions {
8585
sourceCompatibility JavaVersion.VERSION_11
8686
targetCompatibility JavaVersion.VERSION_11
87+
tasks.withType(JavaCompile).tap {
88+
configureEach {
89+
options.compilerArgs << "-Xlint:deprecation" << "-Xlint:unchecked"
90+
}
91+
}
92+
93+
8794
}
8895
buildFeatures {
8996
viewBinding true
@@ -116,32 +123,33 @@ spdxSbom {
116123

117124
dependencies {
118125
implementation 'androidx.preference:preference:1.2.1'
119-
implementation 'androidx.work:work-runtime:2.9.0'
126+
implementation 'androidx.work:work-runtime:2.9.1'
120127
def room_version = "2.6.1"
121128

122129
implementation "androidx.room:room-runtime:$room_version"
123130
annotationProcessor "androidx.room:room-compiler:$room_version"
124131
implementation 'androidx.appcompat:appcompat:1.7.0'
125132
implementation 'com.google.guava:guava:33.2.1-jre'
126133
implementation 'androidx.concurrent:concurrent-futures:1.2.0'
127-
implementation 'androidx.activity:activity:1.9.0'
128-
implementation 'androidx.fragment:fragment:1.8.1'
134+
implementation 'androidx.activity:activity:1.9.3'
135+
implementation 'androidx.fragment:fragment:1.8.4'
129136
implementation 'androidx.appcompat:appcompat:1.7.0'
130137
implementation 'com.google.android.material:material:1.12.0'
131138
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
132-
implementation 'androidx.navigation:navigation-fragment:2.7.7'
133-
implementation 'androidx.navigation:navigation-ui:2.7.7'
139+
implementation 'androidx.navigation:navigation-fragment:2.8.3'
140+
implementation 'androidx.navigation:navigation-ui:2.8.3'
134141
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
135142
testImplementation 'junit:junit:4.13.2'
136143
androidTestImplementation 'androidx.test.ext:junit:1.2.1'
137144
androidTestImplementation 'androidx.test.espresso:espresso-core:3.6.1'
138145
implementation 'androidx.preference:preference-ktx:1.2.1'
139146
implementation 'androidx.recyclerview:recyclerview:1.3.2'
140147
implementation 'androidx.recyclerview:recyclerview-selection:1.1.0'
141-
implementation 'com.influxdb:influxdb-client-java:7.1.0'
148+
implementation 'com.influxdb:influxdb-client-java:7.2.0'
142149
implementation 'com.google.android.gms:play-services-location:21.3.0'
143150
implementation 'com.github.anastr:speedviewlib:1.6.1'
144151
implementation "androidx.viewpager2:viewpager2:1.1.0"
152+
implementation "androidx.compose.material3:material3:1.3.0"
145153
}
146154

147155
configurations.implementation {

app/src/main/AndroidManifest.xml

+1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
2626
<uses-permission android:name="android.permission.INTERNET" />
2727
<uses-permission android:name="android.permission.HIDE_OVERLAY_WINDOWS" />
28+
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
2829
<uses-permission
2930
android:name="android.permission.READ_PRIVILEGED_PHONE_STATE"
3031
tools:ignore="ProtectedPermissions" />

app/src/main/java/de/fraunhofer/fokus/OpenMobileNetworkToolkit/CarrierSettingsFragment.java

+1-5
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
import android.content.Context;
1212
import android.os.Bundle;
1313
import android.os.PersistableBundle;
14-
import android.telephony.CarrierConfigManager;
1514
import android.telephony.TelephonyManager;
1615
import android.util.Log;
1716
import android.view.LayoutInflater;
@@ -28,15 +27,12 @@
2827
import androidx.cardview.widget.CardView;
2928
import androidx.fragment.app.Fragment;
3029

31-
import com.google.android.material.textfield.TextInputLayout;
32-
3330
import java.util.Arrays;
3431
import java.util.HashMap;
35-
import java.util.Iterator;
3632
import java.util.Map;
3733

3834
public class CarrierSettingsFragment extends Fragment {
39-
String TAG = "CarrierSettingsFragment";
35+
final String TAG = "CarrierSettingsFragment";
4036
Context context;
4137
TelephonyManager tm;
4238

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package de.fraunhofer.fokus.OpenMobileNetworkToolkit;
2+
3+
import android.app.Dialog;
4+
import android.content.DialogInterface;
5+
import android.os.Bundle;
6+
import android.widget.Toast;
7+
8+
import androidx.appcompat.app.AlertDialog;
9+
import androidx.fragment.app.DialogFragment;
10+
11+
import de.fraunhofer.fokus.OpenMobileNetworkToolkit.Preferences.SharedPreferencesGrouper;
12+
import de.fraunhofer.fokus.OpenMobileNetworkToolkit.SettingPreferences.ClearPreferencesListener;
13+
14+
public class ClearPreferencesFragment extends DialogFragment {
15+
private ClearPreferencesListener listener;
16+
17+
public void setClearPreferencesListener(ClearPreferencesListener listener) {
18+
this.listener = listener;
19+
}
20+
public Dialog onCreateDialog(Bundle savedInstanceState) {
21+
// Use the Builder class for convenient dialog construction.
22+
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
23+
builder.setMessage(R.string.clear_preferences_message)
24+
.setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() {
25+
public void onClick(DialogInterface dialog, int id) {
26+
SharedPreferencesGrouper.getInstance(getContext()).clearConfig();
27+
listener.onPreferenceChanged();
28+
Toast.makeText(getContext(), "All Config Cleared!", Toast.LENGTH_SHORT).show();
29+
}
30+
})
31+
.setNegativeButton(R.string.no, new DialogInterface.OnClickListener() {
32+
public void onClick(DialogInterface dialog, int id) {
33+
Toast.makeText(getContext(), "Canceled", Toast.LENGTH_SHORT).show();
34+
}
35+
});
36+
// Create the AlertDialog object and return it.
37+
return builder.create();
38+
}
39+
40+
}

app/src/main/java/de/fraunhofer/fokus/OpenMobileNetworkToolkit/DataProvider/BatteryInformation.java

+15-2
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,22 @@
88

99
package de.fraunhofer.fokus.OpenMobileNetworkToolkit.DataProvider;
1010

11-
public class BatteryInformation {
11+
import android.content.Context;
12+
import android.widget.TableLayout;
13+
14+
public class BatteryInformation extends Information {
1215
private int scale;
1316
private int level;
1417
private int charge_type;
15-
18+
public BatteryInformation() {
19+
super();
20+
}
21+
public BatteryInformation(long timeStamp, int scale, int level, int charge_type) {
22+
super(timeStamp);
23+
this.scale = scale;
24+
this.level = level;
25+
this.charge_type = charge_type;
26+
}
1627
public int getScale() {
1728
return scale;
1829
}
@@ -40,4 +51,6 @@ public void setCharge_type(int charge_type) {
4051
public double getPercent() {
4152
return level * 100 / (double) scale;
4253
}
54+
55+
4356
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package de.fraunhofer.fokus.OpenMobileNetworkToolkit.DataProvider;
2+
3+
import android.content.Context;
4+
import android.util.Log;
5+
import android.widget.TableLayout;
6+
7+
import org.json.JSONObject;
8+
9+
import de.fraunhofer.fokus.OpenMobileNetworkToolkit.BuildConfig;
10+
11+
public class BuildInformation extends Information {
12+
private final String TAG = "BuildInformation";
13+
14+
public BuildInformation() {
15+
super();
16+
}
17+
18+
public BuildInformation(long timeStamp) {
19+
super(timeStamp);
20+
}
21+
22+
public String getBuildType() {
23+
return BuildConfig.BUILD_TYPE;
24+
}
25+
26+
public int getVersionCode() {
27+
return BuildConfig.VERSION_CODE;
28+
}
29+
30+
public String getVersionName() {
31+
return BuildConfig.VERSION_NAME;
32+
}
33+
34+
public String getApplicationId() {
35+
return BuildConfig.APPLICATION_ID;
36+
}
37+
38+
public boolean isDebug() {
39+
return BuildConfig.DEBUG;
40+
}
41+
42+
public JSONObject toJSON(){
43+
44+
JSONObject json = new JSONObject();
45+
try {
46+
json.put("BuildType", getBuildType());
47+
json.put("VersionCode", getVersionCode());
48+
json.put("VersionName", getVersionName());
49+
json.put("ApplicationId", getApplicationId());
50+
json.put("Debug", isDebug());
51+
} catch (Exception e) {
52+
Log.d(TAG,e.toString());
53+
}
54+
return json;
55+
}
56+
57+
}

0 commit comments

Comments
 (0)