package com.aincc.seoulexcursion.ui.scene.setting; import java.io.IOException; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.res.Configuration; import android.graphics.Typeface; import android.os.AsyncTask; import android.os.Bundle; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.CompoundButton.OnCheckedChangeListener; import android.widget.RelativeLayout; import android.widget.TextView; import com.aincc.lib.common.annotation.InjectView; import com.aincc.lib.util.BitmapDiskLruCache; import com.aincc.lib.util.PreferencesUtil; import com.aincc.lib.util.Utils; import com.aincc.seoulexcursion.App; import com.aincc.seoulexcursion.R; import com.aincc.seoulexcursion.ui.Constants; import com.aincc.seoulexcursion.ui.SeoulBaseActivity; import com.aincc.seoulexcursion.ui.widget.Navibar; import com.aincc.seoulexcursion.util.Logger; import com.aincc.seoulexcursion.util.SeoulFont; /** * * <h3><b>SettingActivity</b></h3></br> * * 설정 화면 * * @author aincc@barusoft.com * @version 1.0.0 * @since 1.0.0 */ public class SettingActivity extends SeoulBaseActivity implements OnClickListener, OnCheckedChangeListener { /** * 상단 네비게이션 바 */ @InjectView private Navibar navibar; /** * 캐시 삭제 버튼 */ @InjectView(id = R.id.setting_delete_diskcache) private RelativeLayout deleteCache; /** * 디스크 캐시 사용여부 설정 */ @InjectView(id = R.id.setting_toggle_diskcache) private RelativeLayout toggleCache; /** * 디스크 캐시 사용여부 설정 체크박스 */ @InjectView(id = R.id.setting_toggle_diskcache_check) private CheckBox toggleCacheCheck; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_setting); mappingViews(this); initializeUI(); } @Override protected void initializeUI() { super.initializeUI(); deleteCache.setOnClickListener(this); toggleCache.setOnClickListener(this); toggleCacheCheck.setChecked(PreferencesUtil.getBoolean(context, Constants.PREFS_SETTING_FILE, Constants.PREFS_KEY_DISKCACHE)); toggleCacheCheck.setOnCheckedChangeListener(this); initializeFont(SeoulFont.getInstance().getSeoulHangang()); StringBuilder sb = new StringBuilder(); sb.append(versionSection.getText()); sb.append(" (").append(string(R.string.setting_current_version)); sb.append(" : " + string(R.string.app_name) + " v"); sb.append(Utils.getProgramVersion(context)); sb.append(")"); versionSection.setText(sb.toString()); } @Override protected void initializeNavibar() { super.initializeNavibar(); navibar.setTypeface(SeoulFont.getInstance().getSeoulHangang()); navibar.setActionBack(new OnClickListener() { @Override public void onClick(View v) { finish(); } }); navibar.setActionFuncVisible(View.INVISIBLE); /** * 버전정보 추가 * * @since 1.3.0 */ navibar.setTitle(string(R.string.title_activity_setting) + " v" + Utils.getProgramVersion(this)); } @Override public void finish() { super.finish(); } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); initializeUI(); } @Override public boolean onCreateOptionsMenu(Menu menu) { return false; } @Override protected void onResume() { super.onResume(); } @Override protected void onPause() { super.onPause(); } @Override protected void onStop() { super.onStop(); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.setting_delete_diskcache: alertAskDeleteCache(); break; case R.id.setting_toggle_diskcache: boolean current = PreferencesUtil.getBoolean(context, Constants.PREFS_SETTING_FILE, Constants.PREFS_KEY_DISKCACHE); current = !current; toggleCacheCheck.setChecked(current); PreferencesUtil.setBoolean(context, Constants.PREFS_SETTING_FILE, Constants.PREFS_KEY_DISKCACHE, current); App.setImageLoader(current); break; } } @Override public void onCheckedChanged(CompoundButton view, boolean checked) { Logger.d("onCheckedChanged : " + checked); switch (view.getId()) { case R.id.setting_toggle_diskcache_check: toggleCacheCheck.setChecked(checked); PreferencesUtil.setBoolean(context, Constants.PREFS_SETTING_FILE, Constants.PREFS_KEY_DISKCACHE, checked); break; } } /** * 디스크 캐시 삭제 팝업 * * @since 1.0.0 */ private void alertAskDeleteCache() { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setMessage(string(R.string.alert_msg_delete_diskcache)); builder.setPositiveButton(string(R.string.alert_btn_confirm), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { (new DeleteCacheTask()).execute(); } }).setNegativeButton(string(R.string.alert_btn_cancel), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }).create().show(); } /** * 작업 완료 팝업 * * @since 1.0.0 * @param msg * 메시지 리소스 아이디 */ private void alertComplete(int msg) { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setMessage(string(msg)); builder.setPositiveButton(string(R.string.alert_btn_close), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }).create().show(); } /** * * <h3><b>DeleteCacheTask</b></h3></br> * * 디스크 캐시 삭제 처리 * * @author aincc@barusoft.com * @version 1.0.0 * @since 1.0.0 */ class DeleteCacheTask extends AsyncTask<Void, Void, Void> { @Override protected void onPreExecute() { super.onPreExecute(); startProgress("", false, null, Constants.COLOR_BLACK); } @Override protected Void doInBackground(Void... params) { try { BitmapDiskLruCache.clearCache(getApplicationContext(), Constants.CACHE_DIR); BitmapDiskLruCache.clearCache(getApplicationContext(), "http"); } catch (IOException e) { e.printStackTrace(); } return null; } @Override protected void onPostExecute(Void result) { super.onPostExecute(result); stopProgress(); alertComplete(R.string.alert_msg_delete_diskcache_ok); } } @InjectView(id = R.id.setting_cache) private TextView cacheSection; @InjectView(id = R.id.setting_delete_diskcache_title) private TextView cacheDeleteTitle; @InjectView(id = R.id.setting_delete_diskcache_desc) private TextView cacheDeleteDesc; @InjectView(id = R.id.setting_toggle_diskcache_title) private TextView cacheToggleTitle; @InjectView(id = R.id.setting_toggle_diskcache_desc) private TextView cacheToggleDesc; @InjectView(id = R.id.setting_version) private TextView versionSection; @InjectView(id = R.id.setting_version_title_20120830) private TextView versionTitle_20120830; @InjectView(id = R.id.setting_version_desc_20120830) private TextView versionDesc_20120830; @InjectView(id = R.id.setting_intro) private TextView introSection; @InjectView(id = R.id.setting_intro_desc) private TextView introDesc; @InjectView(id = R.id.setting_author) private TextView author; @InjectView(id = R.id.setting_report) private TextView report; private void initializeFont(Typeface tf) { cacheSection.setTypeface(tf); cacheDeleteTitle.setTypeface(tf); cacheDeleteDesc.setTypeface(tf); cacheToggleTitle.setTypeface(tf); cacheToggleDesc.setTypeface(tf); versionSection.setTypeface(tf); versionTitle_20120830.setTypeface(tf); versionDesc_20120830.setTypeface(tf); introSection.setTypeface(tf); introDesc.setTypeface(tf); author.setTypeface(tf); report.setTypeface(tf); } }