Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
ced463b
add dep for MQTT lib
hajoha Jan 5, 2025
e629b4a
add basic setup for MQTT config
hajoha Jan 5, 2025
7f7effd
add basic infrastructure for MQTT
hajoha Jan 6, 2025
c6ce469
remove double setupLocalFile() call
hajoha Jan 7, 2025
13d9760
update MQTTService
hajoha Jan 7, 2025
97dd0a1
add Service Type
hajoha Jan 12, 2025
e843e52
receive last will exactly once
hajoha Jan 13, 2025
ad707b1
Merge branch 'rel/0.5' into feature/mqtt-support
hajoha Jan 28, 2025
c1f340c
fix typo
hajoha Jan 28, 2025
1026b14
move device name setting to main Setting preference and force user to…
hajoha Jan 28, 2025
cee64ce
remove UUID generation
hajoha Jan 28, 2025
fb55495
update LoggingFragment
hajoha Jan 28, 2025
6722fd5
update
hajoha Feb 5, 2025
b15c299
update
hajoha Feb 7, 2025
25e12be
update
hajoha Feb 7, 2025
de333d6
update
hajoha Feb 9, 2025
aee5182
working
hajoha Feb 9, 2025
5b86e5c
fix monitoring of status
hajoha Feb 9, 2025
7d3d615
update
hajoha Mar 6, 2025
1697b8f
update
hajoha Mar 14, 2025
2214e96
get basic iPerf3 working
Mar 15, 2025
80189e5
add basic progressbar
Mar 15, 2025
0454423
add basic progressbar
Mar 15, 2025
b3ab92e
Merge remote-tracking branch 'origin/feature/mqtt-support' into featu…
Mar 15, 2025
6966deb
update progressbar based on current interval from iperf3
Mar 17, 2025
5843f53
update
Mar 17, 2025
55834cc
update
Mar 17, 2025
af2f8bb
update
hajoha Apr 2, 2025
93a80a4
update
hajoha Apr 4, 2025
e58018f
update
hajoha Apr 7, 2025
b8aaa37
update
hajoha Apr 11, 2025
2c7f4fd
update
hajoha Apr 11, 2025
b622ead
update
hajoha Apr 15, 2025
c1bc593
update
hajoha Apr 16, 2025
24e69c4
update
hajoha Apr 17, 2025
89cbe50
update
hajoha Apr 17, 2025
661bbee
update
hajoha Apr 17, 2025
ea5d02c
update
hajoha Apr 21, 2025
554329e
cleanup
hajoha Apr 21, 2025
fe5c3df
update
hajoha Apr 21, 2025
46b8d04
update
hajoha Apr 23, 2025
79e9fc8
update
hajoha Apr 23, 2025
3582ce6
update
hajoha Apr 25, 2025
92962fa
Merge branch 'rel/0.6' into feature/mqtt-support
hajoha Apr 25, 2025
921d8ec
update
hajoha Apr 25, 2025
f83b699
update
hajoha Apr 25, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 19 additions & 2 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,11 @@ def getGitHash = { ->
}

