package com.stanleycen.facebookanalytics; import android.app.AlertDialog; import android.app.ProgressDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.database.sqlite.SQLiteDatabase; import android.os.AsyncTask; import android.os.Handler; import android.os.Message; import android.os.Messenger; import android.view.LayoutInflater; import android.view.View; import android.widget.Button; import android.widget.ProgressBar; import android.widget.TextView; public class CardUpdate implements CardItem { private int viewType; CardUpdateHolder holder; public int getViewType() { return viewType; } public CardUpdate(int viewType) { this.viewType = viewType; } @Override public boolean isEnabled() { return false; } @Override public View getView(LayoutInflater inflater, View convertView, int position, final Context context) { View v = convertView; if (v == null) { v = (View) inflater.inflate(R.layout.card_update, null); holder = new CardUpdateHolder(); holder.status = (TextView) v.findViewById(R.id.status); holder.update = (Button) v.findViewById(R.id.button_update); holder.delete = (Button) v.findViewById(R.id.button_delete); holder.bar = (ProgressBar) v.findViewById(R.id.progressBar); holder.context = context; v.setTag(holder); } else { holder = (CardUpdateHolder) v.getTag(); } GlobalApp.get().updateState.holder = holder; reloadControlState(); setUpdateClickListener(context); setClearClickListener(context); return v; } private class ClearTask extends AsyncTask<Void, Void, Void> { ProgressDialog dialog; Context ctx; public ClearTask(final Context context) { dialog = new ProgressDialog(context); this.ctx = context; } @Override protected void onPreExecute() { dialog.setMessage("Clearing data"); dialog.show(); super.onPreExecute(); } @Override protected Void doInBackground(Void... arg0) { DatabaseHandler dbHelper = GlobalApp.get().db; SQLiteDatabase db = dbHelper.getWritableDatabase(); db.beginTransaction(); try { dbHelper.clearAllTables(db); db.setTransactionSuccessful(); } catch (Exception e) { } finally { db.endTransaction(); } GlobalApp.get().fb.fbData = new FBData(); return null; } @Override protected void onPostExecute(Void result) { dialog.dismiss(); super.onPostExecute(result); reloadFragment(holder.context); } } ; private void setClearClickListener(final Context context) { holder.delete.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { new AlertDialog.Builder(context).setTitle("Clear data?") .setMessage("This cannot be undone.") .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { new ClearTask(context).execute(); } }) .setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { } }).show(); } }); } private void reloadControlState() { GlobalApp.UpdateState us = GlobalApp.get().updateState; CardUpdateHolder h = GlobalApp.get().updateState.holder; if (us.updating) { DataDownloaderService.ProgressBarUpdate pbu = GlobalApp.get().updateState.pbu; h.bar.setVisibility(View.VISIBLE); h.update.setEnabled(false); h.delete.setEnabled(false); if (pbu != null) { h.status.setText(pbu.content); h.bar.setIndeterminate(pbu.ongoing); if (!pbu.ongoing) h.bar.setProgress((int) (100.0F * (double) pbu.progress / (double) pbu.mx)); } } else { h.bar.setVisibility(View.GONE); h.status.setText(R.string.manage_data); h.update.setEnabled(true); h.delete.setEnabled(true); } } private void setUpdateClickListener(final Context context) { holder.update.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { new AlertDialog.Builder(context).setTitle("Update data?") .setMessage("This may take a while.") .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { GlobalApp.get().updateState.updating = true; reloadControlState(); holder.bar.setIndeterminate(true); Intent it = new Intent(context, DataDownloaderService.class); Handler handler = new Handler() { @Override public void handleMessage(Message msg) { if (msg.what == DataDownloaderService.MessageType.UPDATE_PROGRESSBAR.ordinal()) { GlobalApp.get().updateState.pbu = (DataDownloaderService.ProgressBarUpdate) msg.obj; reloadControlState(); } else if (msg.what == DataDownloaderService.MessageType.FINISHED_DOWNLOAD.ordinal()) { GlobalApp.get().updateState.updating = false; reloadControlState(); reloadFragment(holder.context); } } }; it.putExtra(DataDownloaderService.EXTRA_MESSENGER, new Messenger(handler)); context.startService(it); } }) .setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { } }).show(); } }); } private void reloadFragment(Context context) { try { MainActivity ma = (MainActivity) context; if (ma != null) ma.reloadPosition(MainActivity.DRAWER_DATA_COLLECT); } catch (Exception e) { } } public class CardUpdateHolder { public TextView status; public Button update; public Button delete; public ProgressBar bar; public Context context; } }