From 8e002107b5ebf54f852f0e7c36677384027d53ba Mon Sep 17 00:00:00 2001 From: Miguel Siebenhaar Date: Wed, 21 Jun 2023 15:06:57 +0200 Subject: [PATCH 1/5] Version 1. working --- .../Detection/DetectorService.java | 46 ++++++++++++++++--- .../ueberwachungssystem/MainActivity.java | 4 +- .../WifiCommunication.java | 14 ++++-- 3 files changed, 51 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/com/example/ueberwachungssystem/Detection/DetectorService.java b/app/src/main/java/com/example/ueberwachungssystem/Detection/DetectorService.java index 36e3b94..39da9b8 100644 --- a/app/src/main/java/com/example/ueberwachungssystem/Detection/DetectorService.java +++ b/app/src/main/java/com/example/ueberwachungssystem/Detection/DetectorService.java @@ -3,6 +3,7 @@ package com.example.ueberwachungssystem.Detection; import android.content.Intent; import android.os.Binder; import android.os.IBinder; +import android.util.Log; import android.widget.ImageView; import androidx.annotation.NonNull; @@ -10,6 +11,8 @@ import androidx.annotation.Nullable; import androidx.camera.core.ExperimentalGetImage; import androidx.lifecycle.LifecycleService; +import com.example.ueberwachungssystem.WifiCommunication; + import java.io.File; @ExperimentalGetImage @@ -24,12 +27,34 @@ public class DetectorService extends LifecycleService { public Accelerometer motionDetector = null; public MicrophoneDetector audioDetector = null; + public WifiCommunication wifiCommunication; + + String wifiData; + StringBuffer stringBufferWifi = new StringBuffer(); + @Override public int onStartCommand(Intent intent, int flags, int startId) { if (isServiceRunning) return START_NOT_STICKY; + /** Wifi Instanz **/ + wifiCommunication = new WifiCommunication(1234); + wifiCommunication.sendTrue("TEst"); + + wifiCommunication.setOnConnectionListener(new WifiCommunication.OnConnectionListener() { + @Override + public void onConnection(String data) { + Log.d("Listener", data); + wifiData = data; + stringToStringbuffer(data); + Log.d("buffer",stringBufferWifi.toString()); + passToServiceListener(stringBufferWifi); + + } + }); + + @@ -38,7 +63,8 @@ public class DetectorService extends LifecycleService { videoDetector.setOnDetectionListener(new Detector.OnDetectionListener() { @Override public void onDetection(@NonNull DetectionReport detectionReport) { - passToServiceListener(detectionReport); + //passToServiceListener(detectionReport); + wifiCommunication.sendTrue(detectionReport.toMessage()); } }); /** Motion Detection**/ @@ -47,7 +73,8 @@ public class DetectorService extends LifecycleService { motionDetector.setOnDetectionListener(new Detector.OnDetectionListener() { @Override public void onDetection(@NonNull DetectionReport detectionReport) { - passToServiceListener(detectionReport); + //passToServiceListener(detectionReport); + wifiCommunication.sendTrue(detectionReport.toMessage()); } }); /** Audio Detection **/ @@ -55,7 +82,8 @@ public class DetectorService extends LifecycleService { audioDetector.setOnDetectionListener(new Detector.OnDetectionListener() { @Override public void onDetection(@NonNull DetectionReport detectionReport) { - passToServiceListener(detectionReport); + //passToServiceListener(detectionReport); + wifiCommunication.sendTrue(detectionReport.toMessage()); } }); /** Audio Recorder**/ @@ -92,18 +120,24 @@ public class DetectorService extends LifecycleService { /** Pass Detection Report to Service Detection Listener and trigger it */ - public void passToServiceListener(DetectionReport detectionReport) { + public void passToServiceListener(StringBuffer stringBuffer) { if (listener != null) { - listener.onDetection(detectionReport); + listener.onDetection(stringBuffer); } } /** On Detection Listener - runs when violation is reported */ public interface OnDetectionListener { - void onDetection(@NonNull DetectionReport detectionReport); + void onDetection(@NonNull StringBuffer stringBuffer); } public void setOnDetectionListener(@NonNull DetectorService.OnDetectionListener listener) { this.listener = listener; } + + public void stringToStringbuffer(String string){ + if(string != null) { + stringBufferWifi.append(string).append("\n"); + } + } } diff --git a/app/src/main/java/com/example/ueberwachungssystem/MainActivity.java b/app/src/main/java/com/example/ueberwachungssystem/MainActivity.java index 24cdcb3..83617dd 100644 --- a/app/src/main/java/com/example/ueberwachungssystem/MainActivity.java +++ b/app/src/main/java/com/example/ueberwachungssystem/MainActivity.java @@ -103,8 +103,8 @@ public class MainActivity extends AppCompatActivity { detectorService.setOnDetectionListener(new DetectorService.OnDetectionListener() { @Override - public void onDetection(@NonNull DetectionReport detectionReport) { - Log.d("onDetection", detectionReport.toMessage()); + public void onDetection(@NonNull StringBuffer stringBuffer) { + Log.d("onDetection", stringBuffer.toString()); } }); } diff --git a/app/src/main/java/com/example/ueberwachungssystem/WifiCommunication.java b/app/src/main/java/com/example/ueberwachungssystem/WifiCommunication.java index d22acbf..2d70a12 100644 --- a/app/src/main/java/com/example/ueberwachungssystem/WifiCommunication.java +++ b/app/src/main/java/com/example/ueberwachungssystem/WifiCommunication.java @@ -1,5 +1,6 @@ package com.example.ueberwachungssystem; import android.annotation.SuppressLint; +import android.util.Log; import android.widget.Toast; import androidx.annotation.NonNull; @@ -51,15 +52,16 @@ public class WifiCommunication { } public interface OnConnectionListener { - void onConnection(StringBuffer data); + void onConnection(String data); } public void setOnConnectionListener(@NonNull OnConnectionListener listener) { this.listener = listener; } - public void sendWifiData(StringBuffer wifiMessage) { + public void sendWifiData(String wifiMessage) { if (listener != null) { listener.onConnection(wifiMessage); + } } @@ -78,8 +80,9 @@ public class WifiCommunication { rxString = new String(receiveData, 0, rxPacket.getLength()); String[] splitrxString = rxString.split(","); if(!previousRxString.equals(rxString) && splitrxString[0].equals("1") && splitrxString.length==7) { - rxStringBuffer.append(rxString).append("\n"); - sendWifiData(rxStringBuffer); + //rxStringBuffer.append(rxString).append("\n"); + Log.d("empfangen", rxString); + sendWifiData(rxString); //mainActivity.runOnUiThread(() -> mainActivity.tvMessages.setText(rxStringBuffer)); previousRxString = rxString; } @@ -103,7 +106,8 @@ public class WifiCommunication { Date curDate = new Date(System.currentTimeMillis()); String str = formatter.format(curDate); byte[] send_Data = new byte[512]; - String txString = ("1," +str+ ",Gruppe2," + getLocalIpAddress() + ",An,Video," +messageToSend); + String txString = (messageToSend); //"1," +str+ ",Gruppe2," + getLocalIpAddress() + ",An,Video," + Log.d("send", txString); send_Data = txString.getBytes(); DatagramPacket txPacket = new DatagramPacket(send_Data, txString.length(), address, port); From e571373fbb0b5feebf4972cdfd87cd40008918ed Mon Sep 17 00:00:00 2001 From: Miguel Siebenhaar Date: Wed, 21 Jun 2023 15:28:57 +0200 Subject: [PATCH 2/5] Version 2. working --- .../Detection/DetectorService.java | 23 +++++++++++++++++++ .../WifiCommunication.java | 18 +++++++++------ 2 files changed, 34 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/example/ueberwachungssystem/Detection/DetectorService.java b/app/src/main/java/com/example/ueberwachungssystem/Detection/DetectorService.java index 39da9b8..deb98be 100644 --- a/app/src/main/java/com/example/ueberwachungssystem/Detection/DetectorService.java +++ b/app/src/main/java/com/example/ueberwachungssystem/Detection/DetectorService.java @@ -32,6 +32,8 @@ public class DetectorService extends LifecycleService { String wifiData; StringBuffer stringBufferWifi = new StringBuffer(); + String typOfAlarm; + @Override public int onStartCommand(Intent intent, int flags, int startId) { @@ -50,6 +52,8 @@ public class DetectorService extends LifecycleService { stringToStringbuffer(data); Log.d("buffer",stringBufferWifi.toString()); passToServiceListener(stringBufferWifi); + checkState(data); + checkTyp(data); } }); @@ -140,4 +144,23 @@ public class DetectorService extends LifecycleService { stringBufferWifi.append(string).append("\n"); } } + + public String[] splitString(String string){ + String[] splitrxString = string.split(","); + return splitrxString; //splitrxString[0] = "1",splitrxString[1] = "HH:MM:SS", splitrxString[0].equals("1") + + } + + public boolean checkState(String string){ + Log.d("state", String.valueOf(splitString(string)[4].equals("An"))); + return splitString(string)[4].equals("An"); + } + + public String checkTyp(String string){ + if (splitString(string)[5] != null) { + typOfAlarm = splitString(string)[5]; + Log.d("Type", typOfAlarm); + } + return typOfAlarm; + } } diff --git a/app/src/main/java/com/example/ueberwachungssystem/WifiCommunication.java b/app/src/main/java/com/example/ueberwachungssystem/WifiCommunication.java index 2d70a12..2362045 100644 --- a/app/src/main/java/com/example/ueberwachungssystem/WifiCommunication.java +++ b/app/src/main/java/com/example/ueberwachungssystem/WifiCommunication.java @@ -31,6 +31,8 @@ public class WifiCommunication { private final DatagramSocket socket; volatile private boolean running; + private boolean Gruppe =true; + private OnConnectionListener listener; @SuppressLint("SetTextI18n") public WifiCommunication(int port) { @@ -66,7 +68,6 @@ public class WifiCommunication { } private class ReceiveThread extends Thread { - private StringBuffer rxStringBuffer = new StringBuffer(); private String rxString=""; private String previousRxString = ""; @@ -79,13 +80,16 @@ public class WifiCommunication { socket.receive(rxPacket); rxString = new String(receiveData, 0, rxPacket.getLength()); String[] splitrxString = rxString.split(","); - if(!previousRxString.equals(rxString) && splitrxString[0].equals("1") && splitrxString.length==7) { - //rxStringBuffer.append(rxString).append("\n"); - Log.d("empfangen", rxString); - sendWifiData(rxString); - //mainActivity.runOnUiThread(() -> mainActivity.tvMessages.setText(rxStringBuffer)); - previousRxString = rxString; + if(Gruppe){ + if(!previousRxString.equals(rxString) && splitrxString[0].equals("1") && splitrxString.length==7) { + //rxStringBuffer.append(rxString).append("\n"); + Log.d("empfangen", rxString); + sendWifiData(rxString); + //mainActivity.runOnUiThread(() -> mainActivity.tvMessages.setText(rxStringBuffer)); + previousRxString = rxString; + } } + } while (running); } catch (IOException e) { From edcf555b5b09139fe4fd75f068ac6cd89c223743 Mon Sep 17 00:00:00 2001 From: Miguel Siebenhaar Date: Wed, 21 Jun 2023 16:34:17 +0200 Subject: [PATCH 3/5] Version 2.1 working --- .../Detection/DetectorService.java | 5 ++- .../ueberwachungssystem/MainActivity.java | 2 +- .../WifiCommunication.java | 34 +++++++++++++++---- 3 files changed, 33 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/com/example/ueberwachungssystem/Detection/DetectorService.java b/app/src/main/java/com/example/ueberwachungssystem/Detection/DetectorService.java index deb98be..4bd3e1a 100644 --- a/app/src/main/java/com/example/ueberwachungssystem/Detection/DetectorService.java +++ b/app/src/main/java/com/example/ueberwachungssystem/Detection/DetectorService.java @@ -141,7 +141,7 @@ public class DetectorService extends LifecycleService { public void stringToStringbuffer(String string){ if(string != null) { - stringBufferWifi.append(string).append("\n"); + stringBufferWifi.insert(0,string + "\n"); } } @@ -151,6 +151,9 @@ public class DetectorService extends LifecycleService { } + + + public boolean checkState(String string){ Log.d("state", String.valueOf(splitString(string)[4].equals("An"))); return splitString(string)[4].equals("An"); diff --git a/app/src/main/java/com/example/ueberwachungssystem/MainActivity.java b/app/src/main/java/com/example/ueberwachungssystem/MainActivity.java index 83617dd..a0dd59d 100644 --- a/app/src/main/java/com/example/ueberwachungssystem/MainActivity.java +++ b/app/src/main/java/com/example/ueberwachungssystem/MainActivity.java @@ -104,7 +104,7 @@ public class MainActivity extends AppCompatActivity { detectorService.setOnDetectionListener(new DetectorService.OnDetectionListener() { @Override public void onDetection(@NonNull StringBuffer stringBuffer) { - Log.d("onDetection", stringBuffer.toString()); + Log.d("onDetection", stringBuffer.toString()); //Für oli hier Textview einbauen } }); } diff --git a/app/src/main/java/com/example/ueberwachungssystem/WifiCommunication.java b/app/src/main/java/com/example/ueberwachungssystem/WifiCommunication.java index 2362045..14f1329 100644 --- a/app/src/main/java/com/example/ueberwachungssystem/WifiCommunication.java +++ b/app/src/main/java/com/example/ueberwachungssystem/WifiCommunication.java @@ -32,6 +32,9 @@ public class WifiCommunication { volatile private boolean running; private boolean Gruppe =true; + private boolean showMessage = true; + + StringBuffer rxStringBuffer = new StringBuffer(); private OnConnectionListener listener; @SuppressLint("SetTextI18n") @@ -80,16 +83,31 @@ public class WifiCommunication { socket.receive(rxPacket); rxString = new String(receiveData, 0, rxPacket.getLength()); String[] splitrxString = rxString.split(","); + String[] splitrxStringBuffer = splitBufferIntoStrings(rxStringBuffer); + for(String elem: splitrxStringBuffer){ + if(elem.equals(rxString)){ + showMessage = false; + }else{ + showMessage = true; + } + } if(Gruppe){ - if(!previousRxString.equals(rxString) && splitrxString[0].equals("1") && splitrxString.length==7) { - //rxStringBuffer.append(rxString).append("\n"); + if(!previousRxString.equals(rxString) && splitrxString[0].equals("1") && splitrxString.length==7 && showMessage) { + rxStringBuffer.append(rxString).append("\n"); + Log.d("empfangen", rxString); + sendWifiData(rxString); + //mainActivity.runOnUiThread(() -> mainActivity.tvMessages.setText(rxStringBuffer)); + previousRxString = rxString; + } + }else{ + if(!previousRxString.equals(rxString) && splitrxString[0].equals("1") && splitrxString.length==7 && showMessage) { + rxStringBuffer.append(rxString).append("\n"); Log.d("empfangen", rxString); sendWifiData(rxString); //mainActivity.runOnUiThread(() -> mainActivity.tvMessages.setText(rxStringBuffer)); previousRxString = rxString; } } - } while (running); } catch (IOException e) { @@ -106,9 +124,9 @@ public class WifiCommunication { if(send) { send = false; - SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss"); + /*SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss"); Date curDate = new Date(System.currentTimeMillis()); - String str = formatter.format(curDate); + String str = formatter.format(curDate);*/ byte[] send_Data = new byte[512]; String txString = (messageToSend); //"1," +str+ ",Gruppe2," + getLocalIpAddress() + ",An,Video," Log.d("send", txString); @@ -116,7 +134,7 @@ public class WifiCommunication { DatagramPacket txPacket = new DatagramPacket(send_Data, txString.length(), address, port); - for(int i = 0; i < 300; i++) { + for(int i = 0; i < 500; i++) { socket.send(txPacket); } } @@ -151,4 +169,8 @@ public class WifiCommunication { running = false; socket.close(); } + public String[] splitBufferIntoStrings(StringBuffer string){ + String[] splitrxString2 = string.toString().split("\n"); + return splitrxString2; + } } From e54322e3e2a66562a8b9db178d418a3bee6be06b Mon Sep 17 00:00:00 2001 From: Miguel Siebenhaar Date: Wed, 21 Jun 2023 16:41:20 +0200 Subject: [PATCH 4/5] Version 3 working --- .../ueberwachungssystem/MainActivity.java | 39 +++++++++++++++---- 1 file changed, 32 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/example/ueberwachungssystem/MainActivity.java b/app/src/main/java/com/example/ueberwachungssystem/MainActivity.java index a0dd59d..f28616e 100644 --- a/app/src/main/java/com/example/ueberwachungssystem/MainActivity.java +++ b/app/src/main/java/com/example/ueberwachungssystem/MainActivity.java @@ -12,8 +12,11 @@ import android.content.ServiceConnection; import android.os.Bundle; import android.os.IBinder; import android.util.Log; +import android.view.Menu; +import android.view.MenuItem; import android.view.View; import android.widget.ImageView; +import android.widget.Toast; import android.widget.ToggleButton; import com.example.ueberwachungssystem.Detection.Accelerometer; @@ -85,13 +88,35 @@ public class MainActivity extends AppCompatActivity { } } }); - - - - - - - + }else{ + Toast.makeText(getApplicationContext(),"Bitte Zugriffsrechte gewähren",Toast.LENGTH_SHORT).show(); + } + } + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.options_menu, menu); + return true; + } + public boolean onOptionsItemSelected(MenuItem item) { + Toast.makeText(this, "Selected Item: " + item.getTitle(), Toast.LENGTH_SHORT).show(); + PopUpClass popUpClass; + switch (item.getItemId()) { + case R.id.Rechteverwaltung: + popUpClass = new PopUpClass(MainActivity.this); + popUpClass.showPopupWindow(inputImageView); + popUpClass.RechtePrüfen(); + return true; + case R.id.Sensoren: + popUpClass = new PopUpClass(MainActivity.this); + popUpClass.showPopupWindow(inputImageView); + popUpClass.Sensoren(); + return true; + case R.id.Impressum: + popUpClass = new PopUpClass(MainActivity.this); + popUpClass.showPopupWindow(inputImageView); + popUpClass.Impressum(); + return true; + default: + return super.onOptionsItemSelected(item); } } From 61cad3493149119d8a829b51d1ad136c685dcc1f Mon Sep 17 00:00:00 2001 From: Miguel Siebenhaar Date: Wed, 21 Jun 2023 17:56:30 +0200 Subject: [PATCH 5/5] Version 4 working --- .../Detection/DetectorService.java | 2 -- .../ueberwachungssystem/MainActivity.java | 26 ++++++++++++++----- .../PermissionRequest.java | 2 +- .../ueberwachungssystem/PopUpClass.java | 4 ++- app/src/main/res/menu/options_menu.xml | 2 ++ 5 files changed, 25 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/com/example/ueberwachungssystem/Detection/DetectorService.java b/app/src/main/java/com/example/ueberwachungssystem/Detection/DetectorService.java index 4bd3e1a..7613614 100644 --- a/app/src/main/java/com/example/ueberwachungssystem/Detection/DetectorService.java +++ b/app/src/main/java/com/example/ueberwachungssystem/Detection/DetectorService.java @@ -152,8 +152,6 @@ public class DetectorService extends LifecycleService { } - - public boolean checkState(String string){ Log.d("state", String.valueOf(splitString(string)[4].equals("An"))); return splitString(string)[4].equals("An"); diff --git a/app/src/main/java/com/example/ueberwachungssystem/MainActivity.java b/app/src/main/java/com/example/ueberwachungssystem/MainActivity.java index f28616e..6871fca 100644 --- a/app/src/main/java/com/example/ueberwachungssystem/MainActivity.java +++ b/app/src/main/java/com/example/ueberwachungssystem/MainActivity.java @@ -34,28 +34,31 @@ public class MainActivity extends AppCompatActivity { ImageView inputImageView; ImageView outputImageView; ToggleButton toggleButton; + int num=0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); - inputImageView = findViewById(R.id.inputImageView); outputImageView = findViewById(R.id.outputImageView); toggleButton = findViewById(R.id.toggleButton); + } + + @Override + protected void onResume() { + super.onResume(); PermissionHandler permissionHandler = new PermissionHandler(this); - permissionHandler.getPermissions(); + //permissionHandler.getPermissions(); if (permissionHandler.hasPermissions()) { - Intent serviceIntent = new Intent(this, DetectorService.class); bindService(serviceIntent, serviceConnection, Context.BIND_AUTO_CREATE); startService(serviceIntent); - toggleButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { @@ -63,7 +66,6 @@ public class MainActivity extends AppCompatActivity { { if (detectorService != null){ - detectorService.videoDetector.debugProcessing(inputImageView, outputImageView); detectorService.videoDetector.startDetection(); detectorService.audioDetector.startDetection(); @@ -89,9 +91,11 @@ public class MainActivity extends AppCompatActivity { } }); }else{ - Toast.makeText(getApplicationContext(),"Bitte Zugriffsrechte gewähren",Toast.LENGTH_SHORT).show(); + Toast.makeText(this,"Bitte Rechte geben", Toast.LENGTH_SHORT).show(); } + } + public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.options_menu, menu); return true; @@ -115,6 +119,11 @@ public class MainActivity extends AppCompatActivity { popUpClass.showPopupWindow(inputImageView); popUpClass.Impressum(); return true; + case R.id.Detection: + popUpClass = new PopUpClass(MainActivity.this); + popUpClass.showPopupWindow(inputImageView); + popUpClass.DetectionTotal(num); + return true; default: return super.onOptionsItemSelected(item); } @@ -125,15 +134,18 @@ public class MainActivity extends AppCompatActivity { public void onServiceConnected(ComponentName name, IBinder service) { DetectorService.ServiceBinder binder = (DetectorService.ServiceBinder) service; detectorService = binder.getBoundService(); + detectorService.videoDetector.debugProcessing(null, outputImageView); //inputImageView detectorService.setOnDetectionListener(new DetectorService.OnDetectionListener() { @Override public void onDetection(@NonNull StringBuffer stringBuffer) { Log.d("onDetection", stringBuffer.toString()); //Für oli hier Textview einbauen + num++; } }); } @Override - public void onServiceDisconnected(ComponentName name) {} + public void onServiceDisconnected(ComponentName name) { + } }; } \ No newline at end of file diff --git a/app/src/main/java/com/example/ueberwachungssystem/PermissionRequest.java b/app/src/main/java/com/example/ueberwachungssystem/PermissionRequest.java index 6c66539..e7a56c0 100644 --- a/app/src/main/java/com/example/ueberwachungssystem/PermissionRequest.java +++ b/app/src/main/java/com/example/ueberwachungssystem/PermissionRequest.java @@ -35,7 +35,7 @@ public class PermissionRequest extends AppCompatActivity{ handler.post(new Runnable() { @Override public void run() { - Toast.makeText(mainActivity.getApplicationContext(),"Es werden Rechte benötigt", Toast.LENGTH_LONG).show(); + Toast.makeText(mainActivity.getApplicationContext(),"Es werden Rechte benötigt", Toast.LENGTH_SHORT).show(); } }); } diff --git a/app/src/main/java/com/example/ueberwachungssystem/PopUpClass.java b/app/src/main/java/com/example/ueberwachungssystem/PopUpClass.java index 9b1990a..6ed8eb4 100644 --- a/app/src/main/java/com/example/ueberwachungssystem/PopUpClass.java +++ b/app/src/main/java/com/example/ueberwachungssystem/PopUpClass.java @@ -82,5 +82,7 @@ public class PopUpClass { public void Impressum(){ PopUpText.setText("Die Ueberwachungsapp wurde im Rahmen eines Praktikums der TH-Nürnberg programmiert"); } - + public void DetectionTotal(int num) { + PopUpText.setText("Total Detektions:" +num); + } } \ No newline at end of file diff --git a/app/src/main/res/menu/options_menu.xml b/app/src/main/res/menu/options_menu.xml index f2c05bf..ddb0237 100644 --- a/app/src/main/res/menu/options_menu.xml +++ b/app/src/main/res/menu/options_menu.xml @@ -4,6 +4,8 @@ android:title="Rechteverwaltung" /> + \ No newline at end of file