package com.quran.labs.androidquran.util;
import android.content.Context;
import android.graphics.Point;
import android.support.annotation.NonNull;
import android.text.TextUtils;
import android.view.Display;
import android.view.WindowManager;
import com.quran.labs.androidquran.R;
import com.quran.labs.androidquran.data.QuranConstants;
import timber.log.Timber;
public class QuranScreenInfo {
private static QuranScreenInfo sInstance = null;
private static int sOrientation;
private int mHeight;
private int mMaxWidth;
private PageProvider mPageProvider;
private QuranScreenInfo(@NonNull Display display) {
final Point point = new Point();
display.getSize(point);
mHeight = point.y;
mMaxWidth = (point.x > point.y) ? point.x : point.y;
mPageProvider = QuranConstants.getPageProvider(display);
Timber.d("initializing with %d and %d", point.y, point.x);
}
public static QuranScreenInfo getInstance() {
return sInstance;
}
public static QuranScreenInfo getOrMakeInstance(Context context) {
if (sInstance == null ||
sOrientation != context.getResources().getConfiguration().orientation) {
sInstance = initialize(context);
sOrientation = context.getResources().getConfiguration().orientation;
}
return sInstance;
}
private static QuranScreenInfo initialize(Context context) {
final WindowManager w = (WindowManager) context
.getSystemService(Context.WINDOW_SERVICE);
final Display display = w.getDefaultDisplay();
QuranScreenInfo qsi = new QuranScreenInfo(display);
qsi.setOverrideParam(QuranSettings.getInstance(context).getDefaultImagesDirectory());
return qsi;
}
public void setOverrideParam(String overrideParam) {
mPageProvider.setOverrideParameter(overrideParam);
}
public int getHeight() {
return mHeight;
}
public String getWidthParam() {
return "_" + mPageProvider.getWidthParameter();
}
public String getTabletWidthParam() {
return "_" + mPageProvider.getTabletWidthParameter();
}
public boolean isDualPageMode(Context context) {
return context != null && mMaxWidth > 800;
}
public static class DefaultPageProvider implements PageProvider {
private final int mMaxWidth;
private String mOverrideParam;
public DefaultPageProvider(@NonNull Display display) {
final Point point = new Point();
display.getSize(point);
mMaxWidth = (point.x > point.y) ? point.x : point.y;
}
@Override
public String getWidthParameter() {
if (mMaxWidth <= 320) {
return "320";
} else if (mMaxWidth <= 480) {
return "480";
} else if (mMaxWidth <= 800) {
return "800";
} else if (mMaxWidth <= 1280) {
return "1024";
} else {
if (!TextUtils.isEmpty(mOverrideParam)) {
return mOverrideParam;
}
return "1260";
}
}
@Override
public String getTabletWidthParameter() {
if ("1260".equals(getWidthParameter())) {
// for tablet, if the width is more than 1280, use 1260
// images for both dimens (only applies to new installs)
return "1260";
} else {
int width = mMaxWidth / 2;
return getBestTabletLandscapeSizeMatch(width);
}
}
@Override
public void setOverrideParameter(String parameter) {
mOverrideParam = parameter;
}
private String getBestTabletLandscapeSizeMatch(int width) {
if (width <= 640) {
return "512";
} else {
return "1024";
}
}
}
public interface PageProvider {
String getWidthParameter();
String getTabletWidthParameter();
void setOverrideParameter(String parameter);
}
}