24 package com.mission_base.arviewer_android;
26 import java.util.Collections;
27 import java.util.HashMap;
28 import java.util.LinkedList;
29 import java.util.List;
31 import android.annotation.SuppressLint;
32 import android.app.Activity;
33 import android.content.Intent;
34 import android.hardware.SensorManager;
35 import android.view.OrientationEventListener;
37 import com.mission_base.arviewer_android.viewer.Augment;
38 import com.mission_base.arviewer_android.viewer.WebViewer;
39 import com.mission_base.arviewer_android.viewer.opengl.ArvosObject;
48 @SuppressLint(
"UseSparseArrays")
51 public boolean mSimulateWeb =
true;
53 public boolean mUseCache =
true;
54 public boolean mIsAuthor =
false;
58 private static String mLock =
"Lock";
59 private static Arvos mInstance = null;
61 private Activity mActivity;
62 private OrientationEventListener mListener;
63 private int mOrientation = 0;
66 public float mLongitude = -1000f;
67 public float mLatitude = -1000f;
68 public int mVersion = 1;
71 public String mAugmentsUrl =
"http://www.mission-base.com/arvos/augments.json";
73 public float mAzimuth = 0;
74 public float mCorrectedAzimuth = 0;
75 public float mPitch = 0;
76 public float mRoll = 0;
81 public volatile boolean mHandleTouch =
false;
82 public volatile boolean mModelViewMatrixesRequested =
false;
87 public float[] mProjectionMatrix = null;
92 public final HashMap<Integer, float[]> mModelViewMatrixes =
new HashMap<Integer, float[]>();
100 public final List<ArvosObject> mArvosObjects = Collections.synchronizedList(
new LinkedList<ArvosObject>());
111 public static Arvos getInstance()
113 if (mInstance == null)
117 if (mInstance == null)
119 mInstance =
new Arvos();
133 public static Arvos getInstance(Activity activity)
136 if (activity != null)
138 mInstance.setActivity(activity);
148 public Activity getActivity()
153 private void setActivity(Activity activity)
155 mActivity = activity;
156 if (mActivity != null && mListener == null)
158 mListener =
new OrientationEventListener(mActivity, SensorManager.SENSOR_DELAY_UI)
160 public void onOrientationChanged(
int orientation)
162 if (orientation == ORIENTATION_UNKNOWN)
168 mOrientation = orientation;
180 public int getOrientation()
192 public int getRotationDegrees()
195 if (mOrientation < 45)
199 else if (mOrientation < 135)
203 else if (mOrientation < 225)
207 else if (mOrientation < 315)
214 public void onResume()
219 public void onPause()
224 private static float toDegreesFactor = 180 / 3.14159f;
234 public static float toDegrees(
float radians)
236 return radians * toDegreesFactor;
239 private static String mMessage;
250 public static void log(String tag, String message)
252 mMessage = tag +
"" + message;
253 getInstance().mActivity.runOnUiThread(
new Runnable()
257 getInstance().mActivity.getActionBar().setSubtitle(mMessage);
268 public void startWebViewer(String url)
270 new ArvosRunnable(url).run();
273 private class ArvosRunnable
extends Thread
277 public ArvosRunnable(String url)
284 Intent intent =
new Intent(Arvos.getInstance().mActivity, WebViewer.class);
285 intent.putExtra(
"url", mUrl);
287 Arvos.getInstance().mActivity.startActivity(intent);