diff --git a/app/src/gplay/java/com/nextcloud/talk/services/firebase/MagicFirebaseMessagingService.kt b/app/src/gplay/java/com/nextcloud/talk/services/firebase/MagicFirebaseMessagingService.kt index babda90c6..42c18b51c 100644 --- a/app/src/gplay/java/com/nextcloud/talk/services/firebase/MagicFirebaseMessagingService.kt +++ b/app/src/gplay/java/com/nextcloud/talk/services/firebase/MagicFirebaseMessagingService.kt @@ -41,7 +41,7 @@ import com.bluelinelabs.logansquare.LoganSquare import com.google.firebase.messaging.FirebaseMessagingService import com.google.firebase.messaging.RemoteMessage import com.nextcloud.talk.R -import com.nextcloud.talk.activities.MagicCallActivity +import com.nextcloud.talk.activities.CallActivity import com.nextcloud.talk.api.NcApi import com.nextcloud.talk.application.NextcloudTalkApplication import com.nextcloud.talk.application.NextcloudTalkApplication.Companion.sharedApplication @@ -178,7 +178,7 @@ class MagicFirebaseMessagingService : FirebaseMessagingService() { ) } } else if (type == "call") { - val fullScreenIntent = Intent(applicationContext, MagicCallActivity::class.java) + val fullScreenIntent = Intent(applicationContext, CallActivity::class.java) val bundle = Bundle() bundle.putString(BundleKeys.KEY_ROOM_ID, decryptedPushMessage!!.id) bundle.putParcelable(KEY_USER_ENTITY, signatureVerification!!.userEntity) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 00de93a50..a1f1ae7e5 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -123,7 +123,7 @@ . */ -package com.nextcloud.talk.controllers; +package com.nextcloud.talk.activities; import android.Manifest; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.annotation.SuppressLint; +import android.app.KeyguardManager; +import android.app.PictureInPictureParams; import android.content.res.Configuration; import android.graphics.Color; import android.media.AudioAttributes; @@ -36,28 +38,23 @@ import android.os.Looper; import android.text.TextUtils; import android.util.DisplayMetrics; import android.util.Log; -import android.view.LayoutInflater; +import android.util.Rational; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.view.ViewTreeObserver; +import android.view.Window; +import android.view.WindowManager; import android.widget.FrameLayout; -import android.widget.GridView; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.ProgressBar; import android.widget.RelativeLayout; -import android.widget.TextView; import com.bluelinelabs.logansquare.LoganSquare; -import com.facebook.drawee.view.SimpleDraweeView; import com.nextcloud.talk.R; -import com.nextcloud.talk.activities.MagicCallActivity; import com.nextcloud.talk.adapters.ParticipantDisplayItem; import com.nextcloud.talk.adapters.ParticipantsAdapter; import com.nextcloud.talk.api.NcApi; import com.nextcloud.talk.application.NextcloudTalkApplication; -import com.nextcloud.talk.controllers.base.BaseController; +import com.nextcloud.talk.databinding.ControllerCallBinding; import com.nextcloud.talk.events.ConfigurationChangeEvent; import com.nextcloud.talk.events.MediaStreamEvent; import com.nextcloud.talk.events.NetworkEvent; @@ -122,7 +119,6 @@ import org.webrtc.PeerConnectionFactory; import org.webrtc.RendererCommon; import org.webrtc.SessionDescription; import org.webrtc.SurfaceTextureHelper; -import org.webrtc.SurfaceViewRenderer; import org.webrtc.VideoCapturer; import org.webrtc.VideoSource; import org.webrtc.VideoTrack; @@ -141,12 +137,9 @@ import javax.inject.Inject; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.annotation.RequiresApi; import androidx.appcompat.app.AppCompatActivity; import autodagger.AutoInjector; -import butterknife.BindView; -import butterknife.OnClick; -import butterknife.OnItemClick; -import butterknife.OnLongClick; import io.reactivex.Observable; import io.reactivex.Observer; import io.reactivex.android.schedulers.AndroidSchedulers; @@ -159,9 +152,9 @@ import okhttp3.Cache; import pub.devrel.easypermissions.AfterPermissionGranted; @AutoInjector(NextcloudTalkApplication.class) -public class CallController extends BaseController { +public class CallActivity extends BaseActivity { - public static final String TAG = "CallController"; + public static final String TAG = "CallActivity"; private static final String[] PERMISSIONS_CALL = { android.Manifest.permission.CAMERA, @@ -176,52 +169,6 @@ public class CallController extends BaseController { Manifest.permission.RECORD_AUDIO }; - @BindView(R.id.callControlEnableSpeaker) - SimpleDraweeView callControlEnableSpeaker; - - @BindView(R.id.selfVideoRenderer) - SurfaceViewRenderer selfVideoRenderer; - - @BindView(R.id.selfVideoViewWrapper) - FrameLayout selfVideoViewWrapper; - - @BindView(R.id.controllerCallLayout) - RelativeLayout controllerCallLayout; - @BindView(R.id.gridview) - GridView gridView; - - @BindView(R.id.callControlsLinearLayout) - LinearLayout callControls; - @BindView(R.id.call_control_microphone) - SimpleDraweeView microphoneControlButton; - @BindView(R.id.call_control_camera) - SimpleDraweeView cameraControlButton; - @BindView(R.id.call_control_switch_camera) - SimpleDraweeView cameraSwitchButton; - @BindView(R.id.callStateTextView) - TextView callStateTextView; - - @BindView(R.id.callInfosLinearLayout) - LinearLayout callInfosLinearLayout; - @BindView(R.id.callVoiceOrVideoTextView) - TextView callVoiceOrVideoTextView; - @BindView(R.id.callConversationNameTextView) - TextView callConversationNameTextView; - @BindView(R.id.callControlEnterPip) - SimpleDraweeView callControlEnterPip; - - @BindView(R.id.callStateRelativeLayoutView) - RelativeLayout callStateView; - - @BindView(R.id.conversationRelativeLayoutView) - RelativeLayout conversationView; - - @BindView(R.id.errorImageView) - ImageView errorImageView; - - @BindView(R.id.callStateProgressBar) - ProgressBar progressBar; - @Inject NcApi ncApi; @Inject @@ -293,29 +240,46 @@ public class CallController extends BaseController { private Map participantDisplayItems; private ParticipantsAdapter participantsAdapter; + private Boolean isInPipMode = false; + + private ControllerCallBinding binding; + @Parcel public enum CallStatus { CONNECTING, CALLING_TIMEOUT, JOINED, IN_CONVERSATION, RECONNECTING, OFFLINE, LEAVING, PUBLISHER_FAILED } - public CallController(Bundle args) { - super(args); + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + NextcloudTalkApplication.Companion.getSharedApplication().getComponentApplication().inject(this); - roomId = args.getString(BundleKeys.INSTANCE.getKEY_ROOM_ID(), ""); - roomToken = args.getString(BundleKeys.INSTANCE.getKEY_ROOM_TOKEN(), ""); - conversationUser = args.getParcelable(BundleKeys.INSTANCE.getKEY_USER_ENTITY()); - conversationPassword = args.getString(BundleKeys.INSTANCE.getKEY_CONVERSATION_PASSWORD(), ""); - conversationName = args.getString(BundleKeys.INSTANCE.getKEY_CONVERSATION_NAME(), ""); - isVoiceOnlyCall = args.getBoolean(BundleKeys.INSTANCE.getKEY_CALL_VOICE_ONLY(), false); + setTheme(R.style.CallTheme); - if (args.containsKey(BundleKeys.INSTANCE.getKEY_FROM_NOTIFICATION_START_CALL())) { - isIncomingCallFromNotification = args.getBoolean(BundleKeys.INSTANCE.getKEY_FROM_NOTIFICATION_START_CALL()); + requestWindowFeature(Window.FEATURE_NO_TITLE); + dismissKeyguard(); + getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); + getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + + binding = ControllerCallBinding.inflate(getLayoutInflater()); + setContentView(binding.getRoot()); + + Bundle extras = getIntent().getExtras(); + roomId = extras.getString(BundleKeys.INSTANCE.getKEY_ROOM_ID(), ""); + roomToken = extras.getString(BundleKeys.INSTANCE.getKEY_ROOM_TOKEN(), ""); + conversationUser = extras.getParcelable(BundleKeys.INSTANCE.getKEY_USER_ENTITY()); + conversationPassword = extras.getString(BundleKeys.INSTANCE.getKEY_CONVERSATION_PASSWORD(), ""); + conversationName = extras.getString(BundleKeys.INSTANCE.getKEY_CONVERSATION_NAME(), ""); + isVoiceOnlyCall = extras.getBoolean(BundleKeys.INSTANCE.getKEY_CALL_VOICE_ONLY(), false); + + if (extras.containsKey(BundleKeys.INSTANCE.getKEY_FROM_NOTIFICATION_START_CALL())) { + isIncomingCallFromNotification = extras.getBoolean(BundleKeys.INSTANCE.getKEY_FROM_NOTIFICATION_START_CALL()); } credentials = ApiUtils.getCredentials(conversationUser.getUsername(), conversationUser.getToken()); - baseUrl = args.getString(BundleKeys.INSTANCE.getKEY_MODIFIED_BASE_URL(), ""); + baseUrl = extras.getString(BundleKeys.INSTANCE.getKEY_MODIFIED_BASE_URL(), ""); if (TextUtils.isEmpty(baseUrl)) { baseUrl = conversationUser.getBaseUrl(); @@ -323,61 +287,76 @@ public class CallController extends BaseController { powerManagerUtils = new PowerManagerUtils(); - if (args.getString("state", "").equalsIgnoreCase("resume")) { + if (extras.getString("state", "").equalsIgnoreCase("resume")) { setCallState(CallStatus.IN_CONVERSATION); } else { setCallState(CallStatus.CONNECTING); } + + binding.microphoneButton.setOnClickListener(l -> onMicrophoneClick()); + binding.microphoneButton.setOnLongClickListener(l -> { + if (!audioOn) { + callControlHandler.removeCallbacksAndMessages(null); + callInfosHandler.removeCallbacksAndMessages(null); + cameraSwitchHandler.removeCallbacksAndMessages(null); + isPTTActive = true; + binding.callControls.setVisibility(View.VISIBLE); + if (!isVoiceOnlyCall) { + binding.switchSelfVideoButton.setVisibility(View.VISIBLE); + } + } + onMicrophoneClick(); + return true; + }); + + initClickListeners(); } - @Override - protected View inflateView(@NonNull LayoutInflater inflater, @NonNull ViewGroup container) { - return inflater.inflate(R.layout.controller_call, container, false); + private void initClickListeners() { + binding.pictureInPictureButton.setOnClickListener(l -> enterPipMode()); + + binding.speakerButton.setOnClickListener(l -> { + if (audioManager != null) { + audioManager.toggleUseSpeakerphone(); + if (audioManager.isSpeakerphoneAutoOn()) { + binding.speakerButton.getHierarchy().setPlaceholderImage(R.drawable.ic_volume_up_white_24dp); + } else { + binding.speakerButton.getHierarchy().setPlaceholderImage(R.drawable.ic_volume_mute_white_24dp); + } + } + }); + + binding.cameraButton.setOnClickListener(l -> onCameraClick()); + + binding.hangupButton.setOnClickListener(l -> { + setCallState(CallStatus.LEAVING); + hangup(true); + }); + + binding.switchSelfVideoButton.setOnClickListener(l -> switchCamera()); + + binding.gridview.setOnItemClickListener((parent, view, position, id) -> animateCallControls(true, 0)); + + binding.callStates.callStateRelativeLayout.setOnClickListener(l -> { + if (currentCallStatus.equals(CallStatus.CALLING_TIMEOUT)) { + setCallState(CallStatus.RECONNECTING); + hangupNetworkCalls(false); + } + }); } private void createCameraEnumerator() { - if (getActivity() != null) { - boolean camera2EnumeratorIsSupported = false; - try { - camera2EnumeratorIsSupported = Camera2Enumerator.isSupported(getActivity()); - } catch (final Throwable throwable) { - Log.w(TAG, "Camera2Enumator threw an error"); - } - - if (camera2EnumeratorIsSupported) { - cameraEnumerator = new Camera2Enumerator(getActivity()); - } else { - cameraEnumerator = new Camera1Enumerator(MagicWebRTCUtils.shouldEnableVideoHardwareAcceleration()); - } - } - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void onViewBound(@NonNull View view) { - super.onViewBound(view); - - microphoneControlButton.setOnTouchListener(new MicrophoneButtonTouchListener()); - - pulseAnimation = PulseAnimation.create().with(microphoneControlButton) - .setDuration(310) - .setRepeatCount(PulseAnimation.INFINITE) - .setRepeatMode(PulseAnimation.REVERSE); - - + boolean camera2EnumeratorIsSupported = false; try { - cache.evictAll(); - } catch (IOException e) { - Log.e(TAG, "Failed to evict cache"); + camera2EnumeratorIsSupported = Camera2Enumerator.isSupported(this); + } catch (final Throwable throwable) { + Log.w(TAG, "Camera2Enumator threw an error"); } - callControls.setZ(100.0f); - basicInitialization(); - participantDisplayItems = new HashMap<>(); - initViews(); - updateSelfVideoViewPosition(); - if (!isConnectionEstablished()){ - initiateCall(); + if (camera2EnumeratorIsSupported) { + cameraEnumerator = new Camera2Enumerator(this); + } else { + cameraEnumerator = new Camera1Enumerator(MagicWebRTCUtils.shouldEnableVideoHardwareAcceleration()); } } @@ -480,43 +459,43 @@ public class CallController extends BaseController { @SuppressLint("ClickableViewAccessibility") private void initViews() { - callInfosLinearLayout.setVisibility(View.VISIBLE); - selfVideoViewWrapper.setVisibility(View.VISIBLE); + binding.callInfosLinearLayout.setVisibility(View.VISIBLE); + binding.selfVideoViewWrapper.setVisibility(View.VISIBLE); if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) { - callControlEnterPip.setVisibility(View.GONE); + binding.pictureInPictureButton.setVisibility(View.GONE); } if (isVoiceOnlyCall) { - callControlEnableSpeaker.setVisibility(View.VISIBLE); - cameraSwitchButton.setVisibility(View.GONE); - cameraControlButton.setVisibility(View.GONE); - selfVideoRenderer.setVisibility(View.GONE); + binding.speakerButton.setVisibility(View.VISIBLE); + binding.switchSelfVideoButton.setVisibility(View.GONE); + binding.cameraButton.setVisibility(View.GONE); + binding.selfVideoRenderer.setVisibility(View.GONE); RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); params.addRule(RelativeLayout.BELOW, R.id.callInfosLinearLayout); int callControlsHeight = Math.round(getApplicationContext().getResources().getDimension(R.dimen.call_controls_height)); params.setMargins(0,0,0, callControlsHeight); - gridView.setLayoutParams(params); + binding.gridview.setLayoutParams(params); } else { RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); params.setMargins(0,0,0, 0); - gridView.setLayoutParams(params); + binding.gridview.setLayoutParams(params); - callControlEnableSpeaker.setVisibility(View.GONE); + binding.speakerButton.setVisibility(View.GONE); if (cameraEnumerator.getDeviceNames().length < 2) { - cameraSwitchButton.setVisibility(View.GONE); + binding.switchSelfVideoButton.setVisibility(View.GONE); } initSelfVideoView(); } - gridView.setOnTouchListener(new View.OnTouchListener() { + binding.gridview.setOnTouchListener(new View.OnTouchListener() { public boolean onTouch(View v, MotionEvent me) { int action = me.getActionMasked(); if (action == MotionEvent.ACTION_DOWN) { - showCallControls(); + animateCallControls(true, 0); } return false; } @@ -530,21 +509,20 @@ public class CallController extends BaseController { @SuppressLint("ClickableViewAccessibility") private void initSelfVideoView() { try{ - selfVideoRenderer.init(rootEglBase.getEglBaseContext(), null); + binding.selfVideoRenderer.init(rootEglBase.getEglBaseContext(), null); } catch(IllegalStateException e) { Log.d(TAG, "selfVideoRenderer already initialized", e); } - selfVideoRenderer.setZOrderMediaOverlay(true); + binding.selfVideoRenderer.setZOrderMediaOverlay(true); // disabled because it causes some devices to crash - selfVideoRenderer.setEnableHardwareScaler(false); - selfVideoRenderer.setScalingType(RendererCommon.ScalingType.SCALE_ASPECT_FIT); - selfVideoRenderer.setOnTouchListener(new SelfVideoTouchListener()); + binding.selfVideoRenderer.setEnableHardwareScaler(false); + binding.selfVideoRenderer.setScalingType(RendererCommon.ScalingType.SCALE_ASPECT_FIT); + binding.selfVideoRenderer.setOnTouchListener(new SelfVideoTouchListener()); } private void initGridAdapter() { - if (conversationView != null) { - GridView gridView = conversationView.findViewById(R.id.gridview); + if (binding.conversationRelativeLayout != null) { int columns; int participantsInGrid = participantDisplayItems.size(); @@ -564,34 +542,32 @@ public class CallController extends BaseController { } } - gridView.setNumColumns(columns); + binding.gridview.setNumColumns(columns); - RelativeLayout gridViewWrapper = conversationView.findViewById(R.id.conversationRelativeLayoutView); - gridViewWrapper.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { + binding.conversationRelativeLayout.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { - gridViewWrapper.getViewTreeObserver().removeOnGlobalLayoutListener(this); - int height = gridViewWrapper.getMeasuredHeight(); - gridView.setMinimumHeight(height); + binding.conversationRelativeLayout.getViewTreeObserver().removeOnGlobalLayoutListener(this); + int height = binding.conversationRelativeLayout.getMeasuredHeight(); + binding.gridview.setMinimumHeight(height); } }); - LinearLayout callInfosLinearLayout = conversationView.findViewById(R.id.callInfosLinearLayout); - callInfosLinearLayout.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { + binding.callInfosLinearLayout.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { - callInfosLinearLayout.getViewTreeObserver().removeOnGlobalLayoutListener(this); + binding.callInfosLinearLayout.getViewTreeObserver().removeOnGlobalLayoutListener(this); } }); participantsAdapter = new ParticipantsAdapter( - this.getActivity(), + this, participantDisplayItems, - gridViewWrapper, - callInfosLinearLayout, + binding.conversationRelativeLayout, + binding.callInfosLinearLayout, columns, isVoiceOnlyCall); - gridView.setAdapter(participantsAdapter); + binding.gridview.setAdapter(participantsAdapter); } } @@ -599,7 +575,7 @@ public class CallController extends BaseController { private void checkPermissions() { if (isVoiceOnlyCall) { onMicrophoneClick(); - } else if (getActivity() != null) { + } else { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { requestPermissions(PERMISSIONS_CALL, 100); } else { @@ -615,7 +591,7 @@ public class CallController extends BaseController { @AfterPermissionGranted(100) private void onPermissionsGranted() { - if (EffortlessPermissions.hasPermissions(getActivity(), PERMISSIONS_CALL)) { + if (EffortlessPermissions.hasPermissions(this, PERMISSIONS_CALL)) { if (!videoOn && !isVoiceOnlyCall) { onCameraClick(); } @@ -626,19 +602,18 @@ public class CallController extends BaseController { if (!isVoiceOnlyCall) { if (cameraEnumerator.getDeviceNames().length == 0) { - cameraControlButton.setVisibility(View.GONE); + binding.cameraButton.setVisibility(View.GONE); } if (cameraEnumerator.getDeviceNames().length > 1) { - cameraSwitchButton.setVisibility(View.VISIBLE); + binding.switchSelfVideoButton.setVisibility(View.VISIBLE); } } if (!isConnectionEstablished()) { fetchSignalingSettings(); } - } else if (getActivity() != null && EffortlessPermissions.somePermissionPermanentlyDenied(getActivity(), - PERMISSIONS_CALL)) { + } else if (EffortlessPermissions.somePermissionPermanentlyDenied(this, PERMISSIONS_CALL)) { checkIfSomeAreApproved(); } @@ -647,30 +622,30 @@ public class CallController extends BaseController { private void checkIfSomeAreApproved() { if (!isVoiceOnlyCall) { if (cameraEnumerator.getDeviceNames().length == 0) { - cameraControlButton.setVisibility(View.GONE); + binding.cameraButton.setVisibility(View.GONE); } if (cameraEnumerator.getDeviceNames().length > 1) { - cameraSwitchButton.setVisibility(View.VISIBLE); + binding.switchSelfVideoButton.setVisibility(View.VISIBLE); } - if (getActivity() != null && EffortlessPermissions.hasPermissions(getActivity(), PERMISSIONS_CAMERA)) { + if (EffortlessPermissions.hasPermissions(this, PERMISSIONS_CAMERA)) { if (!videoOn) { onCameraClick(); } } else { - cameraControlButton.getHierarchy().setPlaceholderImage(R.drawable.ic_videocam_off_white_24px); - cameraControlButton.setAlpha(0.7f); - cameraSwitchButton.setVisibility(View.GONE); + binding.cameraButton.getHierarchy().setPlaceholderImage(R.drawable.ic_videocam_off_white_24px); + binding.cameraButton.setAlpha(0.7f); + binding.switchSelfVideoButton.setVisibility(View.GONE); } } - if (EffortlessPermissions.hasPermissions(getActivity(), PERMISSIONS_MICROPHONE)) { + if (EffortlessPermissions.hasPermissions(this, PERMISSIONS_MICROPHONE)) { if (!audioOn) { onMicrophoneClick(); } } else { - microphoneControlButton.getHierarchy().setPlaceholderImage(R.drawable.ic_mic_off_white_24px); + binding.microphoneButton.getHierarchy().setPlaceholderImage(R.drawable.ic_mic_off_white_24px); } if (!isConnectionEstablished()) { @@ -682,14 +657,14 @@ public class CallController extends BaseController { private void onPermissionsDenied() { if (!isVoiceOnlyCall) { if (cameraEnumerator.getDeviceNames().length == 0) { - cameraControlButton.setVisibility(View.GONE); + binding.cameraButton.setVisibility(View.GONE); } else if (cameraEnumerator.getDeviceNames().length == 1) { - cameraSwitchButton.setVisibility(View.GONE); + binding.switchSelfVideoButton.setVisibility(View.GONE); } } - if (getActivity() != null && (EffortlessPermissions.hasPermissions(getActivity(), PERMISSIONS_CAMERA) || - EffortlessPermissions.hasPermissions(getActivity(), PERMISSIONS_MICROPHONE))) { + if ((EffortlessPermissions.hasPermissions(this, PERMISSIONS_CAMERA) || + EffortlessPermissions.hasPermissions(this, PERMISSIONS_MICROPHONE))) { checkIfSomeAreApproved(); } else if (!isConnectionEstablished()) { fetchSignalingSettings(); @@ -725,7 +700,7 @@ public class CallController extends BaseController { localVideoTrack = peerConnectionFactory.createVideoTrack("NCv0", videoSource); localMediaStream.addTrack(localVideoTrack); localVideoTrack.setEnabled(false); - localVideoTrack.addSink(selfVideoRenderer); + localVideoTrack.addSink(binding.selfVideoRenderer); } private void microphoneInitialization() { @@ -746,7 +721,7 @@ public class CallController extends BaseController { Logging.d(TAG, "Creating front facing camera capturer."); VideoCapturer videoCapturer = enumerator.createCapturer(deviceName, null); if (videoCapturer != null) { - selfVideoRenderer.setMirror(true); + binding.selfVideoRenderer.setMirror(true); return videoCapturer; } } @@ -761,7 +736,7 @@ public class CallController extends BaseController { VideoCapturer videoCapturer = enumerator.createCapturer(deviceName, null); if (videoCapturer != null) { - selfVideoRenderer.setMirror(false); + binding.selfVideoRenderer.setMirror(false); return videoCapturer; } } @@ -770,41 +745,11 @@ public class CallController extends BaseController { return null; } - @OnLongClick(R.id.call_control_microphone) - boolean onMicrophoneLongClick() { - if (!audioOn) { - callControlHandler.removeCallbacksAndMessages(null); - callInfosHandler.removeCallbacksAndMessages(null); - cameraSwitchHandler.removeCallbacksAndMessages(null); - isPTTActive = true; - callControls.setVisibility(View.VISIBLE); - if (!isVoiceOnlyCall) { - cameraSwitchButton.setVisibility(View.VISIBLE); - } - } - - onMicrophoneClick(); - return true; - } - - @OnClick(R.id.callControlEnableSpeaker) - public void onEnableSpeakerphoneClick() { - if (audioManager != null) { - audioManager.toggleUseSpeakerphone(); - if (audioManager.isSpeakerphoneAutoOn()) { - callControlEnableSpeaker.getHierarchy().setPlaceholderImage(R.drawable.ic_volume_up_white_24dp); - } else { - callControlEnableSpeaker.getHierarchy().setPlaceholderImage(R.drawable.ic_volume_mute_white_24dp); - } - } - } - - @OnClick(R.id.call_control_microphone) public void onMicrophoneClick() { - if (getActivity() != null && EffortlessPermissions.hasPermissions(getActivity(), PERMISSIONS_MICROPHONE)) { + if (EffortlessPermissions.hasPermissions(this, PERMISSIONS_MICROPHONE)) { - if (getActivity() != null && !appPreferences.getPushToTalkIntroShown()) { - spotlightView = new SpotlightView.Builder(getActivity()) + if (!appPreferences.getPushToTalkIntroShown()) { + spotlightView = new SpotlightView.Builder(this) .introAnimationDuration(300) .enableRevealAnimation(true) .performClick(false) @@ -816,7 +761,7 @@ public class CallController extends BaseController { .subHeadingTvSize(16) .subHeadingTvText(getResources().getString(R.string.nc_push_to_talk_desc)) .maskColor(Color.parseColor("#dc000000")) - .target(microphoneControlButton) + .target(binding.microphoneButton) .lineAnimDuration(400) .lineAndArcColor(getResources().getColor(R.color.colorPrimary)) .enableDismissAfterShown(true) @@ -831,14 +776,14 @@ public class CallController extends BaseController { audioOn = !audioOn; if (audioOn) { - microphoneControlButton.getHierarchy().setPlaceholderImage(R.drawable.ic_mic_white_24px); + binding.microphoneButton.getHierarchy().setPlaceholderImage(R.drawable.ic_mic_white_24px); } else { - microphoneControlButton.getHierarchy().setPlaceholderImage(R.drawable.ic_mic_off_white_24px); + binding.microphoneButton.getHierarchy().setPlaceholderImage(R.drawable.ic_mic_off_white_24px); } toggleMedia(audioOn, false); } else { - microphoneControlButton.getHierarchy().setPlaceholderImage(R.drawable.ic_mic_white_24px); + binding.microphoneButton.getHierarchy().setPlaceholderImage(R.drawable.ic_mic_white_24px); pulseAnimation.start(); toggleMedia(true, false); } @@ -847,13 +792,12 @@ public class CallController extends BaseController { fetchSignalingSettings(); } - } else if (getActivity() != null && EffortlessPermissions.somePermissionPermanentlyDenied(getActivity(), - PERMISSIONS_MICROPHONE)) { + } else if (EffortlessPermissions.somePermissionPermanentlyDenied(this, PERMISSIONS_MICROPHONE)) { // Microphone permission is permanently denied so we cannot request it normally. OpenAppDetailsDialogFragment.show( R.string.nc_microphone_permission_permanently_denied, - R.string.nc_permissions_settings, (AppCompatActivity) getActivity()); + R.string.nc_permissions_settings, (AppCompatActivity) this); } else { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { requestPermissions(PERMISSIONS_MICROPHONE, 100); @@ -863,39 +807,26 @@ public class CallController extends BaseController { } } - @OnClick(R.id.callControlEnterPip) - void enterPipMode() { - ((MagicCallActivity) getActivity()).enterPipMode(); - } - - @OnClick(R.id.callControlHangupView) - void onHangupClick() { - setCallState(CallStatus.LEAVING); - hangup(true); - } - - @OnClick(R.id.call_control_camera) public void onCameraClick() { - if (getActivity() != null && EffortlessPermissions.hasPermissions(getActivity(), PERMISSIONS_CAMERA)) { + if (EffortlessPermissions.hasPermissions(this, PERMISSIONS_CAMERA)) { videoOn = !videoOn; if (videoOn) { - cameraControlButton.getHierarchy().setPlaceholderImage(R.drawable.ic_videocam_white_24px); + binding.cameraButton.getHierarchy().setPlaceholderImage(R.drawable.ic_videocam_white_24px); if (cameraEnumerator.getDeviceNames().length > 1) { - cameraSwitchButton.setVisibility(View.VISIBLE); + binding.switchSelfVideoButton.setVisibility(View.VISIBLE); } } else { - cameraControlButton.getHierarchy().setPlaceholderImage(R.drawable.ic_videocam_off_white_24px); - cameraSwitchButton.setVisibility(View.GONE); + binding.cameraButton.getHierarchy().setPlaceholderImage(R.drawable.ic_videocam_off_white_24px); + binding.switchSelfVideoButton.setVisibility(View.GONE); } toggleMedia(videoOn, true); - } else if (getActivity() != null && EffortlessPermissions.somePermissionPermanentlyDenied(getActivity(), - PERMISSIONS_CAMERA)) { + } else if (EffortlessPermissions.somePermissionPermanentlyDenied(this, PERMISSIONS_CAMERA)) { // Camera permission is permanently denied so we cannot request it normally. OpenAppDetailsDialogFragment.show( R.string.nc_camera_permission_permanently_denied, - R.string.nc_permissions_settings, (AppCompatActivity) getActivity()); + R.string.nc_permissions_settings, (AppCompatActivity) this); } else { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { @@ -907,14 +838,13 @@ public class CallController extends BaseController { } - @OnClick({R.id.call_control_switch_camera}) public void switchCamera() { CameraVideoCapturer cameraVideoCapturer = (CameraVideoCapturer) videoCapturer; if (cameraVideoCapturer != null) { cameraVideoCapturer.switchCamera(new CameraVideoCapturer.CameraSwitchHandler() { @Override public void onCameraSwitchDone(boolean currentCameraIsFront) { - selfVideoRenderer.setMirror(currentCameraIsFront); + binding.selfVideoRenderer.setMirror(currentCameraIsFront); } @Override @@ -930,11 +860,11 @@ public class CallController extends BaseController { if (video) { message = "videoOff"; if (enable) { - cameraControlButton.setAlpha(1.0f); + binding.cameraButton.setAlpha(1.0f); message = "videoOn"; startVideoCapture(); } else { - cameraControlButton.setAlpha(0.7f); + binding.cameraButton.setAlpha(0.7f); if (videoCapturer != null) { try { videoCapturer.stopCapture(); @@ -948,17 +878,17 @@ public class CallController extends BaseController { localMediaStream.videoTracks.get(0).setEnabled(enable); } if (enable) { - selfVideoRenderer.setVisibility(View.VISIBLE); + binding.selfVideoRenderer.setVisibility(View.VISIBLE); } else { - selfVideoRenderer.setVisibility(View.INVISIBLE); + binding.selfVideoRenderer.setVisibility(View.INVISIBLE); } } else { message = "audioOff"; if (enable) { message = "audioOn"; - microphoneControlButton.setAlpha(1.0f); + binding.microphoneButton.setAlpha(1.0f); } else { - microphoneControlButton.setAlpha(0.7f); + binding.microphoneButton.setAlpha(0.7f); } if (localMediaStream != null && localMediaStream.audioTracks.size() > 0) { @@ -998,16 +928,16 @@ public class CallController extends BaseController { cameraSwitchHandler.removeCallbacksAndMessages(null); alpha = 1.0f; duration = 1000; - if (callControls.getVisibility() != View.VISIBLE) { - callControls.setAlpha(0.0f); - callControls.setVisibility(View.VISIBLE); + if (binding.callControls.getVisibility() != View.VISIBLE) { + binding.callControls.setAlpha(0.0f); + binding.callControls.setVisibility(View.VISIBLE); - callInfosLinearLayout.setAlpha(0.0f); - callInfosLinearLayout.setVisibility(View.VISIBLE); + binding.callInfosLinearLayout.setAlpha(0.0f); + binding.callInfosLinearLayout.setVisibility(View.VISIBLE); - cameraSwitchButton.setAlpha(0.0f); + binding.switchSelfVideoButton.setAlpha(0.0f); if (videoOn) { - cameraSwitchButton.setVisibility(View.VISIBLE); + binding.switchSelfVideoButton.setVisibility(View.VISIBLE); } } else { callControlHandler.postDelayed(() -> animateCallControls(false, 0), 5000); @@ -1018,9 +948,9 @@ public class CallController extends BaseController { duration = 1000; } - if (callControls != null) { - callControls.setEnabled(false); - callControls.animate() + if (binding.callControls != null) { + binding.callControls.setEnabled(false); + binding.callControls.animate() .translationY(0) .alpha(alpha) .setDuration(duration) @@ -1029,9 +959,9 @@ public class CallController extends BaseController { @Override public void onAnimationEnd(Animator animation) { super.onAnimationEnd(animation); - if (callControls != null) { + if (binding.callControls != null) { if (!show) { - callControls.setVisibility(View.GONE); + binding.callControls.setVisibility(View.GONE); if (spotlightView != null && spotlightView.getVisibility() != View.GONE) { spotlightView.setVisibility(View.GONE); } @@ -1046,15 +976,15 @@ public class CallController extends BaseController { }, 7500); } - callControls.setEnabled(true); + binding.callControls.setEnabled(true); } } }); } - if (callInfosLinearLayout != null) { - callInfosLinearLayout.setEnabled(false); - callInfosLinearLayout.animate() + if (binding.callInfosLinearLayout != null) { + binding.callInfosLinearLayout.setEnabled(false); + binding.callInfosLinearLayout.animate() .translationY(0) .alpha(alpha) .setDuration(duration) @@ -1063,9 +993,9 @@ public class CallController extends BaseController { @Override public void onAnimationEnd(Animator animation) { super.onAnimationEnd(animation); - if (callInfosLinearLayout != null) { + if (binding.callInfosLinearLayout != null) { if (!show) { - callInfosLinearLayout.setVisibility(View.GONE); + binding.callInfosLinearLayout.setVisibility(View.GONE); } else { callInfosHandler.postDelayed(new Runnable() { @Override @@ -1077,15 +1007,15 @@ public class CallController extends BaseController { }, 7500); } - callInfosLinearLayout.setEnabled(true); + binding.callInfosLinearLayout.setEnabled(true); } } }); } - if (cameraSwitchButton != null) { - cameraSwitchButton.setEnabled(false); - cameraSwitchButton.animate() + if (binding.switchSelfVideoButton != null) { + binding.switchSelfVideoButton.setEnabled(false); + binding.switchSelfVideoButton.animate() .translationY(0) .alpha(alpha) .setDuration(duration) @@ -1094,12 +1024,12 @@ public class CallController extends BaseController { @Override public void onAnimationEnd(Animator animation) { super.onAnimationEnd(animation); - if (cameraSwitchButton != null) { + if (binding.switchSelfVideoButton != null) { if (!show) { - cameraSwitchButton.setVisibility(View.GONE); + binding.switchSelfVideoButton.setVisibility(View.GONE); } - cameraSwitchButton.setEnabled(true); + binding.switchSelfVideoButton.setEnabled(true); } } }); @@ -1111,7 +1041,8 @@ public class CallController extends BaseController { @Override public void onDestroy() { if (!currentCallStatus.equals(CallStatus.LEAVING)) { - onHangupClick(); + setCallState(CallStatus.LEAVING); + hangup(true); } powerManagerUtils.updatePhoneState(PowerManagerUtils.PhoneState.IDLE); super.onDestroy(); @@ -1458,11 +1389,6 @@ public class CallController extends BaseController { } } - @OnItemClick({R.id.gridview}) - public void showCallControls() { - animateCallControls(true, 0); - } - private void dispose(@Nullable Disposable disposable) { if (disposable != null && !disposable.isDisposed()) { disposable.dispose(); @@ -1574,8 +1500,8 @@ public class CallController extends BaseController { videoCapturer = null; } - if (selfVideoRenderer != null) { - selfVideoRenderer.release(); + if (binding.selfVideoRenderer != null) { + binding.selfVideoRenderer.release(); } if (audioSource != null) { @@ -1628,8 +1554,8 @@ public class CallController extends BaseController { @Override public void onNext(@io.reactivex.annotations.NonNull GenericOverall genericOverall) { - if (shutDownView && getActivity() != null) { - getActivity().finish(); + if (shutDownView) { + finish(); } else if (!shutDownView && (currentCallStatus == CallStatus.RECONNECTING || currentCallStatus == CallStatus.PUBLISHER_FAILED)) { @@ -1664,8 +1590,8 @@ public class CallController extends BaseController { @Override public void onNext(@io.reactivex.annotations.NonNull GenericOverall genericOverall) { - if (shutDownView && getActivity() != null) { - getActivity().finish(); + if (shutDownView) { + finish(); } } @@ -1875,16 +1801,12 @@ public class CallController extends BaseController { private void endPeerConnection(String sessionId, boolean justScreen) { List magicPeerConnectionWrappers; MagicPeerConnectionWrapper magicPeerConnectionWrapper; - if (!(magicPeerConnectionWrappers = getPeerConnectionWrapperListForSessionId(sessionId)).isEmpty() - && getActivity() != null) { + if (!(magicPeerConnectionWrappers = getPeerConnectionWrapperListForSessionId(sessionId)).isEmpty()) { for (int i = 0; i < magicPeerConnectionWrappers.size(); i++) { magicPeerConnectionWrapper = magicPeerConnectionWrappers.get(i); if (magicPeerConnectionWrapper.getSessionId().equals(sessionId)) { if (magicPeerConnectionWrapper.getVideoStreamType().equals("screen") || !justScreen) { - - - // TODO runOnUiThread not necessary??? - getActivity().runOnUiThread(() -> removeMediaStream(sessionId)); + runOnUiThread(() -> removeMediaStream(sessionId)); deleteMagicPeerConnection(magicPeerConnectionWrapper); } } @@ -1896,11 +1818,11 @@ public class CallController extends BaseController { Log.d(TAG, "removeMediaStream"); participantDisplayItems.remove(sessionId); - if (!isBeingDestroyed() && !isDestroyed()) { + if (!isDestroyed()) { initGridAdapter(); - if (callControls != null) { - callControls.setZ(100.0f); + if (binding.callControls != null) { + binding.callControls.setZ(100.0f); } } } @@ -1913,7 +1835,7 @@ public class CallController extends BaseController { } private void updateSelfVideoViewPosition() { - FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams) selfVideoRenderer.getLayoutParams(); + FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams) binding.selfVideoRenderer.getLayoutParams(); DisplayMetrics displayMetrics = getApplicationContext().getResources().getDisplayMetrics(); int screenWidthPx = displayMetrics.widthPixels; @@ -1922,7 +1844,7 @@ public class CallController extends BaseController { float newXafterRotate = 0; float newYafterRotate; - if (callInfosLinearLayout.getVisibility() == View.VISIBLE) { + if (binding.callInfosLinearLayout.getVisibility() == View.VISIBLE) { newYafterRotate = 250; } else { newYafterRotate = 20; @@ -1938,11 +1860,11 @@ public class CallController extends BaseController { layoutParams.width = (int) getResources().getDimension(R.dimen.large_preview_dimension); newXafterRotate = (float) (screenWidthDp - getResources().getDimension(R.dimen.large_preview_dimension) * 0.5); } - selfVideoRenderer.setLayoutParams(layoutParams); + binding.selfVideoRenderer.setLayoutParams(layoutParams); int newXafterRotatePx = (int) DisplayUtils.convertDpToPixel(newXafterRotate, getApplicationContext()); - selfVideoViewWrapper.setY(newYafterRotate); - selfVideoViewWrapper.setX(newXafterRotatePx); + binding.selfVideoViewWrapper.setY(newYafterRotate); + binding.selfVideoViewWrapper.setX(newXafterRotatePx); } @Subscribe(threadMode = ThreadMode.MAIN) @@ -1960,7 +1882,7 @@ public class CallController extends BaseController { if (!isVoiceOnlyCall) { boolean enableVideo = peerConnectionEvent.getPeerConnectionEventType().equals(PeerConnectionEvent .PeerConnectionEventType.SENSOR_FAR) && videoOn; - if (getActivity() != null && EffortlessPermissions.hasPermissions(getActivity(), PERMISSIONS_CAMERA) && + if (EffortlessPermissions.hasPermissions(this, PERMISSIONS_CAMERA) && (currentCallStatus.equals(CallStatus.CONNECTING) || isConnectionEstablished()) && videoOn && enableVideo != localVideoTrack.enabled()) { toggleMedia(enableVideo, true); @@ -2004,7 +1926,7 @@ public class CallController extends BaseController { magicPeerConnectionWrapper = magicPeerConnectionWrapperList.get(i); Observable .interval(1, TimeUnit.SECONDS) - .repeatUntil(() -> (!isConnectionEstablished() || isBeingDestroyed() || isDestroyed())) + .repeatUntil(() -> (!isConnectionEstablished() || isDestroyed())) .observeOn(Schedulers.io()) .subscribe(new Observer() { @Override @@ -2172,15 +2094,7 @@ public class CallController extends BaseController { participantDisplayItems.put(session, participantDisplayItem); initGridAdapter(); - callControls.setZ(100.0f); - } - - @OnClick(R.id.callStateRelativeLayoutView) - public void onConnectingViewClick() { - if (currentCallStatus.equals(CallStatus.CALLING_TIMEOUT)) { - setCallState(CallStatus.RECONNECTING); - hangupNetworkCalls(false); - } + binding.callControls.setZ(100.0f); } private void setCallState(CallStatus callState) { @@ -2197,105 +2111,105 @@ public class CallController extends BaseController { handler.post(() -> { playCallingSound(); if (isIncomingCallFromNotification) { - callStateTextView.setText(R.string.nc_call_incoming); + binding.callStates.callStateTextView.setText(R.string.nc_call_incoming); } else { - callStateTextView.setText(R.string.nc_call_ringing); + binding.callStates.callStateTextView.setText(R.string.nc_call_ringing); } - callConversationNameTextView.setText(conversationName); + binding.callConversationNameTextView.setText(conversationName); - callVoiceOrVideoTextView.setText(getDescriptionForCallType()); + binding.callModeTextView.setText(getDescriptionForCallType()); - if (callStateView.getVisibility() != View.VISIBLE) { - callStateView.setVisibility(View.VISIBLE); + if (binding.callStates.callStateRelativeLayout.getVisibility() != View.VISIBLE) { + binding.callStates.callStateRelativeLayout.setVisibility(View.VISIBLE); } - if (gridView.getVisibility() != View.INVISIBLE) { - gridView.setVisibility(View.INVISIBLE); + if (binding.gridview.getVisibility() != View.INVISIBLE) { + binding.gridview.setVisibility(View.INVISIBLE); } - if (progressBar.getVisibility() != View.VISIBLE) { - progressBar.setVisibility(View.VISIBLE); + if (binding.callStates.callStateProgressBar.getVisibility() != View.VISIBLE) { + binding.callStates.callStateProgressBar.setVisibility(View.VISIBLE); } - if (errorImageView.getVisibility() != View.GONE) { - errorImageView.setVisibility(View.GONE); + if (binding.callStates.errorImageView.getVisibility() != View.GONE) { + binding.callStates.errorImageView.setVisibility(View.GONE); } }); break; case CALLING_TIMEOUT: handler.post(() -> { hangup(false); - callStateTextView.setText(R.string.nc_call_timeout); - callVoiceOrVideoTextView.setText(getDescriptionForCallType()); - if (callStateView.getVisibility() != View.VISIBLE) { - callStateView.setVisibility(View.VISIBLE); + binding.callStates.callStateTextView.setText(R.string.nc_call_timeout); + binding.callModeTextView.setText(getDescriptionForCallType()); + if (binding.callStates.callStateRelativeLayout.getVisibility() != View.VISIBLE) { + binding.callStates.callStateRelativeLayout.setVisibility(View.VISIBLE); } - if (progressBar.getVisibility() != View.GONE) { - progressBar.setVisibility(View.GONE); + if (binding.callStates.callStateProgressBar.getVisibility() != View.GONE) { + binding.callStates.callStateProgressBar.setVisibility(View.GONE); } - if (gridView.getVisibility() != View.INVISIBLE) { - gridView.setVisibility(View.INVISIBLE); + if (binding.gridview.getVisibility() != View.INVISIBLE) { + binding.gridview.setVisibility(View.INVISIBLE); } - errorImageView.setImageResource(R.drawable.ic_av_timer_timer_24dp); + binding.callStates.errorImageView.setImageResource(R.drawable.ic_av_timer_timer_24dp); - if (errorImageView.getVisibility() != View.VISIBLE) { - errorImageView.setVisibility(View.VISIBLE); + if (binding.callStates.errorImageView.getVisibility() != View.VISIBLE) { + binding.callStates.errorImageView.setVisibility(View.VISIBLE); } }); break; case RECONNECTING: handler.post(() -> { playCallingSound(); - callStateTextView.setText(R.string.nc_call_reconnecting); - callVoiceOrVideoTextView.setText(getDescriptionForCallType()); - if (callStateView.getVisibility() != View.VISIBLE) { - callStateView.setVisibility(View.VISIBLE); + binding.callStates.callStateTextView.setText(R.string.nc_call_reconnecting); + binding.callModeTextView.setText(getDescriptionForCallType()); + if (binding.callStates.callStateRelativeLayout.getVisibility() != View.VISIBLE) { + binding.callStates.callStateRelativeLayout.setVisibility(View.VISIBLE); } - if (gridView.getVisibility() != View.INVISIBLE) { - gridView.setVisibility(View.INVISIBLE); + if (binding.gridview.getVisibility() != View.INVISIBLE) { + binding.gridview.setVisibility(View.INVISIBLE); } - if (progressBar.getVisibility() != View.VISIBLE) { - progressBar.setVisibility(View.VISIBLE); + if (binding.callStates.callStateProgressBar.getVisibility() != View.VISIBLE) { + binding.callStates.callStateProgressBar.setVisibility(View.VISIBLE); } - if (errorImageView.getVisibility() != View.GONE) { - errorImageView.setVisibility(View.GONE); + if (binding.callStates.errorImageView.getVisibility() != View.GONE) { + binding.callStates.errorImageView.setVisibility(View.GONE); } }); break; case JOINED: handler.postDelayed(() -> setCallState(CallStatus.CALLING_TIMEOUT), 45000); handler.post(() -> { - callVoiceOrVideoTextView.setText(getDescriptionForCallType()); - if (callStateView != null) { + binding.callModeTextView.setText(getDescriptionForCallType()); + if (binding.callStates.callStateRelativeLayout != null) { if (isIncomingCallFromNotification) { - callStateTextView.setText(R.string.nc_call_incoming); + binding.callStates.callStateTextView.setText(R.string.nc_call_incoming); } else { - callStateTextView.setText(R.string.nc_call_ringing); + binding.callStates.callStateTextView.setText(R.string.nc_call_ringing); } - if (callStateView.getVisibility() != View.VISIBLE) { - callStateView.setVisibility(View.VISIBLE); + if (binding.callStates.callStateRelativeLayout.getVisibility() != View.VISIBLE) { + binding.callStates.callStateRelativeLayout.setVisibility(View.VISIBLE); } } - if (progressBar != null) { - if (progressBar.getVisibility() != View.VISIBLE) { - progressBar.setVisibility(View.VISIBLE); + if (binding.callStates.callStateProgressBar != null) { + if (binding.callStates.callStateProgressBar.getVisibility() != View.VISIBLE) { + binding.callStates.callStateProgressBar.setVisibility(View.VISIBLE); } } - if (gridView != null) { - if (gridView.getVisibility() != View.INVISIBLE) { - gridView.setVisibility(View.INVISIBLE); + if (binding.gridview != null) { + if (binding.gridview.getVisibility() != View.INVISIBLE) { + binding.gridview.setVisibility(View.INVISIBLE); } } - if (errorImageView != null) { - if (errorImageView.getVisibility() != View.GONE) { - errorImageView.setVisibility(View.GONE); + if (binding.callStates.errorImageView != null) { + if (binding.callStates.errorImageView.getVisibility() != View.GONE) { + binding.callStates.errorImageView.setVisibility(View.GONE); } } }); @@ -2303,37 +2217,37 @@ public class CallController extends BaseController { case IN_CONVERSATION: handler.post(() -> { stopCallingSound(); - callVoiceOrVideoTextView.setText(getDescriptionForCallType()); + binding.callModeTextView.setText(getDescriptionForCallType()); if (!isVoiceOnlyCall) { - callInfosLinearLayout.setVisibility(View.GONE); + binding.callInfosLinearLayout.setVisibility(View.GONE); } if (!isPTTActive) { animateCallControls(false, 5000); } - if (callStateView != null) { - if (callStateView.getVisibility() != View.INVISIBLE) { - callStateView.setVisibility(View.INVISIBLE); + if (binding.callStates.callStateRelativeLayout != null) { + if (binding.callStates.callStateRelativeLayout.getVisibility() != View.INVISIBLE) { + binding.callStates.callStateRelativeLayout.setVisibility(View.INVISIBLE); } } - if (progressBar != null) { - if (progressBar.getVisibility() != View.GONE) { - progressBar.setVisibility(View.GONE); + if (binding.callStates.callStateProgressBar != null) { + if (binding.callStates.callStateProgressBar.getVisibility() != View.GONE) { + binding.callStates.callStateProgressBar.setVisibility(View.GONE); } } - if (gridView != null) { - if (gridView.getVisibility() != View.VISIBLE) { - gridView.setVisibility(View.VISIBLE); + if (binding.gridview != null) { + if (binding.gridview.getVisibility() != View.VISIBLE) { + binding.gridview.setVisibility(View.VISIBLE); } } - if (errorImageView != null) { - if (errorImageView.getVisibility() != View.GONE) { - errorImageView.setVisibility(View.GONE); + if (binding.callStates.errorImageView != null) { + if (binding.callStates.errorImageView.getVisibility() != View.GONE) { + binding.callStates.errorImageView.setVisibility(View.GONE); } } }); @@ -2342,45 +2256,45 @@ public class CallController extends BaseController { handler.post(() -> { stopCallingSound(); - if (callStateTextView != null) { - callStateTextView.setText(R.string.nc_offline); + if (binding.callStates.callStateTextView != null) { + binding.callStates.callStateTextView.setText(R.string.nc_offline); - if (callStateView.getVisibility() != View.VISIBLE) { - callStateView.setVisibility(View.VISIBLE); + if (binding.callStates.callStateRelativeLayout.getVisibility() != View.VISIBLE) { + binding.callStates.callStateRelativeLayout.setVisibility(View.VISIBLE); } } - if (gridView != null) { - if (gridView.getVisibility() != View.INVISIBLE) { - gridView.setVisibility(View.INVISIBLE); + if (binding.gridview != null) { + if (binding.gridview.getVisibility() != View.INVISIBLE) { + binding.gridview.setVisibility(View.INVISIBLE); } } - if (progressBar != null) { - if (progressBar.getVisibility() != View.GONE) { - progressBar.setVisibility(View.GONE); + if (binding.callStates.callStateProgressBar != null) { + if (binding.callStates.callStateProgressBar.getVisibility() != View.GONE) { + binding.callStates.callStateProgressBar.setVisibility(View.GONE); } } - if (errorImageView != null) { - errorImageView.setImageResource(R.drawable.ic_signal_wifi_off_white_24dp); - if (errorImageView.getVisibility() != View.VISIBLE) { - errorImageView.setVisibility(View.VISIBLE); + if (binding.callStates.errorImageView != null) { + binding.callStates.errorImageView.setImageResource(R.drawable.ic_signal_wifi_off_white_24dp); + if (binding.callStates.errorImageView.getVisibility() != View.VISIBLE) { + binding.callStates.errorImageView.setVisibility(View.VISIBLE); } } }); break; case LEAVING: handler.post(() -> { - if (!isDestroyed() && !isBeingDestroyed()) { + if (!isDestroyed()) { stopCallingSound(); - callVoiceOrVideoTextView.setText(getDescriptionForCallType()); - callStateTextView.setText(R.string.nc_leaving_call); - callStateView.setVisibility(View.VISIBLE); - gridView.setVisibility(View.INVISIBLE); - progressBar.setVisibility(View.VISIBLE); - errorImageView.setVisibility(View.GONE); + binding.callModeTextView.setText(getDescriptionForCallType()); + binding.callStates.callStateTextView.setText(R.string.nc_leaving_call); + binding.callStates.callStateRelativeLayout.setVisibility(View.VISIBLE); + binding.gridview.setVisibility(View.INVISIBLE); + binding.callStates.callStateProgressBar.setVisibility(View.VISIBLE); + binding.callStates.errorImageView.setVisibility(View.GONE); } }); break; @@ -2393,27 +2307,27 @@ public class CallController extends BaseController { RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); params.setMargins(0,0,0, 0); - gridView.setLayoutParams(params); + binding.gridview.setLayoutParams(params); - callControls.setVisibility(View.GONE); - callInfosLinearLayout.setVisibility(View.GONE); - selfVideoViewWrapper.setVisibility(View.GONE); - callStateView.setVisibility(View.GONE); + binding.callControls.setVisibility(View.GONE); + binding.callInfosLinearLayout.setVisibility(View.GONE); + binding.selfVideoViewWrapper.setVisibility(View.GONE); + binding.callStates.callStateRelativeLayout.setVisibility(View.GONE); - selfVideoRenderer.release(); + binding.selfVideoRenderer.release(); } public void updateUiForNormalMode(){ if (isVoiceOnlyCall) { - callControls.setVisibility(View.VISIBLE); + binding.callControls.setVisibility(View.VISIBLE); } else { - callControls.setVisibility(View.INVISIBLE); // animateCallControls needs this to be invisible for a check. + binding.callControls.setVisibility(View.INVISIBLE); // animateCallControls needs this to be invisible for a check. } initViews(); - callInfosLinearLayout.setVisibility(View.VISIBLE); - selfVideoViewWrapper.setVisibility(View.VISIBLE); + binding.callInfosLinearLayout.setVisibility(View.VISIBLE); + binding.selfVideoViewWrapper.setVisibility(View.VISIBLE); } private String getDescriptionForCallType() { @@ -2435,24 +2349,23 @@ public class CallController extends BaseController { ringtoneUri = Uri.parse("android.resource://" + getApplicationContext().getPackageName() + "/raw" + "/tr110_1_kap8_3_freiton1"); } - if (getActivity() != null) { - mediaPlayer = new MediaPlayer(); - try { - mediaPlayer.setDataSource(Objects.requireNonNull(getActivity()), ringtoneUri); - mediaPlayer.setLooping(true); - AudioAttributes audioAttributes = new AudioAttributes.Builder().setContentType( - AudioAttributes.CONTENT_TYPE_SONIFICATION) - .setUsage(AudioAttributes.USAGE_VOICE_COMMUNICATION) - .build(); - mediaPlayer.setAudioAttributes(audioAttributes); - mediaPlayer.setOnPreparedListener(mp -> mediaPlayer.start()); + mediaPlayer = new MediaPlayer(); + try { + mediaPlayer.setDataSource(this, ringtoneUri); + mediaPlayer.setLooping(true); + AudioAttributes audioAttributes = new AudioAttributes.Builder().setContentType( + AudioAttributes.CONTENT_TYPE_SONIFICATION) + .setUsage(AudioAttributes.USAGE_VOICE_COMMUNICATION) + .build(); + mediaPlayer.setAudioAttributes(audioAttributes); - mediaPlayer.prepareAsync(); + mediaPlayer.setOnPreparedListener(mp -> mediaPlayer.start()); - } catch (IOException e) { - Log.e(TAG, "Failed to play sound"); - } + mediaPlayer.prepareAsync(); + + } catch (IOException e) { + Log.e(TAG, "Failed to play sound"); } } @@ -2467,16 +2380,32 @@ public class CallController extends BaseController { } } + @SuppressLint("ClickableViewAccessibility") @Override - protected void onAttach(@NonNull View view) { - super.onAttach(view); - eventBus.register(this); - } + public void onStart() { + super.onStart(); + binding.microphoneButton.setOnTouchListener(new MicrophoneButtonTouchListener()); - @Override - protected void onDetach(@NonNull View view) { - super.onDetach(view); - eventBus.unregister(this); + pulseAnimation = PulseAnimation.create().with(binding.microphoneButton) + .setDuration(310) + .setRepeatCount(PulseAnimation.INFINITE) + .setRepeatMode(PulseAnimation.REVERSE); + + + try { + cache.evictAll(); + } catch (IOException e) { + Log.e(TAG, "Failed to evict cache"); + } + + binding.callControls.setZ(100.0f); + basicInitialization(); + participantDisplayItems = new HashMap<>(); + initViews(); + updateSelfVideoViewPosition(); + if (!isConnectionEstablished()){ + initiateCall(); + } } private class MicrophoneButtonTouchListener implements View.OnTouchListener { @@ -2487,7 +2416,7 @@ public class CallController extends BaseController { v.onTouchEvent(event); if (event.getAction() == MotionEvent.ACTION_UP && isPTTActive) { isPTTActive = false; - microphoneControlButton.getHierarchy().setPlaceholderImage(R.drawable.ic_mic_off_white_24px); + binding.microphoneButton.getHierarchy().setPlaceholderImage(R.drawable.ic_mic_off_white_24px); pulseAnimation.stop(); toggleMedia(false, false); animateCallControls(false, 5000); @@ -2511,6 +2440,78 @@ public class CallController extends BaseController { } } + public void onBackPressed() { + enterPipMode(); + } + + public void onUserLeaveHint() { + enterPipMode(); + } + + void enterPipMode() { + enableKeyguard(); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + enterPictureInPictureMode(getPipParams()); + } else { + finish(); + } + } + + @RequiresApi(Build.VERSION_CODES.O) + public PictureInPictureParams getPipParams() { + Rational pipRatio = new Rational(300, 500); + return new PictureInPictureParams.Builder() + .setAspectRatio(pipRatio) + .build(); + } + + public void onConfigurationChanged(Configuration newConfig) { + super.onConfigurationChanged(newConfig); + eventBus.post(new ConfigurationChangeEvent()); + } + + private void dismissKeyguard() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) { + setShowWhenLocked(true); + setTurnScreenOn(true); + KeyguardManager keyguardManager = (KeyguardManager) getSystemService(KEYGUARD_SERVICE); + keyguardManager.requestDismissKeyguard(this, null); + } else { + getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD); + getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); + getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); + } + } + + private void enableKeyguard() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) { + setShowWhenLocked(false); + } else { + getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD); + getWindow().clearFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); + getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); + } + } + + @RequiresApi(api = Build.VERSION_CODES.O) + @Override + public void onPictureInPictureModeChanged(boolean isInPictureInPictureMode, Configuration newConfig) { + super.onPictureInPictureModeChanged(isInPictureInPictureMode, newConfig); + isInPipMode = isInPictureInPictureMode; + if (isInPictureInPictureMode) { + updateUiForPipMode(); + } else { + updateUiForNormalMode(); + } + } + + public void onStop() { + super.onStop(); + if (isInPipMode) { + finish(); + } + } + private class SelfVideoTouchListener implements View.OnTouchListener { @SuppressLint("ClickableViewAccessibility") @@ -2519,10 +2520,10 @@ public class CallController extends BaseController { long duration = event.getEventTime() - event.getDownTime(); if (event.getActionMasked() == MotionEvent.ACTION_MOVE) { - float newY = event.getRawY() - selfVideoViewWrapper.getHeight() / (float) 2; - float newX = event.getRawX() - selfVideoViewWrapper.getWidth() / (float) 2; - selfVideoViewWrapper.setY(newY); - selfVideoViewWrapper.setX(newX); + float newY = event.getRawY() - binding.selfVideoViewWrapper.getHeight() / (float) 2; + float newX = event.getRawX() - binding.selfVideoViewWrapper.getWidth() / (float) 2; + binding.selfVideoViewWrapper.setY(newY); + binding.selfVideoViewWrapper.setX(newX); } else if (event.getActionMasked() == MotionEvent.ACTION_UP && duration < 100) { switchCamera(); } diff --git a/app/src/main/java/com/nextcloud/talk/activities/MagicCallActivity.kt b/app/src/main/java/com/nextcloud/talk/activities/MagicCallActivity.kt deleted file mode 100644 index c9220d7ba..000000000 --- a/app/src/main/java/com/nextcloud/talk/activities/MagicCallActivity.kt +++ /dev/null @@ -1,184 +0,0 @@ -/* - * Nextcloud Talk application - * - * @author Mario Danic - * @author Andy Scherzinger - * Copyright (C) 2021 Andy Scherzinger (infoi@andy-scherzinger.de) - * Copyright (C) 2017-2018 Mario Danic - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package com.nextcloud.talk.activities - -import android.app.KeyguardManager -import android.app.PictureInPictureParams -import android.content.res.Configuration -import android.os.Build -import android.os.Bundle -import android.util.Log -import android.util.Rational -import android.view.Window -import android.view.WindowManager -import androidx.annotation.RequiresApi -import autodagger.AutoInjector -import com.bluelinelabs.conductor.Conductor -import com.bluelinelabs.conductor.Router -import com.bluelinelabs.conductor.RouterTransaction -import com.bluelinelabs.conductor.changehandler.HorizontalChangeHandler -import com.nextcloud.talk.R -import com.nextcloud.talk.application.NextcloudTalkApplication -import com.nextcloud.talk.controllers.CallController -import com.nextcloud.talk.controllers.CallNotificationController -import com.nextcloud.talk.databinding.ActivityMagicCallBinding -import com.nextcloud.talk.events.ConfigurationChangeEvent -import com.nextcloud.talk.utils.bundle.BundleKeys - -@AutoInjector(NextcloudTalkApplication::class) -class MagicCallActivity : BaseActivity() { - lateinit var binding: ActivityMagicCallBinding - private var router: Router? = null - var isInPipMode: Boolean = false - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - Log.d(TAG, "onCreate") - NextcloudTalkApplication.sharedApplication!!.componentApplication.inject(this) - setTheme(R.style.CallTheme) - - requestWindowFeature(Window.FEATURE_NO_TITLE) - dismissKeyguard() - window.addFlags( - WindowManager.LayoutParams.FLAG_FULLSCREEN or - WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON - ) - - binding = ActivityMagicCallBinding.inflate(layoutInflater) - setContentView(binding.root) - - router = Conductor.attachRouter(this, binding.controllerContainer, savedInstanceState) - router!!.setPopsLastView(false) - - if (!router!!.hasRootController()) { - if (intent.getBooleanExtra(BundleKeys.KEY_FROM_NOTIFICATION_START_CALL, false)) { - router!!.setRoot( - RouterTransaction.with(CallNotificationController(intent.extras)) - .pushChangeHandler(HorizontalChangeHandler()) - .popChangeHandler(HorizontalChangeHandler()) - .tag(CallNotificationController.TAG) - ) - } else { - router!!.setRoot( - RouterTransaction.with(CallController(intent.extras)) - .pushChangeHandler(HorizontalChangeHandler()) - .popChangeHandler(HorizontalChangeHandler()) - .tag(CallController.TAG) - ) - } - } - - } - - override fun onBackPressed() { - enterPipMode() - } - - override fun onUserLeaveHint() { - enterPipMode() - } - - fun enterPipMode() { - enableKeyguard() - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - enterPictureInPictureMode(getPipParams()) - } else { - finish() - } - } - - @RequiresApi(Build.VERSION_CODES.O) - private fun getPipParams(): PictureInPictureParams { - val pipRatio = Rational( - 300, - 500 - ) - return PictureInPictureParams.Builder() - .setAspectRatio(pipRatio) - .build() - } - - override fun onConfigurationChanged(newConfig: Configuration) { - super.onConfigurationChanged(newConfig) - eventBus.post(ConfigurationChangeEvent()) - } - - private fun dismissKeyguard() { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) { - setShowWhenLocked(true) - setTurnScreenOn(true) - val keyguardManager = getSystemService(KEYGUARD_SERVICE) as KeyguardManager - keyguardManager.requestDismissKeyguard(this, null) - } else { - window.addFlags( - WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD or - WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED or - WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON - ) - } - } - - private fun enableKeyguard() { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) { - setShowWhenLocked(false) - } else { - window.clearFlags( - WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD or - WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED or - WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON - ) - } - } - - override fun onPictureInPictureModeChanged(isInPictureInPictureMode: Boolean, newConfig: Configuration) { - super.onPictureInPictureModeChanged(isInPictureInPictureMode, newConfig) - isInPipMode = isInPictureInPictureMode - - if (router?.getControllerWithTag(CallNotificationController.TAG) != null) { - val callNotificationController = router?.getControllerWithTag(CallNotificationController.TAG) as CallNotificationController - if (isInPictureInPictureMode) { - // callNotificationController.updateUiForPipMode() - } else { - // callNotificationController.updateUiForNormalMode() - } - } else if (router?.getControllerWithTag(CallController.TAG) != null) { - val callController = router?.getControllerWithTag(CallController.TAG) as CallController - if (isInPictureInPictureMode) { - callController.updateUiForPipMode() - } else { - callController.updateUiForNormalMode() - } - } - } - - override fun onStop() { - super.onStop() - if (isInPipMode) { - finish() - } - } - - companion object { - private val TAG = "MagicCallActivity" - } -} diff --git a/app/src/main/java/com/nextcloud/talk/controllers/CallNotificationController.java b/app/src/main/java/com/nextcloud/talk/controllers/CallNotificationController.java index a013f25a5..73cc307ec 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/CallNotificationController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/CallNotificationController.java @@ -22,6 +22,7 @@ package com.nextcloud.talk.controllers; import android.annotation.SuppressLint; import android.content.Context; +import android.content.Intent; import android.graphics.Bitmap; import android.graphics.Color; import android.graphics.drawable.BitmapDrawable; @@ -41,8 +42,6 @@ import android.widget.ImageView; import android.widget.RelativeLayout; import android.widget.TextView; -import com.bluelinelabs.conductor.RouterTransaction; -import com.bluelinelabs.conductor.changehandler.HorizontalChangeHandler; import com.bluelinelabs.logansquare.LoganSquare; import com.facebook.common.executors.UiThreadImmediateExecutorService; import com.facebook.common.references.CloseableReference; @@ -55,6 +54,7 @@ import com.facebook.imagepipeline.image.CloseableImage; import com.facebook.imagepipeline.postprocessors.BlurPostProcessor; import com.facebook.imagepipeline.request.ImageRequest; import com.nextcloud.talk.R; +import com.nextcloud.talk.activities.CallActivity; import com.nextcloud.talk.api.NcApi; import com.nextcloud.talk.application.NextcloudTalkApplication; import com.nextcloud.talk.controllers.base.BaseController; @@ -173,7 +173,7 @@ public class CallNotificationController extends BaseController { callAnswerVoiceOnlyView.setVisibility(View.VISIBLE); } - @OnClick(R.id.callControlHangupView) + @OnClick(R.id.hangupButton) void hangup() { leavingScreen = true; @@ -198,10 +198,14 @@ public class CallNotificationController extends BaseController { originalBundle.putString(BundleKeys.INSTANCE.getKEY_ROOM_TOKEN(), currentConversation.getToken()); originalBundle.putString(BundleKeys.INSTANCE.getKEY_CONVERSATION_NAME(), currentConversation.getDisplayName()); - getRouter().replaceTopController(RouterTransaction.with(new CallController(originalBundle)) - .popChangeHandler(new HorizontalChangeHandler()) - .pushChangeHandler(new HorizontalChangeHandler()) - .tag(CallController.TAG)); +// getRouter().replaceTopController(RouterTransaction.with(new CallActivity(originalBundle)) +// .popChangeHandler(new HorizontalChangeHandler()) +// .pushChangeHandler(new HorizontalChangeHandler()) +// .tag(CallActivity.TAG)); + + Intent intent = new Intent(this.getActivity(), CallActivity.class); + intent.putExtras(originalBundle); + startActivity(intent); } private void checkIfAnyParticipantsRemainInRoom() { diff --git a/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt b/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt index d8708bdf3..703c21ee0 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt +++ b/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt @@ -94,7 +94,7 @@ import com.facebook.imagepipeline.datasource.BaseBitmapDataSubscriber import com.facebook.imagepipeline.image.CloseableImage import com.google.android.flexbox.FlexboxLayout import com.nextcloud.talk.R -import com.nextcloud.talk.activities.MagicCallActivity +import com.nextcloud.talk.activities.CallActivity import com.nextcloud.talk.activities.MainActivity import com.nextcloud.talk.adapters.messages.IncomingLocationMessageViewHolder import com.nextcloud.talk.adapters.messages.IncomingPreviewMessageViewHolder @@ -2142,7 +2142,7 @@ class ChatController(args: Bundle) : } return if (activity != null) { - val callIntent = Intent(activity, MagicCallActivity::class.java) + val callIntent = Intent(activity, CallActivity::class.java) callIntent.putExtras(bundle) callIntent } else { @@ -2500,7 +2500,7 @@ class ChatController(args: Bundle) : } override fun onNext(roomOverall: RoomOverall) { - val conversationIntent = Intent(activity, MagicCallActivity::class.java) + val conversationIntent = Intent(activity, CallActivity::class.java) val bundle = Bundle() bundle.putParcelable(KEY_USER_ENTITY, conversationUser) bundle.putString(KEY_ROOM_TOKEN, roomOverall.ocs.data.token) diff --git a/app/src/main/java/com/nextcloud/talk/jobs/NotificationWorker.java b/app/src/main/java/com/nextcloud/talk/jobs/NotificationWorker.java index d11134a45..9f2a2e09e 100644 --- a/app/src/main/java/com/nextcloud/talk/jobs/NotificationWorker.java +++ b/app/src/main/java/com/nextcloud/talk/jobs/NotificationWorker.java @@ -48,7 +48,7 @@ import com.facebook.imagepipeline.image.CloseableImage; import com.facebook.imagepipeline.postprocessors.RoundAsCirclePostprocessor; import com.facebook.imagepipeline.request.ImageRequest; import com.nextcloud.talk.R; -import com.nextcloud.talk.activities.MagicCallActivity; +import com.nextcloud.talk.activities.CallActivity; import com.nextcloud.talk.activities.MainActivity; import com.nextcloud.talk.api.NcApi; import com.nextcloud.talk.application.NextcloudTalkApplication; @@ -590,7 +590,7 @@ public class NotificationWorker extends Worker { boolean startACall = decryptedPushMessage.getType().equals("call"); if (startACall) { - intent = new Intent(context, MagicCallActivity.class); + intent = new Intent(context, CallActivity.class); } else { intent = new Intent(context, MainActivity.class); } diff --git a/app/src/main/res/layout/activity_magic_call.xml b/app/src/main/res/layout/activity_magic_call.xml deleted file mode 100644 index 046293920..000000000 --- a/app/src/main/res/layout/activity_magic_call.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - diff --git a/app/src/main/res/layout/call_states.xml b/app/src/main/res/layout/call_states.xml index 136805f57..1e2a354d6 100644 --- a/app/src/main/res/layout/call_states.xml +++ b/app/src/main/res/layout/call_states.xml @@ -21,7 +21,7 @@ --> diff --git a/app/src/main/res/layout/controller_call.xml b/app/src/main/res/layout/controller_call.xml index 2195a1b79..4edd83635 100644 --- a/app/src/main/res/layout/controller_call.xml +++ b/app/src/main/res/layout/controller_call.xml @@ -28,7 +28,7 @@ android:layout_height="match_parent" android:fitsSystemWindows="true" android:orientation="vertical" - tools:context=".activities.MagicCallActivity"> + tools:context=".activities.CallActivity">