2014-07-03 00:39:05 +02:00
|
|
|
/*
|
|
|
|
* This is the source code of Telegram for Android v. 1.4.x.
|
|
|
|
* It is licensed under GNU GPL v. 2 or later.
|
|
|
|
* You should have received a copy of the license in this archive (see LICENSE).
|
|
|
|
*
|
|
|
|
* Copyright Nikolai Kudashov, 2013-2014.
|
|
|
|
*/
|
|
|
|
|
|
|
|
package org.telegram.android;
|
|
|
|
|
|
|
|
import android.app.Activity;
|
|
|
|
import android.content.Context;
|
|
|
|
import android.content.pm.ActivityInfo;
|
|
|
|
import android.content.res.Configuration;
|
|
|
|
import android.graphics.Point;
|
|
|
|
import android.graphics.Typeface;
|
|
|
|
import android.os.Build;
|
|
|
|
import android.os.Environment;
|
|
|
|
import android.view.Display;
|
|
|
|
import android.view.Surface;
|
|
|
|
import android.view.View;
|
|
|
|
import android.view.WindowManager;
|
|
|
|
import android.view.inputmethod.InputMethodManager;
|
|
|
|
|
|
|
|
import org.telegram.messenger.FileLog;
|
|
|
|
import org.telegram.ui.ApplicationLoader;
|
|
|
|
|
|
|
|
import java.io.File;
|
|
|
|
import java.util.Hashtable;
|
|
|
|
|
|
|
|
public class AndroidUtilities {
|
|
|
|
private static final Hashtable<String, Typeface> typefaceCache = new Hashtable<String, Typeface>();
|
|
|
|
private static int prevOrientation = -10;
|
|
|
|
private static boolean waitingForSms = false;
|
|
|
|
private static final Integer smsLock = 2;
|
|
|
|
public static int externalCacheNotAvailableState = 0;
|
|
|
|
|
|
|
|
public static int statusBarHeight = 0;
|
|
|
|
public static float density = 1;
|
|
|
|
public static Point displaySize = new Point();
|
|
|
|
|
|
|
|
static {
|
|
|
|
density = ApplicationLoader.applicationContext.getResources().getDisplayMetrics().density;
|
|
|
|
checkDisplaySize();
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void lockOrientation(Activity activity) {
|
|
|
|
if (prevOrientation != -10) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
try {
|
|
|
|
prevOrientation = activity.getRequestedOrientation();
|
|
|
|
WindowManager manager = (WindowManager)activity.getSystemService(Activity.WINDOW_SERVICE);
|
|
|
|
if (manager != null && manager.getDefaultDisplay() != null) {
|
|
|
|
int rotation = manager.getDefaultDisplay().getRotation();
|
|
|
|
int orientation = activity.getResources().getConfiguration().orientation;
|
|
|
|
|
|
|
|
if (rotation == Surface.ROTATION_270) {
|
|
|
|
if (orientation == Configuration.ORIENTATION_PORTRAIT) {
|
|
|
|
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
|
|
|
|
} else {
|
|
|
|
if (Build.VERSION.SDK_INT >= 9) {
|
|
|
|
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
|
|
|
|
} else {
|
|
|
|
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else if (rotation == Surface.ROTATION_90) {
|
|
|
|
if (orientation == Configuration.ORIENTATION_PORTRAIT) {
|
|
|
|
if (Build.VERSION.SDK_INT >= 9) {
|
|
|
|
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT);
|
|
|
|
} else {
|
|
|
|
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
|
|
|
|
}
|
|
|
|
} else if (rotation == Surface.ROTATION_0) {
|
|
|
|
if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
|
|
|
|
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
|
|
|
|
} else {
|
|
|
|
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
|
|
|
|
if (Build.VERSION.SDK_INT >= 9) {
|
|
|
|
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
|
|
|
|
} else {
|
|
|
|
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
if (Build.VERSION.SDK_INT >= 9) {
|
|
|
|
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT);
|
|
|
|
} else {
|
|
|
|
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} catch (Exception e) {
|
|
|
|
FileLog.e("tmessages", e);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void unlockOrientation(Activity activity) {
|
|
|
|
try {
|
|
|
|
if (prevOrientation != -10) {
|
|
|
|
activity.setRequestedOrientation(prevOrientation);
|
|
|
|
prevOrientation = -10;
|
|
|
|
}
|
|
|
|
} catch (Exception e) {
|
|
|
|
FileLog.e("tmessages", e);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public static Typeface getTypeface(String assetPath) {
|
|
|
|
synchronized (typefaceCache) {
|
|
|
|
if (!typefaceCache.containsKey(assetPath)) {
|
|
|
|
try {
|
|
|
|
Typeface t = Typeface.createFromAsset(ApplicationLoader.applicationContext.getAssets(), assetPath);
|
|
|
|
typefaceCache.put(assetPath, t);
|
|
|
|
} catch (Exception e) {
|
|
|
|
FileLog.e("Typefaces", "Could not get typeface '" + assetPath + "' because " + e.getMessage());
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return typefaceCache.get(assetPath);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public static boolean isWaitingForSms() {
|
|
|
|
boolean value = false;
|
|
|
|
synchronized (smsLock) {
|
|
|
|
value = waitingForSms;
|
|
|
|
}
|
|
|
|
return value;
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void setWaitingForSms(boolean value) {
|
|
|
|
synchronized (smsLock) {
|
|
|
|
waitingForSms = value;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void showKeyboard(View view) {
|
|
|
|
if (view == null) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
InputMethodManager inputManager = (InputMethodManager)view.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
|
|
|
|
inputManager.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT);
|
|
|
|
|
|
|
|
((InputMethodManager) view.getContext().getSystemService(Context.INPUT_METHOD_SERVICE)).showSoftInput(view, 0);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static boolean isKeyboardShowed(View view) {
|
|
|
|
if (view == null) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
InputMethodManager inputManager = (InputMethodManager) view.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
|
|
|
|
return inputManager.isActive(view);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void hideKeyboard(View view) {
|
|
|
|
if (view == null) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
InputMethodManager imm = (InputMethodManager) view.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
|
|
|
|
if (!imm.isActive()) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static File getCacheDir() {
|
|
|
|
if (externalCacheNotAvailableState == 1 || externalCacheNotAvailableState == 0 && Environment.getExternalStorageState().startsWith(Environment.MEDIA_MOUNTED)) {
|
|
|
|
externalCacheNotAvailableState = 1;
|
2014-07-20 01:31:49 +02:00
|
|
|
try {
|
|
|
|
File file = ApplicationLoader.applicationContext.getExternalCacheDir();
|
|
|
|
if (file != null) {
|
|
|
|
return file;
|
|
|
|
}
|
|
|
|
} catch (Exception e) {
|
|
|
|
FileLog.e("tmessages", e);
|
2014-07-03 00:39:05 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
externalCacheNotAvailableState = 2;
|
2014-07-20 01:31:49 +02:00
|
|
|
try {
|
|
|
|
File file = ApplicationLoader.applicationContext.getCacheDir();
|
|
|
|
if (file != null) {
|
|
|
|
return file;
|
|
|
|
}
|
|
|
|
} catch (Exception e) {
|
|
|
|
FileLog.e("tmessages", e);
|
2014-07-03 00:39:05 +02:00
|
|
|
}
|
|
|
|
return new File("");
|
|
|
|
}
|
|
|
|
|
|
|
|
public static int dp(int value) {
|
|
|
|
return (int)(Math.max(1, density * value));
|
|
|
|
}
|
|
|
|
|
|
|
|
public static int dpf(float value) {
|
|
|
|
return (int)Math.ceil(density * value);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void checkDisplaySize() {
|
|
|
|
try {
|
|
|
|
WindowManager manager = (WindowManager)ApplicationLoader.applicationContext.getSystemService(Context.WINDOW_SERVICE);
|
|
|
|
if (manager != null) {
|
|
|
|
Display display = manager.getDefaultDisplay();
|
|
|
|
if (display != null) {
|
|
|
|
if(android.os.Build.VERSION.SDK_INT < 13) {
|
|
|
|
displaySize.set(display.getWidth(), display.getHeight());
|
|
|
|
} else {
|
|
|
|
display.getSize(displaySize);
|
|
|
|
}
|
|
|
|
FileLog.e("tmessages", "display size = " + displaySize.x + " " + displaySize.y);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} catch (Exception e) {
|
|
|
|
FileLog.e("tmessages", e);
|
|
|
|
}
|
|
|
|
}
|
2014-07-27 12:53:00 +02:00
|
|
|
|
|
|
|
public static long makeBroadcastId(int id) {
|
|
|
|
return 0x0000000100000000L | ((long)id & 0x00000000FFFFFFFFL);
|
|
|
|
}
|
2014-08-22 16:24:33 +02:00
|
|
|
|
|
|
|
public static void RunOnUIThread(Runnable runnable) {
|
|
|
|
ApplicationLoader.applicationHandler.post(runnable);
|
|
|
|
}
|
2014-07-03 00:39:05 +02:00
|
|
|
}
|