[PATCH] Added date time picker to Mappicker

Venkatesh Shukla IIT BHU venkatesh.shukla.eee11 at iitbhu.ac.in
Sat Mar 15 06:29:27 PDT 2014


Added datepicker and time picker (Which looks ugly)
to the mappicker dialog.

Changes made:
1. Added the date time pickers to mappicker
2. Shifted the divename dialog to PickLocationMap activity
   to fix change of context, as pointed out by Aurélien
3. Added default dive name for current dive add.

Signed-off-by: Venkatesh Shukla <venkatesh.shukla.eee11 at iitbhu.ac.in>
---
 res/layout/datetimedialog.xml                     |   24 ++++++
 res/values/strings.xml                            |    1 +
 src/org/subsurface/BackgroundLocationService.java |    1 -
 src/org/subsurface/HomeActivity.java              |   69 +++--------------
 src/org/subsurface/PickLocationMap.java           |   84
+++++++++++++++++++--
 5 files changed, 114 insertions(+), 65 deletions(-)
 create mode 100644 res/layout/datetimedialog.xml

diff --git a/res/layout/datetimedialog.xml b/res/layout/datetimedialog.xml
new file mode 100644
index 0000000..559516f
--- /dev/null
+++ b/res/layout/datetimedialog.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:orientation="vertical" >
+
+    <EditText
+        android:id="@+id/etMapDiveName"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:hint="@string/hint_dive_name"
+        android:inputType="textAutoComplete" />
+
+    <DatePicker
+        android:id="@+id/datePickerMap"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content" />
+
+    <TimePicker
+        android:id="@+id/timePickerMap"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content" />
+
+</LinearLayout>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 28f459a..057019b 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -5,6 +5,7 @@
     <string name="default_duration">30</string>
     <string name="default_distance">10</string>
     <string name="default_dive_name">Auto-created dive</string>
+    <string name="default_map_dive_name">Map Picked dive</string>

     <string name="home_action_mode_title">%s selected</string>
     <string name="home_no_account">You have not yet configured your
Subsurface account</string>
diff --git a/src/org/subsurface/BackgroundLocationService.java
b/src/org/subsurface/BackgroundLocationService.java
index f18626d..f79fa17 100644
--- a/src/org/subsurface/BackgroundLocationService.java
+++ b/src/org/subsurface/BackgroundLocationService.java
@@ -1,7 +1,6 @@
 package org.subsurface;

 import java.util.ArrayList;
-import java.util.Calendar;
 import java.util.Timer;

 import org.subsurface.dao.DatabaseHelper;
diff --git a/src/org/subsurface/HomeActivity.java
b/src/org/subsurface/HomeActivity.java
index 4a7a16d..73ab38a 100644
--- a/src/org/subsurface/HomeActivity.java
+++ b/src/org/subsurface/HomeActivity.java
@@ -37,7 +37,6 @@ import android.util.Log;
 import android.view.View;
 import android.widget.ArrayAdapter;
 import android.widget.EditText;
-import android.widget.LinearLayout;
 import android.widget.ListView;
 import android.widget.Toast;

@@ -47,17 +46,14 @@ import com.actionbarsherlock.app.SherlockListActivity;
 import com.actionbarsherlock.view.ActionMode;
 import com.actionbarsherlock.view.Menu;
 import com.actionbarsherlock.view.MenuItem;
-import com.google.android.gms.maps.model.LatLng;

 public class HomeActivity extends SherlockListActivity implements
