blob: 4b233946e6ecd14ca21b4585414782539c17c16e [file] [log] [blame]
// Copyright 2017 The Cobalt Authors. All Rights Reserved.
//
// 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 dev.cobalt.util;
import android.content.Context;
import android.util.DisplayMetrics;
import android.util.Size;
import android.util.SizeF;
import android.view.WindowManager;
/** Utility functions for querying display attributes. */
public class DisplayUtil {
private DisplayUtil() {}
/**
* Returns the physical pixels per inch of the screen in the X and Y
* dimensions.
*/
public static SizeF getDisplayDpi(Context context) {
DisplayMetrics metrics = getDisplayMetrics(context);
return new SizeF(metrics.xdpi, metrics.ydpi);
}
/**
* Returns the size of the physical display size in pixels.
*
* <p>This differs from {@link #getSystemDisplaySize(Context)} because it only uses
* {@link DisplayMetrics}.
*/
public static Size getDisplaySize(Context context) {
DisplayMetrics metrics = getDisplayMetrics(context);
return new Size(metrics.widthPixels, metrics.heightPixels);
}
/**
* Returns the size of the current physical display size in pixels.
*
* <p>This differs from {@link #getDisplaySize(Context)} because it allows the
* system property "sys.display-size" to override {@link DisplayMetrics}.
*/
public static Size getSystemDisplaySize(Context context) {
Size widthAndHeightPx = getSystemDisplayWidthAndHeightPxInternal();
if (widthAndHeightPx == null) {
widthAndHeightPx = getDisplaySize(context);
}
return widthAndHeightPx;
}
/**
* Returns the size of the current physical display size in pixels.
* or {@code null} if unavailable.
*/
private static Size getSystemDisplayWidthAndHeightPxInternal() {
final String displaySize = SystemPropertiesHelper.getString("sys.display-size");
if (displaySize != null) {
final String[] widthAndHeightPx = displaySize.split("x");
if (widthAndHeightPx.length == 2) {
try {
return new Size(
Integer.parseInt(widthAndHeightPx[0]), Integer.parseInt(widthAndHeightPx[1]));
} catch (NumberFormatException exception) {
// pass
}
}
}
return null;
}
private static DisplayMetrics cachedDisplayMetrics = null;
private static DisplayMetrics getDisplayMetrics(Context context) {
if (cachedDisplayMetrics == null) {
cachedDisplayMetrics = new DisplayMetrics();
((WindowManager) context.getSystemService(Context.WINDOW_SERVICE))
.getDefaultDisplay().getRealMetrics(cachedDisplayMetrics);
}
return cachedDisplayMetrics;
}
}