use of net.iGap.module.customView.CallRippleView in project iGap-Android by KianIranian-STDG.
the class CallActivity method createRootView.
private View createRootView() {
if (CallService.getInstance() == null)
finish();
FrameLayout rootView = new FrameLayout(this);
rootView.setBackgroundColor(0);
rootView.setFitsSystemWindows(true);
rootView.setClipToPadding(false);
if (isVideoCall()) {
surfaceRemote = new SurfaceViewRenderer(this);
surfaceRemote.setVisibility(isIncomingCallAndAnswered ? View.VISIBLE : View.GONE);
surfaceRemote.setOnClickListener(v -> hideIcons());
rootView.addView(surfaceRemote, LayoutCreator.createFrame(LayoutCreator.MATCH_PARENT, LayoutCreator.MATCH_PARENT, Gravity.CENTER));
surfaceLocal = new SurfaceViewRenderer(this);
surfaceLocal.setVisibility(View.VISIBLE);
rootView.addView(surfaceLocal, LayoutCreator.createFrame(100, 140, Gravity.TOP | (isRtl ? Gravity.LEFT : Gravity.RIGHT), 8, 8, 8, 8));
try {
surfaceLocal.init(WebRTC.getInstance().getEglBaseContext(), null);
} catch (Exception e) {
// for android version 4 on huawei device
e.printStackTrace();
HelperLog.getInstance().setErrorLog(e);
Toast.makeText(this, getResources().getString(R.string.not_success), Toast.LENGTH_SHORT).show();
CallManager.getInstance().endCall();
}
surfaceLocal.setEnableHardwareScaler(true);
surfaceLocal.setMirror(isFrontCamera);
surfaceLocal.setZOrderMediaOverlay(true);
surfaceLocal.setZOrderOnTop(true);
try {
surfaceRemote.init(WebRTC.getInstance().getEglBaseContext(), null);
} catch (Exception e) {
// for android version 4 on huawei device
e.printStackTrace();
HelperLog.getInstance().setErrorLog(e);
Toast.makeText(this, getResources().getString(R.string.not_success), Toast.LENGTH_SHORT).show();
CallManager.getInstance().endCall();
}
surfaceRemote.setEnableHardwareScaler(true);
surfaceRemote.setMirror(false);
WebRTC.getInstance().setFrameListener(new WebRTC.VideoFrameListener() {
@Override
public void onLocalFrame(VideoFrame frame) {
if (surfaceLocal != null)
surfaceLocal.onFrame(frame);
}
@Override
public void onRemoteFrame(VideoFrame frame) {
if (surfaceRemote != null)
surfaceRemote.onFrame(frame);
}
});
}
userImageView = new AppCompatImageView(this) {
private Drawable topGradient = getResources().getDrawable(R.drawable.gradient_top);
private Drawable bottomGradient = getResources().getDrawable(R.drawable.gradient_bottom);
private Paint paint = new Paint();
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
paint.setColor(0x4C000000);
canvas.drawRect(0, 0, getWidth(), getHeight(), paint);
topGradient.setBounds(0, 0, getWidth(), LayoutCreator.dp(170));
topGradient.setAlpha(130);
topGradient.draw(canvas);
bottomGradient.setBounds(0, getHeight() - LayoutCreator.dp(220), getWidth(), getHeight());
bottomGradient.setAlpha(180);
bottomGradient.draw(canvas);
}
};
userImageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
if (isVideoCall())
userImageView.setVisibility(isIncomingCallAndAnswered ? View.GONE : View.VISIBLE);
rootView.addView(userImageView, LayoutCreator.createFrame(LayoutCreator.MATCH_PARENT, LayoutCreator.MATCH_PARENT));
callTypeTextView = new TextView(this);
callTypeTextView.setText(isVideoCall() ? R.string.video_calls : R.string.voice_calls);
callTypeTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 12);
callTypeTextView.setTextColor(getResources().getColor(R.color.white));
callTypeTextView.setTypeface(ResourcesCompat.getFont(this, R.font.main_font));
callTypeTextView.setLines(1);
callTypeTextView.setMaxLines(1);
callTypeTextView.setSingleLine(true);
callTypeTextView.setEllipsize(TextUtils.TruncateAt.END);
callTypeTextView.setGravity(isRtl ? Gravity.RIGHT : Gravity.LEFT);
rootView.addView(callTypeTextView, LayoutCreator.createFrame(LayoutCreator.MATCH_PARENT, LayoutCreator.WRAP_CONTENT, Gravity.TOP, 16, 24, 16, 0));
statusTextView = new AppCompatTextView(this);
statusTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16);
statusTextView.setTextColor(getResources().getColor(R.color.white));
statusTextView.setTypeface(ResourcesCompat.getFont(this, R.font.main_font_bold));
statusTextView.setLines(1);
statusTextView.setMaxLines(1);
statusTextView.setSingleLine(true);
statusTextView.setEllipsize(TextUtils.TruncateAt.END);
statusTextView.setGravity(isRtl ? Gravity.RIGHT : Gravity.LEFT);
if (isIncoming && CallManager.getInstance().getCurrentSate() == CallState.CONNECTED) {
statusTextView.setText(R.string.connected);
} else if (isIncoming) {
statusTextView.setText(R.string.incoming_call);
} else {
statusTextView.setText(R.string.connecting);
}
rootView.addView(statusTextView, LayoutCreator.createFrame(LayoutCreator.MATCH_PARENT, LayoutCreator.WRAP_CONTENT, Gravity.TOP, 16, 46, 16, 0));
durationTextView = new AppCompatTextView(this);
durationTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16);
durationTextView.setTextColor(getResources().getColor(R.color.white));
durationTextView.setTypeface(ResourcesCompat.getFont(this, R.font.main_font));
durationTextView.setLines(1);
durationTextView.setMaxLines(1);
durationTextView.setSingleLine(true);
durationTextView.setEllipsize(TextUtils.TruncateAt.END);
durationTextView.setGravity(isRtl ? Gravity.RIGHT : Gravity.LEFT);
rootView.addView(durationTextView, LayoutCreator.createFrame(LayoutCreator.MATCH_PARENT, LayoutCreator.WRAP_CONTENT, Gravity.TOP, 16, 72, 16, 0));
nameTextView = new TextView(this);
nameTextView.setTextColor(getResources().getColor(R.color.white));
nameTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 40);
nameTextView.setTypeface(ResourcesCompat.getFont(this, R.font.main_font));
nameTextView.setLines(1);
nameTextView.setMaxLines(1);
nameTextView.setSingleLine(true);
nameTextView.setEllipsize(TextUtils.TruncateAt.END);
nameTextView.setGravity(Gravity.CENTER);
rootView.addView(nameTextView, LayoutCreator.createFrame(LayoutCreator.MATCH_PARENT, LayoutCreator.WRAP_CONTENT, Gravity.TOP, 16, isVideoCall() ? 172 : 92, 16, 0));
if (isIncoming && isIncomingCallAndNotAnswered) {
answerRippleView = new CallRippleView(this);
answerRippleView.setImageResource(R.drawable.ic_call_answer);
answerRippleView.startAnimation();
answerRippleView.setDelegate(this::answerCall);
answerRippleView.setOnClickListener(v -> answerCall());
rootView.addView(answerRippleView, LayoutCreator.createFrame(150, 150, Gravity.BOTTOM | Gravity.LEFT, 0, 0, 0, 36));
declineRippleView = new CallRippleView(this);
declineRippleView.setImageResource(R.drawable.ic_call_decline);
declineRippleView.startAnimation();
declineRippleView.setDelegate(this::declineCall);
declineRippleView.setOnClickListener(v -> {
declineCall();
});
rootView.addView(declineRippleView, LayoutCreator.createFrame(150, 150, Gravity.BOTTOM | Gravity.RIGHT, 0, 0, 0, 36));
quickDeclineView = new LinearLayout(this);
quickDeclineView.setOrientation(LinearLayout.VERTICAL);
quickDeclineView.setOnClickListener(v -> onQuickDeclineClick());
View view = new View(this);
view.setBackground(getResources().getDrawable(R.drawable.shape_call_decline));
view.setAlpha(0.3f);
quickDeclineView.addView(view, LayoutCreator.createLinear(100, 3, Gravity.CENTER));
TextView declineText = new AppCompatTextView(this);
declineText.setText(R.string.send_text);
declineText.setTextColor(Theme.getInstance().getDividerColor(this));
declineText.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14);
quickDeclineView.addView(declineText, LayoutCreator.createLinear(LayoutCreator.WRAP_CONTENT, LayoutCreator.WRAP_CONTENT, Gravity.CENTER, 0, 1, 0, 8));
rootView.addView(quickDeclineView, LayoutCreator.createFrame(LayoutCreator.MATCH_PARENT, LayoutCreator.WRAP_CONTENT, Gravity.BOTTOM));
} else {
ImageView cancelImageView = new AppCompatImageView(this);
cancelImageView.setImageResource(R.drawable.ic_call_cancel);
cancelImageView.setVisibility(View.GONE);
cancelImageView.setOnClickListener(v -> finish());
// rootView.addView(cancelImageView, LayoutCreator.createFrame(64, 64, Gravity.BOTTOM, 62, 0, 0, 62));
ImageView callAgainImageView = new AppCompatImageView(this);
callAgainImageView.setImageResource(R.drawable.ic_call_answer);
callAgainImageView.setVisibility(View.GONE);
callAgainImageView.setOnClickListener(v -> {
CallManager.getInstance().startCall(caller.getUserId(), callType);
});
// rootView.addView(callAgainImageView, LayoutCreator.createFrame(64, 64, Gravity.BOTTOM | Gravity.RIGHT, 0, 0, 62, 62));
}
buttonsGridView = new LinearLayout(this);
buttonsGridView.setOrientation(LinearLayout.VERTICAL);
if (isIncoming && isIncomingCallAndNotAnswered)
hideButtonsGridView();
else if (CallManager.getInstance().isWaitForEndCall())
fadeButtonsGridView();
else
showButtonsGridView();
LinearLayout row1 = new LinearLayout(this);
row1.setOrientation(LinearLayout.HORIZONTAL);
buttonsGridView.addView(row1, LayoutCreator.createFrame(LayoutCreator.MATCH_PARENT, LayoutCreator.WRAP_CONTENT, Gravity.CENTER, 0, 16, 0, 0));
if (isVideoCall()) {
cameraView = new TextImageView(this);
cameraView.setText(R.string.camera);
cameraView.setTextColor(getResources().getColor(R.color.white));
cameraView.setOnClickListener(v -> toggleCamera());
cameraView.setImageResource(R.drawable.ic_call_camera);
row1.addView(cameraView, LayoutCreator.createLinear(52, LayoutCreator.WRAP_CONTENT, 1f));
}
holdView = new TextImageView(this);
holdView.setText(R.string.hold);
holdView.setViewColor(CallManager.getInstance().isCallInHold() ? Theme.getInstance().getPrimaryDarkColor(this) : getResources().getColor(R.color.white));
holdView.setOnClickListener(v -> holdCall());
holdView.setImageResource(R.drawable.ic_call_hold);
holdView.setViewColor(CallManager.getInstance().isCallAlive() ? CallManager.getInstance().isCallInHold() ? Theme.getInstance().getPrimaryDarkColor(this) : getResources().getColor(R.color.white) : getResources().getColor(R.color.gray_9d));
row1.addView(holdView, LayoutCreator.createLinear(52, LayoutCreator.WRAP_CONTENT, 1f));
if (CallManager.getInstance().isCallAlive()) {
if (CallManager.getInstance().isCallInHold()) {
holdView.setViewColor(Theme.getInstance().getPrimaryDarkColor(this));
} else {
holdView.setViewColor(getResources().getColor(R.color.white));
}
} else {
holdView.setViewColor(getResources().getColor(R.color.gray_4c));
}
directView = new TextImageView(this);
directView.setText(R.string.message);
directView.setTextColor(getResources().getColor(R.color.white));
directView.setOnClickListener(v -> toggleCamera());
directView.setImageResource(R.drawable.ic_call_chat);
directView.setOnClickListener(v -> goToChat());
row1.addView(directView, LayoutCreator.createLinear(52, LayoutCreator.WRAP_CONTENT, 1f));
LinearLayout row2 = new LinearLayout(this);
row2.setOrientation(LinearLayout.HORIZONTAL);
buttonsGridView.addView(row2, LayoutCreator.createFrame(LayoutCreator.MATCH_PARENT, LayoutCreator.WRAP_CONTENT, Gravity.CENTER, 0, 16, 0, 0));
micView = new TextImageView(this);
micView.setImageResource(R.drawable.ic_call_mic);
micView.setText(R.string.mic);
if (!CallManager.getInstance().isMicEnable()) {
toggleMic();
}
micView.setViewColor(CallManager.getInstance().isMicEnable() ? getResources().getColor(R.color.white) : Theme.getInstance().getPrimaryDarkColor(this));
micView.setOnClickListener(v -> toggleMic());
row2.addView(micView, LayoutCreator.createLinear(52, LayoutCreator.WRAP_CONTENT, 1f));
speakerView = new TextImageView(this);
speakerView.setImageResource(R.drawable.ic_call_speaker);
speakerView.setText(R.string.speacker);
speakerView.setViewColor(isSpeakerEnable() ? Theme.getInstance().getPrimaryDarkColor(this) : getResources().getColor(R.color.white));
speakerView.setOnClickListener(v -> toggleSpeaker());
row2.addView(speakerView, LayoutCreator.createLinear(52, LayoutCreator.WRAP_CONTENT, 1f));
bluetoothView = new TextImageView(this);
bluetoothView.setImageResource(R.drawable.ic_call_bluetooth);
bluetoothView.setText(R.string.bluetooth);
bluetoothView.setViewColor(CallManager.getInstance().getActiveAudioDevice() == CallAudioManager.AudioDevice.BLUETOOTH ? Theme.getInstance().getPrimaryDarkColor(this) : getResources().getColor(R.color.white));
bluetoothView.setOnClickListener(v -> bluetoothClick());
row2.addView(bluetoothView, LayoutCreator.createLinear(52, LayoutCreator.WRAP_CONTENT, 1f));
declineImageView = new AppCompatImageView(this);
declineImageView.setImageResource(R.drawable.ic_call_decline);
declineImageView.setOnClickListener(v -> {
endCall();
});
buttonsGridView.addView(declineImageView, LayoutCreator.createLinear(64, 64, Gravity.CENTER, 0, 48, 0, 0));
rootView.addView(buttonsGridView, LayoutCreator.createFrame(LayoutCreator.MATCH_PARENT, LayoutCreator.WRAP_CONTENT, Gravity.BOTTOM, 32, 0, 32, 62));
if (caller != null) {
nameTextView.setText(caller.getName());
try {
avatarHandler.getAvatar(new ParamWithInitBitmap(userImageView, caller.getUserId()).initBitmap(null).showMain().onInitSet(() -> {
if (caller.color != null && caller.color.length() > 0)
userImageView.setBackgroundColor(Color.parseColor(caller.color));
}));
} catch (Exception e) {
// must be refactor avatar handler
e.printStackTrace();
}
}
return rootView;
}
Aggregations