Skip to content

Commit 6cd10ec

Browse files
committed
Support Android 15 on call screen
1 parent 3303fb0 commit 6cd10ec

File tree

1 file changed

+30
-4
lines changed

1 file changed

+30
-4
lines changed

app/src/main/java/org/thunderdog/challegram/ui/CallController.java

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@
8282
import me.vkryl.core.MathUtils;
8383
import me.vkryl.core.StringUtils;
8484

85-
public class CallController extends ViewController<CallController.Arguments> implements TdlibCache.UserDataChangeListener, TdlibCache.CallStateChangeListener, View.OnClickListener, FactorAnimator.Target, Runnable, CallControlsLayout.CallControlCallback {
85+
public class CallController extends ViewController<CallController.Arguments> implements TdlibCache.UserDataChangeListener, TdlibCache.CallStateChangeListener, View.OnClickListener, FactorAnimator.Target, Runnable, CallControlsLayout.CallControlCallback, Screen.StatusBarHeightChangeListener {
8686
private static final boolean DEBUG_FADE_BRANDING = true;
8787

8888
private static class ButtonView extends View implements FactorAnimator.Target {
@@ -314,6 +314,26 @@ private void setCallBarsCount (int count) {
314314
}
315315
}
316316

317+
@Override
318+
public boolean supportsBottomInset () {
319+
return true;
320+
}
321+
322+
@Override
323+
protected void onBottomInsetChanged (int extraBottomInset, int extraBottomInsetWithoutIme, boolean isImeInset) {
324+
super.onBottomInsetChanged(extraBottomInset, extraBottomInsetWithoutIme, isImeInset);
325+
Views.setPaddingBottom(buttonWrap, extraBottomInset);
326+
Views.setPaddingBottom(callControlsLayout, extraBottomInset);
327+
}
328+
329+
@Override
330+
public void onStatusBarHeightChanged (int newHeight) {
331+
int startMargin = Math.max(Screen.dp(18f) + newHeight, Screen.dp(42f));
332+
Views.setTopMargin(brandWrap, startMargin);
333+
Views.setTopMargin(nameView, startMargin + Screen.dp(34f));
334+
Views.setTopMargin(stateView, startMargin + Screen.dp(94f));
335+
}
336+
317337
@Override
318338
protected View onCreateView (final Context context) {
319339
final FrameLayoutFix contentView = new FrameLayoutFix(context) {
@@ -378,7 +398,9 @@ protected void onDraw(Canvas c){
378398

379399
// Top-left corner
380400

381-
params.topMargin = Screen.dp(76f);
401+
int startMargin = Math.max(Screen.dp(18f) + Screen.getStatusBarHeight(), Screen.dp(42f));
402+
403+
params.topMargin = startMargin + Screen.dp(34f);
382404
params.leftMargin = params.rightMargin = Screen.dp(18f);
383405

384406
nameView = new EmojiTextView(context) {
@@ -414,7 +436,7 @@ protected void onDraw (Canvas canvas) {
414436
emojiStatusHelper = new EmojiStatusHelper(tdlib, nameView, null);
415437

416438
params = FrameLayoutFix.newParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
417-
params.topMargin = Screen.dp(136f);
439+
params.topMargin = startMargin + Screen.dp(94f);
418440
params.leftMargin = params.rightMargin = Screen.dp(18f);
419441

420442
stateView = new TextView(context);
@@ -430,8 +452,9 @@ protected void onDraw (Canvas canvas) {
430452
stateView.setLayoutParams(params);
431453
contentView.addView(stateView);
432454

455+
Screen.addStatusBarHeightListener(this);
433456
params = FrameLayoutFix.newParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
434-
params.topMargin = Screen.dp(42f);
457+
params.topMargin = startMargin;
435458
params.leftMargin = params.rightMargin = Screen.dp(18f);
436459
brandWrap = new LinearLayout(context);
437460
if (DEBUG_FADE_BRANDING) {
@@ -603,6 +626,7 @@ public boolean onTouchEvent (MotionEvent event) {
603626
buttonWrap.addView(muteButtonView);
604627
buttonWrap.addView(messageButtonView);
605628
buttonWrap.addView(speakerButtonView);
629+
Views.setPaddingBottom(buttonWrap, extraBottomInset);
606630
Drawable drawable = ScrimUtil.makeCubicGradientScrimDrawable(0xff000000, 2, Gravity.BOTTOM, false);
607631
drawable.setAlpha((int) (255f * .3f));
608632
ViewUtils.setBackground(buttonWrap, drawable);
@@ -611,6 +635,7 @@ public boolean onTouchEvent (MotionEvent event) {
611635
// Answer controls
612636

613637
callControlsLayout = new CallControlsLayout(context, this);
638+
Views.setPaddingBottom(callControlsLayout, extraBottomInset);
614639
callControlsLayout.setCallback(this);
615640
callControlsLayout.setLayoutParams(FrameLayoutFix.newParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
616641
contentView.addView(callControlsLayout);
@@ -1150,6 +1175,7 @@ public void replaceCall (TdApi.Call call) {
11501175
@Override
11511176
public void destroy () {
11521177
super.destroy();
1178+
Screen.removeStatusBarHeightListener(this);
11531179
tdlib.cache().unsubscribeFromCallUpdates(call.id, this);
11541180
tdlib.cache().removeUserDataListener(call.userId, this);
11551181
avatarView.performDestroy();

0 commit comments

Comments
 (0)