From 40a82e3f44a9675c6a85760a42fdde4feec2d4ab Mon Sep 17 00:00:00 2001
From: Maxime Graulich <maxime.graulich@gmail.com>
Date: Fri, 6 Sep 2013 08:15:30 +0000
Subject: [PATCH] Android: add raise(Z) for PViews

---
 .../res/layout/fragment_postprocessing.xml    |  4 ++--
 .../Android/src/org/geuz/onelab/Gmsh.java     |  2 +-
 .../src/org/geuz/onelab/MainActivity.java     | 19 ++++++++++++---
 .../geuz/onelab/OptionsDisplayFragment.java   |  2 +-
 .../onelab/OptionsPostProcessingFragment.java | 23 ++++++++++++++-----
 .../geuz/onelab/PostProcessingActivity.java   |  8 +++++++
 .../src/org/geuz/onelab/mGLSurfaceView.java   |  5 ++--
 contrib/mobile/androidGModel.cpp              |  6 +++--
 contrib/mobile/androidGModel.h                |  4 ++--
 9 files changed, 54 insertions(+), 19 deletions(-)

diff --git a/contrib/mobile/Android/res/layout/fragment_postprocessing.xml b/contrib/mobile/Android/res/layout/fragment_postprocessing.xml
index 8954b882e9..52641104c4 100644
--- a/contrib/mobile/Android/res/layout/fragment_postprocessing.xml
+++ b/contrib/mobile/Android/res/layout/fragment_postprocessing.xml
@@ -28,11 +28,11 @@
 	<TextView
 	    android:layout_width="match_parent"
 	    android:layout_height="wrap_content"
-        android:text="@string/postpro_raizez" />
+        android:text="@string/postpro_raisez" />
 	<SeekBar 
 	    android:id="@+id/raisez"
 	    android:layout_width="match_parent"
 	    android:layout_height="wrap_content"
-	    android:max="1" />
+	    android:max="5" />
 
 </LinearLayout>
