Skip to content
Snippets Groups Projects
Commit 9225f1e9 authored by Xavier Gibert's avatar Xavier Gibert
Browse files

bugfix, xwalkview destroyed ondetach()

parent 148f5bbb
No related branches found
No related tags found
No related merge requests found
......@@ -15,10 +15,13 @@ import org.xwalk.core.XWalkView;
import cs.si.stavor.R;
import cs.si.stavor.app.Installer;
import cs.si.stavor.app.OrekitInit;
import cs.si.stavor.app.Parameters;
import cs.si.stavor.database.MissionReaderDbHelper;
import cs.si.stavor.dialogs.ErrorDialogFragment;
import cs.si.stavor.dialogs.ResetAppDialogFragment;
import cs.si.stavor.dialogs.ResetDbDialogFragment;
......@@ -40,6 +43,8 @@ import android.support.v7.app.ActionBar;
import android.app.DialogFragment;
import android.app.FragmentManager;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.BitmapFactory;
import android.support.v4.widget.DrawerLayout;
import android.os.Bundle;
import android.view.Menu;
......@@ -86,10 +91,7 @@ public class MainActivity extends ActionBarActivity implements
return simulator;
}
/**
* WebView from XWalk project to increase compatibility of WebGL
*/
public XWalkView mXwalkView;
@Override
......@@ -103,21 +105,11 @@ public class MainActivity extends ActionBarActivity implements
//Initialize Orekit with the data files
OrekitInit.init(Installer.getOrekitDataRoot(this));
//Install the Missions database if not installed yet and store database objects
((StavorApplication)getApplication()).db_help = Installer.installApkDatabase(this);
((StavorApplication)getApplication()).db = ((StavorApplication)getApplication()).db_help.getWritableDatabase();
//Configure application window
requestWindowFeature(Window.FEATURE_PROGRESS);
setContentView(R.layout.activity_main);
setProgressBarVisibility(true);
//Initialize WebView
mXwalkView = new XWalkView(this.getApplicationContext(), this);
mXwalkView.setResourceClient(new MyResourceClient(mXwalkView));
mXwalkView.setUIClient(new MyUIClient(mXwalkView));
// find the retained fragment on activity restarts
FragmentManager fm = getFragmentManager();
dataFragment = (RetainedFragment) fm.findFragmentByTag("data");
......@@ -127,12 +119,26 @@ public class MainActivity extends ActionBarActivity implements
// add the fragment
dataFragment = new RetainedFragment();
fm.beginTransaction().add(dataFragment, "data").commit();
// load the data from the web
dataFragment.setData(new Simulator(this));
MissionReaderDbHelper db_help_tmp;
SQLiteDatabase db_tmp;
db_help_tmp = Installer.installApkDatabase(this);
db_tmp = db_help_tmp.getWritableDatabase();
dataFragment.setData(
new Simulator(this),
db_help_tmp,
db_tmp
);
}
// the data is available in dataFragment.getData()
this.simulator = dataFragment.getData();
this.simulator = dataFragment.getSim();
//Install the Missions database if not installed yet and store database objects
((StavorApplication)getApplication()).db_help = dataFragment.getDbHelp();
((StavorApplication)getApplication()).db = dataFragment.getDb();
// NAVIGATION
......@@ -400,50 +406,9 @@ public class MainActivity extends ActionBarActivity implements
newFragment.show(getFragmentManager(), "reset_db");
}
//XWalk
/**
* XWalk client class
* @author Xavier Gibert
*
*/
class MyResourceClient extends XWalkResourceClient {
MyResourceClient(XWalkView view) {
super(view);
}
/*@Override
public void onProgressChanged(XWalkView view, int progress) {
// Activities and WebViews measure progress with different scales.
// The progress meter will automatically disappear when we reach 100%
try{
if(progress==100)
simulator.setBrowserLoaded(true);
setProgress(progress * 100);
}catch(NullPointerException nulle){
}
}*/
}
/**
* XWalk client class
* @author Xavier Gibert
*
*/
class MyUIClient extends XWalkUIClient {
MyUIClient(XWalkView view) {
super(view);
}
}
@Override
protected void onPause() {//Pause simulator and browser
super.onPause();
if (mXwalkView != null) {
mXwalkView.pauseTimers();
mXwalkView.onHide();
}
if(simulator!=null){
simulator.pause();
}
......@@ -452,38 +417,29 @@ public class MainActivity extends ActionBarActivity implements
@Override
protected void onResume() {//Resume browser
super.onResume();
if (mXwalkView != null) {
mXwalkView.resumeTimers();
mXwalkView.onShow();
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (mXwalkView != null) {
mXwalkView.onActivityResult(requestCode, resultCode, data);
}
}
@Override
protected void onNewIntent(Intent intent) {
if (mXwalkView != null) {
mXwalkView.onNewIntent(intent);
}
}
@Override
public void onDestroy() {//Disconnect simulator, close database and browser
super.onDestroy();
// store the data in the fragment
if(isFinishing())
if(isFinishing()){
simulator.disconnect();
else
dataFragment.setData(this.simulator);
((StavorApplication)getApplication()).db_help.close();
//XWalk
if (mXwalkView != null) {
mXwalkView.onDestroy();
((StavorApplication)getApplication()).db_help.close();
}else{
dataFragment.setData(
this.simulator,
((StavorApplication)getApplication()).db_help,
((StavorApplication)getApplication()).db
);
}
}
......
......@@ -6,6 +6,9 @@ import org.xwalk.core.XWalkView;
import cs.si.stavor.R;
import cs.si.stavor.MainActivity;
import cs.si.stavor.StavorApplication;
import cs.si.stavor.web.MyResourceClient;
import cs.si.stavor.web.MyUIClient;
import cs.si.stavor.app.Parameters;
import cs.si.stavor.simulator.Simulator;
import cs.si.stavor.web.WebAppInterface;
......@@ -13,6 +16,7 @@ import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.app.Fragment;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
......@@ -56,11 +60,15 @@ public final class HudFragment extends Fragment {
}
private Simulator simulator;
XWalkView browser;
LinearLayout browserLayout, slider_content;
Button views_menu;
SlidingDrawer drawer;
/**
* WebView from XWalk project to increase compatibility of WebGL
*/
public XWalkView mXwalkView;
@SuppressWarnings("deprecation")
@SuppressLint({ "JavascriptInterface", "SetJavaScriptEnabled", "NewApi" })
@Override
......@@ -69,28 +77,35 @@ public final class HudFragment extends Fragment {
View rootView = inflater.inflate(R.layout.hud_display, container,
false);
//Browser
//Initialize WebView
if(mXwalkView==null){
mXwalkView = new XWalkView(this.getActivity().getApplicationContext(), this.getActivity());
mXwalkView.setResourceClient(new MyResourceClient(mXwalkView));
mXwalkView.setUIClient(new MyUIClient(mXwalkView));
}
//Hud Panel
drawer = (SlidingDrawer) rootView.findViewById(R.id.slidingDrawer1);
drawer.setOnDrawerOpenListener(new OnDrawerOpenListener() {
public void onDrawerOpened() {
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(browser.getLayoutParams());
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(mXwalkView.getLayoutParams());
if(getResources().getConfiguration().orientation==android.content.res.Configuration.ORIENTATION_PORTRAIT){
layoutParams.height = browser.getHeight()-slider_content.getHeight();
layoutParams.height = mXwalkView.getHeight()-slider_content.getHeight();
layoutParams.width = LayoutParams.MATCH_PARENT;
}else{
layoutParams.width = browser.getWidth()-slider_content.getWidth();
layoutParams.width = mXwalkView.getWidth()-slider_content.getWidth();
layoutParams.height = LayoutParams.MATCH_PARENT;
}
browser.setLayoutParams(layoutParams);
mXwalkView.setLayoutParams(layoutParams);
}
});
drawer.setOnDrawerCloseListener(new OnDrawerCloseListener() {
public void onDrawerClosed() {
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(browser.getLayoutParams());
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(mXwalkView.getLayoutParams());
layoutParams.height = LayoutParams.MATCH_PARENT;
layoutParams.width = LayoutParams.MATCH_PARENT;
browser.setLayoutParams(layoutParams);
mXwalkView.setLayoutParams(layoutParams);
}
});
......@@ -99,12 +114,7 @@ public final class HudFragment extends Fragment {
TextView fps = ((TextView) rootView.findViewById(R.id.textViewFPS));
fps.setAlpha((float)0.0);
//Browser initialization and reference passing to the simulator
browser = ((MainActivity)getActivity()).mXwalkView;
browser = new XWalkView(this.getActivity().getApplicationContext(), this.getActivity());
XWalkSettings browserSettings = browser.getSettings();
XWalkSettings browserSettings = mXwalkView.getSettings();
browserSettings.setJavaScriptEnabled(true);
browserSettings.setUseWideViewPort(false);
......@@ -115,19 +125,19 @@ public final class HudFragment extends Fragment {
//browserSettings.setDisplayZoomControls(true);
//browserSettings.setSupportZoom(true);, OnMenuItemClickListener
browser.clearCache(true);
mXwalkView.clearCache(true);
simulator = ((MainActivity)getActivity()).getSimulator();
simulator.setHudView(rootView, browser);
simulator.setHudView(rootView, mXwalkView);
browser.addJavascriptInterface(new WebAppInterface(getActivity(), simulator.getSimulationResults()), "Android");
mXwalkView.addJavascriptInterface(new WebAppInterface(getActivity(), simulator.getSimulationResults()), "Android");
browserLayout=(LinearLayout)rootView.findViewById(R.id.simLayout);
LayoutParams browser_params = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
browser.setLayoutParams(browser_params);
mXwalkView.setLayoutParams(browser_params);
browserLayout.addView(browser);
browserLayout.addView(mXwalkView);
//browser.load(Parameters.Web.STARTING_PAGE,null);
......@@ -157,7 +167,7 @@ public final class HudFragment extends Fragment {
{
if(Parameters.Hud.start_panel_open)
drawer.open();
browser.load(Parameters.Web.STARTING_PAGE,null);
mXwalkView.load(Parameters.Web.STARTING_PAGE,null);
}
});
......@@ -254,7 +264,7 @@ public final class HudFragment extends Fragment {
return false;
}
views_menu.setText(com_view);
browser.load("javascript:changeView('"+command+"')", null);
mXwalkView.load("javascript:changeView('"+command+"')", null);
return true;
}
});
......@@ -262,4 +272,56 @@ public final class HudFragment extends Fragment {
popup.show();
}
@Override
public void onPause() {//Pause simulator and browser
super.onPause();
if (mXwalkView != null) {
mXwalkView.pauseTimers();
mXwalkView.onHide();
}
}
@Override
public void onResume() {//Resume browser
super.onResume();
if (mXwalkView != null) {
mXwalkView.resumeTimers();
mXwalkView.onShow();
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (mXwalkView != null) {
mXwalkView.onActivityResult(requestCode, resultCode, data);
}
}
/*@Override
protected void onNewIntent(Intent intent) {
if (mXwalkView != null) {
mXwalkView.onNewIntent(intent);
}
}*/
@Override
public void onDestroy() {//Disconnect simulator, close database and browser
super.onDestroy();
// store the data in the fragment
//XWalk
/*if (mXwalkView != null) {
mXwalkView.onDestroy();
}*/
}
@Override
public void onDetach() {
//XWalk
if (mXwalkView != null) {
mXwalkView.onDestroy();
}
super.onDetach();
}
}
package cs.si.stavor.fragments;
import cs.si.stavor.database.MissionReaderDbHelper;
import cs.si.stavor.simulator.Simulator;
import android.app.Fragment;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
/**
......@@ -11,7 +13,9 @@ import android.os.Bundle;
*/
public class RetainedFragment extends Fragment {
// data object we want to retain
private Simulator data;
private Simulator sim;
private MissionReaderDbHelper db_help;
private SQLiteDatabase db;
// this method is only called once for this fragment
@Override
......@@ -21,12 +25,22 @@ public class RetainedFragment extends Fragment {
setRetainInstance(true);
}
public void setData(Simulator data) {
this.data = data;
public void setData(Simulator data, MissionReaderDbHelper missionReaderDbHelper, SQLiteDatabase sqLiteDatabase) {
this.sim = data;
this.db_help = missionReaderDbHelper;
this.db = sqLiteDatabase;
}
public Simulator getData() {
return data;
public Simulator getSim() {
return sim;
}
public MissionReaderDbHelper getDbHelp() {
return db_help;
}
public SQLiteDatabase getDb() {
return db;
}
}
......@@ -7,10 +7,13 @@ import org.xwalk.core.XWalkView;
import cs.si.stavor.R;
import cs.si.stavor.MainActivity;
import cs.si.stavor.app.Parameters;
import cs.si.stavor.web.MyResourceClient;
import cs.si.stavor.web.MyUIClient;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.app.Fragment;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
......@@ -44,7 +47,10 @@ public final class TestFragment extends Fragment {
public TestFragment() {
}
XWalkView browser;
/**
* WebView from XWalk project to increase compatibility of WebGL
*/
public XWalkView mXwalkView;
@SuppressLint({ "JavascriptInterface", "SetJavaScriptEnabled", "NewApi" })
@Override
......@@ -53,13 +59,21 @@ public final class TestFragment extends Fragment {
View rootView = inflater.inflate(R.layout.test, container,
false);
//Browser
//Initialize WebView
if(mXwalkView==null){
mXwalkView = new XWalkView(this.getActivity().getApplicationContext(), this.getActivity());
mXwalkView.setResourceClient(new MyResourceClient(mXwalkView));
mXwalkView.setUIClient(new MyUIClient(mXwalkView));
}
Button button1 = ((Button) rootView.findViewById(R.id.buttonTest1));
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// button 1 was clicked!
//browser.loadUrl(Parameters.Web.TEST_PAGE_1);
browser.load(Parameters.Web.TEST_PAGE_1,null);
mXwalkView.load(Parameters.Web.TEST_PAGE_1,null);
}
});
Button button2 = ((Button) rootView.findViewById(R.id.buttonTest2));
......@@ -67,7 +81,7 @@ public final class TestFragment extends Fragment {
@Override
public void onClick(View v) {
// button 1 was clicked!
browser.load(Parameters.Web.TEST_PAGE_2,null);
mXwalkView.load(Parameters.Web.TEST_PAGE_2,null);
}
});
Button button3 = ((Button) rootView.findViewById(R.id.buttonTest3));
......@@ -75,13 +89,13 @@ public final class TestFragment extends Fragment {
@Override
public void onClick(View v) {
// button 1 was clicked!
browser.load(Parameters.Web.TEST_PAGE_3,null);
mXwalkView.load(Parameters.Web.TEST_PAGE_3,null);
}
});
browser = new XWalkView(this.getActivity().getApplicationContext(), this.getActivity());
mXwalkView = new XWalkView(this.getActivity().getApplicationContext(), this.getActivity());
XWalkSettings browserSettings = browser.getSettings();
XWalkSettings browserSettings = mXwalkView.getSettings();
browserSettings.setJavaScriptEnabled(true);
browserSettings.setUseWideViewPort(false);
......@@ -92,12 +106,12 @@ public final class TestFragment extends Fragment {
//browserSettings.setDisplayZoomControls(true);
//browserSettings.setSupportZoom(true);
browser.clearCache(true);
mXwalkView.clearCache(true);
LinearLayout browserLayout=(LinearLayout)rootView.findViewById(R.id.simLayout);
browserLayout.addView(browser);
browserLayout.addView(mXwalkView);
browser.load(Parameters.Web.TEST_PAGE_1,"");
mXwalkView.load(Parameters.Web.TEST_PAGE_1,"");
return rootView;
}
......@@ -108,4 +122,56 @@ public final class TestFragment extends Fragment {
((MainActivity) activity).onSectionAttached(getArguments().getInt(
ARG_SECTION_NUMBER));
}
@Override
public void onPause() {//Pause simulator and browser
super.onPause();
if (mXwalkView != null) {
mXwalkView.pauseTimers();
mXwalkView.onHide();
}
}
@Override
public void onResume() {//Resume browser
super.onResume();
if (mXwalkView != null) {
mXwalkView.resumeTimers();
mXwalkView.onShow();
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (mXwalkView != null) {
mXwalkView.onActivityResult(requestCode, resultCode, data);
}
}
/*@Override
protected void onNewIntent(Intent intent) {
if (mXwalkView != null) {
mXwalkView.onNewIntent(intent);
}
}*/
@Override
public void onDestroy() {//Disconnect simulator, close database and browser
super.onDestroy();
// store the data in the fragment
//XWalk
/*if (mXwalkView != null) {
mXwalkView.onDestroy();
}*/
}
@Override
public void onDetach() {
//XWalk
if (mXwalkView != null) {
mXwalkView.onDestroy();
}
super.onDetach();
}
}
package cs.si.stavor.web;
import org.xwalk.core.XWalkResourceClient;
import org.xwalk.core.XWalkView;
/**
* XWalk client class
* @author Xavier Gibert
*
*/
public class MyResourceClient extends XWalkResourceClient {
public MyResourceClient(XWalkView view) {
super(view);
}
/*@Override
public void onProgressChanged(XWalkView view, int progress) {
// Activities and WebViews measure progress with different scales.
// The progress meter will automatically disappear when we reach 100%
try{
if(progress==100)
simulator.setBrowserLoaded(true);
setProgress(progress * 100);
}catch(NullPointerException nulle){
}
}*/
}
\ No newline at end of file
package cs.si.stavor.web;
import org.xwalk.core.XWalkUIClient;
import org.xwalk.core.XWalkView;
/**
* XWalk client class
* @author Xavier Gibert
*
*/
public class MyUIClient extends XWalkUIClient {
public MyUIClient(XWalkView view) {
super(view);
}
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment