Android Open Source - geoar-app Date Time Settings View Field






From Project

Back to project page geoar-app.

License

The source code is released under:

Apache License

If you think the Android project geoar-app listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/**
 * Copyright 2012 52North Initiative for Geospatial Open Source Software GmbH
 *//from www  .  j  a v a2  s .  co  m
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *    http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.n52.geoar.settings;

import java.lang.reflect.Field;
import java.util.Calendar;

import org.n52.geoar.newdata.Annotations.Settings.NotNull;
import org.n52.geoar.newdata.Annotations.Settings.Temporal;
import org.n52.geoar.newdata.Annotations.Settings.Temporal.TemporalType;
import org.n52.geoar.R;

import android.app.DatePickerDialog;
import android.app.DatePickerDialog.OnDateSetListener;
import android.app.TimePickerDialog;
import android.app.TimePickerDialog.OnTimeSetListener;
import android.content.Context;
import android.text.InputType;
import android.text.format.DateFormat;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.TimePicker;

public abstract class DateTimeSettingsViewField<T> implements SettingsViewField<T>,
    OnDateSetListener, OnTimeSetListener {

  private EditText dateEditText;
  private boolean notNull;
  private TemporalType temporalType;
  private Calendar selectedValue;
  private EditText timeEditText;
  private Context context;
  private View filterView;
  private Field field;

  public DateTimeSettingsViewField(final Context context, Field field,
      TemporalType temporalType) {
    this.temporalType = temporalType;
    this.field = field;

    // Check annotations
    notNull = field.isAnnotationPresent(NotNull.class);

    if (temporalType == null && field.isAnnotationPresent(Temporal.class)) {
      this.temporalType = field.getAnnotation(Temporal.class).value();
    }

    if (this.temporalType == null)
      this.temporalType = TemporalType.DATETIME; // Apply default behavior
                            // if temporal type
                            // is unknown

    // Create Views

    if (this.temporalType == TemporalType.DATE
        || this.temporalType == TemporalType.DATETIME) {
      // Date view required

      dateEditText = new EditText(context, null,
          android.R.attr.spinnerStyle);
      // EditText which looks like a spinner to visually indicate that
      // there
      // are more options on click

      dateEditText.setHint(R.string.date);
      dateEditText.setInputType(InputType.TYPE_NULL);
      dateEditText.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View arg0) {
          if (selectedValue == null)
            selectedValue = Calendar.getInstance();

          DatePickerDialog dialog = new DatePickerDialog(context,
              DateTimeSettingsViewField.this, selectedValue
                  .get(Calendar.YEAR), selectedValue
                  .get(Calendar.MONTH), selectedValue
                  .get(Calendar.DAY_OF_MONTH));
          dialog.show();
        }
      });
    }

    if (this.temporalType == TemporalType.TIME
        || this.temporalType == TemporalType.DATETIME) {
      // Time view required

      timeEditText = new EditText(context, null,
          android.R.attr.spinnerStyle);
      // EditText which looks like a spinner to visually indicate that
      // there
      // are more options on click

      timeEditText.setHint(R.string.time);
      timeEditText.setInputType(InputType.TYPE_NULL);
      timeEditText.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View arg0) {
          if (selectedValue == null)
            selectedValue = Calendar.getInstance();

          TimePickerDialog dialog = new TimePickerDialog(context,
              DateTimeSettingsViewField.this, selectedValue
                  .get(Calendar.HOUR_OF_DAY), selectedValue
                  .get(Calendar.MINUTE), true);
          dialog.show();
        }
      });
    }

    switch (this.temporalType) {
    case DATETIME:
      LinearLayout linearLayout = new LinearLayout(context);
      linearLayout.addView(dateEditText, new LinearLayout.LayoutParams(
          LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 1));
      linearLayout.addView(timeEditText, new LinearLayout.LayoutParams(
          LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 1));
      filterView = linearLayout;
      break;
    case TIME:
      filterView = timeEditText;
      break;
    case DATE:
      filterView = dateEditText;
      break;
    }

    this.context = context;
  }

  @Override
  public boolean validate() {
    if (notNull && selectedValue == null) {
      if (timeEditText != null)
        timeEditText.setError("Field is required");
      if (dateEditText != null)
        dateEditText.setError("Field is required");
      return false;
    }
    return true;
  }

  public Calendar getSelectedValue() {
    return selectedValue;
  }

  public void setSelectedValue(Calendar value) {
    selectedValue = value != null ? (Calendar) value.clone() : null;
    updateViews();
  }

  @Override
  public View getView() {
    return filterView;
  }

  @Override
  public void onDateSet(DatePicker view, int year, int month, int day) {
    if (selectedValue == null)
      selectedValue = Calendar.getInstance();
    selectedValue.set(year, month, day);
    updateViews();
  }

  @Override
  public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
    if (selectedValue == null)
      selectedValue = Calendar.getInstance();

    selectedValue.set(Calendar.HOUR_OF_DAY, hourOfDay);
    selectedValue.set(Calendar.MINUTE, minute);
    updateViews();
  }

  private void updateViews() {
    if (timeEditText != null)
      timeEditText.setText(selectedValue != null ? DateFormat
          .getTimeFormat(context).format(selectedValue.getTime())
          : "");

    if (dateEditText != null)
      dateEditText.setText(selectedValue != null ? DateFormat
          .getDateFormat(context).format(selectedValue.getTime())
          : "");
  }

  @Override
  public Field getField() {
    return field;
  }
}




Java Source Code List