\ No newline at end of file
diff --git a/contrib/mobile/Android/src/org/geuz/onelab/Gmsh.java b/contrib/mobile/Android/src/org/geuz/onelab/Gmsh.java
index fb619ef1fd..6aea742505 100644
--- a/contrib/mobile/Android/src/org/geuz/onelab/Gmsh.java
+++ b/contrib/mobile/Android/src/org/geuz/onelab/Gmsh.java
@@ -29,7 +29,7 @@ public class Gmsh implements Parcelable {
 	public native double getDoubleOption(String category, String name);
 	public native int getIntegerOption(String category, String name);
 	public native String[] getPView(); // get a list of PViews
-	public native void setPView(int position, int intervalsType,int visible,int nbIso); // Change options for a PView
+	public native void setPView(int position, int intervalsType,int visible,int nbIso, float raisez); // Change options for a PView
 	public native int onelabCB(String action); // Call onelab
 	
 	/** Java CLASS **/
diff --git a/contrib/mobile/Android/src/org/geuz/onelab/MainActivity.java b/contrib/mobile/Android/src/org/geuz/onelab/MainActivity.java
index d3e0162315..659d1f67f9 100644
--- a/contrib/mobile/Android/src/org/geuz/onelab/MainActivity.java
+++ b/contrib/mobile/Android/src/org/geuz/onelab/MainActivity.java
@@ -49,8 +49,9 @@ public class MainActivity extends Activity{
 		actionBar.setDisplayHomeAsUpEnabled(true);
 		actionBar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#64000000")));
 		Intent intent = getIntent();
-    	Bundle extras = intent.getExtras(); 
-    	if(intent != null && intent.getAction() != null && intent.getAction().equals(Intent.ACTION_VIEW)) {
+    	Bundle extras = intent.getExtras();
+    	if(savedInstanceState != null);
+    	else if(intent != null && intent.getAction() != null && intent.getAction().equals(Intent.ACTION_VIEW)) {
     		String tmp = intent.getData().getPath();
     		_gmsh.load(tmp);
     	}    		
@@ -81,6 +82,11 @@ public class MainActivity extends Activity{
 		});
 	}
 	
+	@Override
+	protected void onSaveInstanceState(Bundle outState) {
+		super.onSaveInstanceState(outState);
+	}
+	
 	@Override
     public boolean onCreateOptionsMenu(Menu menu) {
     	super.onCreateOptionsMenu(menu);
@@ -88,7 +94,7 @@ public class MainActivity extends Activity{
     		_switchFragmentMenuItem = menu.add(R.string.menu_parameters);
     		_switchFragmentMenuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
     	}
-    	_runStopMenuItem = menu.add(R.string.menu_run);
+    	_runStopMenuItem = menu.add((_compute)?R.string.menu_stop:R.string.menu_run);
     	_runStopMenuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
         return true;
     }
@@ -201,6 +207,12 @@ public class MainActivity extends Activity{
 		_notify = false;
 	}
 	
+	@Override
+	protected void onStop() {
+		super.onStop();
+		_notify = true;
+	}
+	
 	private void notifyEndOfCompute() {
 		Intent intent = new Intent(this, MainActivity.class);
 	    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);
@@ -211,6 +223,7 @@ public class MainActivity extends Activity{
 		        .setContentIntent(pendingIntent)
 		        .setContentTitle("ONELAB")
 		        .setDefaults(Notification.DEFAULT_ALL)
+		        .setAutoCancel(true)
 		        .setContentText("The compute is finished");
 		NotificationManager mNotificationManager =
 			    (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
diff --git a/contrib/mobile/Android/src/org/geuz/onelab/OptionsDisplayFragment.java b/contrib/mobile/Android/src/org/geuz/onelab/OptionsDisplayFragment.java
index cab1edbac3..5dfd3ba2ca 100644
--- a/contrib/mobile/Android/src/org/geuz/onelab/OptionsDisplayFragment.java
+++ b/contrib/mobile/Android/src/org/geuz/onelab/OptionsDisplayFragment.java
@@ -105,7 +105,7 @@ public class OptionsDisplayFragment extends Fragment{
         	checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
 				
 				public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
-					_gmsh.setPView(myID, -1, (isChecked)? 1 : 0, -1);
+					_gmsh.setPView(myID, -1, (isChecked)? 1 : 0, -1, -1);
 					if(mListener != null) mListener.OnModelOptionsChanged();
 				}
 			});
diff --git a/contrib/mobile/Android/src/org/geuz/onelab/OptionsPostProcessingFragment.java b/contrib/mobile/Android/src/org/geuz/onelab/OptionsPostProcessingFragment.java
index 14f4107c09..1b12d24dd3 100644
--- a/contrib/mobile/Android/src/org/geuz/onelab/OptionsPostProcessingFragment.java
+++ b/contrib/mobile/Android/src/org/geuz/onelab/OptionsPostProcessingFragment.java
@@ -7,6 +7,7 @@ import android.content.Context;
 import android.os.Bundle;
 import android.text.Editable;
 import android.text.TextWatcher;
+import android.util.Log;
 import android.view.KeyEvent;
 import android.view.LayoutInflater;
 import android.view.View;
@@ -48,11 +49,22 @@ public class OptionsPostProcessingFragment extends Fragment{
 			Bundle savedInstanceState) {
 		String[] PViews = _gmsh.getPView();
 		String[] infos = PViews[_pview].split("\n");
+		if(infos.length != 5){ Log.e("Gmsh", "Pview length is incorect"); return null;}
 		getActivity().getActionBar().setTitle(infos[0]);
 		LinearLayout layout =  (LinearLayout)inflater.inflate(R.layout.fragment_postprocessing, container, false);
 		final Spinner intervalsType = (Spinner)layout.findViewById(R.id.intervals_type);
 		final EditText intervals = (EditText)layout.findViewById(R.id.intervals);
-		final SeekBar raiseZ = (SeekBar)layout.findViewById(R.id.raisez); // TODO
+		final SeekBar raiseZ = (SeekBar)layout.findViewById(R.id.raisez);
+		raiseZ.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
+			
+			public void onStopTrackingTouch(SeekBar seekBar) {} // UNUSED Auto-generated method stub
+			public void onStartTrackingTouch(SeekBar seekBar) {} // UNUSED Auto-generated method stub
+			public void onProgressChanged(SeekBar seekBar, int progress,
+					boolean fromUser) {
+				_gmsh.setPView(_pview, -1, -1, -1, progress);
+			}
+		});
+		raiseZ.setProgress(Integer.parseInt(infos[4]));
 		intervalsType.setEnabled(infos[2].equals("1"));
 		ArrayList<String> choices;
 		ArrayAdapter<String> adapter;
