package com.quran.labs.androidquran.util;
import android.app.ActivityManager;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Build;
import android.preference.PreferenceManager;
import android.support.annotation.NonNull;
import android.support.annotation.WorkerThread;
import android.support.v4.text.TextUtilsCompat;
import android.support.v4.view.ViewCompat;
import com.quran.labs.androidquran.R;
import com.quran.labs.androidquran.data.Constants;
import java.io.File;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Locale;
public class QuranUtils {
private static boolean isArabicFormatter;
private static NumberFormat numberFormat;
private static Locale lastLocale;
public static boolean doesStringContainArabic(String s) {
if (s == null) {
return false;
}
int length = s.length();
for (int i = 0; i < length; i++) {
int current = (int) s.charAt(i);
// Skip space
if (current == 32) {
continue;
}
// non-reshaped arabic
if ((current >= 1570) && (current <= 1610)) {
return true;
}
// re-shaped arabic
else if ((current >= 65133) && (current <= 65276)) {
return true;
}
// if the value is 42, it deserves another chance :p
// (in reality, 42 is a * which is useful in searching sqlite)
else if (current != 42) {
return false;
}
}
return false;
}
public static boolean isRtl() {
return TextUtilsCompat.getLayoutDirectionFromLocale(Locale.getDefault())
== ViewCompat.LAYOUT_DIRECTION_RTL;
}
public static boolean isOnWifiNetwork(Context context) {
ConnectivityManager cm =
(ConnectivityManager) context.getSystemService(
Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
return activeNetwork != null &&
activeNetwork.getType() == ConnectivityManager.TYPE_WIFI;
}
public static boolean haveInternet(Context context) {
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(
Context.CONNECTIVITY_SERVICE);
final NetworkInfo networkInfo = cm == null ? null : cm.getActiveNetworkInfo();
return networkInfo != null && networkInfo.isConnectedOrConnecting();
}
public static String getLocalizedNumber(Context context, int number) {
Locale locale = Locale.getDefault();
boolean isArabicNames = QuranSettings.getInstance(context).isArabicNames();
boolean change = numberFormat == null ||
!locale.equals(lastLocale) ||
isArabicNames != isArabicFormatter;
if (change) {
numberFormat = isArabicNames ?
DecimalFormat.getIntegerInstance(new Locale("ar")) :
DecimalFormat.getIntegerInstance(locale);
lastLocale = locale;
isArabicFormatter = isArabicNames;
}
return numberFormat.format(number);
}
public static boolean isDualPages(Context context, QuranScreenInfo qsi) {
if (context != null && qsi != null) {
final Resources resources = context.getResources();
if (qsi.isDualPageMode(context) &&
resources.getConfiguration().orientation ==
Configuration.ORIENTATION_LANDSCAPE) {
final SharedPreferences prefs =
PreferenceManager.getDefaultSharedPreferences(context);
return prefs.getBoolean(Constants.PREF_DUAL_PAGE_ENABLED,
resources.getBoolean(R.bool.use_tablet_interface_by_default));
}
}
return false;
}
/**
* Is this a tablet that has the "dual pages" option set?
* @param context the context
* @param qsi the QuranScreenInfo instance
* @return whether or not this is a tablet with the "dual pages" option set, irrespective of
* the current orientation of the device.
*/
public static boolean isDualPagesInLandscape(
@NonNull Context context, @NonNull QuranScreenInfo qsi) {
if (qsi.isDualPageMode(context)) {
final SharedPreferences prefs =
PreferenceManager.getDefaultSharedPreferences(context);
final Resources resources = context.getResources();
return prefs.getBoolean(Constants.PREF_DUAL_PAGE_ENABLED,
resources.getBoolean(R.bool.use_tablet_interface_by_default));
}
return false;
}
@WorkerThread
public static String getDebugInfo(Context context){
StringBuilder builder = new StringBuilder();
builder.append("Android SDK Version: ").append(Build.VERSION.SDK_INT);
String location = QuranSettings.getInstance(context).getAppCustomLocation();
builder.append("\nApp Location:").append(location);
try {
File file = new File(location);
builder.append("\n App Location Directory ")
.append(file.exists() ? "exists" : "doesn't exist")
.append("\n Image zip files:");
String[] list = file.list();
for (String fileName : list) {
if (fileName.contains("images_")) {
File f = new File(fileName);
builder.append("\n file: ").append(fileName).append("\tlength: ").append(f.length());
}
}
} catch (Exception e) {
builder.append("Exception trying to list files")
.append(e);
}
QuranScreenInfo info = QuranScreenInfo.getInstance();
if (info != null){
builder.append("\nDisplay: ").append(info.getWidthParam());
if (info.isDualPageMode(context)){
builder.append(", tablet width: ").append(info.getWidthParam());
}
builder.append("\n");
}
int memClass = ((ActivityManager)context
.getSystemService(Context.ACTIVITY_SERVICE)).getMemoryClass();
builder.append("memory class: ").append(memClass).append("\n\n");
return builder.toString();
}
}