/**
* Copyright (C) 2010-2012 Regis Montoya (aka r3gis - www.r3gis.fr)
* This file is part of CSipSimple.
*
* CSipSimple is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* If you own a pjsip commercial license you can also redistribute it
* and/or modify it under the terms of the GNU Lesser General Public License
* as an android library.
*
* CSipSimple is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with CSipSimple. If not, see <http://www.gnu.org/licenses/>.
*/
package com.csipsimple.wizards.impl;
import android.text.InputType;
import android.text.TextUtils;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.csipsimple.R;
import com.csipsimple.api.SipConfigManager;
import com.csipsimple.api.SipProfile;
import com.csipsimple.api.SipUri;
import com.csipsimple.utils.Log;
import com.csipsimple.utils.PreferencesWrapper;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.entity.StringEntity;
import java.io.IOException;
import java.lang.ref.WeakReference;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Mobex extends SimpleImplementation {
private static String THIS_FILE = "MobexW";
private LinearLayout customWizard;
private TextView customWizardText;
/**
* {@inheritDoc}
*/
@Override
protected String getDomain() {
return "conecta.mobex.com.br";
}
/**
* {@inheritDoc}
*/
@Override
protected String getDefaultName() {
return "Mobex";
}
private final static String USUAL_PREFIX = "12";
/**
* {@inheritDoc}
*/
@Override
public void fillLayout(SipProfile account) {
super.fillLayout(account);
accountUsername.getEditText().setInputType(InputType.TYPE_CLASS_PHONE);
if(TextUtils.isEmpty(account.username)){
accountUsername.setText(USUAL_PREFIX);
}
//Get wizard specific row
customWizardText = (TextView) parent.findViewById(R.id.custom_wizard_text);
customWizard = (LinearLayout) parent.findViewById(R.id.custom_wizard_row);
updateAccountInfos(account);
}
/**
* {@inheritDoc}
*/
@Override
public boolean canSave() {
boolean ok = super.canSave();
ok &= checkField(accountUsername, accountUsername.getText().trim().equalsIgnoreCase(USUAL_PREFIX));
return ok;
}
/**
* {@inheritDoc}
*/
@Override
public SipProfile buildAccount(SipProfile account) {
SipProfile acc = super.buildAccount(account);
acc.proxies = null;
String encodedUser = SipUri.encodeUser(accountUsername.getText().trim());
account.acc_id = "0"+encodedUser+" <sip:"
+ encodedUser + "@"+getDomain()+">";
return acc;
}
/**
* {@inheritDoc}
*/
@Override
public void setDefaultParams(PreferencesWrapper prefs) {
prefs.setPreferenceBooleanValue(SipConfigManager.ECHO_CANCELLATION, true);
// G729 8 KHz, PCMA 8 KHz, PCMU 8 KHz and GSM 8 KHz
prefs.setCodecPriority("PCMU/8000/1", SipConfigManager.CODEC_WB,"220");
prefs.setCodecPriority("PCMA/8000/1", SipConfigManager.CODEC_WB,"230");
prefs.setCodecPriority("G722/16000/1", SipConfigManager.CODEC_WB,"0");
prefs.setCodecPriority("G729/8000/1", SipConfigManager.CODEC_WB,"240");
prefs.setCodecPriority("iLBC/8000/1", SipConfigManager.CODEC_WB,"0");
prefs.setCodecPriority("speex/8000/1", SipConfigManager.CODEC_WB,"0");
prefs.setCodecPriority("speex/16000/1", SipConfigManager.CODEC_WB,"0");
prefs.setCodecPriority("speex/32000/1", SipConfigManager.CODEC_WB,"0");
prefs.setCodecPriority("GSM/8000/1", SipConfigManager.CODEC_WB, "210");
prefs.setCodecPriority("SILK/8000/1", SipConfigManager.CODEC_WB, "0");
prefs.setCodecPriority("SILK/12000/1", SipConfigManager.CODEC_WB, "0");
prefs.setCodecPriority("SILK/16000/1", SipConfigManager.CODEC_WB, "0");
prefs.setCodecPriority("SILK/24000/1", SipConfigManager.CODEC_WB, "0");
prefs.setCodecPriority("G726-16/8000/1", SipConfigManager.CODEC_WB, "0");
prefs.setCodecPriority("G726-24/8000/1", SipConfigManager.CODEC_WB, "0");
prefs.setCodecPriority("G726-32/8000/1", SipConfigManager.CODEC_WB, "0");
prefs.setCodecPriority("G726-40/8000/1", SipConfigManager.CODEC_WB, "0");
prefs.setCodecPriority("PCMU/8000/1", SipConfigManager.CODEC_NB,"220");
prefs.setCodecPriority("PCMA/8000/1", SipConfigManager.CODEC_NB,"230");
prefs.setCodecPriority("G722/16000/1", SipConfigManager.CODEC_NB,"0");
prefs.setCodecPriority("G729/8000/1", SipConfigManager.CODEC_NB,"240");
prefs.setCodecPriority("iLBC/8000/1", SipConfigManager.CODEC_NB,"0");
prefs.setCodecPriority("speex/8000/1", SipConfigManager.CODEC_NB,"0");
prefs.setCodecPriority("speex/16000/1", SipConfigManager.CODEC_NB,"0");
prefs.setCodecPriority("speex/32000/1", SipConfigManager.CODEC_NB,"0");
prefs.setCodecPriority("GSM/8000/1", SipConfigManager.CODEC_NB, "210");
prefs.setCodecPriority("SILK/8000/1", SipConfigManager.CODEC_NB, "0");
prefs.setCodecPriority("SILK/12000/1", SipConfigManager.CODEC_NB, "0");
prefs.setCodecPriority("SILK/16000/1", SipConfigManager.CODEC_NB, "0");
prefs.setCodecPriority("SILK/24000/1", SipConfigManager.CODEC_NB, "0");
prefs.setCodecPriority("G726-16/8000/1", SipConfigManager.CODEC_NB, "0");
prefs.setCodecPriority("G726-24/8000/1", SipConfigManager.CODEC_NB, "0");
prefs.setCodecPriority("G726-32/8000/1", SipConfigManager.CODEC_NB, "0");
prefs.setCodecPriority("G726-40/8000/1", SipConfigManager.CODEC_NB, "0");
}
// Account balance
/**
* Update view regarding account information.
* For now only get the account balance.
* @param acc The current SipProfile of this account.
*/
private void updateAccountInfos(final SipProfile acc) {
if (acc != null && acc.id != SipProfile.INVALID_ID) {
customWizard.setVisibility(View.GONE);
accountBalanceHelper.launchRequest(acc);
} else {
customWizard.setVisibility(View.GONE);
}
}
private AccountBalanceHelper accountBalanceHelper = new AccountBalance(this);
private static class AccountBalance extends AccountBalanceHelper {
private WeakReference<Mobex> w;
private Pattern p = Pattern.compile("^.*<return xsi:type=\"xsd:string\">(.*)</return>.*$");
AccountBalance(Mobex wizard){
w = new WeakReference<Mobex>(wizard);
}
@Override
public String parseResponseLine(String line) {
Matcher matcher = p.matcher(line);
if(matcher.matches()) {
String strValue = matcher.group(1).trim();
try {
float value = Float.parseFloat(strValue.trim());
if(value >= 0) {
strValue = Double.toString( Math.round(value * 100.0)/100.0 );
}
}catch(NumberFormatException e) {
Log.d(THIS_FILE, "Can't parse float value in credit "+ strValue);
}
Log.d(THIS_FILE, "We parse " + "Creditos : " + strValue + " R$");
//return "Creditos : " + strValue + " R$";
return null;
}
return null;
}
@Override
public HttpRequestBase getRequest(SipProfile acc) throws IOException {
String requestURL = "http://200.152.124.172/billing/webservice/Server.php";
HttpPost httpPost = new HttpPost(requestURL);
httpPost.addHeader("SOAPAction", "\"mostra_creditos\"");
httpPost.addHeader("Content-Type", "text/xml");
// prepare POST body
String body = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><SOAP-ENV:Envelope " +
"SOAP-ENV:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" " +
"xmlns:SOAP-ENC=\"http://schemas.xmlsoap.org/soap/encoding/\" " +
"xmlns:xsi=\"http://www.w3.org/1999/XMLSchema-instance\" " +
"xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsd=\"http://www.w3.org/1999/XMLSchema\"" +
"><SOAP-ENV:Body><mostra_creditos SOAP-ENC:root=\"1\">" +
"<chave xsi:type=\"xsd:string\">" +
acc.data +
"</chave><username xsi:type=\"xsd:string\">" +
acc.username.replaceAll("^12", "") +
"</username></mostra_creditos></SOAP-ENV:Body></SOAP-ENV:Envelope>";
Log.d(THIS_FILE, "Sending request for user " + acc.username.replaceAll("^12", ""));
// set POST body
HttpEntity entity = new StringEntity(body);
httpPost.setEntity(entity);
return httpPost;
}
@Override
public void applyResultError() {
Mobex wizard = w.get();
if(wizard != null) {
wizard.customWizard.setVisibility(View.GONE);
}
}
@Override
public void applyResultSuccess(String balanceText) {
Mobex wizard = w.get();
if(wizard != null) {
wizard.customWizardText.setText(balanceText);
wizard.customWizard.setVisibility(View.VISIBLE);
}
}
};
}