Android Open Source - geoar-app A R 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
 */*  ww  w.jav a  2s .  c  o 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.ar.view;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.n52.geoar.ar.view.gl.ARSurfaceView;
import org.n52.geoar.ar.view.overlay.ARCanvasSurfaceView;
import org.n52.geoar.tracking.camera.CameraView;
import org.n52.geoar.tracking.camera.RealityCamera;
import org.n52.geoar.tracking.camera.RealityCamera.CameraUpdateListener;

import android.app.ActivityManager;
import android.content.Context;
import android.content.pm.ConfigurationInfo;
import android.os.Build;
import android.util.AttributeSet;
import android.widget.FrameLayout;

/**
 * 
 * @author Arne de Wall <a.dewall@52North.org>
 *
 */
public class ARView extends FrameLayout implements CameraUpdateListener {

  private ARCanvasSurfaceView mCanvasOverlayView;
  private ARSurfaceView mARSurfaceView;
  private Map<Object, List<ARObject>> mARObjectMap = new HashMap<Object, List<ARObject>>();
  private ArrayList<ARObject> mARObjectsReusableList = new ArrayList<ARObject>();

  private CameraView mCameraView;

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

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

  private void init() {
    if (isInEditMode()) {
      return;
    }

    mCameraView = new CameraView(getContext());
    addView(mCameraView, LayoutParams.MATCH_PARENT,
        LayoutParams.MATCH_PARENT);

    final ActivityManager activityManager = (ActivityManager) getContext()
        .getSystemService(Context.ACTIVITY_SERVICE);
    final ConfigurationInfo config = activityManager
        .getDeviceConfigurationInfo();

    if (config.reqGlEsVersion >= 0x20000 || Build.PRODUCT.startsWith("sdk")) {
      // Add ARSurfaceView only if OpenGL ES Version 2 supported
      mARSurfaceView = new ARSurfaceView(this);
      mARSurfaceView.setKeepScreenOn(true);
      mARSurfaceView.setZOrderMediaOverlay(true);
      addView(mARSurfaceView, new FrameLayout.LayoutParams(
          LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
    }

    mCanvasOverlayView = new ARCanvasSurfaceView(this);
    addView(mCanvasOverlayView, LayoutParams.MATCH_PARENT,
        LayoutParams.MATCH_PARENT);
  }

  /**
   * Sets the ARObjects to render with a specified key. Objects previously set
   * using this key will get removed by this call.
   * 
   * @param arObjects
   * @param key
   */
  public void setARObjects(final List<ARObject> arObjects, final Object key) {
    synchronized (this.mARObjectMap) {
      List<ARObject> previousMapping = this.mARObjectMap.put(key,
          arObjects);
      if (previousMapping != null) {
        previousMapping.clear();
      }
    }

    mARSurfaceView.notifyARObjectsChanged();
    mCanvasOverlayView.notifyARObjectsChanged();
  }

  /**
   * Removes all ARObjects which were previously set using the specified key
   * 
   * @param key
   */
  public void clearARObjects(Object key) {
    synchronized (this.mARObjectMap) {
      mARObjectMap.remove(key);
    }

    mARSurfaceView.notifyARObjectsChanged();
    mCanvasOverlayView.notifyARObjectsChanged();
  }

  /**
   * Removes all ARObjects
   * 
   */
  // TODO usage?
  public void clearARObjects() {
    synchronized (this.mARObjectMap) {
      for (List<ARObject> itemList : mARObjectMap.values()) {
        itemList.clear();
      }
      mARObjectMap.clear();
    }

    mARSurfaceView.notifyARObjectsChanged();
    mCanvasOverlayView.notifyARObjectsChanged();
  }

  public List<ARObject> getARObjects() {
    synchronized (mARObjectsReusableList) {
      synchronized (this.mARObjectMap) {
        mARObjectsReusableList.clear();
        for (List<ARObject> itemList : mARObjectMap.values()) {
          mARObjectsReusableList.addAll(itemList);
        }
        return mARObjectsReusableList;
      }
    }
  }

  public void onPause() {
    RealityCamera.removeCameraUpdateListener(this);
    mARSurfaceView.onPause();
  }

  public void onResume() {
    RealityCamera.addCameraUpdateListener(this);
    mARSurfaceView.onResume();
  }

  @Override
  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

    if (!RealityCamera.hasViewportSize()) {
      super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    } else {
      int maxWidth = MeasureSpec.getSize(widthMeasureSpec);
      int maxHeight = MeasureSpec.getSize(heightMeasureSpec);

      mCameraView.setCameraSizeHint(maxWidth, maxHeight);

      float ratio = maxWidth / (float) RealityCamera.cameraViewportWidth;

      int widthSpec = MeasureSpec.makeMeasureSpec(maxWidth,
          MeasureSpec.EXACTLY);
      int heightSpec = MeasureSpec.makeMeasureSpec(
          (int) (RealityCamera.cameraViewportHeight * ratio),
          MeasureSpec.EXACTLY);
      super.onMeasure(widthSpec, heightSpec);
      setMeasuredDimension(widthSpec, heightSpec);
    }
  }

  @Override
  public void onCameraUpdate() {
    post(new Runnable() {
      @Override
      public void run() {
        requestLayout();
      }
    });
  }

}




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