mirror of
https://github.com/apache/cordova-android.git
synced 2025-02-26 12:03:28 +08:00
Add modules that can be started without changing DroidGap.java.
This commit is contained in:
parent
f77e51290b
commit
75636f7f00
@ -25,6 +25,7 @@
|
|||||||
|
|
||||||
|
|
||||||
import com.phonegap.api.Command;
|
import com.phonegap.api.Command;
|
||||||
|
import java.util.HashMap;
|
||||||
import com.phonegap.api.CommandManager;
|
import com.phonegap.api.CommandManager;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
@ -108,7 +109,14 @@ public class DroidGap extends Activity {
|
|||||||
private int activityResultCallbackCounter = 1000;
|
private int activityResultCallbackCounter = 1000;
|
||||||
private HashMap<Integer,ActivityResultModule> activityResultCallbacks = new HashMap<Integer,ActivityResultModule>();
|
private HashMap<Integer,ActivityResultModule> activityResultCallbacks = new HashMap<Integer,ActivityResultModule>();
|
||||||
|
|
||||||
/** Called when the activity is first created. */
|
// List of modules started and managed
|
||||||
|
private HashMap<String,Module>modules = new HashMap<String,Module>();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called when the activity is first created.
|
||||||
|
*
|
||||||
|
* @param savedInstanceState
|
||||||
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
@ -204,6 +212,15 @@ public class DroidGap extends Activity {
|
|||||||
protected void onPause(){
|
protected void onPause(){
|
||||||
super.onPause();
|
super.onPause();
|
||||||
|
|
||||||
|
// Forward to modules
|
||||||
|
java.util.Set<Entry<String,Module>> s = this.modules.entrySet();
|
||||||
|
java.util.Iterator<Entry<String,Module>> it = s.iterator();
|
||||||
|
while(it.hasNext()) {
|
||||||
|
Entry<String,Module> entry = it.next();
|
||||||
|
Module module = entry.getValue();
|
||||||
|
module.onPause();
|
||||||
|
}
|
||||||
|
|
||||||
// Send pause event to JavaScript
|
// Send pause event to JavaScript
|
||||||
appView.loadUrl("javascript:try{PhoneGap.onPause.fire();}catch(e){};");
|
appView.loadUrl("javascript:try{PhoneGap.onPause.fire();}catch(e){};");
|
||||||
|
|
||||||
@ -218,6 +235,15 @@ public class DroidGap extends Activity {
|
|||||||
protected void onResume(){
|
protected void onResume(){
|
||||||
super.onResume();
|
super.onResume();
|
||||||
|
|
||||||
|
// Forward to modules
|
||||||
|
java.util.Set<Entry<String,Module>> s = this.modules.entrySet();
|
||||||
|
java.util.Iterator<Entry<String,Module>> it = s.iterator();
|
||||||
|
while(it.hasNext()) {
|
||||||
|
Entry<String,Module> entry = it.next();
|
||||||
|
Module module = entry.getValue();
|
||||||
|
module.onResume();
|
||||||
|
}
|
||||||
|
|
||||||
// Send resume event to JavaScript
|
// Send resume event to JavaScript
|
||||||
appView.loadUrl("javascript:try{PhoneGap.onResume.fire();}catch(e){};");
|
appView.loadUrl("javascript:try{PhoneGap.onResume.fire();}catch(e){};");
|
||||||
|
|
||||||
@ -265,13 +291,22 @@ public class DroidGap extends Activity {
|
|||||||
if (audio != null) {
|
if (audio != null) {
|
||||||
audio.destroy();
|
audio.destroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Clean up modules
|
||||||
|
java.util.Set<Entry<String,Module>> s = this.modules.entrySet();
|
||||||
|
java.util.Iterator<Entry<String,Module>> it = s.iterator();
|
||||||
|
while(it.hasNext()) {
|
||||||
|
Entry<String,Module> entry = it.next();
|
||||||
|
Module module = entry.getValue();
|
||||||
|
module.onDestroy();
|
||||||
|
}
|
||||||
|
|
||||||
if (callbackServer != null) {
|
if (callbackServer != null) {
|
||||||
callbackServer.destroy();
|
callbackServer.destroy();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void bindBrowser(WebView appView)
|
private void bindBrowser(WebView appView) {
|
||||||
{
|
|
||||||
callbackServer = new CallbackServer();
|
callbackServer = new CallbackServer();
|
||||||
commandManager = new CommandManager(appView, this);
|
commandManager = new CommandManager(appView, this);
|
||||||
gap = new Device(appView, this);
|
gap = new Device(appView, this);
|
||||||
@ -306,6 +341,37 @@ public class DroidGap extends Activity {
|
|||||||
geo = new GeoBroker(appView, this);
|
geo = new GeoBroker(appView, this);
|
||||||
appView.addJavascriptInterface(cupcakeStorage, "droidStorage");
|
appView.addJavascriptInterface(cupcakeStorage, "droidStorage");
|
||||||
appView.addJavascriptInterface(geo, "Geo");
|
appView.addJavascriptInterface(geo, "Geo");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
/**
|
||||||
|
* Add module to be loaded and made available from JavaScript.
|
||||||
|
*
|
||||||
|
* @param className The class to load
|
||||||
|
* @param javascriptInterface Bind the object to Javascript so that the methods can be
|
||||||
|
* accessed from Javascript using this variable name.
|
||||||
|
*/
|
||||||
|
public void addModule(String className, String javascriptInterface) {
|
||||||
|
System.out.println("DroidGap.addModule("+className+", "+javascriptInterface+")");
|
||||||
|
try {
|
||||||
|
Class cl = Class.forName(className);
|
||||||
|
Class partypes[] = new Class[2];
|
||||||
|
partypes[0] = android.webkit.WebView.class;
|
||||||
|
partypes[1] = com.phonegap.DroidGap.class;
|
||||||
|
java.lang.reflect.Constructor<Module> ct = cl.getConstructor(partypes);
|
||||||
|
Object arglist[] = new Object[2];
|
||||||
|
arglist[0] = this.appView;
|
||||||
|
arglist[1] = this;
|
||||||
|
Module module = ct.newInstance(arglist);
|
||||||
|
this.modules.put(className, module);
|
||||||
|
if (javascriptInterface != null) {
|
||||||
|
this.appView.addJavascriptInterface(module, javascriptInterface);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
System.out.println("Error adding module "+className+".");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user