package com.robert.maps.applib.utils; import java.io.File; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import android.app.ProgressDialog; import android.content.Context; import android.os.Handler; import android.os.Message; import android.preference.Preference; import android.util.AttributeSet; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import com.robert.maps.applib.R; public class IndexPreference extends Preference { private Button btnClear; private Context mCtx; private File mDbFile; private ExecutorService mThreadExecutor = Executors.newSingleThreadExecutor(new SimpleThreadFactory("IndexPreference")); private ProgressDialog mProgressDialog; private SimpleInvalidationHandler mHandler; public IndexPreference(Context context, AttributeSet attrs) { super(context, attrs); mCtx = context; setWidgetLayoutResource(R.layout.preference_widget_btn_clear); final File folder = Ut.getRMapsMainDir(mCtx, "data"); mDbFile = new File(folder.getAbsolutePath()+"/index.db"); setSummary(String.format(mCtx.getString(R.string.pref_index_summary), (int) mDbFile .length() / 1024)); mHandler = new SimpleInvalidationHandler(); } @Override protected void onBindView(View view) { super.onBindView(view); btnClear = (Button) view.findViewById(R.id.btnClear); btnClear.setOnClickListener(new OnClickListener() { // @Override public void onClick(View v) { mProgressDialog = Ut.ShowWaitDialog(mCtx, 0); mThreadExecutor.execute(new Runnable(){ public void run() { if(IndexPreference.this.mDbFile.exists()) IndexPreference.this.mDbFile.delete(); Message.obtain(IndexPreference.this.mHandler).sendToTarget(); IndexPreference.this.mProgressDialog.dismiss(); }}); } }); } private class SimpleInvalidationHandler extends Handler { @Override public void handleMessage(final Message msg) { IndexPreference.this.setSummary(String.format(IndexPreference.this.mCtx .getString(R.string.pref_index_summary), (int) IndexPreference.this.mDbFile .length() / 1024)); } } }