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; import com.robert.maps.applib.tileprovider.FSCacheProvider; public class InternalCachePreference extends Preference { private Button btnClear; private ExecutorService mThreadExecutor = Executors.newSingleThreadExecutor(new SimpleThreadFactory("InternalCachePreference")); private ProgressDialog mProgressDialog; private SimpleInvalidationHandler mHandler; private FSCacheProvider mFSCacheProvider; public InternalCachePreference(Context context, AttributeSet attrs) { super(context, attrs); setWidgetLayoutResource(R.layout.preference_widget_btn_clear); mHandler = new SimpleInvalidationHandler(); final File folder = Ut.getRMapsCacheTilesDir(context); mFSCacheProvider = new FSCacheProvider(folder, mHandler); } @Override protected void onBindView(View view) { super.onBindView(view); btnClear = (Button) view.findViewById(R.id.btnClear); btnClear.setOnClickListener(new OnClickListener() { public void onClick(View v) { mProgressDialog = Ut.ShowWaitDialog(getContext()); mThreadExecutor.execute(new Runnable() { public void run() { mFSCacheProvider.clearCache(); Message.obtain(InternalCachePreference.this.mHandler).sendToTarget(); InternalCachePreference.this.mProgressDialog.dismiss(); } }); } }); } private class SimpleInvalidationHandler extends Handler { @Override public void handleMessage(final Message msg) { InternalCachePreference.this.setSummary(String.format(InternalCachePreference.this.getContext().getString(R.string.pref_internalcache_summary), (int) mFSCacheProvider.getUsedCacheSpace() / 1024)); } } }