diff --git a/android/app/build.gradle b/android/app/build.gradle
index 048dea59..ae87782e 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -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'
}
diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index fda3b312..51b33a46 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -15,7 +15,7 @@
android:name="io.flutter.app.FlutterApplication"
android:icon="@mipmap/ic_launcher"
android:label="doctor_app_flutter">
-
+
CREATOR = new Creator() {
+ @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);
+ }
+ }
+}
diff --git a/android/app/src/main/java/com/example/doctor_app_flutter/Model/SessionStatusModel.java b/android/app/src/main/java/com/example/doctor_app_flutter/Model/SessionStatusModel.java
new file mode 100644
index 00000000..da6bba1d
--- /dev/null
+++ b/android/app/src/main/java/com/example/doctor_app_flutter/Model/SessionStatusModel.java
@@ -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 CREATOR = new Creator() {
+ @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);
+ }
+ }
+}
\ No newline at end of file
diff --git a/android/app/src/main/java/com/example/doctor_app_flutter/Service/AppRetrofit.java b/android/app/src/main/java/com/example/doctor_app_flutter/Service/AppRetrofit.java
new file mode 100644
index 00000000..6646bd6f
--- /dev/null
+++ b/android/app/src/main/java/com/example/doctor_app_flutter/Service/AppRetrofit.java
@@ -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();
+ }
+}
diff --git a/android/app/src/main/java/com/example/doctor_app_flutter/Service/SessionStatusAPI.java b/android/app/src/main/java/com/example/doctor_app_flutter/Service/SessionStatusAPI.java
new file mode 100644
index 00000000..fbc8d1d3
--- /dev/null
+++ b/android/app/src/main/java/com/example/doctor_app_flutter/Service/SessionStatusAPI.java
@@ -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 getSessionStatusModelData(@Body GetSessionStatusModel getSessionStatusModel);
+}
diff --git a/android/app/src/main/java/com/example/doctor_app_flutter/VideoCallActivity.java b/android/app/src/main/java/com/example/doctor_app_flutter/ui/VideoCallActivity.java
similarity index 82%
rename from android/app/src/main/java/com/example/doctor_app_flutter/VideoCallActivity.java
rename to android/app/src/main/java/com/example/doctor_app_flutter/ui/VideoCallActivity.java
index 146a3d54..adc32d38 100644
--- a/android/app/src/main/java/com/example/doctor_app_flutter/VideoCallActivity.java
+++ b/android/app/src/main/java/com/example/doctor_app_flutter/ui/VideoCallActivity.java
@@ -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() {
+
+ }
}
\ No newline at end of file
diff --git a/android/app/src/main/java/com/example/doctor_app_flutter/ui/VideoCallContract.java b/android/app/src/main/java/com/example/doctor_app_flutter/ui/VideoCallContract.java
new file mode 100644
index 00000000..21122239
--- /dev/null
+++ b/android/app/src/main/java/com/example/doctor_app_flutter/ui/VideoCallContract.java
@@ -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);
+ }
+}
diff --git a/android/app/src/main/java/com/example/doctor_app_flutter/ui/VideoCallPresenterImpl.java b/android/app/src/main/java/com/example/doctor_app_flutter/ui/VideoCallPresenterImpl.java
new file mode 100644
index 00000000..363d1ca8
--- /dev/null
+++ b/android/app/src/main/java/com/example/doctor_app_flutter/ui/VideoCallPresenterImpl.java
@@ -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 call = sessionStatusAPI.getSessionStatusModelData(statusModel);
+
+ call.enqueue(new Callback() {
+ @Override
+ public void onResponse(@NotNull Call call, @NotNull Response response) {
+ if (response.isSuccessful()) {
+ view.onCallSuccessful(response.body());
+ } else
+ view.onFailure();
+ }
+
+ @Override
+ public void onFailure(@NotNull Call call, @NotNull Throwable t) {
+ view.onFailure();
+ }
+ });
+
+ }
+}
diff --git a/android/app/src/main/kotlin/com/example/doctor_app_flutter/MainActivity.kt b/android/app/src/main/kotlin/com/example/doctor_app_flutter/MainActivity.kt
index d1d710ad..1a203368 100644
--- a/android/app/src/main/kotlin/com/example/doctor_app_flutter/MainActivity.kt
+++ b/android/app/src/main/kotlin/com/example/doctor_app_flutter/MainActivity.kt
@@ -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("kApiKey")
- val sessionId = call.argument("kSessionId")
- val token = call.argument("kToken")
- // val callDuration = call.argument("callDuration")
- // val warningDuration = call.argument("warningDuration")
- val appLang = call.argument("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("kApiKey")
+ val sessionId = call.argument("kSessionId")
+ val token = call.argument("kToken")
+ val appLang = call.argument("appLang")
+ val baseUrl = call.argument("baseUrl")
+
+ // Session Status model
+ val VC_ID = call.argument("VC_ID")
+ val tokenID = call.argument("TokenID")
+ val generalId = call.argument("generalId")
+ val doctorId = call.argument("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 = HashMap()
+
+ val sessionStatus : HashMap = 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 = HashMap()
+ callResponse["callResponse"] = "CallEnd"
+
+ result?.success(callResponse)
+ }
+ }
}
+
+
}
diff --git a/android/app/src/main/res/layout/activity_video_call.xml b/android/app/src/main/res/layout/activity_video_call.xml
index c7500b6c..2dcf2ba4 100644
--- a/android/app/src/main/res/layout/activity_video_call.xml
+++ b/android/app/src/main/res/layout/activity_video_call.xml
@@ -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">
json) {
+ isAuthenticated = json['IsAuthenticated'];
+ messageStatus = json['MessageStatus'];
+ result = json['Result'];
+ sessionStatus = json['SessionStatus'];
+ }
+
+ Map toJson() {
+ final Map data = new Map();
+ data['IsAuthenticated'] = this.isAuthenticated;
+ data['MessageStatus'] = this.messageStatus;
+ data['Result'] = this.result;
+ data['SessionStatus'] = this.sessionStatus;
+ return data;
+ }
+}
diff --git a/lib/screens/dashboard_screen.dart b/lib/screens/dashboard_screen.dart
index ad64d89a..52ecf34f 100644
--- a/lib/screens/dashboard_screen.dart
+++ b/lib/screens/dashboard_screen.dart
@@ -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 {
crossAxisAlignment: CrossAxisAlignment.end,
children: [
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:
diff --git a/lib/util/VideoChannel.dart b/lib/util/VideoChannel.dart
index c5bf278e..73b17930 100644
--- a/lib/util/VideoChannel.dart
+++ b/lib/util/VideoChannel.dart
@@ -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 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;
+
}