@@ -66,7 +78,7 @@ public class OptionsPostProcessingFragment extends Fragment{
 		intervalsType.setSelection(Integer.parseInt(infos[1])-1);
 		intervalsType.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
 			public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
-				_gmsh.setPView(_pview, pos+1, -1, -1);
+				_gmsh.setPView(_pview, pos+1, -1, -1, -1);
 				//TODO glView.requestRender();
 				intervals.setEnabled(pos == 0 || pos == 2);
 			}
@@ -98,10 +110,9 @@ public class OptionsPostProcessingFragment extends Fragment{
 					nIso = 1;
 					intervals.setText("");
 				}
-				if(nIso > 1000) {_gmsh.setPView(_pview, -1, -1, 1000); intervals.setText("1000");}
-				else if(nIso > 0) _gmsh.setPView(_pview, -1, -1, nIso);
-				else _gmsh.setPView(_pview, -1, -1, 1);
-				//glView.requestRender();
+				if(nIso > 1000) {_gmsh.setPView(_pview, -1, -1, 1000, -1); intervals.setText("1000");}
+				else if(nIso > 0) _gmsh.setPView(_pview, -1, -1, nIso, -1);
+				else _gmsh.setPView(_pview, -1, -1, 1, -1);
 			}
 			
 			public void beforeTextChanged(CharSequence s, int start, int count, int after) {} // UNUSED Auto-generated method stub
diff --git a/contrib/mobile/Android/src/org/geuz/onelab/PostProcessingActivity.java b/contrib/mobile/Android/src/org/geuz/onelab/PostProcessingActivity.java
index 709647a0fc..71b042549f 100644
--- a/contrib/mobile/Android/src/org/geuz/onelab/PostProcessingActivity.java
+++ b/contrib/mobile/Android/src/org/geuz/onelab/PostProcessingActivity.java
@@ -2,6 +2,7 @@ package org.geuz.onelab;
 
 import android.app.Activity;
 import android.os.Bundle;
+import android.view.MenuItem;
 
 public class PostProcessingActivity extends Activity{
 	@Override
@@ -15,4 +16,11 @@ public class PostProcessingActivity extends Activity{
 		OptionsPostProcessingFragment optionsFragment = OptionsPostProcessingFragment.newInstance(gmsh, id);
 		getFragmentManager().beginTransaction().add(R.id.model_fragment, optionsFragment).commit();
 	}
+	
+	@Override
+	public boolean onMenuItemSelected(int featureId, MenuItem item) {
+		if(item.getItemId() == android.R.id.home)
+			this.finish();
+		return super.onMenuItemSelected(featureId, item);
+	}
 }
