// Path: app/src/main/java/org/simlar/helper/CallEndReason.java
// public enum CallEndReason
// {
// 	NONE,
// 	DECLINED,
// 	OFFLINE,
// 	UNSUPPORTED_MEDIA,
// 	BUSY,
// 	SERVER_CONNECTION_TIMEOUT;
// 
// 	public static CallEndReason fromReason(final Reason reason)
// 	{
// 		if (reason == null) {
// 			return NONE;
// 		}
// 
// 		switch (reason) {
// 		case Declined:
// 			return DECLINED;
// 		case NotFound:
// 			return OFFLINE;
// 		case NotImplemented:
// 		case NotAcceptable:
// 		case UnsupportedContent:
// 			return UNSUPPORTED_MEDIA;
// 		case Busy:
// 			return BUSY;
// 		case Transferred:
// 		case BadEvent:
// 		case SessionIntervalTooSmall:
// 		case None:
// 		case NoResponse:
// 		case Forbidden:
// 		case NotAnswered:
// 		case IOError:
// 		case DoNotDisturb:
// 		case Unauthorized:
// 		case NoMatch:
// 		case MovedPermanently:
// 		case Gone:
// 		case TemporarilyUnavailable:
// 		case AddressIncomplete:
// 		case BadGateway:
// 		case ServerTimeout:
// 		case Unknown:
// 		default:
// 			return NONE;
// 		}
// 	}
// 
// 	public int getDisplayMessageId()
// 	{
// 		switch (this) {
// 		case DECLINED:
// 			return R.string.call_activity_call_ended_because_declined;
// 		case OFFLINE:
// 			return R.string.call_activity_call_ended_because_user_offline;
// 		case UNSUPPORTED_MEDIA:
// 			return R.string.call_activity_call_ended_because_incompatible_media;
// 		case BUSY:
// 			return R.string.call_activity_call_ended_because_user_busy;
// 		case SERVER_CONNECTION_TIMEOUT:
// 			return R.string.call_activity_connecting_to_server_timed_out;
// 		case NONE:
// 		default:
// 			return R.string.call_activity_call_ended_normally;
// 		}
// 	}
// }
// 
// Path: app/src/main/java/org/simlar/helper/NetworkQuality.java
// public enum NetworkQuality
// {
// 	UNKNOWN,
// 	GOOD,
// 	AVERAGE,
// 	POOR,
// 	VERY_POOR,
// 	UNUSABLE;
// 
// 	public static NetworkQuality fromFloat(final float quality)
// 	{
// 		if (4 <= quality && quality <= 5) {
// 			return GOOD;
// 		}
// 
// 		if (3 <= quality && quality < 4) {
// 			return AVERAGE;
// 		}
// 
// 		if (2 <= quality && quality < 3) {
// 			return POOR;
// 		}
// 
// 		if (1 <= quality && quality < 2) {
// 			return VERY_POOR;
// 		}
// 
// 		if (0 <= quality && quality < 1) {
// 			return UNUSABLE;
// 		}
// 
// 		return UNKNOWN;
// 	}
// 
// 	public int getDescription()
// 	{
// 		switch (this) {
// 		case GOOD:
// 			return R.string.network_quality_good;
// 		case AVERAGE:
// 			return R.string.network_quality_average;
// 		case POOR:
// 			return R.string.network_quality_poor;
// 		case VERY_POOR:
// 			return R.string.network_quality_very_poor;
// 		case UNUSABLE:
// 			return R.string.network_quality_unusable;
// 		case UNKNOWN:
// 		default:
// 			return R.string.network_quality_unknown;
// 		}
// 	}
// 
// 	public boolean isKnown()
// 	{
// 		return this != UNKNOWN;
// 	}
// }
// 
// Path: app/src/main/java/org/simlar/helper/VideoState.java
// public enum VideoState
// {
// 	OFF,
// 	REQUESTING,
// 	REMOTE_REQUESTED,
// 	DENIED,
// 	ACCEPTED,
// 	INITIALIZING,
// 	PLAYING
// }
// 
// Path: app/src/main/java/org/simlar/service/AudioOutputType.java
// public enum AudioOutputType
// {
// 	PHONE(R.string.audio_output_type_phone),
// 	WIRED_HEADSET(R.string.audio_output_type_wired_headset),
// 	SPEAKER(R.string.audio_output_type_speaker),
// 	BLUETOOTH(R.string.audio_output_type_bluetooth);
// 
// 	private final int mResourceId;
// 
// 	AudioOutputType(final int resourceId)
// 	{
// 		mResourceId = resourceId;
// 	}
// 
// 	public String toDisplayName(final Context context)
// 	{
// 		return context.getString(mResourceId);
// 	}
// }


import java.util.Set;
import org.linphone.core.Call.State;
import org.linphone.core.RegistrationState;
import org.simlar.helper.CallEndReason;
import org.simlar.helper.NetworkQuality;
import org.simlar.helper.VideoState;
import org.simlar.service.AudioOutputType;
/**
 * Copyright (C) 2013 The Simlar Authors.
 *
 * This file is part of Simlar. (https://www.simlar.org)
 *
 * This program 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 2
 * of the License, or (at your option) any later version.
 *
 * This program 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 this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 */

package org.simlar.service.liblinphone;




public interface LinphoneManagerListener
{
	void onRegistrationStateChanged(final RegistrationState state);

