import android.os.Build; | import android.os.Build; | ||||
import android.os.CountDownTimer; | import android.os.CountDownTimer; | ||||
import android.util.Log; | import android.util.Log; | ||||
import androidx.annotation.NonNull; | |||||
import androidx.annotation.RequiresApi; | import androidx.annotation.RequiresApi; | ||||
import androidx.fragment.app.FragmentActivity; | import androidx.fragment.app.FragmentActivity; | ||||
import com.google.android.gms.maps.model.BitmapDescriptorFactory; | import com.google.android.gms.maps.model.BitmapDescriptorFactory; | ||||
import com.google.android.gms.maps.model.LatLng; | import com.google.android.gms.maps.model.LatLng; | ||||
import com.google.android.gms.maps.model.MarkerOptions; | import com.google.android.gms.maps.model.MarkerOptions; | ||||
import com.google.android.gms.tasks.OnCompleteListener; | |||||
import com.google.android.gms.tasks.Task; | |||||
import com.google.firebase.database.DataSnapshot; | |||||
import com.google.firebase.database.DatabaseReference; | |||||
import com.google.firebase.database.FirebaseDatabase; | |||||
import de.edotzlaff.detection.detektion.Detektionssignal; | import de.edotzlaff.detection.detektion.Detektionssignal; | ||||
import de.edotzlaff.detection.detektion.Epizentrum; | import de.edotzlaff.detection.detektion.Epizentrum; | ||||
import de.edotzlaff.detection.detektion.Erdbeben; | import de.edotzlaff.detection.detektion.Erdbeben; | ||||
import java.time.LocalDateTime; | |||||
import java.time.format.DateTimeFormatter; | |||||
import java.util.ArrayList; | import java.util.ArrayList; | ||||
import java.util.Objects; | import java.util.Objects; | ||||
private GoogleMap mMap; | private GoogleMap mMap; | ||||
private static final String TAGEPIZENTRUM = "Epizentrum"; | private static final String TAGEPIZENTRUM = "Epizentrum"; | ||||
private DatabaseReference mDatenbank; | |||||
@Override | @Override | ||||
protected void onCreate(Bundle savedInstanceState) { | protected void onCreate(Bundle savedInstanceState) { | ||||
//TODO Jan | //TODO Jan | ||||
@RequiresApi(api = Build.VERSION_CODES.O) | @RequiresApi(api = Build.VERSION_CODES.O) | ||||
/* public Epizentrum ermittleEpizentrum(DataSnapshot data) | |||||
public Epizentrum ermittleEpizentrum(DataSnapshot data) | |||||
{ | { | ||||
Erdbeben erdbeben = new Erdbeben(); | Erdbeben erdbeben = new Erdbeben(); | ||||
erdbeben.addDetektionssignalList(mapToDetektionssignale(data)); | erdbeben.addDetektionssignalList(mapToDetektionssignale(data)); | ||||
Log.i(TAGEPIZENTRUM, "Epizentrum konnte ermittelt werden, Koordinaten: " + epizentrum.getKoordinaten().getX() + " " + epizentrum.getKoordinaten().getY()); | Log.i(TAGEPIZENTRUM, "Epizentrum konnte ermittelt werden, Koordinaten: " + epizentrum.getKoordinaten().getX() + " " + epizentrum.getKoordinaten().getY()); | ||||
} | } | ||||
return epizentrum; | return epizentrum; | ||||
} | |||||
//Aufruf der DB | |||||
public void getDataBaseValuesNoListener() | |||||
{ | |||||
mDatenbank = FirebaseDatabase.getInstance().getReference().child("overviewdetection"); | |||||
mDatenbank.get().addOnCompleteListener(new OnCompleteListener<DataSnapshot>() { | |||||
@RequiresApi(api = Build.VERSION_CODES.O) | |||||
@Override | |||||
public void onComplete(@NonNull Task<DataSnapshot> task) { | |||||
if (!task.isSuccessful()) { | |||||
System.out.println("Datenbank Fehler in getDataBaseValuesNoListener"); | |||||
} | |||||
else { | |||||
mapToDetektionssignale(task.getResult()); | |||||
doSomething(task.getResult()); | |||||
} | |||||
} | |||||
}); | |||||
} | |||||
public void doSomething(DataSnapshot data) | |||||
{ | |||||
} | } | ||||
*/ | |||||
/* public ArrayList<Detektionssignal> mapToDetektionssignale(DataSnapshot data) | |||||
@RequiresApi(api = Build.VERSION_CODES.O) | |||||
public ArrayList<Detektionssignal> mapToDetektionssignale(DataSnapshot data) | |||||
{ | { | ||||
ArrayList<Detektionssignal> detektionssignale = new ArrayList<>(); | ArrayList<Detektionssignal> detektionssignale = new ArrayList<>(); | ||||
for(data.child("overviewnodes").getChildernKey) | |||||
for(int i=1; i<=3; i++) | |||||
{ | { | ||||
Detektionssignal detektionssignal = new Detektionssignal(); | Detektionssignal detektionssignal = new Detektionssignal(); | ||||
detektionssignal.setAnkunftsZeit(); | |||||
detektionssignal.setDeviceId(); | |||||
detektionssignal.setKoordinaten(data.child("overviewnodes").child("IDG" + f).child("d_breitengrad").getValue().toString(), | |||||
data.child("overviewnodes").child("IDG" + f).child("e_laengengrad").getValue().toString()); | |||||
detektionssignal.setGeschwErdbeben(); | |||||
//LocalDateTime als LocalDateTime | |||||
String localdatetimeString = data.child("IDG" + i).child("b_localdatetime").getValue().toString(); | |||||
DateTimeFormatter formatter = DateTimeFormatter.ISO_DATE_TIME; | |||||
LocalDateTime localdatetime = LocalDateTime.parse(localdatetimeString, formatter); | |||||
detektionssignal.setAnkunftsZeit(localdatetime); | |||||
//ID als String | |||||
detektionssignal.setDeviceId(data.child("IDG" + i).child("a_androidid").getValue().toString()); | |||||
//Koordinaten als??? | |||||
String breitengradString = data.child("IDG" + i).child("d_breitengrad").getValue().toString(); | |||||
String laengengradString = data.child("IDG" + i).child("e_laengengrad").getValue().toString(); | |||||
double breitengrad = Double.parseDouble(breitengradString); | |||||
double laengengrad = Double.parseDouble(laengengradString); | |||||
//TODO @Jan In welchem Datenformat muss ich breitengrad und laengengrad hier einfügen? Außerdem welche Einheit? m/s oder km/s? | |||||
//detektionssignal.setKoordinaten(breitengrad, laengengrad); | |||||
//Wellengeschwindigkeit als int | |||||
String welle = data.child("IDG" + i).child("w_wellengeschwindigkeit").getValue().toString(); | |||||
int wellengeschwindigkeit = Integer.parseInt(welle); | |||||
detektionssignal.setGeschwErdbeben(wellengeschwindigkeit); | |||||
//Detektionssignal | |||||
detektionssignale.add(detektionssignal); | detektionssignale.add(detektionssignal); | ||||
} | } | ||||
return detektionssignale; | return detektionssignale; | ||||
} | } | ||||
*/ | |||||
//################################################################## ^^^^ Calculate Epicenter ^^^^ ####################################################################### | //################################################################## ^^^^ Calculate Epicenter ^^^^ ####################################################################### | ||||
//########################################################################################################################################################################## | //########################################################################################################################################################################## |
String laengengrad; | String laengengrad; | ||||
String timestamp; | String timestamp; | ||||
String ampltiude; | String ampltiude; | ||||
String welle; | |||||
int emptyIDG =0; | int emptyIDG =0; | ||||
for (int i=1; i<=data.getChildrenCount(); i++) | for (int i=1; i<=data.getChildrenCount(); i++) | ||||
laengengrad = data.child("IDG" + i).child("e_laengengrad").getValue().toString(); | laengengrad = data.child("IDG" + i).child("e_laengengrad").getValue().toString(); | ||||
timestamp = data.child("IDG" + i).child("h_timestamp").getValue().toString(); | timestamp = data.child("IDG" + i).child("h_timestamp").getValue().toString(); | ||||
ampltiude = data.child("IDG" + i).child("i_amplitude").getValue().toString(); | ampltiude = data.child("IDG" + i).child("i_amplitude").getValue().toString(); | ||||
welle = data.child("IDG" + i).child("w_wellengeschwindigkeit").getValue().toString(); | |||||
if(androidid.isEmpty() && localedatetime.isEmpty() && breitengrad.isEmpty() && laengengrad.isEmpty() && timestamp.isEmpty() && ampltiude.isEmpty()) | |||||
if(androidid.isEmpty() && localedatetime.isEmpty() && breitengrad.isEmpty() && laengengrad.isEmpty() && timestamp.isEmpty() && ampltiude.isEmpty() && welle.isEmpty()) | |||||
{ | { | ||||
emptyIDG++; | emptyIDG++; | ||||
}else{ | }else{ | ||||
mDatenbank.child("IDG" + k).child("e_laengengrad").setValue(""); | mDatenbank.child("IDG" + k).child("e_laengengrad").setValue(""); | ||||
mDatenbank.child("IDG" + k).child("h_timestamp").setValue(""); | mDatenbank.child("IDG" + k).child("h_timestamp").setValue(""); | ||||
mDatenbank.child("IDG" + k).child("i_amplitude").setValue(""); | mDatenbank.child("IDG" + k).child("i_amplitude").setValue(""); | ||||
mDatenbank.child("IDG" + k).child("w_wellengeschwindigkeit").setValue(""); | |||||
} | } | ||||
//###### Bei Vibration der APP #### | //###### Bei Vibration der APP #### | ||||
String laengengrad; | String laengengrad; | ||||
String timestamp; | String timestamp; | ||||
String ampltiude; | String ampltiude; | ||||
String welle; | |||||
androidid = data.child("IDG" + i).child("a_androidid").getValue().toString(); | androidid = data.child("IDG" + i).child("a_androidid").getValue().toString(); | ||||
localedatetime = data.child("IDG" + i).child("b_localdatetime").getValue().toString(); | localedatetime = data.child("IDG" + i).child("b_localdatetime").getValue().toString(); | ||||
breitengrad = data.child("IDG" + i).child("d_breitengrad").getValue().toString(); | breitengrad = data.child("IDG" + i).child("d_breitengrad").getValue().toString(); | ||||
laengengrad = data.child("IDG" + i).child("e_laengengrad").getValue().toString(); | laengengrad = data.child("IDG" + i).child("e_laengengrad").getValue().toString(); | ||||
timestamp = data.child("IDG" + i).child("h_timestamp").getValue().toString(); | timestamp = data.child("IDG" + i).child("h_timestamp").getValue().toString(); | ||||
ampltiude = data.child("IDG" + i).child("i_amplitude").getValue().toString(); | ampltiude = data.child("IDG" + i).child("i_amplitude").getValue().toString(); | ||||
welle = data.child("IDG" + i).child("w_wellengeschwindigkeit").getValue().toString(); | |||||
if(androidid.isEmpty() && localedatetime.isEmpty() && breitengrad.isEmpty() && laengengrad.isEmpty() && timestamp.isEmpty() && ampltiude.isEmpty()) | |||||
if(androidid.isEmpty() && localedatetime.isEmpty() && breitengrad.isEmpty() && laengengrad.isEmpty() && timestamp.isEmpty() && ampltiude.isEmpty() && welle.isEmpty()) | |||||
{ | { | ||||
return true; | return true; | ||||
}else | }else | ||||
mDatenbank.child("IDG" + k).child("e_laengengrad").setValue(currentLocation.getLongitude()); | mDatenbank.child("IDG" + k).child("e_laengengrad").setValue(currentLocation.getLongitude()); | ||||
mDatenbank.child("IDG" + k).child("h_timestamp").setValue(Calendar.getInstance().getTimeInMillis()); | mDatenbank.child("IDG" + k).child("h_timestamp").setValue(Calendar.getInstance().getTimeInMillis()); | ||||
mDatenbank.child("IDG" + k).child("i_amplitude").setValue(1000); | mDatenbank.child("IDG" + k).child("i_amplitude").setValue(1000); | ||||
mDatenbank.child("IDG" + k).child("w_wellengeschwindigkeit").setValue(4500); | |||||
} | } | ||||
//###### Bei Eintragungen in der DB #### | //###### Bei Eintragungen in der DB #### | ||||
//Bei genau 3 Einträgen: | //Bei genau 3 Einträgen: | ||||
if(takenIDG >= 3 && allowCalculation) | if(takenIDG >= 3 && allowCalculation) | ||||
{ | { | ||||
Toast.makeText(MainActivity.this, "Es wurden 3 Geräteeinträge registriert!", Toast.LENGTH_SHORT).show(); | |||||
Toast.makeText(MainActivity.this, "3 Geräte regisrtiert - Berechnung möglich!", Toast.LENGTH_SHORT).show(); | |||||
allowCalculation = false; | allowCalculation = false; | ||||
System.out.println("Gebe an Berechnung raus"); | |||||
//An Jans Code anknüpfen | |||||
Button btnEarthquake = (Button) findViewById(R.id.btnEarthquakeLocation); | |||||
btnEarthquake.setEnabled(true); | |||||
} | } | ||||
} | } | ||||
String laengengrad = data.child("IDG" + i).child("e_laengengrad").getValue().toString(); | String laengengrad = data.child("IDG" + i).child("e_laengengrad").getValue().toString(); | ||||
String timestamp = data.child("IDG" + i).child("h_timestamp").getValue().toString(); | String timestamp = data.child("IDG" + i).child("h_timestamp").getValue().toString(); | ||||
String ampltiude = data.child("IDG" + i).child("i_amplitude").getValue().toString(); | String ampltiude = data.child("IDG" + i).child("i_amplitude").getValue().toString(); | ||||
String welle = data.child("IDG" + i).child("w_wellengeschwindigkeit").getValue().toString(); | |||||
if(!androidid.isEmpty() && !localedatetime.isEmpty() && !breitengrad.isEmpty() && !laengengrad.isEmpty() && !timestamp.isEmpty() && !ampltiude.isEmpty()) | |||||
if(!androidid.isEmpty() && !localedatetime.isEmpty() && !breitengrad.isEmpty() && !laengengrad.isEmpty() && !timestamp.isEmpty() && !ampltiude.isEmpty() && !welle.isEmpty()) | |||||
{ | { | ||||
return true; | return true; | ||||
}else | }else | ||||
public void resetDisplayText() | public void resetDisplayText() | ||||
{ | { | ||||
Button btnEarthquake = (Button) findViewById(R.id.btnEarthquakeLocation); | |||||
btnEarthquake.setEnabled(false); | |||||
TextView txtDevice1 = (TextView) findViewById(R.id.txtdevice1); | TextView txtDevice1 = (TextView) findViewById(R.id.txtdevice1); | ||||
TextView txtDevice2 = (TextView) findViewById(R.id.txtdevice2); | TextView txtDevice2 = (TextView) findViewById(R.id.txtdevice2); | ||||
TextView txtDevice3 = (TextView) findViewById(R.id.txtdevice3); | TextView txtDevice3 = (TextView) findViewById(R.id.txtdevice3); | ||||
txtDevice3.setText(""); | txtDevice3.setText(""); | ||||
txtDevice4.setText(""); | txtDevice4.setText(""); | ||||
} | } | ||||
public String getandroidid () | public String getandroidid () | ||||
{ | { | ||||
return Settings.Secure.getString(this.getContentResolver(), Settings.Secure.ANDROID_ID); | return Settings.Secure.getString(this.getContentResolver(), Settings.Secure.ANDROID_ID); | ||||
private void init() { | private void init() { | ||||
Button btnEarthquake = (Button) findViewById(R.id.btnEarthquakeLocation); | Button btnEarthquake = (Button) findViewById(R.id.btnEarthquakeLocation); | ||||
btnEarthquake.setEnabled(false); | |||||
btnEarthquake.setOnClickListener(new View.OnClickListener() { | btnEarthquake.setOnClickListener(new View.OnClickListener() { | ||||
@Override | @Override | ||||
public void onClick(View v) { | public void onClick(View v) { |