diff --git a/contrib/mobile/Android/AndroidManifest.xml b/contrib/mobile/Android/AndroidManifest.xml index 924a421517914fd3ebf87512426e04e799748ba2..b576adcd31ac5be62515d52e27095d3bd0c17b8b 100644 --- a/contrib/mobile/Android/AndroidManifest.xml +++ b/contrib/mobile/Android/AndroidManifest.xml @@ -2,7 +2,7 @@ package="org.geuz.onelab" android:versionCode="1" android:versionName="1.0" - android:installLocation="preferExternal" + android:installLocation="auto" > <uses-feature android:glEsVersion="0x00010000" android:required="true"></uses-feature> @@ -42,6 +42,13 @@ <data android:scheme="file" android:host="*" android:pathPattern=".*\\.pro" android:mimeType="*/*" /> </intent-filter> </activity> + <activity + android:name=".PostProcessingActivity" + android:label="@string/title_activity_main"> + </activity> + <activity + android:name=".OptionsActivity" + android:label="@string/title_activity_options"></activity> </application> </manifest> \ No newline at end of file diff --git a/contrib/mobile/Android/res/layout/activity_twopane.xml b/contrib/mobile/Android/res/layout/activity_twopane.xml index 842d0b543e4a2e22f49d0ed871e7710d397cde9a..2b02a4d5e827833dc0c8c49ef4678877ecc916ee 100644 --- a/contrib/mobile/Android/res/layout/activity_twopane.xml +++ b/contrib/mobile/Android/res/layout/activity_twopane.xml @@ -11,6 +11,7 @@ <FrameLayout android:id="@+id/parameter_fragment" android:name="org.geuz.onelab.OptionsDisplayFragment" + android:layout_marginTop="48dp" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" /> diff --git a/contrib/mobile/Android/res/layout/fragment_options_display.xml b/contrib/mobile/Android/res/layout/fragment_options_display.xml index 860d37227bc80f874cc534d07fb8150493ebea03..beba95bd6f41b165e4fa4441fc1040f0b0f46a72 100644 --- a/contrib/mobile/Android/res/layout/fragment_options_display.xml +++ b/contrib/mobile/Android/res/layout/fragment_options_display.xml @@ -2,7 +2,6 @@ <org.geuz.onelab.SeparatedListView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" - android:layout_marginTop="48dp" android:id="@+id/displayOptionsList"> diff --git a/contrib/mobile/Android/res/values/strings.xml b/contrib/mobile/Android/res/values/strings.xml index 5677f9fbba95d8c9a321f11b8f7e380300f691fc..982ffae332443539a2ae5cd3fe65850a190ab4f7 100644 --- a/contrib/mobile/Android/res/values/strings.xml +++ b/contrib/mobile/Android/res/values/strings.xml @@ -6,8 +6,8 @@ <string name="button_recalculate_param">Recalulate with new parameters</string> <string name="dialog_title_choosefile">Choose a file</string> <string name="error_nosdcard">No SDcard found on your device</string> - <string name="title_parameter">Settings</string> <string name="title_activity_main">Onelab</string> + <string name="title_activity_options">Parameters</string> <string name="error_nomshfile">No compatible files or directories in this folder</string> <string name="menu_model">Show the model</string> <string name="menu_parameters">Parameters</string> @@ -17,5 +17,5 @@ <string name="menu_stop">Stop</string> <string name="postpro_intervalstype">Intervals type</string> <string name="postpro_intervals">Intervals</string> - <string name="postpro_raizez">Raise (Z)</string> + <string name="postpro_raisez">Raise (Z)</string> </resources> \ No newline at end of file diff --git a/contrib/mobile/Android/src/org/geuz/onelab/MainActivity.java b/contrib/mobile/Android/src/org/geuz/onelab/MainActivity.java index 37b26dc91a2f4982992e2f670f46701dee3c7897..766379f71f60f4967711d5dbbd18e10f73dec15c 100644 --- a/contrib/mobile/Android/src/org/geuz/onelab/MainActivity.java +++ b/contrib/mobile/Android/src/org/geuz/onelab/MainActivity.java @@ -17,6 +17,7 @@ import android.graphics.drawable.ColorDrawable; import android.os.AsyncTask; import android.os.Bundle; import android.os.Handler; +import android.os.Parcelable; import android.app.FragmentTransaction; import android.view.Menu; import android.view.MenuItem; @@ -63,23 +64,18 @@ public class MainActivity extends Activity{ else this.finish(); _twoPane = (findViewById(R.id.parameter_fragment) != null); + _modelFragment = ModelFragment.newInstance(_gmsh); + getFragmentManager().beginTransaction().add(R.id.model_fragment, _modelFragment).commit(); if(_twoPane) { _optionsFragment = OptionsFragment.newInstance(_gmsh); getFragmentManager().beginTransaction().add(R.id.parameter_fragment, _optionsFragment).commit(); - _modelFragment = ModelFragment.newInstance(_gmsh); - getFragmentManager().beginTransaction().add(R.id.model_fragment, _modelFragment).commit(); + _optionsFragment.setOnOptionsChangedListener(new OptionsFragment.OnOptionsChangedListener() { + + public void OnOptionsChanged() { + _modelFragment.requestRender(); + } + }); } - else { - _optionsFragment = OptionsFragment.newInstance(_gmsh); - _modelFragment = ModelFragment.newInstance(_gmsh); - getFragmentManager().beginTransaction().add(R.id.model_fragment, _modelFragment).commit(); - } - _optionsFragment.setOnOptionsChangedListener(new OptionsFragment.OnOptionsChangedListener() { - - public void OnOptionsChanged() { - _modelFragment.requestRender(); - } - }); } @Override @@ -101,18 +97,10 @@ public class MainActivity extends Activity{ @Override public boolean onMenuItemSelected(int featureId, MenuItem item) { if (item.getTitle().equals(getString(R.string.menu_parameters))) { - item.setTitle(R.string.menu_model); - FragmentTransaction ft = getFragmentManager().beginTransaction(); - ft.replace(R.id.model_fragment, _optionsFragment); - ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); - ft.commit(); - } - else if (item.getTitle().equals(getString(R.string.menu_model))) { - item.setTitle(R.string.menu_parameters); - FragmentTransaction ft = getFragmentManager().beginTransaction(); - ft.replace(R.id.model_fragment, _modelFragment); - ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_CLOSE); - ft.commit(); + Intent intent = new Intent(this, OptionsActivity.class); + intent.putExtra("Gmsh", (Parcelable)_gmsh); + startActivity(intent); + _modelFragment.requestRender(); } else if(item.getTitle().equals(getString(R.string.menu_run))){ if(_switchFragmentMenuItem != null && _switchFragmentMenuItem.getTitle().equals(getString(R.string.menu_model))) { diff --git a/contrib/mobile/Android/src/org/geuz/onelab/OptionsActivity.java b/contrib/mobile/Android/src/org/geuz/onelab/OptionsActivity.java new file mode 100644 index 0000000000000000000000000000000000000000..1c769ebc102eb7576166f7b2f6f7f7648bd30e6a --- /dev/null +++ b/contrib/mobile/Android/src/org/geuz/onelab/OptionsActivity.java @@ -0,0 +1,27 @@ +package org.geuz.onelab; + +import android.app.Activity; +import android.os.Bundle; +import android.view.MenuItem; + +public class OptionsActivity extends Activity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_fragment); + Bundle extra = getIntent().getExtras(); + Gmsh gmsh = extra.getParcelable("Gmsh"); + getActionBar().setDisplayHomeAsUpEnabled(true); + getActionBar().setTitle(R.string.title_activity_options); + OptionsFragment optionsFragment = OptionsFragment.newInstance(gmsh); + 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/OptionsModelFragment.java b/contrib/mobile/Android/src/org/geuz/onelab/OptionsModelFragment.java index c3b82a6878e869b3def205920c15f32c4ef832e4..007aa6e7c97e6088f624e1628914878c7784fe68 100644 --- a/contrib/mobile/Android/src/org/geuz/onelab/OptionsModelFragment.java +++ b/contrib/mobile/Android/src/org/geuz/onelab/OptionsModelFragment.java @@ -43,6 +43,7 @@ public class OptionsModelFragment extends Fragment{ public void refresh() { if(_gmsh == null) return; + if(_listView != null){ _listView.clear(); params.clear();} this.getAvailableParam(); if(_listView != null) _listView.refresh(); } @@ -51,12 +52,18 @@ public class OptionsModelFragment extends Fragment{ String[] tmp = _gmsh.getParams(); for(String s : tmp){ // for each parameters in ONEALB boolean found = false; - for(Parameter p : params){ // for each parameters + for(int i = 0; i<params.size(); i++){ // for each parameters + Parameter p = params.get(i); if(s.split(Character.toString((char)0x03))[2].equals(p.getName())){ // the parameter already exist, just refresh it - if(p.getType().equals("ParameterNumber")) - ((ParameterNumber)p).fromString(s); - else if(p.getType().equals("ParameterString")) - ((ParameterString)p).fromString(s); + if(p.getType().equals("ParameterNumber")){ + if(((ParameterNumber)p).fromString(s) == -1){ + params.remove(i); + } + } + else if(p.getType().equals("ParameterString")){ + if(((ParameterString)p).fromString(s) == -1) + params.remove(i); + } found = true; break; } diff --git a/contrib/mobile/Android/src/org/geuz/onelab/ParameterNumber.java b/contrib/mobile/Android/src/org/geuz/onelab/ParameterNumber.java index 2170219437a619cedcf1e08a8cd1698bf5b79ead..5864797deea069be929690b34ad3d3e3574563ef 100644 --- a/contrib/mobile/Android/src/org/geuz/onelab/ParameterNumber.java +++ b/contrib/mobile/Android/src/org/geuz/onelab/ParameterNumber.java @@ -77,10 +77,9 @@ public class ParameterNumber extends Parameter{ return; } if(value == _value) return; - if(mListener != null) mListener.OnParameterChanged(); - _changed = true; _value = value; - this.update(); + _changed = true; + if(mListener != null) mListener.OnParameterChanged(); } public void setMin(double min) {_min = min;this.update();} public void setMax(double max) {_max = max;this.update();} @@ -142,6 +141,8 @@ public class ParameterNumber extends Parameter{ this.update(); return pos; } + if(_choices != null)_choices.clear(); + if(_values != null) _values.clear(); for(int i=0; i<nLabels && nChoix == nLabels; i++) { double val = Double.parseDouble(infos[pos++]); // choice @@ -164,15 +165,11 @@ public class ParameterNumber extends Parameter{ paramLayout.addView(_spinner); _spinner.setEnabled(!_readOnly); _spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { - public void onNothingSelected(AdapterView<?> arg0) {} - - public void onItemSelected(AdapterView<?> parent, View view, - int pos, long id) { + public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) { setValue(_values.get(pos)); _gmsh.setParam(getType(), getName(), String.valueOf(_values.get(pos))); } - }); } else if(_bar != null) { diff --git a/contrib/mobile/Android/src/org/geuz/onelab/ParameterString.java b/contrib/mobile/Android/src/org/geuz/onelab/ParameterString.java index 8b4801b90b35d241596f0493b83bea88ddbb7103..eb65c783472e8d857514026d943cf70a93a3b1a5 100644 --- a/contrib/mobile/Android/src/org/geuz/onelab/ParameterString.java +++ b/contrib/mobile/Android/src/org/geuz/onelab/ParameterString.java @@ -80,7 +80,6 @@ public class ParameterString extends Parameter{ public int getIndex() {return _index;} public ArrayList<String> getChoices() {return _choices;} public int fromString(String s){ - _choices.clear(); int pos = super.fromString(s); if(pos <= 0) return -1; // error String[] infos = s.split(Character.toString((char)0x03)); @@ -91,6 +90,7 @@ public class ParameterString extends Parameter{ int nChoices = Integer.parseInt(infos[pos++]); if(nChoices < 1 && _kind.equals("generic")) _edittext = new EditText(_context); + if(_choices != null)_choices.clear(); for(int i=0;i<nChoices;i++) this.addChoices(infos[pos++]); // ... setValue(value); diff --git a/contrib/mobile/androidGModel.cpp b/contrib/mobile/androidGModel.cpp index 1f7a2a4487ca6e1d77274148d1cd8a1e393df636..629258807c8fbbefafc4213abb7ca6d407557d48 100644 --- a/contrib/mobile/androidGModel.cpp +++ b/contrib/mobile/androidGModel.cpp @@ -255,13 +255,17 @@ JNIEXPORT jint JNICALL Java_org_geuz_onelab_Gmsh_setParam // Get the original param and then change the value if(strcmp(type,"ParameterNumber") == 0){ std::vector<onelab::number> s; - if(onelab::server::instance()->get(s, name)) s[0].setValue(atof(value)); - onelab::server::instance()->set(s[0]); + if(onelab::server::instance()->get(s, name)){ + s[0].setValue(atof(value)); + onelab::server::instance()->set(s[0]); + } } else if(strcmp(type,"ParameterString") == 0){ std::vector<onelab::string> s; - if(onelab::server::instance()->get(s, name)) s[0].setValue(value); - onelab::server::instance()->set(s[0]); + if(onelab::server::instance()->get(s, name)){ + s[0].setValue(value); + onelab::server::instance()->set(s[0]); + } } }