/* Utils.java Copyright (c) 2016 NTT DOCOMO,INC. Released under the MIT license http://opensource.org/licenses/mit-license.php */ package org.deviceconnect.android.deviceplugin.slackmessagehook.setting.fragment; import android.app.AlertDialog; import android.app.Fragment; import android.app.FragmentManager; import android.app.FragmentTransaction; import android.app.ProgressDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.preference.PreferenceManager; import org.deviceconnect.android.deviceplugin.slackmessagehook.R; import org.deviceconnect.android.deviceplugin.slackmessagehook.slack.SlackManager; import java.io.File; /** * ユーティリティクラス */ public class Utils { //--------------------------------------------------------------------------------------- //region etc. /** * ネットワーク接続確認 * @param context Context * @return 接続状態ならtrue */ public static boolean onlineCheck(Context context){ ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo info = cm.getActiveNetworkInfo(); if( info != null ){ return info.isConnected(); } else { return false; } } /** * 画面遷移 * @param fragment Fragment * @param manager FragmentManager */ public static void transition(Fragment fragment, FragmentManager manager, boolean backStack) { FragmentTransaction transaction = manager.beginTransaction(); transaction.replace(R.id.container, fragment, fragment.getClass().getName()); if (backStack){ transaction.addToBackStack(null); } transaction.commit(); } /** * キャッシュのフォルダを取得 * @param context Context * @return フォルダ */ public static File getCacheDir(Context context) { return new File(context.getApplicationContext().getCacheDir(), context.getString(R.string.app_name)); } /** * フォルダを削除 * @param dir フォルダ * @return 成功ならtrue */ public static boolean deleteDir(File dir) { if (dir.isDirectory()) { String[] children = dir.list(); for (int i = 0; i < children.length; i++) { boolean success = deleteDir(new File(dir, children[i])); if (!success) { return false; } } } // The directory is now empty so delete it return dir.delete(); } //endregion //--------------------------------------------------------------------------------------- //region Token /** * アクセストークンを取得 * @param context Context * @return アクセストークン */ public static String getAccessToken(Context context) { SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context); return preferences.getString("accessToken", null); } /** * アクセストークンを保存 * @param context Context * @param accessToken アクセストークン */ public static void saveAccessToken(Context context, String accessToken) { SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context); SharedPreferences.Editor editor = preferences.edit(); if (accessToken == null) { editor.remove("accessToken"); } else { editor.putString("accessToken", accessToken); } editor.apply(); } //endregion //--------------------------------------------------------------------------------------- //region Online /** * オンラインステータスを取得 * @param context Context * @return オンラインステータス */ public static boolean getOnlineStatus(Context context) { SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context); return preferences.getBoolean("onlineStatus", false); } /** * オンラインステータスを保存 * @param context Context * @param status オンラインステータス */ public static void saveOnlineStatus(Context context, boolean status) { SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context); SharedPreferences.Editor editor = preferences.edit(); editor.putBoolean("onlineStatus", status); editor.apply(); } //endregion //--------------------------------------------------------------------------------------- //region Dialog /** * 警告ダイアログ表示 * @param context Context * @param msg メッセージ */ public static void showAlertDialog(Context context, String msg) { new AlertDialog.Builder(context) .setMessage(msg) .setPositiveButton("OK", null) .show(); } /** * プログレスダイアログを表示 * @param context Context * @return ダイアログ */ public static ProgressDialog showProgressDialog(Context context) { ProgressDialog dialog = new ProgressDialog(context); dialog.setMessage("Please wait..."); dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); dialog.setCancelable(false); dialog.setCanceledOnTouchOutside(false); dialog.show(); return dialog; } /** * 確認ダイアログ表示 * @param context Context * @param title タイトル * @param msg メッセージ * @param listener OKボタンイベントリスナー */ public static void showConfirmDialog(Context context, String title, String msg, DialogInterface.OnClickListener listener) { new AlertDialog.Builder(context) .setTitle(title) .setMessage(msg) .setPositiveButton("OK", listener) .setNegativeButton("Cancel", null) .show(); } /** * ネットワークエラーダイアログ表示 * @param context Context * @param callback Callback */ public static void showNetworkErrorDialog(final Context context, SlackManager.FinishCallback<Boolean> callback) { Utils.showErrorDialog(context, context.getString(R.string.error_network), null, 1, callback); } /** * Slackサーバーエラーダイアログ表示 * @param context Context * @param callback Callback */ public static void showSlackErrorDialog(final Context context, SlackManager.FinishCallback<Boolean> callback) { Utils.showErrorDialog(context, context.getString(R.string.error_slack), null, 2, callback); } /** * Slack認証エラーダイアログ表示 * @param context Context * @param manager FragmentManager * @param callback Callback */ public static void showSlackAuthErrorDialog(final Context context, FragmentManager manager, SlackManager.FinishCallback<Boolean> callback) { Utils.showErrorDialog(context, context.getString(R.string.error_auth), manager, 3, callback); } /** * 不明なエラーダイアログ表示 * @param context Context * @param callback Callback */ public static void showErrorDialog(final Context context, SlackManager.FinishCallback<Boolean> callback) { Utils.showErrorDialog(context, context.getString(R.string.error_unknown), null, 0, callback); } /** * エラーダイアログ表示(ベース) * @param context Context * @param msg メッセージ * @param manager FragmentManager * @param type Type * @param callback Callback */ private static void showErrorDialog(final Context context, String msg,final FragmentManager manager, int type, final SlackManager.FinishCallback<Boolean> callback) { AlertDialog.Builder dialog = new AlertDialog.Builder(context) .setTitle("エラー") .setMessage(msg) .setNegativeButton("閉じる", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { if (callback != null) { callback.onFinish(false, null); } } }); boolean retry = false; boolean wifi = false; boolean token = false; switch (type) { case 1: // ネットワークエラー wifi = true; retry = true; break; case 2: // Slackサーバーエラー retry = true; break; case 3: // Slack認証エラー token = true; break; default: retry = true; break; } if (wifi) { dialog.setPositiveButton(context.getString(R.string.wifi_settings), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // WiFi設定を開く context.startActivity(new Intent(android.provider.Settings.ACTION_WIFI_SETTINGS)); if (callback != null) { callback.onFinish(false, null); } } }); } if (retry) { dialog.setNeutralButton(context.getString(R.string.retry), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { if (callback != null) { callback.onFinish(true, null); } } }); } if (token) { dialog.setPositiveButton(context.getString(R.string.token_settings), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // 画面遷移 Utils.transition(new SettingTokenFragment(), manager, true); } }); } dialog.setOnCancelListener(new DialogInterface.OnCancelListener() { @Override public void onCancel(DialogInterface dialog) { if (callback != null) { callback.onFinish(false, null); } } }); dialog.show(); } //endregion //--------------------------------------------------------------------------------------- }