fixed statusbar implementation:

`r.getIdentifier("status_bar_height", "dimen", "android")` was returning
always about 24 dp, with notch not being considered. A best approach is to
use WindowInset API
This commit is contained in:
Eugeniu Olog 2020-04-17 18:34:05 +02:00
parent d87c95b7b2
commit 967c6fb5ac
2 changed files with 30 additions and 59 deletions

View file

@ -1,59 +0,0 @@
/*
* Copyright (c) 2019 Hemanth Savarala.
*
* Licensed under the GNU General Public License v3
*
* This 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 software 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.
*/
package code.name.monkey.retromusic.views;
import android.content.Context;
import android.content.res.Resources;
import android.util.AttributeSet;
import android.view.View;
import androidx.annotation.NonNull;
public class StatusBarView extends View {
public StatusBarView(@NonNull Context context) {
super(context);
init(context);
}
public StatusBarView(@NonNull Context context, @NonNull AttributeSet attrs) {
super(context, attrs);
init(context);
}
public StatusBarView(@NonNull Context context, @NonNull AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context);
}
public static int getStatusBarHeight(@NonNull Resources r) {
int result = 0;
int resourceId = r.getIdentifier("status_bar_height", "dimen", "android");
if (resourceId > 0) {
result = r.getDimensionPixelSize(resourceId);
}
return result;
}
private void init(Context context) {
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec), getStatusBarHeight(getResources()));
}
}

View file

@ -0,0 +1,30 @@
package code.name.monkey.retromusic.views
import android.content.Context
import android.util.AttributeSet
import android.view.View
class StatusBarView(
context: Context,
attrs: AttributeSet
) : View(context, attrs) {
override fun onAttachedToWindow() {
super.onAttachedToWindow()
if (isInEditMode){
return
}
setOnApplyWindowInsetsListener { _, insets ->
val height = insets?.systemWindowInsetTop ?: 0
setHeight(height)
insets
}
}
private fun setHeight(px: Int) {
val params = layoutParams ?: return
params.height = px
layoutParams = params
}
}