Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0423a56117 | ||
|
|
a13f4e295b | ||
|
|
c57d277dfb |
@@ -29,9 +29,6 @@
|
|||||||
<activity
|
<activity
|
||||||
android:name=".AccelerometerActivity"
|
android:name=".AccelerometerActivity"
|
||||||
android:exported="false" />
|
android:exported="false" />
|
||||||
<activity
|
|
||||||
android:name=".VideoPreviewActivity"
|
|
||||||
android:exported="false" />
|
|
||||||
<activity
|
<activity
|
||||||
android:name=".MainActivity"
|
android:name=".MainActivity"
|
||||||
android:exported="true">
|
android:exported="true">
|
||||||
|
|||||||
@@ -92,7 +92,7 @@ public class AccelerometerActivity extends AppCompatActivity implements SensorEv
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
mAccelerometerViewModel.getAccelerometerAlarmDetected().observe(this, new Observer<Boolean>() {
|
mAccelerometerViewModel.getMovementDetectedValue().observe(this, new Observer<Boolean>() {
|
||||||
@Override
|
@Override
|
||||||
public void onChanged(Boolean aBoolean) {
|
public void onChanged(Boolean aBoolean) {
|
||||||
if (aBoolean) {
|
if (aBoolean) {
|
||||||
|
|||||||
@@ -27,7 +27,6 @@ public class MainActivity extends AppCompatActivity {
|
|||||||
private Button audiodetectionAndAccelerometerButton;
|
private Button audiodetectionAndAccelerometerButton;
|
||||||
private Button videodetectionAndAccelerometerButton;
|
private Button videodetectionAndAccelerometerButton;
|
||||||
private Button connectionButton;
|
private Button connectionButton;
|
||||||
private Button prewview_kamera;
|
|
||||||
private MainActivityViewModel mMainActivityViewModel;
|
private MainActivityViewModel mMainActivityViewModel;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -41,7 +40,6 @@ public class MainActivity extends AppCompatActivity {
|
|||||||
audiodetectionAndAccelerometerButton = (Button) findViewById(R.id.audiodetectionAndAccelerometerButton);
|
audiodetectionAndAccelerometerButton = (Button) findViewById(R.id.audiodetectionAndAccelerometerButton);
|
||||||
videodetectionAndAccelerometerButton = (Button) findViewById(R.id.videodetectionAndAccelerometerButton);
|
videodetectionAndAccelerometerButton = (Button) findViewById(R.id.videodetectionAndAccelerometerButton);
|
||||||
connectionButton = (Button) findViewById(R.id.connectionButton);
|
connectionButton = (Button) findViewById(R.id.connectionButton);
|
||||||
prewview_kamera = (Button) findViewById(R.id.preview_kamera);
|
|
||||||
|
|
||||||
RecyclerView deviceListRecyclerView = findViewById(R.id.deviceListRecyclerView);
|
RecyclerView deviceListRecyclerView = findViewById(R.id.deviceListRecyclerView);
|
||||||
deviceListRecyclerView.setLayoutManager(new LinearLayoutManager(this));
|
deviceListRecyclerView.setLayoutManager(new LinearLayoutManager(this));
|
||||||
@@ -86,17 +84,6 @@ public class MainActivity extends AppCompatActivity {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
prewview_kamera.setOnClickListener(new View.OnClickListener() {
|
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
|
||||||
if (mMainActivityViewModel.isCameraAccessAllowed(MainActivity.this)) {
|
|
||||||
openVideoPrewvoewActivity();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
mMainActivityViewModel.accessRequestCamera(MainActivity.this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
audiodetectionButton.setOnClickListener(new View.OnClickListener() {
|
audiodetectionButton.setOnClickListener(new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
@@ -144,10 +131,6 @@ public class MainActivity extends AppCompatActivity {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
public void openVideoPrewvoewActivity() {
|
|
||||||
Intent intent = new Intent(this, VideoPreviewActivity.class);
|
|
||||||
startActivity(intent);
|
|
||||||
}
|
|
||||||
public void openAudiodetectionActivity(){
|
public void openAudiodetectionActivity(){
|
||||||
Intent intent = new Intent(this, AudiodetectionActivity.class);
|
Intent intent = new Intent(this, AudiodetectionActivity.class);
|
||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
|
|||||||
@@ -1,61 +0,0 @@
|
|||||||
package com.example.greenwatch;
|
|
||||||
|
|
||||||
import android.os.Bundle;
|
|
||||||
import android.util.Size;
|
|
||||||
import android.widget.Button;
|
|
||||||
|
|
||||||
import androidx.appcompat.app.AppCompatActivity;
|
|
||||||
import androidx.camera.core.CameraSelector;
|
|
||||||
import androidx.camera.core.ImageAnalysis;
|
|
||||||
import androidx.camera.core.ImageProxy;
|
|
||||||
import androidx.camera.core.Preview;
|
|
||||||
import androidx.camera.lifecycle.ProcessCameraProvider;
|
|
||||||
import androidx.camera.view.PreviewView;
|
|
||||||
import androidx.core.content.ContextCompat;
|
|
||||||
import androidx.lifecycle.LifecycleOwner;
|
|
||||||
|
|
||||||
import com.google.common.util.concurrent.ListenableFuture;
|
|
||||||
|
|
||||||
import java.util.concurrent.ExecutionException;
|
|
||||||
|
|
||||||
public class VideoPreviewActivity extends AppCompatActivity {
|
|
||||||
|
|
||||||
private Button backToMainActivity;
|
|
||||||
private PreviewView previewView;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
|
||||||
super.onCreate(savedInstanceState);
|
|
||||||
setContentView(R.layout.activity_preview_kamera);
|
|
||||||
|
|
||||||
backToMainActivity = (Button) findViewById(R.id.videodetectorBackToMainActivity);
|
|
||||||
previewView = findViewById(R.id.previewView);
|
|
||||||
|
|
||||||
backToMainActivity.setOnClickListener(v -> finish());
|
|
||||||
|
|
||||||
|
|
||||||
final ListenableFuture<ProcessCameraProvider> cameraProviderFuture = ProcessCameraProvider.getInstance(this);
|
|
||||||
cameraProviderFuture.addListener(() -> {
|
|
||||||
try {
|
|
||||||
bindImageAnalysis(cameraProviderFuture.get());
|
|
||||||
} catch (ExecutionException | InterruptedException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}, ContextCompat.getMainExecutor(this));
|
|
||||||
}
|
|
||||||
|
|
||||||
private void bindImageAnalysis(ProcessCameraProvider cameraProvider) {
|
|
||||||
ImageAnalysis.Builder builder = new ImageAnalysis.Builder();
|
|
||||||
builder.setTargetResolution(new Size(640, 480));
|
|
||||||
builder.setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST);
|
|
||||||
ImageAnalysis imageAnalysis = builder.build();
|
|
||||||
imageAnalysis.setAnalyzer(
|
|
||||||
ContextCompat.getMainExecutor(this),
|
|
||||||
ImageProxy::close);
|
|
||||||
|
|
||||||
Preview preview = new Preview.Builder().build();
|
|
||||||
CameraSelector cameraSelector = new CameraSelector.Builder().requireLensFacing(CameraSelector.LENS_FACING_BACK).build();
|
|
||||||
preview.setSurfaceProvider(previewView.getSurfaceProvider());
|
|
||||||
cameraProvider.bindToLifecycle((LifecycleOwner) this, cameraSelector, imageAnalysis, preview);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,5 +1,7 @@
|
|||||||
package com.example.greenwatch.communication;
|
package com.example.greenwatch.communication;
|
||||||
|
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
import com.example.greenwatch.repositories.DeviceRepository;
|
import com.example.greenwatch.repositories.DeviceRepository;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@@ -56,23 +58,6 @@ public class WiFiCommunication {
|
|||||||
this.isNewMessage = isNewMessage;
|
this.isNewMessage = isNewMessage;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getLocalIpAddress() {
|
|
||||||
try {
|
|
||||||
for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
|
|
||||||
NetworkInterface networkInterface = (NetworkInterface) ((Enumeration<?>) en).nextElement();
|
|
||||||
for (Enumeration<InetAddress> addresses = networkInterface.getInetAddresses(); addresses.hasMoreElements();) {
|
|
||||||
InetAddress inetAddress = addresses.nextElement();
|
|
||||||
if (!inetAddress.isLoopbackAddress() && inetAddress instanceof Inet4Address) {
|
|
||||||
return inetAddress.getHostAddress();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (SocketException ex) {
|
|
||||||
ex.printStackTrace();
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void stopCommunication() {
|
public void stopCommunication() {
|
||||||
running = false;
|
running = false;
|
||||||
socket.close();
|
socket.close();
|
||||||
@@ -89,7 +74,7 @@ public class WiFiCommunication {
|
|||||||
{
|
{
|
||||||
isNewMessage = false;
|
isNewMessage = false;
|
||||||
//todo: adapt send String
|
//todo: adapt send String
|
||||||
String txString = getLocalIpAddress() + " sends. #" + tmpCnt++ + sendMessage;
|
String txString = sendMessage;
|
||||||
byte[] txBuffer = txString.getBytes();
|
byte[] txBuffer = txString.getBytes();
|
||||||
|
|
||||||
DatagramPacket txPacket = new DatagramPacket(txBuffer, txBuffer.length, address, port);
|
DatagramPacket txPacket = new DatagramPacket(txBuffer, txBuffer.length, address, port);
|
||||||
|
|||||||
@@ -1,14 +1,21 @@
|
|||||||
package com.example.greenwatch.repositories;
|
package com.example.greenwatch.repositories;
|
||||||
|
|
||||||
|
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
import androidx.lifecycle.MutableLiveData;
|
import androidx.lifecycle.MutableLiveData;
|
||||||
|
|
||||||
import com.example.greenwatch.models.Device;
|
import com.example.greenwatch.models.Device;
|
||||||
import com.example.greenwatch.communication.WiFiCommunication;
|
import com.example.greenwatch.communication.WiFiCommunication;
|
||||||
|
|
||||||
|
import java.net.Inet4Address;
|
||||||
|
import java.net.InetAddress;
|
||||||
|
import java.net.NetworkInterface;
|
||||||
|
import java.net.SocketException;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
import java.util.Enumeration;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
@@ -76,11 +83,12 @@ public class DeviceRepository {
|
|||||||
|
|
||||||
public void getNewReceivedMessage(String newMessage) {
|
public void getNewReceivedMessage(String newMessage) {
|
||||||
String[] messageString = messageStringSplitter(newMessage);
|
String[] messageString = messageStringSplitter(newMessage);
|
||||||
String timeStamp = messageString[0];
|
if(messageString[0]=="1" && messageString.length == 7){
|
||||||
String deviceID = messageString[1];
|
String timeStamp = messageString[1];
|
||||||
boolean sensorStatus = convertSensorStatus(messageString[2]);
|
String deviceID = messageString[3];
|
||||||
String sensorType = messageString[3];
|
boolean sensorStatus = convertSensorStatus(messageString[4]);
|
||||||
int sensorMassage = Integer.valueOf(messageString[4]);
|
String sensorType = messageString[5];
|
||||||
|
int sensorMassage = Integer.valueOf(messageString[6]);
|
||||||
|
|
||||||
if (deviceID.equals(checkDeviceID(localDeviceUUID))) {
|
if (deviceID.equals(checkDeviceID(localDeviceUUID))) {
|
||||||
return;
|
return;
|
||||||
@@ -93,14 +101,20 @@ public class DeviceRepository {
|
|||||||
updateDevice(deviceID, timeStamp, sensorStatus, sensorType, sensorMassage);
|
updateDevice(deviceID, timeStamp, sensorStatus, sensorType, sensorMassage);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private String messageStringBuilder(String deviceID) {
|
private String messageStringBuilder(String deviceID) {
|
||||||
StringBuilder message = new StringBuilder();
|
StringBuilder message = new StringBuilder();
|
||||||
Device device = connectedDevicesList.get(deviceID);
|
Device device = connectedDevicesList.get(deviceID);
|
||||||
if(device != null) {
|
if(device != null) {
|
||||||
message.append(device.getTimeStamp())
|
message.append("1")
|
||||||
.append(delimiter)
|
.append(delimiter)
|
||||||
.append(device.getDeviceID())
|
.append(device.getTimeStamp())
|
||||||
|
.append(delimiter)
|
||||||
|
.append("Gruppe3")
|
||||||
|
.append(delimiter)
|
||||||
|
//.append(device.getDeviceID())
|
||||||
|
.append(getLocalIpAddress(deviceID))
|
||||||
.append(delimiter)
|
.append(delimiter)
|
||||||
.append(device.getSensorStatus())
|
.append(device.getSensorStatus())
|
||||||
.append(delimiter)
|
.append(delimiter)
|
||||||
@@ -117,6 +131,10 @@ public class DeviceRepository {
|
|||||||
.append(delimiter)
|
.append(delimiter)
|
||||||
.append("")
|
.append("")
|
||||||
.append(delimiter)
|
.append(delimiter)
|
||||||
|
.append("")
|
||||||
|
.append(delimiter)
|
||||||
|
.append("")
|
||||||
|
.append(delimiter)
|
||||||
.append("");
|
.append("");
|
||||||
}
|
}
|
||||||
return message.toString();
|
return message.toString();
|
||||||
@@ -319,4 +337,25 @@ public class DeviceRepository {
|
|||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getLocalIpAddress(String deviceID) {
|
||||||
|
String checkedDeviceID = checkDeviceID(deviceID);
|
||||||
|
Device device = connectedDevicesList.get(checkedDeviceID);
|
||||||
|
if(device != null){
|
||||||
|
try {
|
||||||
|
for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
|
||||||
|
NetworkInterface networkInterface = (NetworkInterface) ((Enumeration<?>) en).nextElement();
|
||||||
|
for (Enumeration<InetAddress> addresses = networkInterface.getInetAddresses(); addresses.hasMoreElements();) {
|
||||||
|
InetAddress inetAddress = addresses.nextElement();
|
||||||
|
if (!inetAddress.isLoopbackAddress() && inetAddress instanceof Inet4Address) {
|
||||||
|
return inetAddress.getHostAddress();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (SocketException ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,59 +6,86 @@ import androidx.lifecycle.ViewModel;
|
|||||||
|
|
||||||
import com.example.greenwatch.models.Device;
|
import com.example.greenwatch.models.Device;
|
||||||
import com.example.greenwatch.repositories.DeviceRepository;
|
import com.example.greenwatch.repositories.DeviceRepository;
|
||||||
import com.example.greenwatch.sensors.AccelerometerSensor;
|
|
||||||
|
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class AccelerometerViewModel extends ViewModel implements ViewModelInterface {
|
public class AccelerometerViewModel extends ViewModel implements ViewModelInterface {
|
||||||
|
|
||||||
private MutableLiveData<List<Device>> mDeviceList;
|
private MutableLiveData<List<Device>> mDeviceList;
|
||||||
private MutableLiveData<Boolean> mAccelerometerAlarmDetected;
|
private MutableLiveData<Boolean> mMovementDetected = new MutableLiveData<>();
|
||||||
private MutableLiveData<List<Device>> mAlarmHistoryList;
|
private MutableLiveData<List<Device>> mAlarmHistoryList;
|
||||||
private MutableLiveData<Boolean> mStartAlarmRecording;
|
private MutableLiveData<Boolean> mStartAlarmRecording;
|
||||||
private AccelerometerSensor mAccelerometerSensor;
|
|
||||||
private DeviceRepository mDeviceRepository;
|
private DeviceRepository mDeviceRepository;
|
||||||
|
private ArrayList<Float> Gesamt_be;
|
||||||
|
int arraySize = 500;
|
||||||
|
int functionCallCount;
|
||||||
|
float meanValue;
|
||||||
|
float offsetValue;
|
||||||
|
float thresholdValue;
|
||||||
|
boolean startMeasuring;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void init() {
|
public void init() {
|
||||||
if (mDeviceRepository == null) {
|
|
||||||
mDeviceRepository = DeviceRepository.getInstance();
|
|
||||||
}
|
|
||||||
if (mAccelerometerSensor == null) {
|
|
||||||
mAccelerometerSensor = AccelerometerSensor.getInstance();
|
|
||||||
}
|
|
||||||
if (mDeviceList == null) {
|
if (mDeviceList == null) {
|
||||||
|
mDeviceRepository = DeviceRepository.getInstance();
|
||||||
mDeviceList = mDeviceRepository.getConnectedDeviceList();
|
mDeviceList = mDeviceRepository.getConnectedDeviceList();
|
||||||
}
|
|
||||||
if (mAlarmHistoryList == null) {
|
|
||||||
mAlarmHistoryList = mDeviceRepository.getAlarmHistoryDeviceList();
|
mAlarmHistoryList = mDeviceRepository.getAlarmHistoryDeviceList();
|
||||||
}
|
|
||||||
if (mStartAlarmRecording == null) {
|
|
||||||
mStartAlarmRecording = mDeviceRepository.getStartAlarmRecording();
|
mStartAlarmRecording = mDeviceRepository.getStartAlarmRecording();
|
||||||
}
|
}
|
||||||
if (mAccelerometerAlarmDetected == null) {
|
initGesamtBE();
|
||||||
mAccelerometerAlarmDetected = mAccelerometerSensor.getAccelerometerAlarmDetected();
|
mMovementDetected.setValue(false);
|
||||||
|
functionCallCount = 0;
|
||||||
|
meanValue = 0f;
|
||||||
|
offsetValue = 0.1f;
|
||||||
|
thresholdValue = 0.15f;
|
||||||
|
startMeasuring = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void initGesamtBE() {
|
||||||
|
Gesamt_be = new ArrayList<>(arraySize);
|
||||||
|
for (int i = 0; i < arraySize; i++) {
|
||||||
|
Gesamt_be.add(0f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addValueToGesamtBE(float newValue) {
|
public void addValueToGesamtBE(float newValue) {
|
||||||
mAccelerometerSensor.addValueToGesamtBE(newValue);
|
if (Gesamt_be.size() == arraySize) {
|
||||||
|
Gesamt_be.remove(Gesamt_be.size() -1);
|
||||||
|
}
|
||||||
|
Gesamt_be.add(0, newValue);
|
||||||
|
functionCallCount++;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void meanValueCalculation() {
|
public void meanValueCalculation() {
|
||||||
mAccelerometerSensor.meanValueCalculation();
|
for (float element : Gesamt_be) {
|
||||||
|
meanValue += Math.abs(element);
|
||||||
|
}
|
||||||
|
meanValue = meanValue/arraySize;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void calibrateAccelerometerSensor() {
|
public void calibrateAccelerometerSensor() {
|
||||||
mAccelerometerSensor.calibrateAccelerometerSensor();
|
if (functionCallCount <= arraySize) {
|
||||||
|
offsetValue = meanValue;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
startMeasuring = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void checkAlarmCondition() {
|
public void checkAlarmCondition() {
|
||||||
mAccelerometerSensor.checkAlarmCondition();
|
if (meanValue > (thresholdValue + offsetValue) && startMeasuring && !mMovementDetected.getValue()) {
|
||||||
|
mMovementDetected.setValue(true);
|
||||||
|
}
|
||||||
|
else if (meanValue < (thresholdValue + offsetValue) && mMovementDetected.getValue()){
|
||||||
|
mMovementDetected.setValue(false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public LiveData<Boolean> getAccelerometerAlarmDetected() {
|
public LiveData<Boolean> getMovementDetectedValue() {
|
||||||
return mAccelerometerAlarmDetected;
|
return mMovementDetected;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -8,12 +8,6 @@
|
|||||||
android:padding="10dp"
|
android:padding="10dp"
|
||||||
tools:context=".MainActivity">
|
tools:context=".MainActivity">
|
||||||
|
|
||||||
<Button
|
|
||||||
android:id="@+id/preview_kamera"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:text="PrewView Kamera" />
|
|
||||||
|
|
||||||
<androidx.recyclerview.widget.RecyclerView
|
<androidx.recyclerview.widget.RecyclerView
|
||||||
android:id="@+id/alarmHistoryListRecyclerView"
|
android:id="@+id/alarmHistoryListRecyclerView"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
@@ -28,7 +22,6 @@
|
|||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:layout_weight="3"
|
android:layout_weight="3"
|
||||||
tools:listitem="@layout/device_item">
|
tools:listitem="@layout/device_item">
|
||||||
|
|
||||||
</androidx.recyclerview.widget.RecyclerView>
|
</androidx.recyclerview.widget.RecyclerView>
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
|
|||||||
@@ -1,31 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
tools:context="">
|
|
||||||
|
|
||||||
<Button
|
|
||||||
android:id="@+id/videodetectorBackToMainActivity"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:text="Back to MainActivity">
|
|
||||||
</Button>
|
|
||||||
|
|
||||||
<FrameLayout
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:id="@+id/erklaerung">
|
|
||||||
|
|
||||||
<androidx.camera.view.PreviewView
|
|
||||||
android:id="@+id/previewView"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent"/>
|
|
||||||
</FrameLayout>
|
|
||||||
<LinearLayout
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:orientation="vertical"/>
|
|
||||||
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
|
||||||
Reference in New Issue
Block a user