package com.example.wordbook.task; import android.app.Activity; import android.app.ProgressDialog; import android.os.AsyncTask; import android.util.Log; import com.example.wordbook.R; /** * 非同期タスクベースクラス */ public abstract class AsyncTaskBase extends AsyncTask { /** TAG */ private static final String TAG = AsyncTaskBase.class.getSimpleName(); /** アクティビティ */ protected Activity mActivity = null; /** 進捗ダイアログ */ protected ProgressDialog mDialog = null; /** 進捗バースタイル */ protected boolean mHorizontal = false; /** 進捗バー最大値 */ protected int mMax = 0; /** * callback to let the activity know when the task has finished. */ public interface OnAsyncTaskFinished { /** * Called when the task has finished. */ void onAsyncTaskFinished(); } /** * コンストラクタ * * @param activity * アクティビティ * @param horizontal * 進捗バースタイル */ public AsyncTaskBase(Activity activity, boolean horizontal) { // 呼出元アクティビティ保存 mActivity = activity; // 進捗バースタイル保存 mHorizontal = horizontal; } /** * 処理中ダイアログ表示 * * @param activity * アクティビティ */ public final void showDialog(Activity activity) { Log.d(TAG, "showDialog()"); // 重複起動? if (mDialog != null) { Log.w(TAG, "showDialog() mProgressDialog!=null"); return; } // 呼出元アクティビティ変更 mActivity = activity; // 処理中ダイアログ生成 mDialog = new ProgressDialog(mActivity); mDialog.setCancelable(false); mDialog.setMessage(mActivity.getString(R.string.label_processing)); if (mHorizontal) { mDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); } if (mMax > 0) { mDialog.setMax(mMax); } // 処理中ダイアログ表示 mDialog.show(); } /** * 処理中ダイアログ除去 */ public final void dismissDialog() { Log.d(TAG, "dismissDialog()"); // 終了済み? if (mDialog == null) { Log.w(TAG, "dismissDialog() mProgressDialog==null"); return; } // 処理中ダイアログ除去 mDialog.dismiss(); mDialog = null; } /* * (非 Javadoc) * * @see android.os.AsyncTask#onProgressUpdate(Progress[]) */ @Override protected void onProgressUpdate(Integer... values) { super.onProgressUpdate(values); if (mDialog == null) { return; } if (values == null || values.length == 0) { return; } // 追加パラメータ if (values.length > 1) { // 進捗バー最大値保存 mMax = values[1]; // 最大値設定 mDialog.setMax(values[1]); } // 現在値設定 mDialog.setProgress(values[0]); Log.v(TAG, "onProgressUpdate()=" + values[0] + "/" + mMax); } /* * (非 Javadoc) * * @see android.os.AsyncTask#onCancelled() */ @Override protected void onCancelled() { super.onCancelled(); Log.d(TAG, "onCancelled()"); dismissDialog(); mMax = 0; mHorizontal = false; mActivity = null; } /* * (非 Javadoc) * * @see android.os.AsyncTask#onPreExecute() */ @Override protected void onPreExecute() { super.onPreExecute(); Log.d(TAG, "onPreExecute()"); showDialog(mActivity); } /* * (非 Javadoc) * * @see android.os.AsyncTask#onPostExecute(java.lang.Object) */ @Override protected void onPostExecute(Integer result) { dismissDialog(); mMax = 0; mHorizontal = false; mActivity = null; Log.d(TAG, "onPostExecute()=" + result); super.onPostExecute(result); } }