package org.commcare.android.resource.installers; import org.commcare.resources.model.Resource; import org.commcare.resources.model.UnresolvedResourceException; import org.commcare.utils.AndroidCommCarePlatform; import org.javarosa.core.reference.Reference; import org.javarosa.core.services.locale.Localization; import org.javarosa.core.util.externalizable.DeserializationException; import org.javarosa.core.util.externalizable.ExtUtil; import org.javarosa.core.util.externalizable.PrototypeFactory; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; /** * @author ctsims */ public class LocaleAndroidInstaller extends FileSystemInstaller { private String locale; @SuppressWarnings("unused") public LocaleAndroidInstaller() { // For externalization } public LocaleAndroidInstaller(String destination, String upgradeDestination, String locale) { super(destination, upgradeDestination); this.locale = locale; } @Override public boolean initialize(AndroidCommCarePlatform instance, boolean isUpgrade) { Localization.registerLanguageReference(locale, localLocation); return true; } @Override protected int customInstall(Resource r, Reference local, boolean upgrade) throws IOException, UnresolvedResourceException { return upgrade ? Resource.RESOURCE_STATUS_UPGRADE : Resource.RESOURCE_STATUS_INSTALLED; } @Override public boolean requiresRuntimeInitialization() { return true; } @Override public void readExternal(DataInputStream in, PrototypeFactory pf) throws IOException, DeserializationException { super.readExternal(in, pf); this.locale = ExtUtil.nullIfEmpty(ExtUtil.readString(in)); } @Override public void writeExternal(DataOutputStream out) throws IOException { super.writeExternal(out); ExtUtil.writeString(out, ExtUtil.emptyIfNull(locale)); } }