package com.mcxiaoke.minicat.util;
import android.app.Activity;
import android.app.ActivityManager;
import android.app.ActivityManager.RunningServiceInfo;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
import android.database.Cursor;
import android.media.MediaScannerConnection;
import android.net.Uri;
import android.text.TextPaint;
import android.util.Log;
import android.view.Gravity;
import android.view.WindowManager;
import android.view.inputmethod.InputMethodManager;
import android.webkit.MimeTypeMap;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.RelativeLayout;
import android.widget.RelativeLayout.LayoutParams;
import android.widget.TextView;
import android.widget.Toast;
import com.mcxiaoke.minicat.AppContext;
import com.mcxiaoke.minicat.controller.DataController;
import com.mcxiaoke.minicat.dao.model.DirectMessageModel;
import com.mcxiaoke.minicat.dao.model.IBaseColumns;
import java.io.File;
import java.util.Collection;
import java.util.List;
/**
* 网络连接包需要用到的一些静态工具函数
*
* @author mcxiaoke
* @version 3.7 2012.02.22
*/
public final class Utils {
private static final String TAG = "Utils";
/**
* @param c 集合
* @return 判断集合对象是否为空
*/
public static boolean isEmpty(Collection<?> c) {
return c == null || c.size() == 0;
}
public static boolean isEmpty(String str) {
return str == null || str == "";
}
public static void hideKeyboard(final Context context, final EditText input) {
InputMethodManager imm = (InputMethodManager) context
.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(input.getWindowToken(), 0);
}
public static ProgressBar createProgress(Context context) {
ProgressBar p = new ProgressBar(context);
p.setIndeterminate(true);
LayoutParams lp = new LayoutParams(40, 40);
lp.addRule(RelativeLayout.CENTER_IN_PARENT);
p.setLayoutParams(lp);
return p;
}
public static String getDmSinceId(Cursor c) {
if (c != null && c.moveToFirst()) {
final DirectMessageModel dm = DirectMessageModel.from(c);
if (dm != null) {
if (AppContext.DEBUG) {
Log.d(TAG, "getDmSinceId() dm=" + dm);
}
return dm.getId();
}
}
return null;
}
public static String getMaxId(Cursor c) {
if (c != null && c.moveToLast()) {
return DataController.parseString(c, IBaseColumns.ID);
}
return null;
}
public static String getSinceId(Cursor c) {
if (c != null && c.moveToFirst()) {
return DataController.parseString(c, IBaseColumns.ID);
}
return null;
}
public static void notify(Context context, CharSequence text) {
final Toast toast = Toast.makeText(context, text, Toast.LENGTH_SHORT);
toast.show();
}
public static void notifyLong(Context context, CharSequence text) {
final Toast toast = Toast.makeText(context, text, Toast.LENGTH_LONG);
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
}
public static void notify(Context context, int resId) {
final Toast toast = Toast.makeText(context, resId, Toast.LENGTH_SHORT);
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
}
public static void open(Context context, final String fileName) {
String mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(
getExtension(fileName));
if (mimeType != null) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(new File(fileName)), mimeType);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
}
}
public static String getExtension(String filename) {
String filenameArray[] = filename.split("\\.");
return filenameArray[filenameArray.length - 1].toLowerCase();
}
public static void logTime(String event, long time) {
Log.e("Timer", event + " use time: " + time);
}
public static float easeOut(float time, float start, float end,
float duration) {
return end * ((time = time / duration - 1) * time * time + 1) + start;
}
public static void setFullScreen(final Activity activity,
final boolean fullscreen) {
if (fullscreen) {
activity.getWindow().addFlags(
WindowManager.LayoutParams.FLAG_FULLSCREEN);
activity.getWindow().clearFlags(
WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
} else {
activity.getWindow().addFlags(
WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
activity.getWindow().clearFlags(
WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
}
public static void setPortraitOrientation(final Activity activity,
final boolean portrait) {
if (portrait) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
} else {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
}
}
public static void lockScreenOrientation(final Activity context) {
boolean portrait = false;
if (portrait) {
context.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
} else {
if (context.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
context.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
if (context.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
context.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
}
}
public static void unlockScreenOrientation(final Activity context) {
boolean portrait = false;
if (!portrait) {
context.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
}
}
public static void setBoldText(final TextView tv) {
TextPaint tp = tv.getPaint();
tp.setFakeBoldText(true);
}
/**
* Checks whether the recording service is currently running.
*
* @param ctx the current context
* @return true if the service is running, false otherwise
*/
public static boolean isServiceRunning(Context ctx, Class<?> cls) {
ActivityManager activityManager = (ActivityManager) ctx
.getSystemService(Context.ACTIVITY_SERVICE);
List<RunningServiceInfo> services = activityManager
.getRunningServices(Integer.MAX_VALUE);
for (RunningServiceInfo serviceInfo : services) {
ComponentName componentName = serviceInfo.service;
String serviceName = componentName.getClassName();
if (serviceName.equals(cls.getName())) {
return true;
}
}
return false;
}
public static void checkAuthorization(Activity context, int statusCode) {
if (statusCode == 401) {
AppContext.doLogin(context);
context.finish();
}
}
public static void mediaScan(Context context, Uri uri) {
Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
intent.setData(uri);
context.sendBroadcast(intent);
}
// another media scan way
public static void addToMediaStore(Context context, File file) {
String[] path = new String[]{file.getPath()};
MediaScannerConnection.scanFile(context, path, null, null);
}
}