/*
|
* Copyright (C) 2019 The Android Open Source Project
|
*
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
* you may not use this file except in compliance with the License.
|
* You may obtain a copy of the License at
|
*
|
* http://www.apache.org/licenses/LICENSE-2.0
|
*
|
* Unless required by applicable law or agreed to in writing, software
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
* See the License for the specific language governing permissions and
|
* limitations under the License.
|
*/
|
|
package com.android.launcher3;
|
|
import android.content.Context;
|
import android.content.res.Resources;
|
import android.graphics.Point;
|
import android.graphics.RectF;
|
import android.view.Display;
|
import android.view.Surface;
|
import android.view.WindowManager;
|
import android.util.DisplayMetrics;
|
import android.util.TypedValue;
|
|
public class ResourceUtils {
|
public static final String NAVBAR_LANDSCAPE_LEFT_RIGHT_SIZE = "navigation_bar_width";
|
public static final String NAVBAR_BOTTOM_GESTURE_SIZE = "navigation_bar_gesture_height";
|
|
|
public static int getNavbarSize(String resName, Resources res) {
|
return getDimenByName(resName, res, 48);
|
}
|
|
private static int getDimenByName(String resName, Resources res, int defaultValue) {
|
final int frameSize;
|
final int frameSizeResID = res.getIdentifier(resName, "dimen", "android");
|
if (frameSizeResID != 0) {
|
frameSize = res.getDimensionPixelSize(frameSizeResID);
|
} else {
|
frameSize = pxFromDp(defaultValue, res.getDisplayMetrics());
|
}
|
return frameSize;
|
}
|
|
public static int pxFromDp(float size, DisplayMetrics metrics) {
|
return Math.round(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, size, metrics));
|
}
|
|
public static void getNavbarRect(Context context, RectF outRect) {
|
Point size = new Point();
|
Point realSize = new Point();
|
Display display = context.getSystemService(WindowManager.class).getDefaultDisplay();
|
int leftOffset, topOffset;
|
|
display.getSize(size);
|
display.getRealSize(realSize);
|
leftOffset = realSize.x - size.x;
|
topOffset = realSize.y - size.y;
|
|
switch(display.getRotation()) {
|
case Surface.ROTATION_90:
|
if (leftOffset != 0)
|
outRect.left = outRect.right - leftOffset;
|
if (topOffset != 0)
|
outRect.top = outRect.bottom - topOffset;
|
break;
|
case Surface.ROTATION_270:
|
if (leftOffset != 0)
|
outRect.left = outRect.left + leftOffset;
|
if (topOffset != 0)
|
outRect.top = outRect.bottom - topOffset;
|
break;
|
default:
|
outRect.top = outRect.bottom - topOffset;
|
break;
|
}
|
}
|
}
|