add call back android

merge-requests/147/head
Mohammad ALjammal 6 years ago
parent c8f558d50f
commit d22ce32cdb

@ -72,4 +72,9 @@ dependencies {
implementation 'com.opentok.android:opentok-android-sdk:2.16.5'
//permissions
implementation 'pub.devrel:easypermissions:0.4.0'
//retrofit
implementation 'com.squareup.retrofit2:retrofit:2.6.2'
implementation 'com.squareup.retrofit2:converter-gson:2.6.2'
implementation 'com.squareup.okhttp3:logging-interceptor:3.14.1'
}

@ -15,7 +15,7 @@
android:name="io.flutter.app.FlutterApplication"
android:icon="@mipmap/ic_launcher"
android:label="doctor_app_flutter">
<activity android:name=".VideoCallActivity"></activity>
<activity android:name=".ui.VideoCallActivity"></activity>
<activity
android:name=".MainActivity"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"

@ -0,0 +1,115 @@
package com.example.doctor_app_flutter.Model;
import android.os.Parcel;
import android.os.Parcelable;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class GetSessionStatusModel implements Parcelable {
@SerializedName("VC_ID")
@Expose
private Integer vCID;
@SerializedName("TokenID")
@Expose
private String tokenID;
@SerializedName("generalid")
@Expose
private String generalid;
@SerializedName("DoctorId")
@Expose
private Integer doctorId;
public GetSessionStatusModel() {
}
public GetSessionStatusModel(Integer vCID, String tokenID, String generalid, Integer doctorId) {
this.vCID = vCID;
this.tokenID = tokenID;
this.generalid = generalid;
this.doctorId = doctorId;
}
protected GetSessionStatusModel(Parcel in) {
if (in.readByte() == 0) {
vCID = null;
} else {
vCID = in.readInt();
}
tokenID = in.readString();
generalid = in.readString();
if (in.readByte() == 0) {
doctorId = null;
} else {
doctorId = in.readInt();
}
}
public static final Creator<GetSessionStatusModel> CREATOR = new Creator<GetSessionStatusModel>() {
@Override
public GetSessionStatusModel createFromParcel(Parcel in) {
return new GetSessionStatusModel(in);
}
@Override
public GetSessionStatusModel[] newArray(int size) {
return new GetSessionStatusModel[size];
}
};
public Integer getVCID() {
return vCID;
}
public void setVCID(Integer vCID) {
this.vCID = vCID;
}
public String getTokenID() {
return tokenID;
}
public void setTokenID(String tokenID) {
this.tokenID = tokenID;
}
public String getGeneralid() {
return generalid;
}
public void setGeneralid(String generalid) {
this.generalid = generalid;
}
public Integer getDoctorId() {
return doctorId;
}
public void setDoctorId(Integer doctorId) {
this.doctorId = doctorId;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
if (vCID == null) {
dest.writeByte((byte) 0);
} else {
dest.writeByte((byte) 1);
dest.writeInt(vCID);
}
dest.writeString(tokenID);
dest.writeString(generalid);
if (doctorId == null) {
dest.writeByte((byte) 0);
} else {
dest.writeByte((byte) 1);
dest.writeInt(doctorId);
}
}
}

@ -0,0 +1,106 @@
package com.example.doctor_app_flutter.Model;
import android.os.Parcel;
import android.os.Parcelable;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class SessionStatusModel implements Parcelable {
@SerializedName("Result")
@Expose
private String result;
@SerializedName("SessionStatus")
@Expose
private Integer sessionStatus;
@SerializedName("IsAuthenticated")
@Expose
private Boolean isAuthenticated;
@SerializedName("MessageStatus")
@Expose
private Integer messageStatus;
protected SessionStatusModel(Parcel in) {
result = in.readString();
if (in.readByte() == 0) {
sessionStatus = null;
} else {
sessionStatus = in.readInt();
}
byte tmpIsAuthenticated = in.readByte();
isAuthenticated = tmpIsAuthenticated == 0 ? null : tmpIsAuthenticated == 1;
if (in.readByte() == 0) {
messageStatus = null;
} else {
messageStatus = in.readInt();
}
}
public static final Creator<SessionStatusModel> CREATOR = new Creator<SessionStatusModel>() {
@Override
public SessionStatusModel createFromParcel(Parcel in) {
return new SessionStatusModel(in);
}
@Override
public SessionStatusModel[] newArray(int size) {
return new SessionStatusModel[size];
}
};
public String getResult() {
return result;
}
public void setResult(String result) {
this.result = result;
}
public Integer getSessionStatus() {
return sessionStatus;
}
public void setSessionStatus(Integer sessionStatus) {
this.sessionStatus = sessionStatus;
}
public Boolean getIsAuthenticated() {
return isAuthenticated;
}
public void setIsAuthenticated(Boolean isAuthenticated) {
this.isAuthenticated = isAuthenticated;
}
public Integer getMessageStatus() {
return messageStatus;
}
public void setMessageStatus(Integer messageStatus) {
this.messageStatus = messageStatus;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(result);
if (sessionStatus == null) {
dest.writeByte((byte) 0);
} else {
dest.writeByte((byte) 1);
dest.writeInt(sessionStatus);
}
dest.writeByte((byte) (isAuthenticated == null ? 0 : isAuthenticated ? 1 : 2));
if (messageStatus == null) {
dest.writeByte((byte) 0);
} else {
dest.writeByte((byte) 1);
dest.writeInt(messageStatus);
}
}
}

