Advertisement
Guest User

Untitled

a guest
Jul 19th, 2018
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.88 KB | None | 0 0
  1. package de.fhluebeck.swt.s8b.bacardi;
  2.  
  3. import android.content.Intent;
  4. import android.location.Location;
  5. import android.net.Uri;
  6. import android.os.Bundle;
  7. import android.os.Environment;
  8. import android.support.annotation.NonNull;
  9. import android.support.v7.app.AppCompatActivity;
  10. import android.support.v7.widget.Toolbar;
  11. import android.util.Log;
  12. import android.view.View;
  13. import android.widget.AdapterView;
  14. import android.widget.ArrayAdapter;
  15. import android.widget.Button;
  16. import android.widget.HeaderViewListAdapter;
  17. import android.widget.ListAdapter;
  18. import android.widget.ListView;
  19.  
  20. import com.aditya.filebrowser.Constants;
  21. import com.aditya.filebrowser.FileChooser;
  22. import com.google.firebase.auth.FirebaseAuth;
  23. import com.google.firebase.database.DataSnapshot;
  24. import com.google.firebase.database.DatabaseError;
  25. import com.google.firebase.database.DatabaseReference;
  26. import com.google.firebase.database.FirebaseDatabase;
  27. import com.google.firebase.database.ValueEventListener;
  28. import com.mikepenz.materialdrawer.AccountHeader;
  29. import com.mikepenz.materialdrawer.Drawer;
  30.  
  31. import org.w3c.dom.Document;
  32. import org.w3c.dom.Element;
  33. import org.w3c.dom.NamedNodeMap;
  34. import org.w3c.dom.Node;
  35. import org.w3c.dom.NodeList;
  36. import org.xml.sax.SAXException;
  37. import org.xmlpull.v1.XmlPullParserFactory;
  38.  
  39. import java.io.File;
  40. import java.io.FileInputStream;
  41. import java.io.IOException;
  42. import java.text.DecimalFormat;
  43. import java.text.ParseException;
  44. import java.text.SimpleDateFormat;
  45. import java.util.ArrayList;
  46. import java.util.Date;
  47. import java.util.List;
  48.  
  49. import javax.xml.parsers.DocumentBuilder;
  50. import javax.xml.parsers.DocumentBuilderFactory;
  51. import javax.xml.parsers.ParserConfigurationException;
  52.  
  53. import de.fhluebeck.swt.s8b.bacardi.helper.CarChosen;
  54. import de.fhluebeck.swt.s8b.bacardi.helper.Menu;
  55. import de.fhluebeck.swt.s8b.bacardi.helper.MyCallback;
  56. import de.fhluebeck.swt.s8b.bacardi.helper.firebaseObjects.Auto;
  57. import de.fhluebeck.swt.s8b.bacardi.helper.firebaseObjects.Strecke;
  58. import de.fhluebeck.swt.s8b.bacardi.helper.firebaseObjects.Wegpunkt;
  59.  
  60. public class FahrtenbuchActivity extends AppCompatActivity {
  61.  
  62. private Menu m;
  63. private Toolbar toolbar;
  64. private AccountHeader header;
  65. private Drawer drawer;
  66. private ArrayList<String> listItems;
  67. private ArrayList<Location> locations;
  68. private ArrayAdapter<String> adapter;
  69. private ListView listview;
  70. private Location tempLoc;
  71. private DatabaseReference database;
  72. private ArrayList<Strecke> fahrten;
  73. private File file;
  74. private Uri uri;
  75. private String chosenCarID = "";
  76. private Auto chosenCar = new Auto();
  77. private String uid;
  78. private Double kilometer;
  79.  
  80.  
  81. public static final int GPX_REQUEST = 1337;
  82.  
  83. private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
  84.  
  85. @Override
  86. protected void onCreate(Bundle savedInstanceState) {
  87. super.onCreate(savedInstanceState);
  88. setContentView(R.layout.activity_fahrtenbuch);
  89.  
  90. Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
  91. setSupportActionBar(toolbar);
  92. //set the back arrow in the toolbar
  93. getSupportActionBar().setDisplayHomeAsUpEnabled(true);
  94.  
  95. m = new Menu(toolbar, savedInstanceState);
  96. header = m.getHeader(this).build();
  97. drawer = m.getDrawerBuilder(this, header).build();
  98. drawer.setSelection(Menu.getFahrtenbuch(), false);
  99. m.createMenu(this, drawer);
  100.  
  101. database = FirebaseDatabase.getInstance().getReference();
  102. uid = FirebaseAuth.getInstance().getUid();
  103.  
  104.  
  105.  
  106. CarChosen.getChosenCarID(new MyCallback() {
  107. @Override
  108. public void onCallback(String value) {
  109. if (value != null || !value.trim().equals("")) {
  110. chosenCarID = value;
  111. nextMethod();
  112. } else {
  113. Intent i = new Intent(FahrtenbuchActivity.this, OverviewActivity.class);
  114. finish();
  115. startActivity(i);
  116. }
  117. }
  118. @Override
  119. public void onCallback(Auto value) {
  120.  
  121. }
  122. });
  123.  
  124.  
  125. }
  126.  
  127. private void nextMethod() {
  128. CarChosen.getChosenCar(chosenCarID, new MyCallback() {
  129. @Override
  130. public void onCallback(String value) {
  131. }
  132.  
  133. @Override
  134. public void onCallback(Auto value) {
  135. if(value != null || value.getModel().trim().equals("")){
  136. chosenCar = value;
  137. nextMethod2();
  138. fahrten_anlegen();
  139.  
  140. }
  141.  
  142. }
  143. });
  144. }
  145.  
  146. private void nextMethod2() {
  147. listview = findViewById(R.id.timestamp_listview);
  148. listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
  149. @Override
  150. public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
  151. ArrayList<Location> wegpunkte = new ArrayList<Location>();
  152. System.out.println("fahrten:" + fahrten.size() + " listitems: " + listItems.size());
  153. for(Wegpunkt w : fahrten.get(position).getWegpunkte()){
  154. Location l = new Location("");
  155. l.setLatitude(w.getLat());
  156. l.setLongitude(w.getLng());
  157. l.setTime(w.getZeit());
  158. wegpunkte.add(l);
  159. }
  160. Intent i = new Intent(FahrtenbuchActivity.this, TrackDetailActivity.class);
  161. //TODO Lutti
  162. i.putParcelableArrayListExtra("Locations",wegpunkte);
  163. startActivity(i);
  164.  
  165. }
  166. });
  167. listItems = new ArrayList<String>();
  168. fahrten = new ArrayList<Strecke>();
  169. adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, listItems);
  170. setListAdapter(adapter);
  171.  
  172.  
  173. final Button importGpx = findViewById(R.id.importgpx);
  174. importGpx.setOnClickListener(new View.OnClickListener() {
  175. @Override
  176. public void onClick(View v) {
  177. String curText = ((Button) findViewById(R.id.importgpx)).getText().toString();
  178.  
  179. if (curText.equals("Import GPX")) {
  180. chooseFile();
  181. importGpx.setText("Execute GPX");
  182. } else if (curText.equals("Execute GPX")) {
  183. LatLongFromGPXFile();
  184. importGpx.setText("Import GPX");
  185. }
  186. }
  187. });
  188. }
  189.  
  190. protected void setListAdapter(ListAdapter adapter) {
  191. getListView().setAdapter(adapter);
  192. }
  193.  
  194. protected ListView getListView() {
  195. return this.listview;
  196. }
  197.  
  198. protected ListAdapter getListAdapter() {
  199. ListAdapter adapter = getListView().getAdapter();
  200. if (adapter instanceof HeaderViewListAdapter) {
  201. return ((HeaderViewListAdapter) adapter).getWrappedAdapter();
  202. } else {
  203. return adapter;
  204. }
  205. }
  206.  
  207. @Override
  208. protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  209. super.onActivityResult(requestCode, resultCode, data);
  210. if (requestCode == GPX_REQUEST && data != null) {
  211. if (resultCode == RESULT_OK) {
  212. uri = data.getData();
  213. }
  214. }
  215. }
  216.  
  217. public void chooseFile() {
  218. Intent i2 = new Intent(getApplicationContext(), FileChooser.class);
  219. i2.putExtra(Constants.SELECTION_MODE, Constants.SELECTION_MODES.SINGLE_SELECTION.ordinal());
  220. i2.putExtra(Constants.INITIAL_DIRECTORY, Environment.getExternalStorageDirectory() + "/Download");
  221. i2.putExtra(Constants.ALLOWED_FILE_EXTENSIONS, "gpx");
  222. startActivityForResult(i2, GPX_REQUEST);
  223.  
  224. }
  225.  
  226. public void LatLongFromGPXFile() {
  227. try {
  228. file = new File(uri.getPath());
  229. FileInputStream is = new FileInputStream(file);
  230.  
  231. DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
  232. DocumentBuilder builder = factory.newDocumentBuilder();
  233.  
  234. Document dom = builder.parse(is);
  235. Element root = dom.getDocumentElement();
  236. NodeList items = root.getElementsByTagName("trkpt");
  237.  
  238.  
  239. locations = new ArrayList<Location>();
  240.  
  241. for (int j = 0; j < items.getLength(); j++) {
  242. Node item = items.item(j);
  243. NamedNodeMap attrs = item.getAttributes();
  244. NodeList props = item.getChildNodes();
  245.  
  246. Location pt = new Location("");
  247.  
  248. pt.setLatitude(Double.parseDouble(attrs.getNamedItem("lat").getTextContent()));
  249. pt.setLongitude(Double.parseDouble(attrs.getNamedItem("lon").getTextContent()));
  250.  
  251. for (int k = 0; k < props.getLength(); k++) {
  252. Node item2 = props.item(k);
  253. String name = item2.getNodeName();
  254. if (!name.equalsIgnoreCase("time")) continue;
  255. try {
  256. pt.setTime(getDateFormatter().parse(item2.getFirstChild().getNodeValue()).getTime());
  257. } catch (ParseException e) {
  258. e.printStackTrace();
  259. }
  260. }
  261. for (int y = 0; y < props.getLength(); y++) {
  262. Node item3 = props.item(y);
  263. String name = item3.getNodeName();
  264. if (!name.equalsIgnoreCase("ele")) continue;
  265. pt.setAltitude(Double.parseDouble(item3.getFirstChild().getNodeValue()));
  266. }
  267. locations.add(pt);
  268. }
  269. is.close();
  270. } catch (SAXException e) {
  271. e.printStackTrace();
  272. } catch (IOException e) {
  273. e.printStackTrace();
  274. } catch (ParserConfigurationException e) {
  275. e.printStackTrace();
  276. }
  277. Intent i = new Intent(this, TrackDetailActivity.class);
  278. i.putParcelableArrayListExtra("Locations", locations);
  279. startActivity(i);
  280. }
  281.  
  282. public static SimpleDateFormat getDateFormatter() {
  283. return (SimpleDateFormat) dateFormat.clone();
  284. }
  285.  
  286.  
  287. private void convert_strecke_to_listview(List<Strecke> list) {
  288. System.out.println("fahrten: " + list.size() + " listitems " + listItems.size());
  289. for (Strecke s : list) {
  290. System.out.println("fahrten: " + list.size() + " listitems " + listItems.size());
  291. String result = "";
  292. SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy HH:mm");
  293. String datum ="";
  294. if(s.getWegpunkte().size() != 0){
  295. datum = sdf.format(new Date(s.getWegpunkte().get(0).getZeit()));
  296. }
  297.  
  298. result += datum;
  299. DecimalFormat df = new DecimalFormat("#0.00");
  300. String km = df.format(s.getKilometer()) + "km";
  301.  
  302. result += " " + chosenCar.getMarke() + " " + chosenCar.getModel() + " " + chosenCar.getKennzeichen() + " " + s.getZeit() + " " + km;
  303. listItems.add(result);
  304. adapter.notifyDataSetChanged();
  305. }
  306.  
  307. }
  308.  
  309. public void fahrten_anlegen() {
  310. database.child("strecken").addListenerForSingleValueEvent(new ValueEventListener() {
  311. @Override
  312. public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
  313.  
  314. for (DataSnapshot d : dataSnapshot.getChildren()) {
  315.  
  316. if (((String) d.child("benutzer").getValue()).equals(uid) && ((String) d.child("auto").getValue()).equals(chosenCarID)) {
  317.  
  318. System.out.println(d.getKey());
  319.  
  320. String benutzer = (String) d.child("benutzer").getValue();
  321. String auto = (String) d.child("auto").getValue();
  322. if(d.child("kilometer").getValue().getClass()!= null &&d.child("kilometer").getValue().getClass() == Long.class){
  323. kilometer = ((Long) d.child("kilometer").getValue()).doubleValue();
  324. }else{if(d.child("kilometer").getValue().getClass()!= null){
  325. kilometer = (Double) d.child("kilometer").getValue();
  326. }
  327.  
  328. }
  329.  
  330. SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy HH:mm");
  331. String zeit = (String) d.child("zeit").getValue();
  332. Double avg_kmh;
  333. if(d.child("durchkmh").getValue().getClass() != null && d.child("durchkmh").getValue().getClass() == Long.class){
  334. avg_kmh = ((Long) d.child("durchkmh").getValue()).doubleValue();
  335. }else{
  336. avg_kmh = (Double) d.child("durchkmh").getValue();
  337. }
  338.  
  339. Double avg_verbrauch;
  340. if (d.child("durchverbr").getValue().getClass() != null &&d.child("durchverbr").getValue().getClass() == Long.class) {
  341. avg_verbrauch = ((Long) d.child("durchverbr").getValue()).doubleValue();
  342.  
  343. } else {
  344. avg_verbrauch = (Double) d.child("durchverbr").getValue();
  345. }
  346.  
  347. List<Wegpunkt> wegpunktList = new ArrayList<Wegpunkt>();
  348.  
  349. int i = 0;
  350. for (DataSnapshot wegpunkt : d.child("wegpunkte").getChildren()) {
  351. System.out.println(i);
  352.  
  353. Double lat = (Double) wegpunkt.child("lat").getValue();
  354. Double lng = (Double) wegpunkt.child("lng").getValue();
  355. Long time = (Long) wegpunkt.child("zeit").getValue();
  356.  
  357.  
  358. Wegpunkt w = new Wegpunkt(lat, lng, time);
  359. wegpunktList.add(w);
  360. i++;
  361. }
  362.  
  363.  
  364. if(wegpunktList.size() != 0){
  365. listItems.clear();
  366. Strecke strecke = new Strecke(benutzer, auto, kilometer, zeit, avg_kmh, avg_verbrauch, wegpunktList);
  367. fahrten.add(strecke);
  368.  
  369. convert_strecke_to_listview(fahrten);
  370.  
  371. }
  372.  
  373.  
  374. }
  375.  
  376. }
  377.  
  378. }
  379.  
  380. @Override
  381. public void onCancelled(@NonNull DatabaseError databaseError) {
  382.  
  383. }
  384.  
  385.  
  386. });
  387.  
  388. }
  389.  
  390. @Override
  391. public void onBackPressed() {
  392. if (!m.onBackPressed(drawer)) {
  393. super.onBackPressed();
  394. }
  395. }
  396.  
  397. @Override
  398. protected void onSaveInstanceState(Bundle outState) {
  399. super.onSaveInstanceState(m.onSaveInstanceState(drawer, header, outState));
  400. }
  401. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement