package com.savoirfairelinux.sflphone.client;

import android.os.Handler;
import android.os.Bundle;
import android.os.Message;
import android.util.Log;

public class ManagerImpl {
	
	private static final String TAG = "ManagerImpl";
	private static int sipLogLevel = 6;
	static Handler h;
	static String appPath;
	
	public ManagerImpl () {}
	
	public ManagerImpl(Handler h) {
		this.h = h;
	}
	
	public static void callBack(String s) {
		Bundle b = new Bundle();
		Log.i(TAG, "callBack: " + s);
		b.putString("callback_string", s);
		Message m = Message.obtain();
		m.setData(b);
		m.setTarget(h);
		m.sendToTarget();
	}

	public static String getAppPath() {
		return appPath;
	}
	
	public static void setAppPath(String path) {
		appPath = path;
	}

	public static int getSipLogLevel() {
		return sipLogLevel;
	}

	public static native void callVoid();
	public static native Data getNewData(int i, String s);
	public static native String getDataString(Data d);
	
	public static native void setSipLogLevel(String level);
    public static native String getJniString();
	public static native void initN(String config_file);
	public static native void placeCall(String accountID, String callID, String to);
	public static native void hangUp(String callID);
}