android {
packagingOptions {
resources {
excludes += ['META-INF/INDEX.LIST', 'META-INF/io.netty.versions.properties']
}
}
signingConfigs {
debug {
keyAlias keystoreProperties['keyAlias']
Expand Down Expand Up @@ -122,10 +127,18 @@ spdxSbom {
}

dependencies {
implementation 'androidx.preference:preference:1.2.1'
implementation 'androidx.work:work-runtime:2.10.0'
def work_version = "2.10.0"
def room_version = "2.6.1"

implementation "androidx.work:work-runtime:$work_version"
implementation "androidx.work:work-runtime-ktx:$work_version"
implementation "androidx.work:work-rxjava2:$work_version"
implementation "androidx.work:work-gcm:$work_version"
androidTestImplementation "androidx.work:work-testing:$work_version"
implementation "androidx.work:work-multiprocess:$work_version"
implementation 'com.google.android.flexbox:flexbox:3.0.0'
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-guava:1.6.0"
implementation 'androidx.preference:preference:1.2.1'
implementation "androidx.room:room-runtime:$room_version"
annotationProcessor "androidx.room:room-compiler:$room_version"
implementation 'androidx.appcompat:appcompat:1.7.0'
Expand All @@ -149,7 +162,11 @@ dependencies {
implementation 'com.google.android.gms:play-services-location:21.3.0'
implementation 'com.github.anastr:speedviewlib:1.6.1'
implementation "androidx.viewpager2:viewpager2:1.1.0"
implementation "androidx.compose.material3:material3:1.3.0"
implementation("com.hivemq:hivemq-mqtt-client:1.3.4")
implementation "androidx.compose.material3:material3:1.3.1"
implementation("com.squareup.moshi:moshi:1.15.2")
implementation("com.squareup.moshi:moshi-adapters:1.8.0")
}

configurations.implementation {
Expand Down
7 changes: 6 additions & 1 deletion app/proguard-rules.pro
Original file line number Diff line number Diff line change
Expand Up @@ -29,4 +29,9 @@
-assumenosideeffects class android.util.Log {
public static *** d(...);
public static *** v(...);
}
}

-keepclassmembernames class io.netty.** { *; }
-keepclassmembers class org.jctools.** { *; }


71 changes: 69 additions & 2 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -38,15 +38,79 @@
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_LOCATION" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_SPECIAL_USE" />

<application
android:name=".Application"
android:description="@string/app_description"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.OpenMobileNetworkToolkit"
android:usesCleartextTraffic="true">
<service
android:name=".Iperf3.Service.Executor.Iperf3ServiceWorkerOne"
android:exported="false"
android:process=":iperf3Worker1">
</service>
<service
android:name=".Iperf3.Service.Executor.Iperf3ServiceWorkerTwo"
android:exported="false"
android:process=":iperf3Worker2" />
<service
android:name=".Iperf3.Service.Executor.Iperf3ServiceWorkerThree"
android:exported="false"
android:process=":iperf3Worker3" />
<service
android:name=".Iperf3.Service.Executor.Iperf3ServiceWorkerFour"
android:exported="false"
android:process=":iperf3Worker4" />

<service
android:name=".Iperf3.Service.Monitor.Iperf3MonitorServiceWorkerOne"
android:exported="false"
android:process=":iperf3MonitorWorker1" />
<service
android:name=".Iperf3.Service.Monitor.Iperf3MonitorServiceWorkerTwo"
android:exported="false"
android:process=":iperf3MonitorWorker2" />
<service
android:name=".Iperf3.Service.Monitor.Iperf3MonitorServiceWorkerThree"
android:exported="false"
android:process=":iperf3MonitorWorker3" />
<service
android:name=".Iperf3.Service.Monitor.Iperf3MonitorServiceWorkerFour"
android:exported="false"
android:process=":iperf3MonitorWorker4" />


<provider
android:name="androidx.startup.InitializationProvider"
android:authorities="${applicationId}.androidx-startup"
android:exported="false"
tools:node="merge">
<!-- If you are using androidx.startup to initialize other components -->
<meta-data
android:name="androidx.work.WorkManagerInitializer"
android:value="androidx.startup"
tools:node="remove" />
</provider>
<provider
android:name="androidx.startup.InitializationProvider"
android:authorities="${applicationId}.androidx-startup"
tools:node="remove">
</provider>
<provider
android:name="androidx.startup.InitializationProvider"
android:authorities="${applicationId}.androidx-startup"
android:exported="false"
tools:node="merge">
<meta-data
android:name="androidx.work.WorkManagerInitializer"
android:value="androidx.startup"
tools:node="remove" />
</provider>


<service
android:name="de.fraunhofer.fokus.OpenMobileNetworkToolkit.OpenMobileNetworkToolkit"
android:enabled="true"
Expand Down Expand Up @@ -76,6 +140,9 @@
android:name="android.app.PROPERTY_SPECIAL_USE_FGS_SUBTYPE"
android:value="explanation_for_special_use" />
</service>
<service
android:name="de.fraunhofer.fokus.OpenMobileNetworkToolkit.MQTT.MQTTService"
android:foregroundServiceType="location"/>


<receiver
Expand All @@ -90,6 +157,7 @@
<activity
android:name="de.fraunhofer.fokus.OpenMobileNetworkToolkit.MainActivity"
android:exported="true"
android:windowSoftInputMode="adjustPan"
android:theme="@style/Theme.OpenMobileNetworkToolkit.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
Expand Down Expand Up @@ -128,6 +196,5 @@
<action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
</intent-filter>
</receiver>

</application>
</manifest>
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package de.fraunhofer.fokus.OpenMobileNetworkToolkit;

import androidx.annotation.NonNull;
import androidx.work.Configuration;

public class Application extends android.app.Application implements Configuration.Provider {
@NonNull
@Override
public Configuration getWorkManagerConfiguration() {
return new Configuration.Builder()
.setDefaultProcessName(getPackageName())
.setMinimumLoggingLevel(android.util.Log.DEBUG)
.build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package de.fraunhofer.fokus.OpenMobileNetworkToolkit;

import androidx.work.WorkInfo;

import java.util.EventListener;
import java.util.HashMap;
import java.util.UUID;

public interface CustomEventListener extends EventListener {
void onChange(HashMap<UUID, WorkInfo> workInfos);
}
Original file line number Diff line number Diff line change
Expand Up @@ -297,7 +297,7 @@ public StringBuilder getStringBuilder(){

if(!this.getSsrsrpString().equals(max)) stringBuilder.append(" SSRSRP: ").append(this.getSsrsrpString()).append(" dBm").append("\n");

if(!this.getSssinrString().equals(max)) stringBuilder.append(" SSRSRP: ").append(this.getSssinrString()).append(" dBm").append("\n");
if(!this.getSssinrString().equals(max)) stringBuilder.append(" SSSINR: ").append(this.getSssinrString()).append(" dBm").append("\n");

if(!this.getFirstCqiString().equals(max)) stringBuilder.append(" CQI: ").append(this.getFirstCqiString()).append("\n");

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.UUID;

import de.fraunhofer.fokus.OpenMobileNetworkToolkit.DataProvider.CellInformations.CDMAInformation;
import de.fraunhofer.fokus.OpenMobileNetworkToolkit.DataProvider.CellInformations.CellInformation;
Expand Down Expand Up @@ -731,6 +732,9 @@ public Map<String, String> getTagsMap() {
tags_map_modifiable.put("sdk_version", String.valueOf(di.getAndroidSDK()));
tags_map_modifiable.put("android_version", di.getAndroidRelease());
tags_map_modifiable.put("security_patch", di.getSecurityPatchLevel());
String device = spg.getSharedPreference(SPType.default_sp).getString("device_name", "null").strip();
//if(device.equals("null")); TODO handle this
tags_map_modifiable.put("device", device);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
tags_map_modifiable.put("soc_model", di.getSOCModel());
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
/*
* SPDX-FileCopyrightText: 2023 Peter Hasse <peter.hasse@fokus.fraunhofer.de>
* SPDX-FileCopyrightText: 2023 Johann Hackler <johann.hackler@fokus.fraunhofer.de>
* SPDX-FileCopyrightText: 2023 Fraunhofer FOKUS
*
* SPDX-License-Identifier: BSD-3-Clause-Clear
*/

package de.fraunhofer.fokus.OpenMobileNetworkToolkit.InfluxDB2x.Worker;

import android.content.Context;
import android.util.Log;

import androidx.annotation.NonNull;
import androidx.work.Data;
import androidx.work.Worker;
import androidx.work.WorkerParameters;

import com.google.gson.Gson;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.List;
import java.util.stream.Collectors;

import de.fraunhofer.fokus.OpenMobileNetworkToolkit.InfluxDB2x.InfluxdbConnection;
import de.fraunhofer.fokus.OpenMobileNetworkToolkit.InfluxDB2x.InfluxdbConnections;
import de.fraunhofer.fokus.OpenMobileNetworkToolkit.Inputs.Inputs;
import de.fraunhofer.fokus.OpenMobileNetworkToolkit.Inputs.Iperf3Input;

public class InfluxDB2xUploadWorker extends Worker {
public static final String TAG = "InfDB2xUploadWorker";
InfluxdbConnection influx;
private Inputs input;
public static final String UPLOAD = "influxdb2x_upload";

public InfluxDB2xUploadWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) {
super(context, workerParams);
Gson gson = new Gson();
String inputString = getInputData().getString(Inputs.INPUT);
input = gson.fromJson(inputString, Inputs.class);
}
private void setup(){
influx = InfluxdbConnections.getRicInstance(getApplicationContext());
}

@NonNull
@Override
public Result doWork() {
setup();
Data output = new Data.Builder().putBoolean(UPLOAD, false).build();
if(influx == null){
return Result.failure(output);
}
if(influx.getWriteApi() == null){
influx.open_write_api();
if(influx.getWriteApi() == null)
return Result.failure(output);
}

if(!influx.ping()){
return Result.failure(output);
}
BufferedReader br;
try {
br = new BufferedReader(new FileReader(input.getParameter().getLineProtocolFile()));
} catch (FileNotFoundException | NullPointerException e) {
Log.d(TAG,e.toString());
return Result.failure(output);
}
List<String> points = br.lines().collect(Collectors.toList());
try {
Log.d(TAG, String.format("doWork: uploading %s", input.getParameter().getLineProtocolFile()));
influx.writeRecords(points);
} catch (IOException e) {
Log.d(TAG, String.format("doWork: upload of %s failed!", input.getParameter().getLineProtocolFile()));
return Result.failure(output);
}


influx.flush();

output = new Data.Builder().putBoolean(UPLOAD, true).build();
return Result.success(output);
}
}
Loading