package org.commcare.android.util;
import java.util.Hashtable;
import java.util.Set;
import java.util.Vector;
import org.commcare.dalvik.application.CommCareApp;
import org.commcare.dalvik.application.CommCareApplication;
import org.commcare.resources.model.Resource;
import org.commcare.resources.model.ResourceTable;
import org.commcare.suite.model.Profile;
import org.commcare.suite.model.Suite;
import org.commcare.util.CommCarePlatform;
import org.javarosa.core.model.instance.FormInstance;
import org.javarosa.core.services.storage.IStorageUtilityIndexed;
import android.content.Context;
import android.net.Uri;
import android.os.Bundle;
/**
* @author ctsims
*
*/
public class AndroidCommCarePlatform extends CommCarePlatform {
public static final String ENTITY_NONE = "NONE";
public static final String STATE_REFERRAL_TYPE = "REFERRAL_TYPE";
private Hashtable<String, String> xmlnstable;
private Context c;
private ResourceTable global;
private ResourceTable upgrade;
private ResourceTable recovery;
private Profile profile;
private Vector<Suite> installedSuites;
CommCareApp app;
private long callDuration = 0;
public AndroidCommCarePlatform(int majorVersion, int minorVersion, Context c, CommCareApp app) {
super(majorVersion, minorVersion);
xmlnstable = new Hashtable<String, String>();
this.c = c;
installedSuites = new Vector<Suite>();
this.app = app;
}
public void registerXmlns(String xmlns, String filepath) {
xmlnstable.put(xmlns, filepath);
}
public Set<String> getInstalledForms() {
return xmlnstable.keySet();
}
public Uri getFormContentUri(String xFormNamespace) {
if(xmlnstable.containsKey(xFormNamespace)) {
return Uri.parse(xmlnstable.get(xFormNamespace));
}
//Search through manually?
return null;
}
public ResourceTable getGlobalResourceTable() {
if(global == null) {
global = ResourceTable.RetrieveTable( app.getStorage("GLOBAL_RESOURCE_TABLE", Resource.class), new AndroidResourceInstallerFactory(app));
}
return global;
}
public ResourceTable getUpgradeResourceTable() {
if(upgrade == null) {
upgrade = ResourceTable.RetrieveTable( app.getStorage("UPGRADE_RESOURCE_TABLE", Resource.class), new AndroidResourceInstallerFactory(app));
}
return upgrade;
}
public ResourceTable getRecoveryTable() {
if(recovery == null) {
recovery = ResourceTable.RetrieveTable( app.getStorage("RECOVERY_RESOURCE_TABLE", Resource.class), new AndroidResourceInstallerFactory(app));
}
return recovery;
}
public Profile getCurrentProfile() {
return profile;
}
public Vector<Suite> getInstalledSuites() {
return installedSuites;
}
public void setProfile(Profile p) {
this.profile = p;
}
public void registerSuite(Suite s) {
this.installedSuites.add(s);
}
public void pack(Bundle outgoing) {
}
public void unpack(Bundle incoming) {
if(incoming == null) {
return;
}
}
public void setCallDuration(long callDuration) {
this.callDuration = callDuration;
}
public long getCallDuration() {
return callDuration;
}
/*
* (non-Javadoc)
* @see org.commcare.util.CommCarePlatform#initialize(org.commcare.resources.model.ResourceTable)
*/
@Override
public void initialize(ResourceTable global) {
this.profile = null;
this.installedSuites.clear();
//We also need to clear any _resource table_ linked localization files which may have
//been registered from another app, or from a pre-install location.
CommCareApplication._().intializeDefaultLocalizerData();
super.initialize(global);
}
public IStorageUtilityIndexed<FormInstance> getFixtureStorage() {
return app.getStorage("fixture", FormInstance.class);
}
}