.DataSourcesOverlay.java
.VisualizationOverlayItem.java
org.n52.geoar.AboutDialog.java
org.n52.geoar.DataSourceListAdapter.java
org.n52.geoar.GeoARActivity.java
org.n52.geoar.GeoARApplication.java
org.n52.geoar.ar.view.ARFragment.java
org.n52.geoar.ar.view.ARObject.java
org.n52.geoar.ar.view.ARView.java
org.n52.geoar.ar.view.DataSourceVisualizationHandler.java
org.n52.geoar.ar.view.IntroController.java
org.n52.geoar.ar.view.IntroViewer.java
org.n52.geoar.ar.view.gl.ARSurfaceViewRenderer.java
org.n52.geoar.ar.view.gl.ARSurfaceView.java
org.n52.geoar.ar.view.gl.GLESCamera.java
org.n52.geoar.ar.view.gl.MultisampleConfigs.java
org.n52.geoar.ar.view.gl.SurfaceTopology.java
org.n52.geoar.ar.view.overlay.ARCanvasSurfaceView.java
org.n52.geoar.ar.view.overlay.GUIDrawable.java
org.n52.geoar.ar.view.overlay.Radar.java
org.n52.geoar.exception.UnsupportedGeometryType.java
org.n52.geoar.map.view.DataSourceOverlayHandler.java
org.n52.geoar.map.view.GeoARMapView.java
org.n52.geoar.map.view.MapActivityContext.java
org.n52.geoar.map.view.MapFragment.java
org.n52.geoar.map.view.overlay.DataSourceOverlay.java
org.n52.geoar.map.view.overlay.DataSourcePointOverlay.java
org.n52.geoar.map.view.overlay.DataSourcePolygonOverlay.java
org.n52.geoar.map.view.overlay.DataSourcePolylineOverlay.java
org.n52.geoar.map.view.overlay.DataSourcesOverlay.java
org.n52.geoar.map.view.overlay.OverlayType.java
org.n52.geoar.map.view.overlay.PointOverlayType.java
org.n52.geoar.map.view.overlay.PolygonOverlayType.java
org.n52.geoar.map.view.overlay.PolylineOverlayType.java
org.n52.geoar.newdata.CheckList.java
org.n52.geoar.newdata.DataCache.java
org.n52.geoar.newdata.DataSourceHolder.java
org.n52.geoar.newdata.DataSourceInstanceHolder.java
org.n52.geoar.newdata.DataSourceInstanceSettingsDialogActivity.java
org.n52.geoar.newdata.InstalledPluginHolder.java
org.n52.geoar.newdata.PluginActivityContext.java
org.n52.geoar.newdata.PluginContext.java
org.n52.geoar.newdata.PluginDialogFragment.java
org.n52.geoar.newdata.PluginDownloadHolder.java
org.n52.geoar.newdata.PluginDownloader.java
org.n52.geoar.newdata.PluginFragment.java
org.n52.geoar.newdata.PluginGridAdapter.java
org.n52.geoar.newdata.PluginHolder.java
org.n52.geoar.newdata.PluginLoader.java
org.n52.geoar.newdata.PluginLogger.java
org.n52.geoar.newdata.PluginStateInputStream.java
org.n52.geoar.newdata.Tile.java
org.n52.geoar.settings.DateTimeSettingsViewField.java
org.n52.geoar.settings.DateUtils.java
org.n52.geoar.settings.NumberSettingsViewField.java
org.n52.geoar.settings.SettingsException.java
org.n52.geoar.settings.SettingsHelper.java
org.n52.geoar.settings.SettingsViewField.java
org.n52.geoar.settings.SettingsView.java
org.n52.geoar.settings.SpinnerSettingsViewField.java
org.n52.geoar.settings.StringSettingsViewField.java
org.n52.geoar.tracking.camera.CameraView.java
org.n52.geoar.tracking.camera.RealityCamera.java
org.n52.geoar.tracking.location.AdaptiveLowPassSensorBuffer.java
org.n52.geoar.tracking.location.LocationHandler.java
org.n52.geoar.tracking.location.LowPassSensorBuffer.java
org.n52.geoar.tracking.location.MeanSensorBuffer.java
org.n52.geoar.tracking.location.SensorBuffer.java
org.n52.geoar.view.InfoView.java
org.n52.geoar.view.geoar.CalibrationControlView.java
org.n52.geoar.view.geoar.Settings.java
org.n52.geoar.view.geoar.gl.mode.BilligerColorShader.java
org.n52.geoar.view.geoar.gl.mode.BilligerLightShader.java
org.n52.geoar.view.geoar.gl.mode.BilligerTextureShader.java
org.n52.geoar.view.geoar.gl.mode.BoundingBox.java
org.n52.geoar.view.geoar.gl.mode.FeatureShader.java
org.n52.geoar.view.geoar.gl.mode.PhongFeatureShader.java
org.n52.geoar.view.geoar.gl.mode.RenderFeature2.java
org.n52.geoar.view.geoar.gl.mode.Spatial.java
org.n52.geoar.view.geoar.gl.mode.TextureFeatureShader.java
org.n52.geoar.view.geoar.gl.mode.Texture.java
org.n52.geoar.view.geoar.gl.mode.features.CubeFeature2.java
org.n52.geoar.view.geoar.gl.mode.features.FlatCircleFeature.java
org.n52.geoar.view.geoar.gl.mode.features.HeightMapFeature.java
org.n52.geoar.view.geoar.gl.mode.features.NewGridFeature.java
org.n52.geoar.view.geoar.gl.mode.features.ReferencedGridFeature.java
org.n52.geoar.view.geoar.gl.mode.features.SphereFeature.java
org.n52.geoar.view.geoar.gl.mode.features.TriangleFeature.java