package com.dwdesign.tweetings.preference; import com.dwdesign.tweetings.Constants; import com.dwdesign.tweetings.R; import com.dwdesign.tweetings.provider.RecentSearchProvider; import com.dwdesign.tweetings.provider.TweetStore.CachedTrends; import com.dwdesign.tweetings.provider.TweetStore.CachedUsers; import com.dwdesign.tweetings.provider.TweetStore.DirectMessages; import com.dwdesign.tweetings.provider.TweetStore.Mentions; import com.dwdesign.tweetings.provider.TweetStore.Statuses; import android.app.ProgressDialog; import android.content.ContentResolver; import android.content.Context; import android.os.AsyncTask; import android.os.AsyncTask.Status; import android.preference.Preference; import android.preference.Preference.OnPreferenceClickListener; import android.provider.SearchRecentSuggestions; import android.util.AttributeSet; public class ClearDatabasesPreference extends Preference implements Constants, OnPreferenceClickListener { private ClearCacheTask mClearCacheTask; public ClearDatabasesPreference(final Context context) { this(context, null); } public ClearDatabasesPreference(final Context context, final AttributeSet attrs) { this(context, attrs, android.R.attr.preferenceStyle); } public ClearDatabasesPreference(final Context context, final AttributeSet attrs, final int defStyle) { super(context, attrs, defStyle); setOnPreferenceClickListener(this); } @Override public boolean onPreferenceClick(final Preference preference) { if (mClearCacheTask == null || mClearCacheTask.getStatus() != Status.RUNNING) { mClearCacheTask = new ClearCacheTask(getContext()); mClearCacheTask.execute(); } return true; } static class ClearCacheTask extends AsyncTask<Void, Void, Void> { private final Context context; private final ProgressDialog mProgress; public ClearCacheTask(final Context context) { this.context = context; mProgress = new ProgressDialog(context); } @Override protected Void doInBackground(final Void... args) { if (context == null) return null; final ContentResolver resolver = context.getContentResolver(); final SearchRecentSuggestions suggestions = new SearchRecentSuggestions(context, RecentSearchProvider.AUTHORITY, RecentSearchProvider.MODE); resolver.delete(Statuses.CONTENT_URI, null, null); resolver.delete(Mentions.CONTENT_URI, null, null); resolver.delete(CachedUsers.CONTENT_URI, null, null); resolver.delete(DirectMessages.Inbox.CONTENT_URI, null, null); resolver.delete(DirectMessages.Outbox.CONTENT_URI, null, null); resolver.delete(CachedTrends.Daily.CONTENT_URI, null, null); resolver.delete(CachedTrends.Weekly.CONTENT_URI, null, null); resolver.delete(CachedTrends.Local.CONTENT_URI, null, null); suggestions.clearHistory(); return null; } @Override protected void onPostExecute(final Void result) { super.onPostExecute(result); if (mProgress != null && mProgress.isShowing()) { mProgress.dismiss(); } } @Override protected void onPreExecute() { if (mProgress != null && mProgress.isShowing()) { mProgress.dismiss(); } mProgress.setMessage(context.getString(R.string.please_wait)); mProgress.setCancelable(false); mProgress.show(); super.onPreExecute(); } } }