/*
* This source is part of the
* _____ ___ ____
* __ / / _ \/ _ | / __/___ _______ _
* / // / , _/ __ |/ _/_/ _ \/ __/ _ `/
* \___/_/|_/_/ |_/_/ (_)___/_/ \_, /
* /___/
* repository.
*
* Copyright (C) 2017 Benoit 'BoD' Lubek (BoD@JRAF.org)
*
* 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 org.jraf.android.util.ui.screenshape;
import android.content.Context;
import android.content.res.Resources;
import android.os.Build;
import android.support.annotation.RequiresApi;
import android.util.DisplayMetrics;
@RequiresApi(api = Build.VERSION_CODES.M)
public class ScreenShapeHelper {
private static ScreenShapeHelper INSTANCE = new ScreenShapeHelper();
private boolean isInitialized;
/**
* Width of the display in pixels.
*/
public int width;
/**
* Height of the display in pixels. This <strong>doesn't</strong> include the chin, if any.
*/
public int height;
/**
* Height of the chin, if any.
*/
public int chinHeight;
/**
* Whether the display is round.
*/
public boolean isRound;
/**
* A margin in pixels that allows content to be safely displayed on round displays.
*/
public float safeMargin;
private ScreenShapeHelper() {}
public static ScreenShapeHelper get(Context context) {
if (!INSTANCE.isInitialized) INSTANCE.init(context);
return INSTANCE;
}
public void init(Context context) {
Resources resources = context.getResources();
DisplayMetrics metrics = resources.getDisplayMetrics();
width = metrics.widthPixels;
height = metrics.heightPixels;
isRound = resources.getConfiguration().isScreenRound();
if (isRound) {
// Assume width=height for round screens (I guess that means oval is not supported!)
chinHeight = width - height;
// Pythagorean Theorem
double edge = width / Math.sqrt(2);
safeMargin = (float) ((width - edge) / 2.0);
}
isInitialized = true;
}
}