com.actionbarsherlock.view.ActionMode.Callback, SelectionListener,
OnNavigationListener {

  private static final String TAG = "HomeActivity";
  private static final int pick_map_reqcode = 999;
  private static final int pick_gpxfile_reqcode = 998;
- private static final String LOCATION = "location";
  private static final String GPX_DIVE_LOGS  = "gpxdivelogs";
-
-
+ private static final String MAP_DIVE_LOG  = "mapdivelog";
  private IBinder service = null;
  private final ServiceConnection connection = new ServiceConnection() {

@@ -214,25 +210,13 @@ public class HomeActivity extends
SherlockListActivity implements com.actionbars

  /**
  * Send location picked from map to the server and update the list
- * @param name Name of the dive
- * @param latlng Latlng of the dive
- * @param timestamp timestamp of the dive
+ * @param divelog DiveLocationLog of the dive
  */
- public void sendMapDiveLog(String name, LatLng latlng, long timestamp) {
- if(name.contentEquals(""))
- {
- name =
PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).getString("background_service_name",
- getResources().getString(R.string.default_dive_name));
- }
- DiveLocationLog locationlog = new DiveLocationLog();
- locationlog.setName(name);
- locationlog.setLatitude(latlng.latitude);
- locationlog.setLongitude(latlng.longitude);
- locationlog.setTimestamp(timestamp);
+ public void sendMapDiveLog(DiveLocationLog divelog) {
  if (UserController.instance.autoSend()) {
  try {
- DiveController.instance.sendDiveLog(locationlog);
- Toast.makeText(HomeActivity.this,
getString(R.string.confirmation_dive_picked_sent, name),
Toast.LENGTH_SHORT).show();
+ DiveController.instance.sendDiveLog(divelog);
+ Toast.makeText(HomeActivity.this,
getString(R.string.confirmation_dive_picked_sent, divelog.getName()),
Toast.LENGTH_SHORT).show();
  } catch (final WsException e) {
  runOnUiThread(new Runnable() {
  public void run() {
@@ -240,7 +224,7 @@ public class HomeActivity extends SherlockListActivity
implements com.actionbars
  }
  });
  } catch (Exception e) {
- Log.d(TAG, "Could not send dive " + locationlog.getName(), e);
+ Log.d(TAG, "Could not send dive " + divelog.getName(), e);
  runOnUiThread(new Runnable() {
  public void run() {
  Toast.makeText(HomeActivity.this, R.string.error_send,
Toast.LENGTH_SHORT).show();
@@ -248,8 +232,8 @@ public class HomeActivity extends SherlockListActivity
implements com.actionbars
  });
  }
  } else {
- DiveController.instance.updateDiveLog(locationlog);
- Toast.makeText(HomeActivity.this,
getString(R.string.confirmation_location_picked, name),
Toast.LENGTH_SHORT).show();
+ DiveController.instance.updateDiveLog(divelog);
+ Toast.makeText(HomeActivity.this,
getString(R.string.confirmation_location_picked, divelog.getName()),
Toast.LENGTH_SHORT).show();
  }
  runOnUiThread(new Runnable() {
  public void run() {
@@ -259,6 +243,8 @@ public class HomeActivity extends SherlockListActivity
implements com.actionbars
  }

  private void sendDiveLog(String name) {
+ if(name.contentEquals("")) name =
PreferenceManager.getDefaultSharedPreferences(this)
+ .getString("background_service_name",
getString(R.string.default_dive_name));
  final DiveLocationLog locationLog = new DiveLocationLog();
  locationLog.setName(name);
  final AtomicBoolean cancel = new AtomicBoolean(false);
@@ -445,39 +431,8 @@ public class HomeActivity extends SherlockListActivity
implements com.actionbars
  Bundle rec_bundle = data.getExtras();
  switch(requestcode) {
  case pick_map_reqcode:
- final LatLng loc = (LatLng) rec_bundle.get(LOCATION);
- if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
- AlertDialog.Builder builder = new AlertDialog.Builder(this);
- LinearLayout linlay = new LinearLayout(this);
- linlay.setOrientation(LinearLayout.VERTICAL);
- final EditText divename = new EditText(this);
- divename.setHint(R.string.hint_dive_name);
- divename.setInputType(InputType.TYPE_TEXT_FLAG_AUTO_COMPLETE);
- final EditText diveoff = new EditText(this);
- diveoff.setHint(R.string.hint_dive_offset);
- diveoff.setInputType(InputType.TYPE_CLASS_NUMBER);
- linlay.addView(divename);
- linlay.addView(diveoff);
- builder.setView(linlay);
- builder.setNegativeButton(android.R.string.cancel, null);
- builder.setTitle(getString(R.string.dialog_location_name))
- .setPositiveButton(android.R.string.ok,
- new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- long minuteoff;
- String mins = diveoff.getText().toString();
- if(mins.contentEquals(""))
- minuteoff = 0;
- else
- minuteoff = Integer.valueOf(mins);
- // Dateutils.getFakeUtcDate returns timestamp in milliseconds. To include
offset multiply by 60000
- sendMapDiveLog(divename.getText().toString(), loc,
DateUtils.getFakeUtcDate() - minuteoff * 60000);
- }
- }).create().show();
- } else {
- showGpsWarning();
- }
+ DiveLocationLog mapdivelog = (DiveLocationLog)
rec_bundle.get(MAP_DIVE_LOG);
+ sendMapDiveLog(mapdivelog);
  return;
  case pick_gpxfile_reqcode:
  List<DiveLocationLog> gpxdivelogs = (ArrayList<DiveLocationLog>)
rec_bundle.get(GPX_DIVE_LOGS);
diff --git a/src/org/subsurface/PickLocationMap.java
b/src/org/subsurface/PickLocationMap.java
index bb9643f..95776a5 100644
--- a/src/org/subsurface/PickLocationMap.java
+++ b/src/org/subsurface/PickLocationMap.java
@@ -1,9 +1,24 @@
 package org.subsurface;

+import java.util.Calendar;
+import java.util.GregorianCalendar;
+import java.util.TimeZone;
+
+import org.subsurface.model.DiveLocationLog;
+
 import android.app.Activity;
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.content.DialogInterface;
 import android.content.Intent;
 import android.os.Bundle;
+import android.support.v4.app.DialogFragment;
 import android.support.v4.app.NavUtils;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.DatePicker;
+import android.widget.EditText;
+import android.widget.TimePicker;

 import com.actionbarsherlock.app.SherlockFragmentActivity;
 import com.actionbarsherlock.view.Menu;
@@ -20,12 +35,10 @@ import com.google.android.gms.maps.model.MarkerOptions;
  * @author Venkatesh Shukla
  */
 public class PickLocationMap extends SherlockFragmentActivity implements
OnMapLongClickListener, OnMarkerClickListener {
-
  private GoogleMap mMap;
  private static LatLng latlng;
- private static final String LOCATION = "location";
+ private static final String MAP_DIVE_LOG  = "mapdivelog";
  private MarkerOptions markeropt;
-
  @Override
  protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
@@ -51,15 +64,32 @@ public class PickLocationMap extends
SherlockFragmentActivity implements OnMapLo
  NavUtils.navigateUpFromSameTask(this);
  return true;
  case R.id.dive_loc_finish:
- Intent resultIntent = new Intent();
- resultIntent.putExtra(LOCATION, latlng);
- setResult(Activity.RESULT_OK, resultIntent);
- finish();
+ showDialog();
  return true;
  }
  return super.onOptionsItemSelected(item);
  }

+ void showDialog() {
+    DialogFragment newFragment = new MyAlertDialogFragment();
+    newFragment.setShowsDialog(true);
+    newFragment.show(getSupportFragmentManager(), "dialog");
+ }
+
+ public void doPositiveClick(long timestamp, String divename) {
+ DiveLocationLog divelog = new DiveLocationLog();
+ divelog.setLatitude(latlng.latitude);
+ divelog.setLongitude(latlng.longitude);
+ divelog.setName(divename);
+ divelog.setTimestamp(timestamp);
+ divelog.setSent(false);
+
+ Intent resultIntent = new Intent();
+ resultIntent.putExtra(MAP_DIVE_LOG, divelog);
+ setResult(Activity.RESULT_OK, resultIntent);
+ finish();
+ }
+
  @Override
  protected void onResume() {
  super.onResume();
@@ -89,4 +119,44 @@ public class PickLocationMap extends
SherlockFragmentActivity implements OnMapLo
  return false;
  }

+ public static class MyAlertDialogFragment extends DialogFragment {
+ private EditText etDiveName;
+ private DatePicker datePickerMap;
+ private TimePicker timePickerMap;
+ private View dialogView;
+ private int hour, minute, day, month, year;
+ private String divename;
+ private long timestamp;
+    @Override
+    public Dialog onCreateDialog(Bundle savedInstanceState) {
+ dialogView =
LayoutInflater.from(getActivity()).inflate(R.layout.datetimedialog, null);
+ etDiveName = (EditText) dialogView.findViewById(R.id.etMapDiveName);
+ datePickerMap = (DatePicker) dialogView.findViewById(R.id.datePickerMap);
+ timePickerMap = (TimePicker) dialogView.findViewById(R.id.timePickerMap);
+
+        AlertDialog.Builder builder = new
AlertDialog.Builder(getActivity());
+        builder.setIcon(R.drawable.ic_menu_map);
+        builder.setTitle(R.string.title_map_marker);
+        builder.setView(dialogView);
+        builder.setNegativeButton(android.R.string.cancel, null);
+        builder.setPositiveButton(android.R.string.ok,
+                    new DialogInterface.OnClickListener() {
+                        public void onClick(DialogInterface dialog, int
whichButton) {
+ divename = etDiveName.getText().toString();
+ if(divename.contentEquals("")) divename =
getString(R.string.default_map_dive_name);
+ minute = timePickerMap.getCurrentMinute();
+ hour = timePickerMap.getCurrentHour();
+ year = datePickerMap.getYear();
+ month = datePickerMap.getMonth();
+ day = datePickerMap.getDayOfMonth();
+ Calendar cal = new GregorianCalendar(year, month, day, hour, minute);
+ cal.setTimeZone(TimeZone.getTimeZone("GMT"));
+ timestamp = cal.getTime().getTime();
+ ((PickLocationMap) getActivity()).doPositiveClick(timestamp, divename);
+                        }
+                    }
+                );
+            return builder.create();
+    }
+ }
 }
-- 
1.7.9.5









*Venkatesh Shukla B. Tech  ( Electrical Engineering )III YearIndian
Institute of TechnologyBanaras Hindu UniversityPh No. +91 8960 579 122*
*Email: venkatesh.shukla.eee11 at iitbhu.ac.in
<venkatesh.shukla.eee11 at iitbhu.ac.in>*
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.hohndel.org/pipermail/subsurface/attachments/20140315/016484b8/attachment-0001.html>


More information about the subsurface mailing list