@ -0,0 +1,69 @@
package com.example.doctor_app_flutter.Service;
import android.app.Activity;
import android.app.Application;
import androidx.annotation.CallSuper;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import java.util.concurrent.TimeUnit;
import io.flutter.view.FlutterMain;
import okhttp3.ConnectionPool;
import okhttp3.OkHttpClient;
import okhttp3.logging.HttpLoggingInterceptor;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
public class AppRetrofit extends Application {
private static final int MY_SOCKET_TIMEOUT_MS = 20000;
@Override
@CallSuper
public void onCreate() {
super.onCreate();
FlutterMain.startInitialization(this);
}
private Activity mCurrentActivity = null;
public Activity getCurrentActivity() {
return mCurrentActivity;
}
public void setCurrentActivity(Activity mCurrentActivity) {
this.mCurrentActivity = mCurrentActivity;
}
public static Retrofit getRetrofit( String baseUrl) {
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
Gson gson = new GsonBuilder().serializeNulls().create();
OkHttpClient okHttpClient = new OkHttpClient.Builder().addInterceptor(chain -> {
okhttp3.Request originalRequest = chain.request();
okhttp3.Request newRequest = originalRequest.newBuilder()
.addHeader("Content-Type","application/json")
.addHeader("Accept","application/json")
.build();
return chain.proceed(newRequest);
})
.addInterceptor(interceptor)
.callTimeout(MY_SOCKET_TIMEOUT_MS, TimeUnit.SECONDS)
.connectTimeout(MY_SOCKET_TIMEOUT_MS, TimeUnit.SECONDS)
.readTimeout(MY_SOCKET_TIMEOUT_MS, TimeUnit.SECONDS)
.connectionPool(new ConnectionPool(0, 5 * 60 * 1000, TimeUnit.SECONDS))
.retryOnConnectionFailure(false)
.build();
return new Retrofit.Builder()
.baseUrl(baseUrl)
.addConverterFactory(GsonConverterFactory.create(gson))
.client(okHttpClient)
.build();
}
}

@ -0,0 +1,15 @@
package com.example.doctor_app_flutter.Service;
import com.example.doctor_app_flutter.Model.GetSessionStatusModel;
import com.example.doctor_app_flutter.Model.SessionStatusModel;
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.POST;
public interface SessionStatusAPI {
@POST("LiveCareApi/DoctorApp/GetSessionStatus")
Call<SessionStatusModel> getSessionStatusModelData(@Body GetSessionStatusModel getSessionStatusModel);
}

