package org.qii.weiciyuan.ui.preference; import org.qii.weiciyuan.R; import org.qii.weiciyuan.support.debug.AppLogger; import org.qii.weiciyuan.support.file.FileManager; import org.qii.weiciyuan.support.lib.changelogdialog.ChangeLogDialog; import org.qii.weiciyuan.support.settinghelper.SettingUtility; import org.qii.weiciyuan.support.utils.GlobalContext; import org.qii.weiciyuan.ui.send.WriteWeiboActivity; import android.app.ActivityManager; import android.app.Dialog; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.media.MediaPlayer; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.os.Bundle; import android.os.Debug; import android.os.Environment; import android.preference.Preference; import android.preference.PreferenceCategory; import android.preference.PreferenceFragment; import android.preference.PreferenceScreen; import android.telephony.TelephonyManager; import android.text.TextUtils; import android.view.Window; import android.widget.ImageView; import android.widget.Toast; import java.io.File; /** * User: qii * Date: 12-9-29 */ public class AboutFragment extends PreferenceFragment { private static final String DEBUG_INFO = "pref_debug_info_key"; private BroadcastReceiver sdCardReceiver; private MediaPlayer mp; private boolean playing; private int blackMagicCount = 0; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setRetainInstance(false); addPreferencesFromResource(R.xml.about_pref); findPreference(SettingActivity.SUGGEST) .setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { Intent intent = new Intent(getActivity(), WriteWeiboActivity.class); intent.putExtra("token", GlobalContext.getInstance().getSpecialToken()); intent.putExtra("account", GlobalContext.getInstance().getAccountBean()); intent.putExtra("content", buildContent()); startActivity(intent); return true; } }); findPreference(SettingActivity.VERSION).setSummary(buildVersionInfo()); findPreference(SettingActivity.VERSION) .setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { ChangeLogDialog changeLogDialog = new ChangeLogDialog(getActivity()); changeLogDialog.show(); return true; } }); findPreference(SettingActivity.DONATE) .setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { Dialog dialog = new Dialog(getActivity(), R.style.UserAvatarDialog); dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); ImageView imageView = new ImageView(getActivity()); imageView.setImageResource(R.drawable.alipay); dialog.setContentView(imageView); dialog.show(); return true; } }); detectDebugPreference(); findPreference(SettingActivity.AUTHOR) .setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { blackMagicCount++; if (blackMagicCount > 3) { SettingUtility.setBlackMagicEnabled(); } if (mp != null && mp.isPlaying()) { mp.stop(); playing = false; return true; } if (mp == null || !playing) { mp = MediaPlayer.create(getActivity(), R.raw.star); } mp.start(); playing = true; Toast.makeText(getActivity(), "♩♪♫♬♭", Toast.LENGTH_SHORT).show(); return true; } }); buildCacheSummary(); buildLogSummary(); findPreference(SettingActivity.SAVED_PIC_PATH) .setSummary(Environment.getExternalStoragePublicDirectory( Environment.DIRECTORY_PICTURES).getAbsolutePath()); } private void detectDebugPreference() { Preference debugPreferenceCategory = (PreferenceCategory) findPreference(DEBUG_INFO); Preference debugPreference = findPreference(SettingActivity.DEBUG_MEM_INFO); Preference crashPreferenceCategory = findPreference( SettingActivity.CRASH); if (SettingUtility.isBlackMagicEnabled()) { Runtime rt = Runtime.getRuntime(); long vmAlloc = rt.totalMemory() - rt.freeMemory(); long nativeAlloc = Debug.getNativeHeapAllocatedSize(); String vmAllocStr = "VM Allocated " + formatMemoryText(vmAlloc); String nativeAllocStr = "Native Allocated " + formatMemoryText(nativeAlloc); ActivityManager am = (ActivityManager) getActivity() .getSystemService(Context.ACTIVITY_SERVICE); int memoryClass = am.getMemoryClass(); String result = "VM Max " + Integer.toString(memoryClass) + "MB"; debugPreference.setSummary( vmAllocStr + "," + nativeAllocStr + "," + result); crashPreferenceCategory.setOnPreferenceClickListener( new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { throw new IllegalArgumentException("about -> crash test"); } }); } else { PreferenceScreen screen = getPreferenceScreen(); screen.removePreference(debugPreferenceCategory); } } @Override public void onResume() { super.onResume(); sdCardReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { buildCacheSummary(); buildLogSummary(); } }; IntentFilter filter = new IntentFilter(); filter.addAction(Intent.ACTION_MEDIA_MOUNTED); filter.addAction(Intent.ACTION_MEDIA_UNMOUNTED); filter.addDataScheme("file"); getActivity().registerReceiver(sdCardReceiver, filter); } private void buildCacheSummary() { File cachedDir = GlobalContext.getInstance().getExternalCacheDir(); if (cachedDir != null) { findPreference(SettingActivity.CACHE_PATH).setSummary(cachedDir.getAbsolutePath()); } else { findPreference(SettingActivity.CACHE_PATH) .setSummary(getString(R.string.sd_card_in_not_mounted)); } } private void buildLogSummary() { File cachedDir = GlobalContext.getInstance().getExternalCacheDir(); if (cachedDir != null) { findPreference(SettingActivity.SAVED_LOG_PATH).setSummary(FileManager.getLogDir()); } else { findPreference(SettingActivity.SAVED_LOG_PATH) .setSummary(getString(R.string.sd_card_in_not_mounted)); } } @Override public void onPause() { super.onPause(); if (sdCardReceiver != null) { getActivity().unregisterReceiver(sdCardReceiver); } if (mp != null && mp.isPlaying()) { mp.stop(); playing = false; } } private String buildVersionInfo() { String version = ""; PackageManager packageManager = getActivity().getPackageManager(); PackageInfo packInfo = null; try { packInfo = packageManager.getPackageInfo(getActivity().getPackageName(), 0); } catch (PackageManager.NameNotFoundException e) { AppLogger.e(e.getMessage()); } if (packInfo != null) { version = packInfo.versionName + "(" + packInfo.versionCode + ")"; } if (!TextUtils.isEmpty(version)) { return version; } else { return ""; } } private String buildContent() { String network = ""; ConnectivityManager cm = (ConnectivityManager) getActivity().getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = cm.getActiveNetworkInfo(); if (networkInfo != null && networkInfo.isConnected()) { if (networkInfo.getType() == ConnectivityManager.TYPE_WIFI) { network = "Wifi"; } else if (networkInfo.getType() == ConnectivityManager.TYPE_MOBILE) { int subType = networkInfo.getSubtype(); if (subType == TelephonyManager.NETWORK_TYPE_GPRS) { network = "GPRS"; } } } return "@四次元App #四次元App反馈# " + android.os.Build.MANUFACTURER + " " + android.os.Build.MODEL + ",Android " + android.os.Build.VERSION.RELEASE + "," + network + " version:" + buildVersionInfo(); } private String formatMemoryText(long memory) { float memoryInMB = memory * 1f / 1024 / 1024; return String.format("%.1f MB", memoryInMB); } }