Android Open Source - geoar-app Settings View






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
 *// w  w  w .  j a  v  a  2s .c om
 * 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.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.TreeMap;

import org.n52.geoar.newdata.Annotations.PostSettingsChanged;
import org.n52.geoar.newdata.Annotations.Setting;
import org.n52.geoar.newdata.Annotations.Settings.Group;
import org.n52.geoar.newdata.Annotations.Settings.Name;
import org.n52.geoar.R;

import android.content.Context;
import android.content.res.TypedArray;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.widget.LinearLayout;
import android.widget.TextView;

public class SettingsView extends LinearLayout {

  private Object settingsObject;
  private LayoutInflater mInflater;
  // Assigning Fields to groups
  final Map<String, List<SettingsViewField<?>>> groupFieldMap = new TreeMap<String, List<SettingsViewField<?>>>();
  private Context mStringsContext;

  public SettingsView(Context context) {
    super(context);
    init();
  }

  public SettingsView(Context context, AttributeSet attrs) {
    super(context, attrs);
    init();
  }

  private void init() {
    mInflater = LayoutInflater.from(getContext());
    setOrientation(LinearLayout.VERTICAL);
    mStringsContext = getContext();
  }

  public void setStringsContext(Context stringsContext) {
    this.mStringsContext = stringsContext;
  }

  public void setSettingsObject(Object settingsObject) {
    this.settingsObject = settingsObject;
    updateViews();
  }

  public void updateViews() {
    removeAllViews();
    if (settingsObject == null) {
      throw new IllegalStateException();
    }

    TypedArray typedArray = getContext().obtainStyledAttributes(
        R.style.formView,
        new int[] { android.R.attr.paddingLeft,
            android.R.attr.paddingRight });
    int paddingLeft = typedArray.getDimensionPixelSize(0, 0);
    int paddingRight = typedArray.getDimensionPixelSize(1, 0);
    typedArray.recycle();

    groupFieldMap.clear();

    // Find fields and create views for every annotated field
    for (Field field : settingsObject.getClass().getDeclaredFields()) {
      if (field.isAnnotationPresent(Setting.class)) {
        SettingsViewField<?> filterView = SettingsHelper
            .createFilterViewFromField(field, getContext());
        if (filterView != null) {

          // get group
          String groupName = "";
          Group annotation = field.getAnnotation(Group.class);
          if (annotation != null) {
            groupName = annotation.value();
          }

          List<SettingsViewField<?>> viewList = groupFieldMap
              .get(groupName);
          if (viewList == null) {
            viewList = new ArrayList<SettingsViewField<?>>();
            groupFieldMap.put(groupName, viewList);
          }
          viewList.add(filterView);
        }
      }
    }

    // create table with labels and views for each field

    for (Entry<String, List<SettingsViewField<?>>> entry : groupFieldMap
        .entrySet()) {
      String group = entry.getKey();
      if (group != null && !group.isEmpty()) {
        // TextView groupView = new TextView(this, null,
        // R.style.formGroup);
        // Since defStyle is ignored, layout inflater is needed
        // http://code.google.com/p/android/issues/detail?id=12683
        TextView groupView = (TextView) mInflater.inflate(
            R.layout.textview_group, null);

        groupView.setText(group);
        addView(groupView, LayoutParams.MATCH_PARENT,
            LayoutParams.WRAP_CONTENT);
      }

      List<SettingsViewField<?>> viewList = entry.getValue();

      for (SettingsViewField<?> filterView : viewList) {
        Field field = filterView.getField();
        Name nameAnnotation = field.getAnnotation(Name.class);
        if (nameAnnotation != null) {

          // TextView labelView = new TextView(this, null,
          // R.style.formLabel);
          // Since defStyle is ignored, layout inflater is needed
          // http://code.google.com/p/android/issues/detail?id=12683

          TextView labelView = (TextView) mInflater.inflate(
              R.layout.textview_label, null);
          if (nameAnnotation.resId() >= 0) {
            labelView.setText(mStringsContext
                .getString(nameAnnotation.resId()));
          } else {
            labelView.setText(nameAnnotation.value());
          }
          addView(labelView, LayoutParams.WRAP_CONTENT,
              LayoutParams.WRAP_CONTENT);
        }

        try {
          field.setAccessible(true);
          filterView.setValueObject(field.get(settingsObject));
        } catch (Exception e) {
          // TODO
        }

        // Set padding
        filterView.getView()
            .setPadding(paddingLeft, 0, paddingRight, 0);
        addView(filterView.getView(), LayoutParams.MATCH_PARENT,
            LayoutParams.WRAP_CONTENT);
      }
    }

  }

  public boolean validate() {
    boolean valid = true;
    for (List<SettingsViewField<?>> viewList : groupFieldMap.values())
      for (SettingsViewField<?> filterView : viewList) {
        if (!filterView.validate()) {
          valid = false;
        }
      }

    return valid;
  }

  public void updateObject() {
    if (settingsObject == null) {
      throw new IllegalStateException();
    }
    // Set every field of settingsObject to new value
    for (List<SettingsViewField<?>> viewList : groupFieldMap.values())
      for (SettingsViewField<?> filterView : viewList) {
        try {
          Field field = filterView.getField();
          field.setAccessible(true);
          field.set(settingsObject, filterView.getValue());
        } catch (IllegalArgumentException e) {
          throw new SettingsException(e.getMessage(), e);
        } catch (IllegalAccessException e) {
          throw new SettingsException(e.getMessage(), e);
        }
      }

    SettingsHelper.notifySettingsChanged(settingsObject);
  }

  public boolean isEmpty() {
    return groupFieldMap.isEmpty();
  }

}




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