package com.lgq.rssreader.core; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.MalformedURLException; import java.util.Locale; import org.jsoup.Connection.Base; import com.google.gson.Gson; import com.lgq.rssreader.MainActivity; import com.lgq.rssreader.R; import com.lgq.rssreader.entity.Profile; import com.lgq.rssreader.entity.RssSettings; import com.lgq.rssreader.enums.DownloadMode; import com.lgq.rssreader.enums.Formatter; import com.lgq.rssreader.enums.Theme; import com.lgq.rssreader.enums.Token; import com.lgq.rssreader.utils.FileHelper; import android.annotation.SuppressLint; import android.app.AlarmManager; import android.app.AlertDialog; import android.app.Application; import android.app.PendingIntent; import android.content.Context; import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; import android.content.Intent; import android.content.SharedPreferences; import android.content.res.Configuration; import android.os.Build; import android.os.Build.VERSION; import android.preference.PreferenceManager; import android.view.ViewConfiguration; import android.widget.Toast; public class ReaderApp extends Application{ private static Context context; private static RssSettings settings; private Locale locale; private static SDCardListener fontListener; private static SDCardListener htmlListener; @Override public void onConfigurationChanged(Configuration newConfig) { Locale locale = getLocaleFromPref(); Locale.setDefault(locale); overwriteConfigurationLocale(newConfig, locale); super.onConfigurationChanged(newConfig); } public void setLocale() { Locale locale = getLocaleFromPref(); Locale.setDefault(locale); Configuration config = getBaseContext().getResources().getConfiguration(); overwriteConfigurationLocale(config, locale); } private void overwriteConfigurationLocale(Configuration config, Locale locale) { config.locale = locale; getBaseContext().getResources() .updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics()); } private Locale getLocaleFromPref(){ String view_lang = ReaderApp.getPreferences().getString("view_lang", ""); if(view_lang.equals("zh_CN")) return Locale.CHINA; if(view_lang.equals("en")) return Locale.ENGLISH; return Locale.getDefault(); } @Override public void onCreate() { super.onCreate(); Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() { @Override public void uncaughtException(Thread paramThread, Throwable paramThrowable) { String sDStateString = android.os.Environment.getExternalStorageState(); if (sDStateString.equals(android.os.Environment.MEDIA_MOUNTED)) { try { File SDFile = android.os.Environment.getExternalStorageDirectory(); File dir = new File(SDFile.getAbsolutePath() + Config.ERRORLOG_LOCATION); if (!dir.exists()) { dir.mkdirs(); } File myFile = new File(SDFile.getAbsolutePath() + Config.ERRORLOG_LOCATION + String.valueOf(System.currentTimeMillis()) + ".txt"); myFile.createNewFile(); FileOutputStream outputStream = new FileOutputStream(myFile); StringBuilder error = new StringBuilder(); error.append("Error msg:" + paramThrowable.getMessage() + "\r\n"); error.append("Error throwable:" + paramThrowable.toString() + "\r\n"); for(StackTraceElement element : paramThrowable.getStackTrace()){ error.append(element.toString() + "\r\n"); } if(paramThrowable.getCause() != null){ error.append("Caused by:" + paramThrowable.getCause().toString() + "\r\n"); error.append("Error caused:" + paramThrowable.getCause().toString() + "\r\n"); for(StackTraceElement element : paramThrowable.getCause().getStackTrace()){ error.append(element.toString() + "\r\n"); } } outputStream.write(error.toString().getBytes("utf-8")); outputStream.close(); Toast.makeText(ReaderApp.getAppContext(), "很抱歉,程序出现异常,即将退出.", Toast.LENGTH_SHORT).show(); Intent intent = new Intent(ReaderApp.getAppContext(), MainActivity.class); PendingIntent restartIntent = PendingIntent.getActivity(ReaderApp.getAppContext(), 0, intent, Intent.FLAG_ACTIVITY_NEW_TASK); //退出程序 AlarmManager mgr = (AlarmManager)ReaderApp.getAppContext().getSystemService(Context.ALARM_SERVICE); mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 1000, restartIntent); // 1秒钟后重启应用 System.exit(0); } catch (Exception e) { e.printStackTrace(); }// end of try } // new AlertDialog.Builder(ReaderApp.getAppContext()) // .setTitle(ReaderApp.getAppContext().getResources().getString(R.string.app_name)) // .setMessage(ReaderApp.getAppContext().getResources().getString(R.string.error)) // .setPositiveButton(ReaderApp.getAppContext().getResources().getString(R.string.com_btn_ok), new OnClickListener(){ // // @Override // public void onClick(DialogInterface dialog, int which) { // System.exit(0); // Intent intent = new Intent(ReaderApp.getAppContext(), MainActivity.class); // intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); // startActivity(intent); // } // }) // .show(); } }); ReaderApp.context = getApplicationContext(); fontListener = new SDCardListener(Config.FONTS_LOCATION); fontListener.startWatching(); htmlListener = new SDCardListener(Config.HTML_LOCATION); htmlListener.startWatching(); } public static void stopListener() { fontListener.stopWatching(); htmlListener.stopWatching(); } public static Context getAppContext() { return ReaderApp.context; } public static SharedPreferences getPreferences(){ return ReaderApp.getAppContext().getSharedPreferences("RssReader", 0); } public static Profile getProfile(){ String profile = ReaderApp.getPreferences().getString("Profile", ""); if(profile.length() == 0) return null; Gson gson = new Gson(); return gson.fromJson(profile, Profile.class); } public static void setProfile(Profile p){ Gson gson = new Gson(); String profile = gson.toJson(p); ReaderApp.getPreferences().edit().putString("Profile", profile).commit(); } public static String getToken(Token token){ return ReaderApp.getPreferences().getString(token.toString(), ""); } public static void setToken(Token token, String val){ ReaderApp.getPreferences().edit().putString(token.toString(), val).commit(); } public static void saveSettings() { // SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(context); // // if(settings != null){ // pref.edit().putBoolean("operation_openasread", settings.MarkAsReadWhenView).commit(); // pref.edit().putBoolean("oepration_defaulticon", settings.UseDefaultIcon).commit(); // pref.edit().putBoolean("operation_roration", settings.EnableRotation).commit(); // pref.edit().putBoolean("operation_confirmallread", settings.ConfirmExit).commit(); // pref.edit().putBoolean("operation_seperatevideo", settings.EnableSeperateClip).commit(); // // pref.edit().putString("format_font", String.valueOf(settings.FontSize)).commit(); // pref.edit().putString("format_line", String.valueOf(settings.LineHeight)).commit(); // pref.edit().putString("format_type", String.valueOf(settings.Formatter.ordinal())).commit(); // // pref.edit().putString("cache_numbers", String.valueOf(settings.NumPerRequest)).commit(); // pref.edit().putBoolean("cache_wifi", settings.SyncOnlyWifi).commit(); // pref.edit().putBoolean("cache_image", settings.EnableCacheImage).commit(); // // pref.edit().putString("view_imgnum", String.valueOf(settings.ImgLoadNum)).commit(); // pref.edit().putBoolean("view_showallchannel", settings.ShowAllFeeds).commit(); // pref.edit().putBoolean("view_showallitem", settings.ShowAllItems).commit(); // pref.edit().putBoolean("view_noimage", settings.NoImageMode).commit(); // // pref.edit().putBoolean("sync_on_start", settings.AutoSync).commit(); // pref.edit().putBoolean("sync_shake", settings.EnableShakeToUpdate).commit(); // pref.edit().putBoolean("sync_vibrate", settings.EnableVibrate).commit(); // pref.edit().putBoolean("sync_sound", settings.EnableSound).commit(); // } settings = null; } @SuppressLint("NewApi") public static RssSettings getSettings(){ SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(context); if(settings == null){ settings = new RssSettings(); settings.MarkAsReadWhenView = pref.getBoolean("operation_openasread", true); settings.UseDefaultIcon = pref.getBoolean("oepration_defaulticon", false); settings.EnableRotation = pref.getBoolean("operation_roration", false); settings.ConfirmExit = pref.getBoolean("operation_confirmallread", true); settings.EnableSeperateClip = pref.getBoolean("operation_seperatevideo", true); settings.FontSize = Integer.parseInt(pref.getString("format_fontsize", "14")) > 150 ? 150 :Integer.parseInt(pref.getString("format_fontsize", "14")); settings.Font = pref.getInt("format_font", 0); settings.LineHeight = Integer.parseInt(pref.getString("format_line", "150")); settings.Formatter = Formatter.values()[Integer.parseInt(pref.getString("format_type", "1"))]; settings.NumPerRequest = Integer.parseInt(pref.getString("cache_numbers", "30")); settings.SyncOnlyWifi = pref.getBoolean("cache_wifi", false); settings.EnableCacheImage = pref.getBoolean("cache_image", false); settings.CacheSize = Integer.parseInt(pref.getString("cache_size", "400")); settings.ImgLoadNum = Integer.parseInt(pref.getString("view_imgnum", "10")); settings.ShowAllFeeds = pref.getBoolean("view_showallchannel", true); settings.ShowAllItems = pref.getBoolean("view_showallitem", true); settings.NoImageMode = pref.getBoolean("view_noimage", false); if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) settings.FullScreen = pref.getBoolean("view_fullscreen", !ViewConfiguration.get(ReaderApp.context).hasPermanentMenuKey()); else settings.FullScreen = pref.getBoolean("view_fullscreen", false); settings.BackgroundColor = pref.getString("view_backgroundcolor", "#ffffffff"); settings.FontColor = pref.getString("view_foregroundcolor", "#ff000000"); settings.Brightness = pref.getInt("view_brightness", 100); settings.Theme = Theme.values()[pref.getInt("view_theme", 0)]; settings.MenuShake = pref.getBoolean("MenuShake", false); settings.AutoSync = pref.getBoolean("sync_on_start", true); settings.EnableShakeToUpdate = pref.getBoolean("sync_shake", false); settings.EnableVibrate = pref.getBoolean("sync_vibrate", true); settings.EnableSound = pref.getBoolean("sync_sound", true); settings.DownloadPolice = DownloadMode.values()[Integer.parseInt(pref.getString("download_police", "2"))]; settings.DownloadOnlyWifi = pref.getBoolean("download_wifi", true); settings.DownloadPeriod = Integer.parseInt(pref.getString("download_period", "3")); settings.DownloadTime = pref.getString("download_time", "18:00"); } return settings; } }