package tv.ac.fun;
import java.io.File;
import android.app.Activity;
import android.app.Application;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.SearchManager;
import android.app.SearchableInfo;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageInfo;
import android.content.res.Resources;
import android.os.Environment;
import android.preference.PreferenceManager;
import android.text.TextUtils;
import android.text.format.DateFormat;
import android.widget.Toast;
import com.actionbarsherlock.view.MenuItem;
import com.actionbarsherlock.widget.SearchView;
public class AcApp extends Application {
private static Context mContext;
private static Resources mResources;
private static String mSDcardDir, mExternalFilesDir;
private static AcApp instance;
private static SharedPreferences sp;
public static final String LOG = "Logs";
public static final String IMAGE = "images";
public static final String VIDEO = "Videos";
public static float density = 1f;
private static NotificationManager mNotiManager;
/**
* <b>NOTE:</b>在 <code>getApplicationContext()</code> 调用一次之后才能用这个方便的方法
*/
public static AcApp instance() {
return instance;
}
public void onCreate() {
super.onCreate();
Thread.currentThread().setUncaughtExceptionHandler(CrashExceptionHandler.instance());
mContext = instance = this;
mResources = getResources();
density = mResources.getDisplayMetrics().density;
sp = PreferenceManager.getDefaultSharedPreferences(mContext);
}
private String versionName = "";
public String getVersionName() {
if (TextUtils.isEmpty(versionName)) {
PackageInfo info = null;
try {
info = getPackageManager().getPackageInfo(getPackageName(), 0);
versionName = info.versionName;
return versionName;
} catch (Exception e) {}
return "";
} else
return versionName;
}
// ====================================
// config SharedPreferences
// ====================================
public static SharedPreferences getConfig(){
return sp;
}
public static void putString(String key, String value){
sp.edit().putString(key, value).commit();
}
public static void putBoolean(String key, boolean value){
sp.edit().putBoolean(key, value).commit();
}
public static void putInt(String key, int value){
sp.edit().putInt(key, value).commit();
}
public static void putFloat(String key, float value){
sp.edit().putFloat(key, value).commit();
}
/**
* 获得视频文件下载路径,默认为/sdcard/Download/AcFun/videos/{aid}/{vid}
* @return
*/
public static File getDownloadPath(String aid, String vid){
File path = new File(sp.getString("download_path", getSDcardDir()+"/Download/AcFun/"+VIDEO+"/"+aid+"/"+vid));
//path.mkdirs();
return path;
}
/**
* 获得首页展示模式
* @return 1.最新发布 2.热门 3.最新回复
*/
public static String getHomeDisplayMode(){
return sp.getString("home_display_mode", "1");
}
/**
* 0为标清 1高清优先 2 超清优先
* @return
*/
public static int getParseMode(){
int parseMode = Integer.parseInt(sp.getString("parse_mode", "0"));
return parseMode;
}
// ====================================
// statics
// ====================================
public static Context context() {
return mContext;
}
public static Resources getR() {
return mResources;
}
/**
* 外部存储是否可用
*/
public static boolean isExternalStorageAvailable() {
return Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState());
}
/**
* 获得外部存储的files目录 <br/>
* <b>NOTE:</b>请先调用 {@link #isExternalStorageAvailable()} 判断是否可用
*
* @return
*/
public static String getExternalFilesDir() {
if (mExternalFilesDir == null)
mExternalFilesDir = mContext.getExternalFilesDir(null).getAbsolutePath();
return mExternalFilesDir;
}
/**
* 获得缓存目录 <br>
* <b>NOTE:</b>请先调用 {@link #isExternalStorageAvailable()} 判断是否可用
* @param type {@link #IMAGE} {@link #VIDEO} and so on.
* @return
*/
public static File getExternalCacheDir(String type){
File cacheDir = new File(mContext.getExternalCacheDir(),type);
cacheDir.mkdirs();
return cacheDir;
}
/**
* 获得SDcard根目录 <br>
* <b>NOTE:</b>请先调用 {@link #isExternalStorageAvailable()} 判断是否可用
*
* @return SDcard Dir
*/
public static String getSDcardDir() {
if (mSDcardDir == null)
mSDcardDir = Environment.getExternalStorageDirectory().getAbsolutePath();
return mSDcardDir;
}
/**
* log存放路径
* @return
*/
public static String getLogsDir(){
File folder = null;
if(isExternalStorageAvailable())
folder = new File(getExternalFilesDir(),LOG);
else
folder = new File(mContext.getFilesDir(),LOG);
folder.mkdirs();
return folder.getAbsolutePath();
}
/**
* 获取当前默认的日期时间显示
* eg. 20130411-110445
* @return
*/
public static String getCurDateTime(){
return getCurDateTime("yyyyMMdd-kkmmss");
}
/**
* 获取当前日期时间
* @param format {@link android.text.format.DateFormat}
* @return
*/
public static String getCurDateTime(CharSequence format){
return DateFormat.format(format,System.currentTimeMillis()).toString();
}
public static void showToast(String msg){
Toast.makeText(mContext, msg, Toast.LENGTH_SHORT).show();
}
public static void addSearchView(Activity activity, com.actionbarsherlock.view.Menu menu) {
SearchView searchView = new SearchView(activity);
searchView.setSubmitButtonEnabled(true);
SearchManager searchManager = (SearchManager) activity.getSystemService(Context.SEARCH_SERVICE);
SearchableInfo info = searchManager.getSearchableInfo(activity.getComponentName());
searchView.setSearchableInfo(info);
menu.add("Search").setIcon(R.drawable.ic_action_search).setActionView(searchView)
.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);
}
public static void showNotification(Intent mIntent, int notificationId, String text,int icon, CharSequence title){
showNotification(mIntent, notificationId, text, icon, title, Notification.FLAG_AUTO_CANCEL);
}
@SuppressWarnings("deprecation")
public static void showNotification(Intent mIntent, int notificationId, String text,int icon, CharSequence title,int flag){
Notification notification = new Notification(icon,text,System.currentTimeMillis());
mIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent contentIntent = PendingIntent.getActivity(mContext, 0, mIntent, PendingIntent.FLAG_UPDATE_CURRENT);
notification.setLatestEventInfo(mContext, title, text, contentIntent);
notification.flags |= flag;
if(mNotiManager == null)
mNotiManager = (NotificationManager) mContext.getSystemService(NOTIFICATION_SERVICE);
mNotiManager.notify(notificationId, notification);
}
}