	void onCallStatsChanged(final NetworkQuality quality, final int callDuration, final String codec, final String iceState,
	                        final int upload, final int download, final int jitter, final int packetLoss, final long latePackets, final int roundTripDelay);

// Path: app/src/main/java/org/simlar/helper/CallEndReason.java
// public enum CallEndReason
// {
// 	NONE,
// 	DECLINED,
// 	OFFLINE,
// 	UNSUPPORTED_MEDIA,
// 	BUSY,
// 	SERVER_CONNECTION_TIMEOUT;
// 
// 	public static CallEndReason fromReason(final Reason reason)
// 	{
// 		if (reason == null) {
// 			return NONE;
// 		}
// 
// 		switch (reason) {
// 		case Declined:
// 			return DECLINED;
// 		case NotFound:
// 			return OFFLINE;
// 		case NotImplemented:
// 		case NotAcceptable:
// 		case UnsupportedContent:
// 			return UNSUPPORTED_MEDIA;
// 		case Busy:
// 			return BUSY;
// 		case Transferred:
// 		case BadEvent:
// 		case SessionIntervalTooSmall:
// 		case None:
// 		case NoResponse:
// 		case Forbidden:
// 		case NotAnswered:
// 		case IOError:
// 		case DoNotDisturb:
// 		case Unauthorized:
// 		case NoMatch:
// 		case MovedPermanently:
// 		case Gone:
// 		case TemporarilyUnavailable:
// 		case AddressIncomplete:
// 		case BadGateway:
// 		case ServerTimeout:
// 		case Unknown:
// 		default:
// 			return NONE;
// 		}
// 	}
// 
// 	public int getDisplayMessageId()
// 	{
// 		switch (this) {
// 		case DECLINED:
// 			return R.string.call_activity_call_ended_because_declined;
// 		case OFFLINE:
// 			return R.string.call_activity_call_ended_because_user_offline;
// 		case UNSUPPORTED_MEDIA:
// 			return R.string.call_activity_call_ended_because_incompatible_media;
// 		case BUSY:
// 			return R.string.call_activity_call_ended_because_user_busy;
// 		case SERVER_CONNECTION_TIMEOUT:
// 			return R.string.call_activity_connecting_to_server_timed_out;
// 		case NONE:
// 		default:
// 			return R.string.call_activity_call_ended_normally;
// 		}
// 	}
// }
// 
// Path: app/src/main/java/org/simlar/helper/NetworkQuality.java
// public enum NetworkQuality
// {
// 	UNKNOWN,
// 	GOOD,
// 	AVERAGE,
// 	POOR,
// 	VERY_POOR,
// 	UNUSABLE;
// 
// 	public static NetworkQuality fromFloat(final float quality)
// 	{
// 		if (4 <= quality && quality <= 5) {
// 			return GOOD;
// 		}
// 
// 		if (3 <= quality && quality < 4) {
// 			return AVERAGE;
// 		}
// 
// 		if (2 <= quality && quality < 3) {
// 			return POOR;
// 		}
// 
// 		if (1 <= quality && quality < 2) {
// 			return VERY_POOR;
// 		}
// 
// 		if (0 <= quality && quality < 1) {
// 			return UNUSABLE;
// 		}
// 
// 		return UNKNOWN;
// 	}
// 
// 	public int getDescription()
// 	{
// 		switch (this) {
// 		case GOOD:
// 			return R.string.network_quality_good;
// 		case AVERAGE:
// 			return R.string.network_quality_average;
// 		case POOR:
// 			return R.string.network_quality_poor;
// 		case VERY_POOR:
// 			return R.string.network_quality_very_poor;
// 		case UNUSABLE:
// 			return R.string.network_quality_unusable;
// 		case UNKNOWN:
// 		default:
// 			return R.string.network_quality_unknown;
// 		}
// 	}
// 
// 	public boolean isKnown()
// 	{
// 		return this != UNKNOWN;
// 	}
// }
// 
// Path: app/src/main/java/org/simlar/helper/VideoState.java
// public enum VideoState
// {
// 	OFF,
// 	REQUESTING,
// 	REMOTE_REQUESTED,
// 	DENIED,
// 	ACCEPTED,
// 	INITIALIZING,
// 	PLAYING
// }
// 
// Path: app/src/main/java/org/simlar/service/AudioOutputType.java
// public enum AudioOutputType
// {
// 	PHONE(R.string.audio_output_type_phone),
// 	WIRED_HEADSET(R.string.audio_output_type_wired_headset),
// 	SPEAKER(R.string.audio_output_type_speaker),
// 	BLUETOOTH(R.string.audio_output_type_bluetooth);
// 
// 	private final int mResourceId;
// 
// 	AudioOutputType(final int resourceId)
// 	{
// 		mResourceId = resourceId;
// 	}
// 
// 	public String toDisplayName(final Context context)
// 	{
// 		return context.getString(mResourceId);
// 	}
// }


// Path: app/src/main/java/org/simlar/service/liblinphone/LinphoneManagerListener.java
import java.util.Set;
import org.linphone.core.Call.State;
import org.linphone.core.RegistrationState;
import org.simlar.helper.CallEndReason;
import org.simlar.helper.NetworkQuality;
import org.simlar.helper.VideoState;
import org.simlar.service.AudioOutputType;

/**
 * Copyright (C) 2013 The Simlar Authors.
 *
 * This file is part of Simlar. (https://www.simlar.org)
 *
 * This program 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 2
 * of the License, or (at your option) any later version.
 *
 * This program 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 this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 */

package org.simlar.service.liblinphone;




public interface LinphoneManagerListener
{
	void onRegistrationStateChanged(final RegistrationState state);

	void onCallStatsChanged(final NetworkQuality quality, final int callDuration, final String codec, final String iceState,
	                        final int upload, final int download, final int jitter, final int packetLoss, final long latePackets, final int roundTripDelay);

	void onCallStateChanged(final String number, final State callState, final CallEndReason callEndReason);