@ -1,18 +1,17 @@
package com.example.doctor_app_flutter;
package com.example.doctor_app_flutter.ui;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.Manifest;
import android.annotation.SuppressLint;
import android.content.res.ColorStateList;
import android.graphics.Color;
import android.app.Activity;
import android.content.Intent;
import android.opengl.GLSurfaceView;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.os.Handler;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.ImageView;
@ -21,6 +20,9 @@ import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.example.doctor_app_flutter.Model.GetSessionStatusModel;
import com.example.doctor_app_flutter.Model.SessionStatusModel;
import com.example.doctor_app_flutter.R;
import com.opentok.android.Session;
import com.opentok.android.Stream;
import com.opentok.android.Publisher;
@ -40,31 +42,32 @@ import pub.devrel.easypermissions.EasyPermissions;
public class VideoCallActivity extends AppCompatActivity implements EasyPermissions.PermissionCallbacks,
Session.SessionListener,
Publisher.PublisherListener,
Subscriber.VideoListener {
Subscriber.VideoListener, VideoCallContract.VideoCallView {
private static final String TAG = VideoCallActivity.class.getSimpleName();
VideoCallContract.VideoCallPresenter videoCallPresenter;
private static final int RC_SETTINGS_SCREEN_PERM = 123;
private static final int RC_VIDEO_APP_PERM = 124;
private Session mSession;
private Publisher mPublisher;
private Subscriber mSubscriber;
private Handler mVolHandler;
private Runnable mVolRunnable;
private Handler mVolHandler, mConnectedHandler;
private Runnable mVolRunnable, mConnectedRunnable;
private FrameLayout mPublisherViewContainer;
private RelativeLayout mSubscriberViewContainer;
private RelativeLayout controlPanel;
private String apiKey;
private String sessionId;
private String token;
private String callDuration;
private String warningDuration;
private String appLang;
private String apiKey;
private String sessionId;
private String token;
private String appLang;
private String baseUrl;
private boolean isSwitchCameraClicked;
private boolean isCameraClicked;
@ -82,6 +85,10 @@ public class VideoCallActivity extends AppCompatActivity implements EasyPermissi
private TextView progressBarTextView;
private RelativeLayout progressBarLayout;
private boolean isConnected = false;
private GetSessionStatusModel sessionStatusModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
@ -132,11 +139,14 @@ public class VideoCallActivity extends AppCompatActivity implements EasyPermissi
apiKey = getIntent().getStringExtra("apiKey");
sessionId = getIntent().getStringExtra("sessionId");
token = getIntent().getStringExtra("token");
// callDuration = getIntent().getStringExtra("callDuration");
// warningDuration = getIntent().getStringExtra("warningDuration");
appLang=getIntent().getStringExtra("appLang");
appLang = getIntent().getStringExtra("appLang");
baseUrl = getIntent().getStringExtra("baseUrl");
sessionStatusModel = getIntent().getParcelableExtra("sessionStatusModel");
controlPanel = findViewById(R.id.control_panel);
videoCallPresenter = new VideoCallPresenterImpl(this, baseUrl);
controlPanel=findViewById(R.id.control_panel);
mCallBtn = findViewById(R.id.btn_call);
mCameraBtn = findViewById(R.id.btn_camera);
@ -144,17 +154,19 @@ public class VideoCallActivity extends AppCompatActivity implements EasyPermissi
mspeckerBtn = findViewById(R.id.btn_specker);
mMicBtn = findViewById(R.id.btn_mic);
// progressBarLayout=findViewById(R.id.progressBar);
// progressBar=findViewById(R.id.progress_bar);
// progressBarLayout=findViewById(R.id.progressBar);
// progressBar=findViewById(R.id.progress_bar);
// progressBarTextView=findViewById(R.id.progress_bar_text);
// progressBar.setVisibility(View.GONE);
hiddenButtons();
checkClientConnected();
mSubscriberViewContainer.setOnTouchListener((v, event) -> {
controlPanel.setVisibility(View.VISIBLE);
mVolHandler.removeCallbacks(mVolRunnable);
mVolHandler.postDelayed(mVolRunnable, 5*1000);
mVolHandler.postDelayed(mVolRunnable, 5 * 1000);
return true;
});
@ -164,16 +176,25 @@ public class VideoCallActivity extends AppCompatActivity implements EasyPermissi
}
private void checkClientConnected() {
mConnectedHandler = new Handler();
mConnectedRunnable = () -> {
if (!isConnected) {
videoCallPresenter.callClintConnected(sessionStatusModel);
}
};
mConnectedHandler.postDelayed(mConnectedRunnable, 7 * 1000);
}
private void hiddenButtons(){
private void hiddenButtons() {
mVolHandler = new Handler();
mVolRunnable = new Runnable() {
public void run() {
controlPanel.setVisibility(View.GONE);
}
};
mVolHandler.postDelayed(mVolRunnable,5*1000);
mVolHandler.postDelayed(mVolRunnable, 5 * 1000);
}
@Override
@ -225,7 +246,7 @@ public class VideoCallActivity extends AppCompatActivity implements EasyPermissi
mPublisherViewContainer.addView(mPublisher.getView());
if (mPublisher.getView() instanceof GLSurfaceView){
if (mPublisher.getView() instanceof GLSurfaceView) {
((GLSurfaceView) mPublisher.getView()).setZOrderOnTop(true);
}
@ -250,10 +271,11 @@ public class VideoCallActivity extends AppCompatActivity implements EasyPermissi
@Override
public void onStreamReceived(Session session, Stream stream) {
Log.d(TAG, "onStreamReceived: New stream " + stream.getStreamId() + " in session " + session.getSessionId());
if (mSubscriber != null) {
isConnected = true;
return;
}
isConnected = true;
subscribeToStream(stream);
}
@ -325,6 +347,7 @@ public class VideoCallActivity extends AppCompatActivity implements EasyPermissi
private void disconnectSession() {
if (mSession == null) {
setResult(Activity.RESULT_CANCELED);
finish();
return;
}
@ -343,7 +366,7 @@ public class VideoCallActivity extends AppCompatActivity implements EasyPermissi
mPublisher = null;
}
mSession.disconnect();
if(countDownTimer!=null) {
if (countDownTimer != null) {
countDownTimer.cancel();
}
finish();
@ -375,7 +398,9 @@ public class VideoCallActivity extends AppCompatActivity implements EasyPermissi
mspeckerBtn.setImageResource(res);
}
}
public void onMicClicked(View view) {
if (mPublisher != null) {
isMicClicked = !isMicClicked;
mPublisher.setPublishAudio(!isMicClicked);
@ -387,4 +412,19 @@ public class VideoCallActivity extends AppCompatActivity implements EasyPermissi
public void onCallClicked(View view) {
disconnectSession();
}
@Override
public void onCallSuccessful(SessionStatusModel sessionStatusModel) {
if (sessionStatusModel.getSessionStatus() == 2 || sessionStatusModel.getSessionStatus() == 3) {
Intent returnIntent = new Intent();
returnIntent.putExtra("sessionStatusNotRespond", sessionStatusModel);
setResult(Activity.RESULT_OK, returnIntent);
finish();
}
}
@Override
public void onFailure() {
}
}

@ -0,0 +1,18 @@
package com.example.doctor_app_flutter.ui;
import com.example.doctor_app_flutter.Model.GetSessionStatusModel;
import com.example.doctor_app_flutter.Model.SessionStatusModel;
public interface VideoCallContract {
interface VideoCallView{
void onCallSuccessful(SessionStatusModel sessionStatusModel);
void onFailure();
}
interface VideoCallPresenter {
void callClintConnected(GetSessionStatusModel statusModel);
}
}

@ -0,0 +1,49 @@
package com.example.doctor_app_flutter.ui;
import com.example.doctor_app_flutter.Model.GetSessionStatusModel;
import com.example.doctor_app_flutter.Model.SessionStatusModel;
import com.example.doctor_app_flutter.Service.AppRetrofit;
import com.example.doctor_app_flutter.Service.SessionStatusAPI;
import org.jetbrains.annotations.NotNull;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
public class VideoCallPresenterImpl implements VideoCallContract.VideoCallPresenter {
private VideoCallContract.VideoCallView view;
private SessionStatusAPI sessionStatusAPI;
private String baseUrl;
public VideoCallPresenterImpl(VideoCallContract.VideoCallView view, String baseUrl) {
this.view = view;
this.baseUrl = baseUrl;
}
@Override
public void callClintConnected(GetSessionStatusModel statusModel) {
sessionStatusAPI = AppRetrofit.getRetrofit(baseUrl).create(SessionStatusAPI.class);
Call<SessionStatusModel> call = sessionStatusAPI.getSessionStatusModelData(statusModel);
call.enqueue(new Callback<SessionStatusModel>() {
@Override
public void onResponse(@NotNull Call<SessionStatusModel> call, @NotNull Response<SessionStatusModel> response) {
if (response.isSuccessful()) {
view.onCallSuccessful(response.body());
} else
view.onFailure();
}
@Override
public void onFailure(@NotNull Call<SessionStatusModel> call, @NotNull Throwable t) {
view.onFailure();
}
});
}
}

@ -1,45 +1,101 @@
package com.example.doctor_app_flutter
import android.app.Activity
import android.content.Intent
import androidx.annotation.NonNull;
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugins.GeneratedPluginRegistrant
import androidx.annotation.NonNull
import com.example.doctor_app_flutter.Model.GetSessionStatusModel
import com.example.doctor_app_flutter.Model.SessionStatusModel
import com.example.doctor_app_flutter.ui.VideoCallActivity
import com.google.gson.GsonBuilder
import io.flutter.embedding.android.FlutterFragmentActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugin.common.MethodCall
import io.flutter.plugin.common.MethodChannel
import io.flutter.plugins.GeneratedPluginRegistrant
class MainActivity: FlutterFragmentActivity() {
class MainActivity : FlutterFragmentActivity(), MethodChannel.MethodCallHandler {
private val CHANNEL = "Dr.cloudSolution/videoCall"
private var result: MethodChannel.Result? = null
private var call: MethodCall? = null
private val LAUNCH_VIDEO: Int = 1
override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
GeneratedPluginRegistrant.registerWith(flutterEngine)
MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL).setMethodCallHandler {
call, result ->
if (call.method == "openVideoCall") {
val apiKey = call.argument<String>("kApiKey")
val sessionId = call.argument<String>("kSessionId")
val token = call.argument<String>("kToken")
// val callDuration = call.argument<String>("callDuration")
// val warningDuration = call.argument<String>("warningDuration")
val appLang = call.argument<String>("appLang")
openVideoCall(apiKey,sessionId,token/*,callDuration,warningDuration*/,appLang)
} else {
result.notImplemented()
}
}
MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL).setMethodCallHandler(this)
}
private fun openVideoCall(apiKey: String?, sessionId: String?, token: String?/*, callDuration: String?, warningDuration: String?*/, appLang: String?) {
override fun onMethodCall(call: MethodCall, result: MethodChannel.Result) {
this.result = result
this.call = call
if (call.method == "openVideoCall") {
val apiKey = call.argument<String>("kApiKey")
val sessionId = call.argument<String>("kSessionId")
val token = call.argument<String>("kToken")
val appLang = call.argument<String>("appLang")
val baseUrl = call.argument<String>("baseUrl")
// Session Status model
val VC_ID = call.argument<Int>("VC_ID")
val tokenID = call.argument<String>("TokenID")
val generalId = call.argument<String>("generalId")
val doctorId = call.argument<Int>("DoctorId")
val sessionStatusModel = GetSessionStatusModel(VC_ID, tokenID, generalId, doctorId)
openVideoCall(apiKey, sessionId, token, appLang, baseUrl, sessionStatusModel)
} else {
result.notImplemented()
}
}
private fun openVideoCall(apiKey: String?, sessionId: String?, token: String?, appLang: String?, baseUrl: String?, sessionStatusModel: GetSessionStatusModel) {
// val videoCallActivity = VideoCallActivity()
val intent = Intent(this, VideoCallActivity::class.java)
intent.putExtra("apiKey", apiKey)
intent.putExtra("sessionId", sessionId)
intent.putExtra("token", token)
// intent.putExtra("callDuration", callDuration)
//intent.putExtra("warningDuration", warningDuration)
intent.putExtra("appLang", appLang)
startActivity(intent)
intent.putExtra("baseUrl", baseUrl)
intent.putExtra("sessionStatusModel", sessionStatusModel)
startActivityForResult(intent, LAUNCH_VIDEO)
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
var asd = "";
if (requestCode == LAUNCH_VIDEO) {
if (resultCode == Activity.RESULT_OK) {
val result : SessionStatusModel? = data?.getParcelableExtra("sessionStatusNotRespond")
val callResponse : HashMap<String, String> = HashMap()
val sessionStatus : HashMap<String, String> = HashMap()
val gson = GsonBuilder().serializeNulls().create()
callResponse["callResponse"] = "CallNotRespond"
val jsonRes = gson.toJson(result)
callResponse["sessionStatus"] = jsonRes
this.result?.success(gson.toJson(callResponse))
}
if (resultCode == Activity.RESULT_CANCELED) {
val callResponse : HashMap<String, String> = HashMap()
callResponse["callResponse"] = "CallEnd"
result?.success(callResponse)
}
}
}
}

@ -4,7 +4,7 @@
android:id="@+id/activity_clingo_video_call"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".VideoCallActivity">
tools:context=".ui.VideoCallActivity">
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"

@ -0,0 +1,28 @@
class SessionStatusModel {
bool isAuthenticated;
int messageStatus;
String result;
int sessionStatus;
SessionStatusModel(
{this.isAuthenticated,
this.messageStatus,
this.result,
this.sessionStatus});
SessionStatusModel.fromJson(Map<String, dynamic> json) {
isAuthenticated = json['IsAuthenticated'];
messageStatus = json['MessageStatus'];
result = json['Result'];
sessionStatus = json['SessionStatus'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['IsAuthenticated'] = this.isAuthenticated;
data['MessageStatus'] = this.messageStatus;
data['Result'] = this.result;
data['SessionStatus'] = this.sessionStatus;
return data;
}
}

@ -1,9 +1,12 @@
import 'dart:convert';
import 'package:doctor_app_flutter/config/shared_pref_kay.dart';
import 'package:doctor_app_flutter/config/size_config.dart';
import 'package:doctor_app_flutter/icons_app/doctor_app_icons.dart';
import 'package:doctor_app_flutter/models/doctor/clinic_model.dart';
import 'package:doctor_app_flutter/models/doctor/doctor_profile_model.dart';
import 'package:doctor_app_flutter/models/doctor/profile_req_Model.dart';
import 'package:doctor_app_flutter/models/livecare/session_status_model.dart';
import 'package:doctor_app_flutter/providers/auth_provider.dart';
import 'package:doctor_app_flutter/providers/doctor_reply_provider.dart';
import 'package:doctor_app_flutter/providers/hospital_provider.dart';
@ -101,10 +104,19 @@ class _DashboardScreenState extends State<DashboardScreen> {
crossAxisAlignment: CrossAxisAlignment.end,
children: <Widget>[
InkWell(
onTap: () {
showCupertinoPicker(
context: context,
actionList: authProvider.doctorsClinicList);
onTap: () async {
await VideoChannel.openVideoCallScreen(
kToken: 'T1==cGFydG5lcl9pZD00NjgwMzIyNCZzaWc9NWRhNmExMzU4ZDViZGU3OTA5NDY4ODRhNzI4ZGUxZTRmMjZmNzcwMjpzZXNzaW9uX2lkPTFfTVg0ME5qZ3dNekl5Tkg1LU1UVTVNelk0TXpZek9EWXdNMzV1Y0V4V1lWUlZTbTVIY3k5dVdHWm1NMWxPYTNjelpIVi1mZyZjcmVhdGVfdGltZT0xNTkzNjgzNjYyJm5vbmNlPTAuODAxMzMzMzUxMDQwNzE5NSZyb2xlPXB1Ymxpc2hlciZleHBpcmVfdGltZT0xNTk2Mjc1NjYyJmluaXRpYWxfbGF5b3V0X2NsYXNzX2xpc3Q9',
kSessionId: '1_MX40NjgwMzIyNH5-MTU5MzY4MzYzODYwM35ucExWYVRVSm5Hcy9uWGZmM1lOa3czZHV-fg',
kApiKey: '46803224',
onFailure: (String error) {},
onCallEnd: () {},
callNotRespond: (SessionStatusModel sessionStatusModel) {});
// showCupertinoPicker(
// context: context,
// actionList: authProvider.doctorsClinicList);
},
child: Container(
margin:

@ -1,28 +1,45 @@
import 'dart:convert';
import 'package:doctor_app_flutter/config/config.dart';
import 'package:doctor_app_flutter/models/livecare/session_status_model.dart';
import 'package:flutter/services.dart';
class VideoChannel{
/// channel name
static const _channel = const MethodChannel("Dr.cloudSolution/videoCall");
static Future<dynamic> openVideoCallScreen(
{kApiKey, kSessionId, kToken, callDuration, warningDuration}) {
static openVideoCallScreen(
{kApiKey, kSessionId, kToken, callDuration, warningDuration, Function() onCallEnd , Function(SessionStatusModel sessionStatusModel) callNotRespond ,Function(String error) onFailure}) async {
var result;
try {
result = _channel.invokeMethod(
result = await _channel.invokeMethod(
'openVideoCall',
{
"kApiKey": kApiKey,
"kSessionId": kSessionId,
"kToken": kToken,
/* "callDuration": callDuration,
"warningDuration": warningDuration,*/
"appLang": "en",
"baseUrl": BASE_URL,
"VC_ID": 3245,
"TokenID": "hfkjshdf347r8743",
"generalId": 'Cs2020@2016\$2958',
"DoctorId": 1485 ,
},
);
if(result['callResponse'] == 'CallEnd') {
onCallEnd();
}
else {
var asd = result['sessionStatus'];
var parsed = json.decode(result['sessionStatus']);
SessionStatusModel sessionStatusModel = SessionStatusModel.fromJson(parsed);
callNotRespond(sessionStatusModel);
}
} on PlatformException catch (e) {
result = e.toString();
onFailure(e.toString());
}
return result;
}

Loading…
Cancel
Save