diff --git a/android/app/build.gradle b/android/app/build.gradle
index 1aa8b742..048dea59 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -61,7 +61,15 @@ flutter {
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
+ implementation 'androidx.appcompat:appcompat:1.1.0'
+ implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
+ implementation 'androidx.appcompat:appcompat:1.1.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
+
+ //openTok
+ implementation 'com.opentok.android:opentok-android-sdk:2.16.5'
+ //permissions
+ implementation 'pub.devrel:easypermissions:0.4.0'
}
diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index e6d9a9ad..fda3b312 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -1,32 +1,41 @@
+
-
-
+ FlutterApplication and put your custom class here.
+ -->
+
+
+ android:icon="@mipmap/ic_launcher"
+ android:label="doctor_app_flutter">
+
-
-
+
+
+
-
+
-
+
+
\ No newline at end of file
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/VideoCallActivity.java
new file mode 100644
index 00000000..146a3d54
--- /dev/null
+++ b/android/app/src/main/java/com/example/doctor_app_flutter/VideoCallActivity.java
@@ -0,0 +1,390 @@
+package com.example.doctor_app_flutter;
+
+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.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;
+import android.widget.ProgressBar;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import com.opentok.android.Session;
+import com.opentok.android.Stream;
+import com.opentok.android.Publisher;
+import com.opentok.android.PublisherKit;
+import com.opentok.android.Subscriber;
+import com.opentok.android.BaseVideoRenderer;
+import com.opentok.android.OpentokError;
+import com.opentok.android.SubscriberKit;
+
+import java.util.List;
+import java.util.Objects;
+
+import pub.devrel.easypermissions.AfterPermissionGranted;
+import pub.devrel.easypermissions.AppSettingsDialog;
+import pub.devrel.easypermissions.EasyPermissions;
+
+public class VideoCallActivity extends AppCompatActivity implements EasyPermissions.PermissionCallbacks,
+ Session.SessionListener,
+ Publisher.PublisherListener,
+ Subscriber.VideoListener {
+
+
+ private static final String TAG = VideoCallActivity.class.getSimpleName();
+
+ 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 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 boolean isSwitchCameraClicked;
+ private boolean isCameraClicked;
+ private boolean isSpeckerClicked;
+ private boolean isMicClicked;
+
+ private ImageView mCallBtn;
+ private ImageView mCameraBtn;
+ private ImageView mSwitchCameraBtn;
+ private ImageView mspeckerBtn;
+ private ImageView mMicBtn;
+
+ private ProgressBar progressBar;
+ private CountDownTimer countDownTimer;
+ private TextView progressBarTextView;
+ private RelativeLayout progressBarLayout;
+
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ setTheme(R.style.AppTheme);
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_video_call);
+ Objects.requireNonNull(getSupportActionBar()).hide();
+ initUI();
+ requestPermissions();
+ }
+
+ @Override
+ protected void onPause() {
+ super.onPause();
+
+ if (mSession == null) {
+ return;
+ }
+ mSession.onPause();
+
+ if (isFinishing()) {
+ disconnectSession();
+ }
+ }
+
+ @Override
+ protected void onResume() {
+ super.onResume();
+
+ if (mSession == null) {
+ return;
+ }
+ mSession.onResume();
+ }
+
+ @Override
+ protected void onDestroy() {
+ disconnectSession();
+
+ super.onDestroy();
+ }
+
+ @SuppressLint("ClickableViewAccessibility")
+ private void initUI() {
+ mPublisherViewContainer = (FrameLayout) findViewById(R.id.local_video_view_container);
+ mSubscriberViewContainer = (RelativeLayout) findViewById(R.id.remote_video_view_container);
+
+ apiKey = getIntent().getStringExtra("apiKey");
+ sessionId = getIntent().getStringExtra("sessionId");
+ token = getIntent().getStringExtra("token");
+ // callDuration = getIntent().getStringExtra("callDuration");
+ // warningDuration = getIntent().getStringExtra("warningDuration");
+ appLang=getIntent().getStringExtra("appLang");
+
+ controlPanel=findViewById(R.id.control_panel);
+
+ mCallBtn = findViewById(R.id.btn_call);
+ mCameraBtn = findViewById(R.id.btn_camera);
+ mSwitchCameraBtn = findViewById(R.id.btn_switch_camera);
+ mspeckerBtn = findViewById(R.id.btn_specker);
+ mMicBtn = findViewById(R.id.btn_mic);
+
+ // progressBarLayout=findViewById(R.id.progressBar);
+ // progressBar=findViewById(R.id.progress_bar);
+// progressBarTextView=findViewById(R.id.progress_bar_text);
+// progressBar.setVisibility(View.GONE);
+
+ hiddenButtons();
+
+ mSubscriberViewContainer.setOnTouchListener((v, event) -> {
+ controlPanel.setVisibility(View.VISIBLE);
+ mVolHandler.removeCallbacks(mVolRunnable);
+ mVolHandler.postDelayed(mVolRunnable, 5*1000);
+ return true;
+ });
+
+ if (appLang.equals("ar")) {
+ progressBarLayout.setLayoutDirection(View.LAYOUT_DIRECTION_RTL);
+ }
+
+ }
+
+
+
+ private void hiddenButtons(){
+ mVolHandler = new Handler();
+ mVolRunnable = new Runnable() {
+ public void run() {
+ controlPanel.setVisibility(View.GONE);
+ }
+ };
+ mVolHandler.postDelayed(mVolRunnable,5*1000);
+ }
+
+ @Override
+ public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
+ super.onRequestPermissionsResult(requestCode, permissions, grantResults);
+
+ EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
+ }
+
+ @Override
+ public void onPermissionsGranted(int requestCode, List perms) {
+ Log.d(TAG, "onPermissionsGranted:" + requestCode + ":" + perms.size());
+ }
+
+ @Override
+ public void onPermissionsDenied(int requestCode, List perms) {
+ Log.d(TAG, "onPermissionsDenied:" + requestCode + ":" + perms.size());
+
+ if (EasyPermissions.somePermissionPermanentlyDenied(this, perms)) {
+ new AppSettingsDialog.Builder(this)
+ .setTitle(getString(R.string.title_settings_dialog))
+ .setRationale(getString(R.string.rationale_ask_again))
+ .setPositiveButton(getString(R.string.setting))
+ .setNegativeButton(getString(R.string.cancel))
+ .setRequestCode(RC_SETTINGS_SCREEN_PERM)
+ .build()
+ .show();
+ }
+ }
+
+ @AfterPermissionGranted(RC_VIDEO_APP_PERM)
+ private void requestPermissions() {
+ String[] perms = {Manifest.permission.INTERNET, Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO};
+ if (EasyPermissions.hasPermissions(this, perms)) {
+ mSession = new Session.Builder(VideoCallActivity.this, apiKey, sessionId).build();
+ mSession.setSessionListener(this);
+ mSession.connect(token);
+ } else {
+ EasyPermissions.requestPermissions(this, getString(R.string.remaining_ar), RC_VIDEO_APP_PERM, perms);
+ }
+ }
+
+ @Override
+ public void onConnected(Session session) {
+ Log.i(TAG, "Session Connected");
+
+ mPublisher = new Publisher.Builder(this).build();
+ mPublisher.setPublisherListener(this);
+
+ mPublisherViewContainer.addView(mPublisher.getView());
+
+ if (mPublisher.getView() instanceof GLSurfaceView){
+ ((GLSurfaceView) mPublisher.getView()).setZOrderOnTop(true);
+ }
+
+ mSession.publish(mPublisher);
+ }
+
+ @Override
+ public void onDisconnected(Session session) {
+ Log.d(TAG, "onDisconnected: disconnected from session " + session.getSessionId());
+
+ mSession = null;
+ }
+
+ @Override
+ public void onError(Session session, OpentokError opentokError) {
+ Log.d(TAG, "onError: Error (" + opentokError.getMessage() + ") in session " + session.getSessionId());
+
+ Toast.makeText(this, "Session error. See the logcat please.", Toast.LENGTH_LONG).show();
+ finish();
+ }
+
+ @Override
+ public void onStreamReceived(Session session, Stream stream) {
+ Log.d(TAG, "onStreamReceived: New stream " + stream.getStreamId() + " in session " + session.getSessionId());
+
+ if (mSubscriber != null) {
+ return;
+ }
+ subscribeToStream(stream);
+ }
+
+ @Override
+ public void onStreamDropped(Session session, Stream stream) {
+ Log.d(TAG, "onStreamDropped: Stream " + stream.getStreamId() + " dropped from session " + session.getSessionId());
+
+ if (mSubscriber == null) {
+ return;
+ }
+
+ if (mSubscriber.getStream().equals(stream)) {
+ mSubscriberViewContainer.removeView(mSubscriber.getView());
+ mSubscriber.destroy();
+ mSubscriber = null;
+ }
+ disconnectSession();
+ }
+
+ @Override
+ public void onStreamCreated(PublisherKit publisherKit, Stream stream) {
+ Log.d(TAG, "onStreamCreated: Own stream " + stream.getStreamId() + " created");
+ }
+
+ @Override
+ public void onStreamDestroyed(PublisherKit publisherKit, Stream stream) {
+ Log.d(TAG, "onStreamDestroyed: Own stream " + stream.getStreamId() + " destroyed");
+ }
+
+ @Override
+ public void onError(PublisherKit publisherKit, OpentokError opentokError) {
+ Log.d(TAG, "onError: Error (" + opentokError.getMessage() + ") in publisher");
+
+ Toast.makeText(this, "Session error. See the logcat please.", Toast.LENGTH_LONG).show();
+ finish();
+ }
+
+ @Override
+ public void onVideoDataReceived(SubscriberKit subscriberKit) {
+ mSubscriber.setStyle(BaseVideoRenderer.STYLE_VIDEO_SCALE, BaseVideoRenderer.STYLE_VIDEO_FILL);
+ mSubscriberViewContainer.addView(mSubscriber.getView());
+ }
+
+ @Override
+ public void onVideoDisabled(SubscriberKit subscriberKit, String s) {
+
+ }
+
+ @Override
+ public void onVideoEnabled(SubscriberKit subscriberKit, String s) {
+
+ }
+
+ @Override
+ public void onVideoDisableWarning(SubscriberKit subscriberKit) {
+
+ }
+
+ @Override
+ public void onVideoDisableWarningLifted(SubscriberKit subscriberKit) {
+
+ }
+
+ private void subscribeToStream(Stream stream) {
+ mSubscriber = new Subscriber.Builder(VideoCallActivity.this, stream).build();
+ mSubscriber.setVideoListener(this);
+ mSession.subscribe(mSubscriber);
+ }
+
+ private void disconnectSession() {
+ if (mSession == null) {
+ finish();
+ return;
+ }
+
+ if (mSubscriber != null) {
+ mSubscriberViewContainer.removeView(mSubscriber.getView());
+ mSession.unsubscribe(mSubscriber);
+ mSubscriber.destroy();
+ mSubscriber = null;
+ }
+
+ if (mPublisher != null) {
+ mPublisherViewContainer.removeView(mPublisher.getView());
+ mSession.unpublish(mPublisher);
+ mPublisher.destroy();
+ mPublisher = null;
+ }
+ mSession.disconnect();
+ if(countDownTimer!=null) {
+ countDownTimer.cancel();
+ }
+ finish();
+ }
+
+ public void onSwitchCameraClicked(View view) {
+ if (mPublisher != null) {
+ isSwitchCameraClicked = !isSwitchCameraClicked;
+ mPublisher.cycleCamera();
+ int res = isSwitchCameraClicked ? R.drawable.flip_disapled : R.drawable.flip_enabled;
+ mSwitchCameraBtn.setImageResource(res);
+ }
+ }
+
+ public void onCameraClicked(View view) {
+ if (mPublisher != null) {
+ isCameraClicked = !isCameraClicked;
+ mPublisher.setPublishVideo(!isCameraClicked);
+ int res = isCameraClicked ? R.drawable.video_disanabled : R.drawable.video_enabled;
+ mCameraBtn.setImageResource(res);
+ }
+ }
+
+ public void onSpeckerClicked(View view) {
+ if (mSubscriber != null) {
+ isSpeckerClicked = !isSpeckerClicked;
+ mSubscriber.setSubscribeToAudio(!isSpeckerClicked);
+ int res = isSpeckerClicked ? R.drawable.audio_disabled : R.drawable.audio_enabled;
+ mspeckerBtn.setImageResource(res);
+ }
+ }
+ public void onMicClicked(View view) {
+ if (mPublisher != null) {
+ isMicClicked = !isMicClicked;
+ mPublisher.setPublishAudio(!isMicClicked);
+ int res = isMicClicked ? R.drawable.mic_disabled : R.drawable.mic_enabled;
+ mMicBtn.setImageResource(res);
+ }
+ }
+
+ public void onCallClicked(View view) {
+ disconnectSession();
+ }
+}
\ No newline at end of file
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 ce684883..d1d710ad 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,13 +1,45 @@
package com.example.doctor_app_flutter
+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 io.flutter.embedding.android.FlutterFragmentActivity
+import io.flutter.plugin.common.MethodChannel
class MainActivity: FlutterFragmentActivity() {
- override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
- GeneratedPluginRegistrant.registerWith(flutterEngine);
+
+ private val CHANNEL = "Dr.cloudSolution/videoCall"
+
+
+ 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()
+ }
+ }
+ }
+
+ private fun openVideoCall(apiKey: String?, sessionId: String?, token: String?/*, callDuration: String?, warningDuration: String?*/, appLang: String?) {
+ 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)
}
}
diff --git a/android/app/src/main/res/drawable/audio_disabled.png b/android/app/src/main/res/drawable/audio_disabled.png
new file mode 100644
index 00000000..3afc77ce
Binary files /dev/null and b/android/app/src/main/res/drawable/audio_disabled.png differ
diff --git a/android/app/src/main/res/drawable/audio_enabled.png b/android/app/src/main/res/drawable/audio_enabled.png
new file mode 100644
index 00000000..f2e25f75
Binary files /dev/null and b/android/app/src/main/res/drawable/audio_enabled.png differ
diff --git a/android/app/src/main/res/drawable/call.png b/android/app/src/main/res/drawable/call.png
new file mode 100644
index 00000000..fc00f4f9
Binary files /dev/null and b/android/app/src/main/res/drawable/call.png differ
diff --git a/android/app/src/main/res/drawable/flip_disapled.png b/android/app/src/main/res/drawable/flip_disapled.png
new file mode 100644
index 00000000..5226029e
Binary files /dev/null and b/android/app/src/main/res/drawable/flip_disapled.png differ
diff --git a/android/app/src/main/res/drawable/flip_enabled.png b/android/app/src/main/res/drawable/flip_enabled.png
new file mode 100644
index 00000000..152dc10e
Binary files /dev/null and b/android/app/src/main/res/drawable/flip_enabled.png differ
diff --git a/android/app/src/main/res/drawable/launch_image.png b/android/app/src/main/res/drawable/launch_image.png
new file mode 100644
index 00000000..a6d723fa
Binary files /dev/null and b/android/app/src/main/res/drawable/launch_image.png differ
diff --git a/android/app/src/main/res/drawable/mic_disabled.png b/android/app/src/main/res/drawable/mic_disabled.png
new file mode 100644
index 00000000..3603df75
Binary files /dev/null and b/android/app/src/main/res/drawable/mic_disabled.png differ
diff --git a/android/app/src/main/res/drawable/mic_enabled.png b/android/app/src/main/res/drawable/mic_enabled.png
new file mode 100644
index 00000000..5d9aa677
Binary files /dev/null and b/android/app/src/main/res/drawable/mic_enabled.png differ
diff --git a/android/app/src/main/res/drawable/video_disanabled.png b/android/app/src/main/res/drawable/video_disanabled.png
new file mode 100644
index 00000000..5c20c7bd
Binary files /dev/null and b/android/app/src/main/res/drawable/video_disanabled.png differ
diff --git a/android/app/src/main/res/drawable/video_enabled.png b/android/app/src/main/res/drawable/video_enabled.png
new file mode 100644
index 00000000..23331e30
Binary files /dev/null and b/android/app/src/main/res/drawable/video_enabled.png differ
diff --git a/android/app/src/main/res/drawable/video_off_fill.png b/android/app/src/main/res/drawable/video_off_fill.png
new file mode 100644
index 00000000..d153439f
Binary files /dev/null and b/android/app/src/main/res/drawable/video_off_fill.png differ
diff --git a/android/app/src/main/res/layout/activity_video_call.xml b/android/app/src/main/res/layout/activity_video_call.xml
new file mode 100644
index 00000000..c7500b6c
--- /dev/null
+++ b/android/app/src/main/res/layout/activity_video_call.xml
@@ -0,0 +1,169 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/android/app/src/main/res/values/colors.xml b/android/app/src/main/res/values/colors.xml
new file mode 100644
index 00000000..d1d2a305
--- /dev/null
+++ b/android/app/src/main/res/values/colors.xml
@@ -0,0 +1,11 @@
+
+
+ #ffffff
+ #303F9F
+ #fc3850
+ #e4e9f2
+
+
+ #827b92
+ #484258
+
diff --git a/android/app/src/main/res/values/dimens.xml b/android/app/src/main/res/values/dimens.xml
new file mode 100644
index 00000000..79f3d269
--- /dev/null
+++ b/android/app/src/main/res/values/dimens.xml
@@ -0,0 +1,22 @@
+
+
+ 16dp
+ 16dp
+ 28dp
+ 24dp
+
+
+ 60dp
+ 54dp
+
+
+ 88dp
+ 117dp
+ 50dp
+ 100dp
+ 90dp
+
+
+ 24dp
+ 25dp
+
diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml
new file mode 100644
index 00000000..74349756
--- /dev/null
+++ b/android/app/src/main/res/values/strings.xml
@@ -0,0 +1,8 @@
+
+
+ Remaining Time In Seconds:
+ الوقت المتبقي بالثانيه:
+ Settings
+ Cancel
+
+
\ No newline at end of file
diff --git a/android/app/src/main/res/values/styles.xml b/android/app/src/main/res/values/styles.xml
index 00fa4417..24355fae 100644
--- a/android/app/src/main/res/values/styles.xml
+++ b/android/app/src/main/res/values/styles.xml
@@ -5,4 +5,15 @@
Flutter draws its first frame -->
- @drawable/launch_background
+
+
+
+
diff --git a/android/build.gradle b/android/build.gradle
index 3100ad2d..357c6a1a 100644
--- a/android/build.gradle
+++ b/android/build.gradle
@@ -15,6 +15,7 @@ allprojects {
repositories {
google()
jcenter()
+ maven { url 'https://tokbox.bintray.com/maven' }
}
}
diff --git a/ios/Podfile b/ios/Podfile
index b30a428b..3b20de57 100644
--- a/ios/Podfile
+++ b/ios/Podfile
@@ -63,6 +63,7 @@ target 'Runner' do
# Keep pod path relative so it can be checked into Podfile.lock.
pod 'Flutter', :path => 'Flutter'
+ pod 'OpenTok'
# Plugin Pods
diff --git a/ios/Podfile.lock b/ios/Podfile.lock
index 392290a0..ab95eb7c 100644
--- a/ios/Podfile.lock
+++ b/ios/Podfile.lock
@@ -22,6 +22,7 @@ PODS:
- local_auth (0.0.1):
- Flutter
- MTBBarcodeScanner (5.0.11)
+ - OpenTok (2.15.3)
- "permission_handler (5.0.0+hotfix.5)":
- Flutter
- Reachability (3.2)
@@ -50,6 +51,7 @@ DEPENDENCIES:
- hexcolor (from `.symlinks/plugins/hexcolor/ios`)
- imei_plugin (from `.symlinks/plugins/imei_plugin/ios`)
- local_auth (from `.symlinks/plugins/local_auth/ios`)
+ - OpenTok
- permission_handler (from `.symlinks/plugins/permission_handler/ios`)
- shared_preferences (from `.symlinks/plugins/shared_preferences/ios`)
- shared_preferences_macos (from `.symlinks/plugins/shared_preferences_macos/ios`)
@@ -59,8 +61,9 @@ DEPENDENCIES:
- url_launcher_web (from `.symlinks/plugins/url_launcher_web/ios`)
SPEC REPOS:
- https://cdn.cocoapods.org/:
+ trunk:
- MTBBarcodeScanner
+ - OpenTok
- Reachability
- SwiftProtobuf
@@ -112,6 +115,7 @@ SPEC CHECKSUMS:
imei_plugin: cb1af7c223ac2d82dcd1457a7137d93d65d2a3cd
local_auth: 25938960984c3a7f6e3253e3f8d962fdd16852bd
MTBBarcodeScanner: f453b33c4b7dfe545d8c6484ed744d55671788cb
+ OpenTok: fde03ecc5ea31fe0a453242847c4ee1f47e1d735
permission_handler: 6226fcb78b97c7c7458a95c7346a11d5184fec12
Reachability: 33e18b67625424e47b6cde6d202dce689ad7af96
shared_preferences: af6bfa751691cdc24be3045c43ec037377ada40d
@@ -122,6 +126,6 @@ SPEC CHECKSUMS:
url_launcher_macos: fd7894421cd39320dce5f292fc99ea9270b2a313
url_launcher_web: e5527357f037c87560776e36436bf2b0288b965c
-PODFILE CHECKSUM: 1b66dae606f75376c5f2135a8290850eeb09ae83
+PODFILE CHECKSUM: ad71cae222b2dc22820a69b80873417b35fef79e
COCOAPODS: 1.9.3
diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj
index 8548667e..9488fd99 100644
--- a/ios/Runner.xcodeproj/project.pbxproj
+++ b/ios/Runner.xcodeproj/project.pbxproj
@@ -13,6 +13,7 @@
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
+ AF260AD724A4922F006461D3 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF260AD624A4922F006461D3 /* ViewController.swift */; };
B650DC3076E9D70CB188286A /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 93A5F83B23AB032D1E096663 /* Pods_Runner.framework */; };
/* End PBXBuildFile section */
@@ -46,6 +47,7 @@
97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; };
97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
9D4B7DB43C6A6C849D2387CE /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; };
+ AF260AD624A4922F006461D3 /* ViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ViewController.swift; path = ../../../../AndroidStudioProjects/open_tok_app/ios/Runner/ViewController.swift; sourceTree = ""; };
E698D7B14B12DF768FE47A1A /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; };
/* End PBXFileReference section */
@@ -104,6 +106,7 @@
97C146F01CF9000F007C117D /* Runner */ = {
isa = PBXGroup;
children = (
+ AF260AD624A4922F006461D3 /* ViewController.swift */,
97C146FA1CF9000F007C117D /* Main.storyboard */,
97C146FD1CF9000F007C117D /* Assets.xcassets */,
97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */,
@@ -278,6 +281,7 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
+ AF260AD724A4922F006461D3 /* ViewController.swift in Sources */,
74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */,
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */,
);
@@ -307,7 +311,6 @@
/* Begin XCBuildConfiguration section */
249021D3217E4FDB00AE95B9 /* Profile */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
@@ -385,7 +388,6 @@
};
97C147031CF9000F007C117D /* Debug */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
@@ -441,7 +443,6 @@
};
97C147041CF9000F007C117D /* Release */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
diff --git a/ios/Runner/AppDelegate.swift b/ios/Runner/AppDelegate.swift
index 70693e4a..5e32b165 100644
--- a/ios/Runner/AppDelegate.swift
+++ b/ios/Runner/AppDelegate.swift
@@ -1,5 +1,9 @@
import UIKit
import Flutter
+import OpenTok
+
+// Created by Mohammad Aljammal & Elham Rababah on 24/06/20.
+// Copyright © 2020 Cloud. All rights reserved.
@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
@@ -7,7 +11,47 @@ import Flutter
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
+
+
+ let controller : FlutterViewController = window?.rootViewController as! FlutterViewController
+ let videoCallChannel = FlutterMethodChannel(name: "Dr.cloudSolution/videoCall",
+ binaryMessenger: controller.binaryMessenger)
+ videoCallChannel.setMethodCallHandler({
+ (call: FlutterMethodCall, result: @escaping FlutterResult) -> Void in
+ switch call.method {
+ case "openVideoCall":
+ do {
+ let arguments = call.arguments as? NSDictionary
+ let kApiKey = arguments!["kApiKey"] as? String
+ let kSessionId = arguments!["kSessionId"] as? String
+ let kToken = arguments!["kToken"] as? String
+ let appLang = arguments!["appLang"] as? String
+ self.openVideoChat(result: result,kApiKey: kApiKey!,kSessionId:kSessionId!,kToken: kToken!, appLang: appLang!)
+ }
+ default:
+ result(FlutterMethodNotImplemented)
+ }
+ })
+
GeneratedPluginRegistrant.register(with: self)
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}
+
+
+
+ private func openVideoChat(result: FlutterResult,kApiKey: String, kSessionId: String,kToken: String,appLang:String) {
+
+ let storyboard = UIStoryboard(name: "Main", bundle: nil)
+ let identifier = "ViewControllerNav"
+ let navVC = storyboard.instantiateViewController(withIdentifier: identifier) as! UINavigationController
+ let videoVC = navVC.viewControllers.first as! ViewController
+ videoVC.kApiKey=kApiKey
+ videoVC.kSessionId=kSessionId
+ videoVC.kToken=kToken
+ videoVC.navigationController?.setNavigationBarHidden(true, animated: false)
+ navVC.modalPresentationStyle = .fullScreen
+ window.rootViewController?.present(navVC, animated: true, completion: nil)
+
+
+ }
}
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset copy/Contents.json b/ios/Runner/Assets.xcassets/AppIcon.appiconset copy/Contents.json
new file mode 100755
index 00000000..d8db8d65
--- /dev/null
+++ b/ios/Runner/Assets.xcassets/AppIcon.appiconset copy/Contents.json
@@ -0,0 +1,98 @@
+{
+ "images" : [
+ {
+ "idiom" : "iphone",
+ "size" : "20x20",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "20x20",
+ "scale" : "3x"
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "29x29",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "29x29",
+ "scale" : "3x"
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "40x40",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "40x40",
+ "scale" : "3x"
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "60x60",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "60x60",
+ "scale" : "3x"
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "20x20",
+ "scale" : "1x"
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "20x20",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "29x29",
+ "scale" : "1x"
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "29x29",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "40x40",
+ "scale" : "1x"
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "40x40",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "76x76",
+ "scale" : "1x"
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "76x76",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "83.5x83.5",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "ios-marketing",
+ "size" : "1024x1024",
+ "scale" : "1x"
+ }
+ ],
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+}
\ No newline at end of file
diff --git a/ios/Runner/Assets.xcassets/Contents.json b/ios/Runner/Assets.xcassets/Contents.json
new file mode 100755
index 00000000..da4a164c
--- /dev/null
+++ b/ios/Runner/Assets.xcassets/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+}
\ No newline at end of file
diff --git a/ios/Runner/Assets.xcassets/hangUpButton.imageset/Contents.json b/ios/Runner/Assets.xcassets/hangUpButton.imageset/Contents.json
new file mode 100755
index 00000000..4d6f2ca5
--- /dev/null
+++ b/ios/Runner/Assets.xcassets/hangUpButton.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+ "images" : [
+ {
+ "filename" : "call.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "call-1.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "call-2.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/ios/Runner/Assets.xcassets/hangUpButton.imageset/call-1.png b/ios/Runner/Assets.xcassets/hangUpButton.imageset/call-1.png
new file mode 100755
index 00000000..27bb36fb
Binary files /dev/null and b/ios/Runner/Assets.xcassets/hangUpButton.imageset/call-1.png differ
diff --git a/ios/Runner/Assets.xcassets/hangUpButton.imageset/call-2.png b/ios/Runner/Assets.xcassets/hangUpButton.imageset/call-2.png
new file mode 100755
index 00000000..fc00f4f9
Binary files /dev/null and b/ios/Runner/Assets.xcassets/hangUpButton.imageset/call-2.png differ
diff --git a/ios/Runner/Assets.xcassets/hangUpButton.imageset/call.png b/ios/Runner/Assets.xcassets/hangUpButton.imageset/call.png
new file mode 100755
index 00000000..34475399
Binary files /dev/null and b/ios/Runner/Assets.xcassets/hangUpButton.imageset/call.png differ
diff --git a/ios/Runner/Assets.xcassets/localVideoMutedBg.imageset/Contents.json b/ios/Runner/Assets.xcassets/localVideoMutedBg.imageset/Contents.json
new file mode 100755
index 00000000..88daa0cb
--- /dev/null
+++ b/ios/Runner/Assets.xcassets/localVideoMutedBg.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "idiom" : "universal",
+ "filename" : "cameramute.png",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+}
\ No newline at end of file
diff --git a/ios/Runner/Assets.xcassets/localVideoMutedBg.imageset/cameramute.png b/ios/Runner/Assets.xcassets/localVideoMutedBg.imageset/cameramute.png
new file mode 100755
index 00000000..4778bb24
Binary files /dev/null and b/ios/Runner/Assets.xcassets/localVideoMutedBg.imageset/cameramute.png differ
diff --git a/ios/Runner/Assets.xcassets/muteButton.imageset/Contents.json b/ios/Runner/Assets.xcassets/muteButton.imageset/Contents.json
new file mode 100755
index 00000000..dc221130
--- /dev/null
+++ b/ios/Runner/Assets.xcassets/muteButton.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+ "images" : [
+ {
+ "filename" : "mic_enabled.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "mic_enabled-1.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "mic_enabled-2.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/ios/Runner/Assets.xcassets/muteButton.imageset/mic_enabled-1.png b/ios/Runner/Assets.xcassets/muteButton.imageset/mic_enabled-1.png
new file mode 100755
index 00000000..6dccd908
Binary files /dev/null and b/ios/Runner/Assets.xcassets/muteButton.imageset/mic_enabled-1.png differ
diff --git a/ios/Runner/Assets.xcassets/muteButton.imageset/mic_enabled-2.png b/ios/Runner/Assets.xcassets/muteButton.imageset/mic_enabled-2.png
new file mode 100755
index 00000000..5d9aa677
Binary files /dev/null and b/ios/Runner/Assets.xcassets/muteButton.imageset/mic_enabled-2.png differ
diff --git a/ios/Runner/Assets.xcassets/muteButton.imageset/mic_enabled.png b/ios/Runner/Assets.xcassets/muteButton.imageset/mic_enabled.png
new file mode 100755
index 00000000..e42895e2
Binary files /dev/null and b/ios/Runner/Assets.xcassets/muteButton.imageset/mic_enabled.png differ
diff --git a/ios/Runner/Assets.xcassets/muteButtonSelected.imageset/Contents.json b/ios/Runner/Assets.xcassets/muteButtonSelected.imageset/Contents.json
new file mode 100755
index 00000000..d59e22e8
--- /dev/null
+++ b/ios/Runner/Assets.xcassets/muteButtonSelected.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+ "images" : [
+ {
+ "filename" : "mic_disabled.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "mic_disabled-1.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "mic_disabled-2.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/ios/Runner/Assets.xcassets/muteButtonSelected.imageset/mic_disabled-1.png b/ios/Runner/Assets.xcassets/muteButtonSelected.imageset/mic_disabled-1.png
new file mode 100755
index 00000000..115381b6
Binary files /dev/null and b/ios/Runner/Assets.xcassets/muteButtonSelected.imageset/mic_disabled-1.png differ
diff --git a/ios/Runner/Assets.xcassets/muteButtonSelected.imageset/mic_disabled-2.png b/ios/Runner/Assets.xcassets/muteButtonSelected.imageset/mic_disabled-2.png
new file mode 100755
index 00000000..3603df75
Binary files /dev/null and b/ios/Runner/Assets.xcassets/muteButtonSelected.imageset/mic_disabled-2.png differ
diff --git a/ios/Runner/Assets.xcassets/muteButtonSelected.imageset/mic_disabled.png b/ios/Runner/Assets.xcassets/muteButtonSelected.imageset/mic_disabled.png
new file mode 100755
index 00000000..4101f849
Binary files /dev/null and b/ios/Runner/Assets.xcassets/muteButtonSelected.imageset/mic_disabled.png differ
diff --git a/ios/Runner/Assets.xcassets/speakerOff.imageset/Contents.json b/ios/Runner/Assets.xcassets/speakerOff.imageset/Contents.json
new file mode 100755
index 00000000..38db78c6
--- /dev/null
+++ b/ios/Runner/Assets.xcassets/speakerOff.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+ "images" : [
+ {
+ "filename" : "audio_enabled.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "audio_enabled-1.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "audio_enabled-2.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/ios/Runner/Assets.xcassets/speakerOff.imageset/audio_enabled-1.png b/ios/Runner/Assets.xcassets/speakerOff.imageset/audio_enabled-1.png
new file mode 100755
index 00000000..3edbf65b
Binary files /dev/null and b/ios/Runner/Assets.xcassets/speakerOff.imageset/audio_enabled-1.png differ
diff --git a/ios/Runner/Assets.xcassets/speakerOff.imageset/audio_enabled-2.png b/ios/Runner/Assets.xcassets/speakerOff.imageset/audio_enabled-2.png
new file mode 100755
index 00000000..f2e25f75
Binary files /dev/null and b/ios/Runner/Assets.xcassets/speakerOff.imageset/audio_enabled-2.png differ
diff --git a/ios/Runner/Assets.xcassets/speakerOff.imageset/audio_enabled.png b/ios/Runner/Assets.xcassets/speakerOff.imageset/audio_enabled.png
new file mode 100755
index 00000000..8dca1127
Binary files /dev/null and b/ios/Runner/Assets.xcassets/speakerOff.imageset/audio_enabled.png differ
diff --git a/ios/Runner/Assets.xcassets/speakerOffSelected.imageset/Contents.json b/ios/Runner/Assets.xcassets/speakerOffSelected.imageset/Contents.json
new file mode 100755
index 00000000..866d9a2d
--- /dev/null
+++ b/ios/Runner/Assets.xcassets/speakerOffSelected.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+ "images" : [
+ {
+ "filename" : "audio_disabled.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "audio_disabled-1.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "audio_disabled-2.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/ios/Runner/Assets.xcassets/speakerOffSelected.imageset/audio_disabled-1.png b/ios/Runner/Assets.xcassets/speakerOffSelected.imageset/audio_disabled-1.png
new file mode 100755
index 00000000..0bfea871
Binary files /dev/null and b/ios/Runner/Assets.xcassets/speakerOffSelected.imageset/audio_disabled-1.png differ
diff --git a/ios/Runner/Assets.xcassets/speakerOffSelected.imageset/audio_disabled-2.png b/ios/Runner/Assets.xcassets/speakerOffSelected.imageset/audio_disabled-2.png
new file mode 100755
index 00000000..3afc77ce
Binary files /dev/null and b/ios/Runner/Assets.xcassets/speakerOffSelected.imageset/audio_disabled-2.png differ
diff --git a/ios/Runner/Assets.xcassets/speakerOffSelected.imageset/audio_disabled.png b/ios/Runner/Assets.xcassets/speakerOffSelected.imageset/audio_disabled.png
new file mode 100755
index 00000000..13038522
Binary files /dev/null and b/ios/Runner/Assets.xcassets/speakerOffSelected.imageset/audio_disabled.png differ
diff --git a/ios/Runner/Assets.xcassets/switchCameraButton.imageset/Contents.json b/ios/Runner/Assets.xcassets/switchCameraButton.imageset/Contents.json
new file mode 100755
index 00000000..dce44933
--- /dev/null
+++ b/ios/Runner/Assets.xcassets/switchCameraButton.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+ "images" : [
+ {
+ "filename" : "flip_enabled-2.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "flip_enabled.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "flip_enabled-1.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/ios/Runner/Assets.xcassets/switchCameraButton.imageset/flip_enabled-1.png b/ios/Runner/Assets.xcassets/switchCameraButton.imageset/flip_enabled-1.png
new file mode 100755
index 00000000..152dc10e
Binary files /dev/null and b/ios/Runner/Assets.xcassets/switchCameraButton.imageset/flip_enabled-1.png differ
diff --git a/ios/Runner/Assets.xcassets/switchCameraButton.imageset/flip_enabled-2.png b/ios/Runner/Assets.xcassets/switchCameraButton.imageset/flip_enabled-2.png
new file mode 100755
index 00000000..b17a1c82
Binary files /dev/null and b/ios/Runner/Assets.xcassets/switchCameraButton.imageset/flip_enabled-2.png differ
diff --git a/ios/Runner/Assets.xcassets/switchCameraButton.imageset/flip_enabled.png b/ios/Runner/Assets.xcassets/switchCameraButton.imageset/flip_enabled.png
new file mode 100755
index 00000000..e28e69b2
Binary files /dev/null and b/ios/Runner/Assets.xcassets/switchCameraButton.imageset/flip_enabled.png differ
diff --git a/ios/Runner/Assets.xcassets/switchCameraButtonSelected.imageset/Contents.json b/ios/Runner/Assets.xcassets/switchCameraButtonSelected.imageset/Contents.json
new file mode 100755
index 00000000..457b9984
--- /dev/null
+++ b/ios/Runner/Assets.xcassets/switchCameraButtonSelected.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+ "images" : [
+ {
+ "filename" : "flip_disapled.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "flip_disapled-1.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "flip_disapled-2.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/ios/Runner/Assets.xcassets/switchCameraButtonSelected.imageset/flip_disapled-1.png b/ios/Runner/Assets.xcassets/switchCameraButtonSelected.imageset/flip_disapled-1.png
new file mode 100755
index 00000000..7d3b6067
Binary files /dev/null and b/ios/Runner/Assets.xcassets/switchCameraButtonSelected.imageset/flip_disapled-1.png differ
diff --git a/ios/Runner/Assets.xcassets/switchCameraButtonSelected.imageset/flip_disapled-2.png b/ios/Runner/Assets.xcassets/switchCameraButtonSelected.imageset/flip_disapled-2.png
new file mode 100755
index 00000000..5226029e
Binary files /dev/null and b/ios/Runner/Assets.xcassets/switchCameraButtonSelected.imageset/flip_disapled-2.png differ
diff --git a/ios/Runner/Assets.xcassets/switchCameraButtonSelected.imageset/flip_disapled.png b/ios/Runner/Assets.xcassets/switchCameraButtonSelected.imageset/flip_disapled.png
new file mode 100755
index 00000000..37e68084
Binary files /dev/null and b/ios/Runner/Assets.xcassets/switchCameraButtonSelected.imageset/flip_disapled.png differ
diff --git a/ios/Runner/Assets.xcassets/videoMuteButton.imageset/Contents.json b/ios/Runner/Assets.xcassets/videoMuteButton.imageset/Contents.json
new file mode 100755
index 00000000..14969431
--- /dev/null
+++ b/ios/Runner/Assets.xcassets/videoMuteButton.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+ "images" : [
+ {
+ "filename" : "video_enabled-2.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "video_enabled-1.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "video_enabled.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/ios/Runner/Assets.xcassets/videoMuteButton.imageset/video_enabled-1.png b/ios/Runner/Assets.xcassets/videoMuteButton.imageset/video_enabled-1.png
new file mode 100755
index 00000000..0d9912ea
Binary files /dev/null and b/ios/Runner/Assets.xcassets/videoMuteButton.imageset/video_enabled-1.png differ
diff --git a/ios/Runner/Assets.xcassets/videoMuteButton.imageset/video_enabled-2.png b/ios/Runner/Assets.xcassets/videoMuteButton.imageset/video_enabled-2.png
new file mode 100755
index 00000000..8dc7b66d
Binary files /dev/null and b/ios/Runner/Assets.xcassets/videoMuteButton.imageset/video_enabled-2.png differ
diff --git a/ios/Runner/Assets.xcassets/videoMuteButton.imageset/video_enabled.png b/ios/Runner/Assets.xcassets/videoMuteButton.imageset/video_enabled.png
new file mode 100755
index 00000000..23331e30
Binary files /dev/null and b/ios/Runner/Assets.xcassets/videoMuteButton.imageset/video_enabled.png differ
diff --git a/ios/Runner/Assets.xcassets/videoMuteButtonSelected.imageset/Contents.json b/ios/Runner/Assets.xcassets/videoMuteButtonSelected.imageset/Contents.json
new file mode 100755
index 00000000..c68d9986
--- /dev/null
+++ b/ios/Runner/Assets.xcassets/videoMuteButtonSelected.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+ "images" : [
+ {
+ "filename" : "video_disanabled.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "video_disanabled-1.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "video_disanabled-2.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/ios/Runner/Assets.xcassets/videoMuteButtonSelected.imageset/video_disanabled-1.png b/ios/Runner/Assets.xcassets/videoMuteButtonSelected.imageset/video_disanabled-1.png
new file mode 100755
index 00000000..cd0faff8
Binary files /dev/null and b/ios/Runner/Assets.xcassets/videoMuteButtonSelected.imageset/video_disanabled-1.png differ
diff --git a/ios/Runner/Assets.xcassets/videoMuteButtonSelected.imageset/video_disanabled-2.png b/ios/Runner/Assets.xcassets/videoMuteButtonSelected.imageset/video_disanabled-2.png
new file mode 100755
index 00000000..5c20c7bd
Binary files /dev/null and b/ios/Runner/Assets.xcassets/videoMuteButtonSelected.imageset/video_disanabled-2.png differ
diff --git a/ios/Runner/Assets.xcassets/videoMuteButtonSelected.imageset/video_disanabled.png b/ios/Runner/Assets.xcassets/videoMuteButtonSelected.imageset/video_disanabled.png
new file mode 100755
index 00000000..c89b763e
Binary files /dev/null and b/ios/Runner/Assets.xcassets/videoMuteButtonSelected.imageset/video_disanabled.png differ
diff --git a/ios/Runner/Assets.xcassets/videoMutedIndicator.imageset/Contents.json b/ios/Runner/Assets.xcassets/videoMutedIndicator.imageset/Contents.json
new file mode 100755
index 00000000..c029fd7a
--- /dev/null
+++ b/ios/Runner/Assets.xcassets/videoMutedIndicator.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "idiom" : "universal",
+ "filename" : "cameraoff_mainVideo.png",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+}
\ No newline at end of file
diff --git a/ios/Runner/Assets.xcassets/videoMutedIndicator.imageset/cameraoff_mainVideo.png b/ios/Runner/Assets.xcassets/videoMutedIndicator.imageset/cameraoff_mainVideo.png
new file mode 100755
index 00000000..29fcf060
Binary files /dev/null and b/ios/Runner/Assets.xcassets/videoMutedIndicator.imageset/cameraoff_mainVideo.png differ
diff --git a/ios/Runner/Base.lproj/Main.storyboard b/ios/Runner/Base.lproj/Main.storyboard
old mode 100644
new mode 100755
index f3c28516..95f4bd10
--- a/ios/Runner/Base.lproj/Main.storyboard
+++ b/ios/Runner/Base.lproj/Main.storyboard
@@ -1,8 +1,10 @@
-
-
+
+
+
-
+
+
@@ -14,13 +16,281 @@
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist
index 4c18587e..d0d77b5e 100644
--- a/ios/Runner/Info.plist
+++ b/ios/Runner/Info.plist
@@ -45,5 +45,12 @@
UIViewControllerBasedStatusBarAppearance
+
+ NSCameraUsageDescription
+ ${PRODUCT_NAME} always camera use
+
+ NSMicrophoneUsageDescription
+ ${PRODUCT_NAME} always Microphone use
+
diff --git a/lib/client/base_app_client.dart b/lib/client/base_app_client.dart
index edd8802f..3ca3d40a 100644
--- a/lib/client/base_app_client.dart
+++ b/lib/client/base_app_client.dart
@@ -59,10 +59,10 @@ class BaseAppClient {
body['stamp'] = STAMP;
body['IPAdress'] = IP_ADDRESS;
body['VersionID'] = VERSION_ID;
- body['Channel'] = CHANNEL;
+ if (body['Channel'] == null) body['Channel'] = CHANNEL;
body['SessionID'] = SESSION_ID;
body['IsLoginForDoctorApp'] = IS_LOGIN_FOR_DOCTOR_APP;
- body['PatientOutSA'] = PATIENT_OUT_SA;
+ body['PatientOutSA'] = 0; // PATIENT_OUT_SA;
print("URL : $url");
print("Body : ${json.encode(body)}");
diff --git a/lib/config/config.dart b/lib/config/config.dart
index a93d5de1..261fcd46 100644
--- a/lib/config/config.dart
+++ b/lib/config/config.dart
@@ -35,6 +35,24 @@ const START_LIVECARE_CALL = 'LiveCareApi/DoctorApp/CallPatient';
const LIVE_CARE_STATISTICS_FOR_CERTAIN_DOCTOR_URL =
"Lists.svc/REST/DashBoard_GetLiveCareDoctorsStatsticsForCertainDoctor";
+const GET_PRESCRIPTION_REPORT = 'Services/Patients.svc/REST/GetPrescriptionReport';
+
+const GT_MY_PATIENT_QUESTION = 'Services/DoctorApplication.svc/REST/GtMyPatientsQuestions';
+
+const GET_PATIENT = 'Services/DoctorApplication.svc/REST/';
+
+const GET_PRESCRIPTION_REPORT_FOR_IN_PATIENT= 'Services/DoctorApplication.svc/REST/GetPrescriptionReportForInPatient';
+
+const GET_MY_REFERRAL_PATIENT = 'Services/DoctorApplication.svc/REST/GtMyReferralPatient';
+
+const ADD_REFERRED_DOCTOR_REMARKS= 'Services/DoctorApplication.svc/REST/AddReferredDoctorRemarks';
+
+const GET_MY_REFERRED_PATIENT = 'Services/DoctorApplication.svc/REST/GtMyReferredPatient';
+
+const GET_DOCTOR_WORKING_HOURS_TABLE = 'Services/Doctors.svc/REST/GetDoctorWorkingHoursTable';
+
+const GET_PATIENT_LAB_RESULTS= 'Services/DoctorApplication.svc/REST/GetPatientLabResults';
+
var selectedPatientType = 1;
//*********change value to decode json from Dropdown ************
diff --git a/lib/main.dart b/lib/main.dart
index 557eef69..0e51a148 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -1,4 +1,5 @@
import 'package:doctor_app_flutter/providers/livecare_provider.dart';
+import 'package:doctor_app_flutter/providers/medicine_provider.dart';
import 'package:doctor_app_flutter/providers/project_provider.dart';
import 'package:doctor_app_flutter/providers/schedule_provider.dart';
import 'package:doctor_app_flutter/util/translations_delegate_base.dart';
@@ -41,33 +42,36 @@ class MyApp extends StatelessWidget {
),
ChangeNotifierProvider(
create: (context) => LiveCareProvider(),
- )
+ ),
+ ChangeNotifierProvider(create: (context) => MedicineProvider(),),
],
child: Consumer(
- builder: (context, projectProvider, child) => MaterialApp(
- showSemanticsDebugger: false,
- title: 'Flutter Demo',
- locale: projectProvider.appLocal,
- localizationsDelegates: [
- TranslationBaseDelegate(),
- GlobalMaterialLocalizations.delegate,
- GlobalWidgetsLocalizations.delegate,
- ],
- supportedLocales: [
- const Locale('ar', ''), // Arabic
- const Locale('en', ''), // English
- ],
- theme: ThemeData(
- primarySwatch: Colors.grey,
- primaryColor: Colors.grey,
- buttonColor: Hexcolor('#B8382C'),
- fontFamily: 'WorkSans',
- dividerColor: Colors.grey[350],
- backgroundColor: Color.fromRGBO(255, 255, 255, 1)),
- initialRoute: INIT_ROUTE,
- routes: routes,
- debugShowCheckedModeBanner: false,
- )),
+ builder: (context,projectProvider,child) => MaterialApp(
+ showSemanticsDebugger: false,
+ title: 'Flutter Demo',
+ locale: projectProvider.appLocal,
+ localizationsDelegates: [
+ TranslationBaseDelegate(),
+ GlobalMaterialLocalizations.delegate,
+ GlobalWidgetsLocalizations.delegate,
+ ],
+ supportedLocales: [
+ const Locale('ar', ''), // Arabic
+ const Locale('en', ''), // English
+ ],
+ theme: ThemeData(
+ primarySwatch: Colors.grey,
+ primaryColor: Colors.grey,
+ buttonColor: Hexcolor('#B8382C'),
+ fontFamily: 'WorkSans',
+ dividerColor: Colors.grey[350],
+ backgroundColor: Color.fromRGBO(255,255,255, 1)
+ ),
+ initialRoute: INIT_ROUTE,
+ routes: routes,
+ debugShowCheckedModeBanner: false,
+ )
+ ),
);
});
},
diff --git a/lib/providers/auth_provider.dart b/lib/providers/auth_provider.dart
index 5a3c9272..61a61530 100644
--- a/lib/providers/auth_provider.dart
+++ b/lib/providers/auth_provider.dart
@@ -166,12 +166,11 @@ class AuthProvider with ChangeNotifier {
onSuccess: (dynamic response, int statusCode) {
localRes = response;
//ClinicDescription
- selectedClinicName =
- response['DoctorProfileList'][0]['ClinicDescription'];
- notifyListeners();
+ selectedClinicName = response['DoctorProfileList'][0]['ClinicDescription'];
}, onFailure: (String error, int statusCode) {
throw error;
}, body: docInfo);
+ notifyListeners();
return Future.value(localRes);
} catch (error) {
print(error);
diff --git a/lib/providers/doctor_reply_provider.dart b/lib/providers/doctor_reply_provider.dart
index bc5e401c..e254988d 100644
--- a/lib/providers/doctor_reply_provider.dart
+++ b/lib/providers/doctor_reply_provider.dart
@@ -1,4 +1,5 @@
import 'package:doctor_app_flutter/client/base_app_client.dart';
+import 'package:doctor_app_flutter/config/config.dart';
import 'package:doctor_app_flutter/models/doctor/request_doctor_reply.dart';
import 'package:doctor_app_flutter/models/doctor/list_gt_my_patients_question_model.dart';
import 'package:flutter/cupertino.dart';
@@ -17,8 +18,7 @@ class DoctorReplyProvider with ChangeNotifier {
getDoctorReply() async {
try {
- await BaseAppClient.post(
- 'DoctorApplication.svc/REST/GtMyPatientsQuestions',
+ await BaseAppClient.post(GT_MY_PATIENT_QUESTION,
body: _requestDoctorReply.toJson(),
onSuccess: (dynamic response, int statusCode) {
response['List_GtMyPatientsQuestions'].forEach((v) {
diff --git a/lib/providers/medicine_provider.dart b/lib/providers/medicine_provider.dart
index 661a5e81..873d28a7 100644
--- a/lib/providers/medicine_provider.dart
+++ b/lib/providers/medicine_provider.dart
@@ -1,103 +1,72 @@
-import 'dart:convert';
-
-import 'package:doctor_app_flutter/client/app_client.dart';
+import 'package:doctor_app_flutter/client/base_app_client.dart';
import 'package:doctor_app_flutter/config/config.dart';
-import 'package:doctor_app_flutter/config/shared_pref_kay.dart';
import 'package:doctor_app_flutter/models/pharmacies/pharmacies_List_request_model.dart';
import 'package:doctor_app_flutter/models/pharmacies/pharmacies_items_request_model.dart';
import 'package:doctor_app_flutter/util/dr_app_shared_pref.dart';
-import 'package:doctor_app_flutter/util/helpers.dart';
import 'package:flutter/cupertino.dart';
class MedicineProvider with ChangeNotifier {
DrAppSharedPreferances sharedPref = new DrAppSharedPreferances();
-
+
var pharmacyItemsList = [];
var pharmaciesList = [];
bool isFinished = true;
bool hasError = false;
String errorMsg = '';
- PharmaciesItemsRequestModel _itemsRequestModel =PharmaciesItemsRequestModel();
+ PharmaciesItemsRequestModel _itemsRequestModel =
+ PharmaciesItemsRequestModel();
PharmaciesListRequestModel _listRequestModel = PharmaciesListRequestModel();
- Future getMedicineItem(String itemName) async {
+
+ clearPharmacyItemsList(){
+ pharmacyItemsList.clear();
+ notifyListeners();
+ }
+
+ getMedicineItem(String itemName) async {
+ _itemsRequestModel.pHRItemName = itemName;
resetDefaultValues();
+ pharmacyItemsList.clear();
+ notifyListeners();
try {
- if (await Helpers.checkConnection()) {
- _itemsRequestModel.pHRItemName = itemName;
-
- final response = await AppClient.post(PHARMACY_ITEMS_URL,
- body: json.encode(_itemsRequestModel.toJson()));
- final int statusCode = response.statusCode;
- isFinished = true;
- if (statusCode < 200 || statusCode >= 400 || json == null) {
- isFinished = true;
- hasError = true;
- errorMsg = 'Error While Fetching data';
- } else {
- var parsed = json.decode(response.body.toString());
- if (parsed['MessageStatus'] == 1) {
- pharmacyItemsList = parsed['ListPharmcy_Region'];
+ await BaseAppClient.post(PHARMACY_ITEMS_URL,
+ onSuccess: (dynamic response, int statusCode) {
+ pharmacyItemsList = response['ListPharmcy_Region'];
hasError = false;
isFinished = true;
errorMsg = "Done";
- } else {
+ }, onFailure: (String error, int statusCode) {
+ isFinished = true;
hasError = true;
- errorMsg = parsed['ErrorMessage'] ?? parsed['ErrorEndUserMessage'];
- }
- }
- } else {
- isFinished = true;
- hasError = true;
- errorMsg = 'Please Check The Internet Connection';
- }
+ errorMsg = error;
+ }, body: _itemsRequestModel.toJson());
notifyListeners();
} catch (error) {
throw error;
}
-
- return errorMsg;
}
- Future getPharmaciesList(int itemId) async {
- String token = await sharedPref.getString(TOKEN);
+ getPharmaciesList(int itemId) async {
resetDefaultValues();
try {
- if (await Helpers.checkConnection()) {
- _listRequestModel.itemID = itemId;
- _listRequestModel.tokenID = token;
- final response = await AppClient.post(PHARMACY_LIST_URL,
- body: json.encode(_listRequestModel.toJson()));
- final int statusCode = response.statusCode;
- isFinished = true;
- if (statusCode < 200 || statusCode >= 400 || json == null) {
- isFinished = true;
- hasError = true;
- errorMsg = 'Error While Fetching data';
- } else {
- var parsed = json.decode(response.body.toString());
- if (parsed['MessageStatus'] == 1) {
- pharmaciesList = parsed['PharmList'];
+ _listRequestModel.itemID = itemId;
+ isFinished = true;
+ await BaseAppClient.post(PHARMACY_LIST_URL,
+ onSuccess: (dynamic response, int statusCode) {
+ pharmaciesList = response['PharmList'];
hasError = false;
isFinished = true;
errorMsg = "Done";
- } else {
+ }, onFailure: (String error, int statusCode) {
+ isFinished = true;
hasError = true;
- errorMsg = parsed['ErrorMessage'] ?? parsed['ErrorEndUserMessage'];
- }
- }
- } else {
- isFinished = true;
- hasError = true;
- errorMsg = 'Please Check The Internet Connection';
- }
+ errorMsg = error;
+ }, body: _listRequestModel.toJson());
notifyListeners();
} catch (error) {
throw error;
}
-
- return errorMsg;
}
resetDefaultValues() {
diff --git a/lib/providers/patients_provider.dart b/lib/providers/patients_provider.dart
index c525668b..15c9e1e4 100644
--- a/lib/providers/patients_provider.dart
+++ b/lib/providers/patients_provider.dart
@@ -72,7 +72,7 @@ class PatientsProvider with ChangeNotifier {
try {
dynamic localRes;
- await BaseAppClient.post('DoctorApplication.svc/REST/' + SERVICES_PATIANT[val],
+ await BaseAppClient.post(GET_PATIENT + SERVICES_PATIANT[val],
onSuccess: (dynamic response, int statusCode) {
localRes = response;
}, onFailure: (String error, int statusCode) {
@@ -235,8 +235,7 @@ class PatientsProvider with ChangeNotifier {
try {
prescriptionReportForInPatientList = [];
notifyListeners();
- await BaseAppClient.post(
- 'DoctorApplication.svc/REST/GetPrescriptionReportForInPatient',
+ await BaseAppClient.post(GET_PRESCRIPTION_REPORT_FOR_IN_PATIENT,
onSuccess: (dynamic response, int statusCode) {
response['List_PrescriptionReportForInPatient'].forEach((v) {
prescriptionReportForInPatientList
@@ -261,7 +260,7 @@ class PatientsProvider with ChangeNotifier {
isError = false;
error = "";
notifyListeners();
- await BaseAppClient.post('Patients.svc/REST/GetPrescriptionReport',
+ await BaseAppClient.post(GET_PRESCRIPTION_REPORT,
onSuccess: (dynamic response, int statusCode) {
response['ListPRM'].forEach((v) {
prescriptionReport.add(PrescriptionReport.fromJson(v));
@@ -330,7 +329,7 @@ class PatientsProvider with ChangeNotifier {
requestLabResult.orderNo = labOrdersResModel.orderNo;
requestLabResult.invoiceNo = labOrdersResModel.invoiceNo;
requestLabResult.patientTypeID = labOrdersResModel.patientType;
- await BaseAppClient.post('DoctorApplication.svc/REST/GetPatientLabResults',
+ await BaseAppClient.post(GET_PATIENT_LAB_RESULTS,
onSuccess: (dynamic response, int statusCode) {
isError = false;
isLoading = false;
diff --git a/lib/providers/project_provider.dart b/lib/providers/project_provider.dart
index 6c867228..4de2251f 100644
--- a/lib/providers/project_provider.dart
+++ b/lib/providers/project_provider.dart
@@ -1,9 +1,16 @@
import 'dart:async';
import 'package:connectivity/connectivity.dart';
+import 'package:doctor_app_flutter/config/config.dart';
import 'package:doctor_app_flutter/config/shared_pref_kay.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/providers/auth_provider.dart';
import 'package:doctor_app_flutter/util/dr_app_shared_pref.dart';
+import 'package:doctor_app_flutter/util/helpers.dart';
import 'package:flutter/cupertino.dart';
+import 'package:provider/provider.dart';
+Helpers helpers = Helpers();
class ProjectProvider with ChangeNotifier {
DrAppSharedPreferances sharedPref = DrAppSharedPreferances();
@@ -16,7 +23,7 @@ class ProjectProvider with ChangeNotifier {
bool get isArabic => _isArabic;
StreamSubscription subscription;
-
+ // AuthProvider authProvider = AuthProvider();
ProjectProvider() {
loadSharedPrefLanguage();
@@ -59,6 +66,7 @@ class ProjectProvider with ChangeNotifier {
currentLanguage = 'en';
sharedPref.setString(APP_Language, 'en');
}
+ getProfile();
notifyListeners();
}
@@ -67,4 +75,25 @@ class ProjectProvider with ChangeNotifier {
if (subscription != null) subscription.cancel();
super.dispose();
}
+
+ void getProfile()async{
+ Map profile = await sharedPref.getObj(DOCTOR_PROFILE);
+ DoctorProfileModel doctorProfile = new DoctorProfileModel.fromJson(profile);
+ ProfileReqModel docInfo = new ProfileReqModel(
+ doctorID: doctorProfile.doctorID,
+ clinicID: doctorProfile.clinicID,
+ license: true,
+ projectID: doctorProfile.projectID,
+ tokenID: '',
+ languageID: 2);
+
+ Provider.of(AppGlobal.CONTEX,listen: false)
+ .getDocProfiles(docInfo.toJson()).then((res) async {
+ sharedPref.setObj(DOCTOR_PROFILE, res['DoctorProfileList'][0]);
+ }).catchError((err) {
+ print(err);
+ });
+ }
+
+
}
diff --git a/lib/providers/referral_patient_provider.dart b/lib/providers/referral_patient_provider.dart
index d7270e65..d0b36345 100644
--- a/lib/providers/referral_patient_provider.dart
+++ b/lib/providers/referral_patient_provider.dart
@@ -1,4 +1,5 @@
import 'package:doctor_app_flutter/client/base_app_client.dart';
+import 'package:doctor_app_flutter/config/config.dart';
import 'package:doctor_app_flutter/models/patient/my_referral/my_referral_patient_model.dart';
import 'package:doctor_app_flutter/models/doctor/request_add_referred_doctor_remarks.dart';
import 'package:doctor_app_flutter/models/patient/request_my_referral_patient_model.dart';
@@ -24,8 +25,7 @@ class MyReferralPatientProvider with ChangeNotifier {
getMyReferralPatient() async {
try {
- await BaseAppClient.post(
- 'DoctorApplication.svc/REST/GtMyReferralPatient',
+ await BaseAppClient.post(GET_MY_REFERRAL_PATIENT,
body: _requestMyReferralPatient.toJson(),
onSuccess: (dynamic response, int statusCode) {
response['List_MyReferralPatient'].forEach((v) {
@@ -57,8 +57,7 @@ class MyReferralPatientProvider with ChangeNotifier {
_requestAddReferredDoctorRemarks.referredDoctorRemarks = referredDoctorRemarks;
_requestAddReferredDoctorRemarks.lineItemNo = model.lineItemNo;
_requestAddReferredDoctorRemarks.referringDoctor = model.referringDoctor;
- await BaseAppClient.post(
- 'DoctorApplication.svc/REST/AddReferredDoctorRemarks',
+ await BaseAppClient.post(ADD_REFERRED_DOCTOR_REMARKS,
body: _requestAddReferredDoctorRemarks.toJson(),
onSuccess: (dynamic body, int statusCode) {
model.referredDoctorRemarks = referredDoctorRemarks;
diff --git a/lib/providers/referred_patient_provider.dart b/lib/providers/referred_patient_provider.dart
index 4d7780b2..7cf8b58e 100644
--- a/lib/providers/referred_patient_provider.dart
+++ b/lib/providers/referred_patient_provider.dart
@@ -1,4 +1,5 @@
import 'package:doctor_app_flutter/client/base_app_client.dart';
+import 'package:doctor_app_flutter/config/config.dart';
import 'package:doctor_app_flutter/models/patient/my_referral/my_referred_patient_model.dart';
import 'package:doctor_app_flutter/models/patient/request_my_referral_patient_model.dart';
import 'package:doctor_app_flutter/models/doctor/verify_referral_doctor_remarks.dart';
@@ -22,8 +23,7 @@ class MyReferredPatientProvider with ChangeNotifier {
getMyReferralPatient() async {
try {
- await BaseAppClient.post(
- 'DoctorApplication.svc/REST/GtMyReferredPatient',
+ await BaseAppClient.post(GET_MY_REFERRED_PATIENT,
body: _requestMyReferralPatient.toJson(),
onSuccess: (dynamic response, int statusCode) {
response['List_MyReferredPatient'].forEach((v) {
@@ -62,8 +62,7 @@ class MyReferredPatientProvider with ChangeNotifier {
_verifyreferraldoctorremarks.patientMobileNumber=model.mobileNumber;
_verifyreferraldoctorremarks.patientIdentificationID=model.patientIdentificationNo;
- await BaseAppClient.post(
- 'DoctorApplication.svc/REST/GtMyReferredPatient',
+ await BaseAppClient.post(GET_MY_REFERRED_PATIENT,
body: _verifyreferraldoctorremarks.toJson(),
onSuccess: (dynamic body, int statusCode) {
diff --git a/lib/providers/schedule_provider.dart b/lib/providers/schedule_provider.dart
index 0bd98af7..dedc9c27 100644
--- a/lib/providers/schedule_provider.dart
+++ b/lib/providers/schedule_provider.dart
@@ -1,4 +1,5 @@
import 'package:doctor_app_flutter/client/base_app_client.dart';
+import 'package:doctor_app_flutter/config/config.dart';
import 'package:flutter/cupertino.dart';
import '../models/doctor/list_doctor_working_hours_table_model.dart';
import '../models/doctor/request_schedule.dart';
@@ -16,7 +17,7 @@ class ScheduleProvider with ChangeNotifier {
getDoctorSchedule() async {
try {
- await BaseAppClient.post('Doctors.svc/REST/GetDoctorWorkingHoursTable',
+ await BaseAppClient.post(GET_DOCTOR_WORKING_HOURS_TABLE,
body: requestSchedule.toJson(),
onSuccess: (dynamic response, int statusCode) {
response['List_DoctorWorkingHoursTable'].forEach((v) {
diff --git a/lib/screens/dashboard_screen.dart b/lib/screens/dashboard_screen.dart
index 85eb5513..037b344d 100644
--- a/lib/screens/dashboard_screen.dart
+++ b/lib/screens/dashboard_screen.dart
@@ -12,6 +12,7 @@ import 'package:doctor_app_flutter/providers/project_provider.dart';
import 'package:doctor_app_flutter/providers/referral_patient_provider.dart';
import 'package:doctor_app_flutter/providers/referred_patient_provider.dart';
import 'package:doctor_app_flutter/screens/medicine/medicine_search_screen.dart';
+import 'package:doctor_app_flutter/util/VideoChannel.dart';
import 'package:doctor_app_flutter/util/dr_app_shared_pref.dart';
import 'package:doctor_app_flutter/util/helpers.dart';
import 'package:doctor_app_flutter/util/translations_delegate_base.dart';
diff --git a/lib/screens/live_care/panding_list.dart b/lib/screens/live_care/panding_list.dart
index 18b787cd..ce139455 100644
--- a/lib/screens/live_care/panding_list.dart
+++ b/lib/screens/live_care/panding_list.dart
@@ -1,5 +1,6 @@
import 'package:doctor_app_flutter/config/size_config.dart';
import 'package:doctor_app_flutter/providers/livecare_provider.dart';
+import 'package:doctor_app_flutter/util/VideoChannel.dart';
import 'package:doctor_app_flutter/util/dr_app_shared_pref.dart';
import 'package:doctor_app_flutter/util/helpers.dart';
import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart';
@@ -207,6 +208,8 @@ class _LiveCarePandingListState extends State {
color: Colors
.green, //Colors.black,
onPressed: () => {
+
+
sharedPref.setObj(
LIVE_CARE_PATIENT,
item),
@@ -223,7 +226,15 @@ class _LiveCarePandingListState extends State {
],
),
),
- onTap: () {},
+ onTap: () {
+ sharedPref.setObj(
+ LIVE_CARE_PATIENT,
+ item);
+ Navigator.of(context)
+ .pushNamed(
+ VIDEO_CALL);
+
+ },
),
);
}).toList(),
diff --git a/lib/screens/live_care/video_call.dart b/lib/screens/live_care/video_call.dart
index be2d47de..596f5f20 100644
--- a/lib/screens/live_care/video_call.dart
+++ b/lib/screens/live_care/video_call.dart
@@ -1,6 +1,7 @@
import 'dart:async';
import 'package:doctor_app_flutter/providers/livecare_provider.dart';
+import 'package:doctor_app_flutter/util/VideoChannel.dart';
import 'package:doctor_app_flutter/util/dr_app_shared_pref.dart';
import 'package:flutter/material.dart';
import 'package:doctor_app_flutter/config/shared_pref_kay.dart';
@@ -21,6 +22,7 @@ class _VideoCallPageState extends State {
String _timmer = '';
LiveCareProvider _liveCareProvider;
bool _isInit = true;
+ var _tokenData;
var patientData = {};
String image_url = 'https://hmgwebservices.com/Images/MobileImages/DUBAI/';
//bool _isOutOfStuck = false;
@@ -36,9 +38,14 @@ class _VideoCallPageState extends State {
}
void connectOpenTok(tokenData) {
+ _tokenData = tokenData;
/* opentok functionalites need to be written */
- print(tokenData["OpenSessionID"]);
- print(tokenData["OpenTokenID"]);
+
+ VideoChannel.openVideoCallScreen(kApiKey: '46209962',
+ kSessionId: _tokenData["OpenSessionID"],
+ kToken: _tokenData["OpenTokenID"],
+ );
+
}
String getTimerTime(int start) {
@@ -149,7 +156,19 @@ class _VideoCallPageState extends State {
FunctionalButton(
title: 'Speaker',
icon: Icons.phone_in_talk,
- onPressed: () {},
+ onPressed: () {
+
+
+
+ print(_tokenData["OpenSessionID"]);
+ print(_tokenData["OpenTokenID"]);
+
+ VideoChannel.openVideoCallScreen(kApiKey: '46209962',
+ kSessionId: _tokenData["OpenSessionID"],
+ kToken: _tokenData["OpenTokenID"],
+ );
+
+ },
),
FunctionalButton(
title: 'Flip',
diff --git a/lib/screens/medicine/medicine_search_screen.dart b/lib/screens/medicine/medicine_search_screen.dart
index 5c8726d7..67b4a651 100644
--- a/lib/screens/medicine/medicine_search_screen.dart
+++ b/lib/screens/medicine/medicine_search_screen.dart
@@ -92,7 +92,7 @@ class _MedicineSearchState extends State {
children: [
AppText(
TranslationBase.of(context).youCanFind +
- (data == null ? "0" : data.length.toString()) +
+ (_medicineProvider.pharmacyItemsList == null ? "0" : _medicineProvider.pharmacyItemsList.length.toString()) +
TranslationBase.of(context).itemsInSearch,
fontWeight: FontWeight.bold,
margin: 5,
@@ -116,25 +116,22 @@ class _MedicineSearchState extends State {
: ListView.builder(
scrollDirection: Axis.vertical,
shrinkWrap: true,
- itemCount: data == null ? 0 : data.length,
+ itemCount: _medicineProvider.pharmacyItemsList == null ? 0 : _medicineProvider.pharmacyItemsList.length,
itemBuilder: (BuildContext context, int index) {
return InkWell(
child: MedicineItemWidget(
- label: data[index]["ItemDescription"],
- url: data[index]["ProductImageBase64"],
+ label: _medicineProvider.pharmacyItemsList[index]["ItemDescription"],
+ url: _medicineProvider.pharmacyItemsList[index]["ProductImageBase64"],
),
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) =>
- ChangeNotifierProvider(
- create: (_) => MedicineProvider(),
- child: PharmaciesListScreen(
- itemID: data[index]["ItemID"],
- url: data[index]
- ["ProductImageBase64"]),
- ),
+ PharmaciesListScreen(
+ itemID: _medicineProvider.pharmacyItemsList[index]["ItemID"],
+ url: _medicineProvider.pharmacyItemsList[index]
+ ["ProductImageBase64"]),
),
);
},
@@ -150,16 +147,10 @@ class _MedicineSearchState extends State {
searchMedicine(context) {
FocusScope.of(context).unfocus();
if (myController.text.isNullOrEmpty()) {
- this.setState(() {
- data = null;
- });
+ _medicineProvider.clearPharmacyItemsList();
helpers.showErrorToast("Type Medicine Name");
return;
}
- _medicineProvider.getMedicineItem(myController.text).then((str) {
- this.setState(() {
- data = _medicineProvider.pharmacyItemsList;
- });
- });
+ _medicineProvider.getMedicineItem(myController.text);
}
}
diff --git a/lib/screens/medicine/pharmacies_list_screen.dart b/lib/screens/medicine/pharmacies_list_screen.dart
index 2f42a8ea..fbbae4f4 100644
--- a/lib/screens/medicine/pharmacies_list_screen.dart
+++ b/lib/screens/medicine/pharmacies_list_screen.dart
@@ -55,7 +55,17 @@ class _PharmaciesListState extends State {
projectsProvider = Provider.of(context);
return AppScaffold(
appBarTitle: TranslationBase.of(context).pharmaciesList,
- body: Container(
+ body: !_medicineProvider.isFinished
+ ? DrAppCircularProgressIndeicator()
+ : _medicineProvider.hasError
+ ? Center(
+ child: Text(
+ _medicineProvider.errorMsg,
+ style: TextStyle(
+ color: Theme.of(context).errorColor),
+ ),
+ )
+ :Container(
height: SizeConfig.screenHeight,
child: ListView(
shrinkWrap: true,
@@ -63,84 +73,70 @@ class _PharmaciesListState extends State {
physics: const AlwaysScrollableScrollPhysics(),
children: [
RoundedContainer(
- child: !_medicineProvider.isFinished
- ? DrAppCircularProgressIndeicator()
- : _medicineProvider.hasError
- ? Center(
- child: Text(
- _medicineProvider.errorMsg,
- style: TextStyle(
- color: Theme.of(context).errorColor),
- ),
- )
- : StreamBuilder