diff --git a/contrib/mobile/Android/src/org/geuz/onelab/mGLSurfaceView.java b/contrib/mobile/Android/src/org/geuz/onelab/mGLSurfaceView.java
index 2910b6e338..09fdd481f7 100644
--- a/contrib/mobile/Android/src/org/geuz/onelab/mGLSurfaceView.java
+++ b/contrib/mobile/Android/src/org/geuz/onelab/mGLSurfaceView.java
@@ -90,9 +90,10 @@ class mGLSurfaceView extends GLSurfaceView {
 
 		public boolean onScroll(MotionEvent e1, MotionEvent e2,
 				float distanceX, float distanceY) {
+			if(e1.getPointerCount() > 1 || e2.getPointerCount() > 1) return false;
 			_renderer.translateModel(e2.getX(), e2.getY());
 			requestRender();
-			return false;
+			return true;
 		}
 
 		public void onShowPress(MotionEvent e) {
@@ -112,7 +113,7 @@ class mGLSurfaceView extends GLSurfaceView {
 			scaleFactor = 1f;
 			_renderer.resetModelPosition();
 			requestRender();
-			return false;
+			return true;
 		}
 		public boolean onSingleTapConfirmed(MotionEvent e) {
 			// UNUSED Auto-generated method stub
diff --git a/contrib/mobile/androidGModel.cpp b/contrib/mobile/androidGModel.cpp
index 459f20644c..1f7a2a4487 100644
--- a/contrib/mobile/androidGModel.cpp
+++ b/contrib/mobile/androidGModel.cpp
@@ -275,7 +275,8 @@ JNIEXPORT jobjectArray JNICALL Java_org_geuz_onelab_Gmsh_getPView
 		sstream	<< PView::list[i]->getData()->getName().c_str()
 			<< "\n" <<  PView::list[i]->getOptions()->intervalsType
 			<< "\n" << ((PView::list[i]->getOptions()->visible) ? 1 : 0)
-			<< "\n"  << PView::list[i]->getOptions()->nbIso;
+			<< "\n" << PView::list[i]->getOptions()->nbIso
+			<< "\n" << PView::list[i]->getOptions()->raise[2];
 		jstring s = env->NewStringUTF(sstream.str().c_str());
 		env->SetObjectArrayElement(jPView, i, s);
 		env->DeleteLocalRef(s);
@@ -284,11 +285,12 @@ JNIEXPORT jobjectArray JNICALL Java_org_geuz_onelab_Gmsh_getPView
 }
 
 JNIEXPORT void JNICALL Java_org_geuz_onelab_Gmsh_setPView
-  (JNIEnv *env, jobject, jint pos, jint intervalsType, jint visible, jint nIntervals)
+  (JNIEnv *env, jobject, jint pos, jint intervalsType, jint visible, jint nIntervals, jfloat raisez)
 {
 	if(intervalsType > 0 && intervalsType < 4) PView::list[pos]->getOptions()->intervalsType = intervalsType;
 	if(visible >= 0) PView::list[pos]->getOptions()->visible = visible;
 	if(nIntervals > 0) PView::list[pos]->getOptions()->nbIso = nIntervals;
+	if(raisez>0) PView::list[pos]->getOptions()->raise[2] = raisez;
 	PView::list[pos]->setChanged(true);
 }
 
diff --git a/contrib/mobile/androidGModel.h b/contrib/mobile/androidGModel.h
index 4ebc485c23..e886d82ab0 100644
--- a/contrib/mobile/androidGModel.h
+++ b/contrib/mobile/androidGModel.h
@@ -124,10 +124,10 @@ JNIEXPORT jobjectArray JNICALL Java_org_geuz_onelab_Gmsh_getPView
 /*
  * Class:     org_geuz_onelab_Gmsh
  * Method:    setPView
- * Signature: (IIII)V
+ * Signature: (IIIIF)V
  */
 JNIEXPORT void JNICALL Java_org_geuz_onelab_Gmsh_setPView
-  (JNIEnv *, jobject, jint, jint, jint, jint);
+  (JNIEnv *, jobject, jint, jint, jint, jint, jfloat);
 
 /*
  * Class:     org_geuz_onelab_Gmsh
-- 
GitLab