/* * This file is part of WhereYouGo. * * WhereYouGo is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * WhereYouGo is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with WhereYouGo. If not, see <http://www.gnu.org/licenses/>. * * Copyright (C) 2012 Menion <whereyougo@asamm.cz> */ package menion.android.whereyougo.gui.extension; import java.util.ArrayList; import menion.android.whereyougo.R; import menion.android.whereyougo.settings.Loc; import menion.android.whereyougo.utils.Const; import menion.android.whereyougo.utils.Utils; import android.app.Activity; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.graphics.Color; import android.text.Html; import android.text.TextUtils; import android.view.View; import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; import android.view.Window; import android.webkit.WebView; import android.widget.ListView; public class UtilsGUI { public static int getUniqueId() { return (int) (Math.random() * Integer.MAX_VALUE); } public static void setWindowDialogCorrectWidth(Window window) { android.view.WindowManager.LayoutParams params = window.getAttributes(); params.width = getDialogWidth(); window.setAttributes((android.view.WindowManager.LayoutParams) params); } public static void setWindowFloatingRight(Activity activity) { int height = Math.min(Const.SCREEN_WIDTH, Const.SCREEN_HEIGHT); // set sizes to window android.view.WindowManager.LayoutParams params = activity.getWindow().getAttributes(); // set width params.width = UtilsGUI.getDialogWidth(); params.height = height; // set location params.x = (int) (Const.SCREEN_WIDTH - params.width - Utils.getDpPixels(10.0f)); //params.y = 10;//(Const.SCREEN_HEIGHT - height) / 4; // commit activity.getWindow().setAttributes((android.view.WindowManager.LayoutParams) params); } public static int getDialogWidth() { if (Utils.isAndroid30OrMore()) { if (Const.SCREEN_WIDTH < 600) { return LayoutParams.MATCH_PARENT; } else { return 600; } } else { return LayoutParams.MATCH_PARENT; } } public static final int DIALOG_EDIT_TEXT_ID = 10005; public static final int DIALOG_SPINNER_ID = 10006; /******************************/ /* DIALOG QUESTION */ /******************************/ public static void showDialogQuestion(Activity activity, CharSequence msg, DialogInterface.OnClickListener posLis) { showDialogQuestion(activity, msg, posLis, null); } public static void showDialogQuestion(Activity activity, int msg, DialogInterface.OnClickListener posLis) { showDialogQuestion(activity, activity.getText(msg), posLis, null); } public static void showDialogQuestion(Activity activity, int msg, DialogInterface.OnClickListener posLis, DialogInterface.OnClickListener negLis) { showDialogQuestion(activity, activity.getText(msg), posLis, negLis); } public static void showDialogQuestion(Activity activity, CharSequence msg, DialogInterface.OnClickListener posLis, DialogInterface.OnClickListener negLis) { dialogDoItem(activity, activity.getText(R.string.question), R.drawable.var_empty, msg, activity.getString(R.string.yes), posLis, activity.getString(R.string.no), negLis); } /******************************/ /* DIALOG INFO */ /******************************/ public static void showDialogInfo(Activity activity, int msg) { showDialogInfo(activity, activity.getText(msg)); } public static void showDialogInfo(Activity activity, CharSequence msg) { dialogDoItem(activity, activity.getText(R.string.info), R.drawable.ic_warning_default, msg, null, null, activity.getString(R.string.close), null); } public static void showDialogInfo(Activity activity, int msg, DialogInterface.OnClickListener cancelList) { dialogDoItem(activity, activity.getText(R.string.info), R.drawable.ic_warning_default, activity.getText(msg), null, null, activity.getString(R.string.close), cancelList); } /******************************/ /* DIALOG ERROR */ /******************************/ public static void showDialogError(Activity activity, int msg, DialogInterface.OnClickListener cancelList) { showDialogError(activity, activity.getText(msg), cancelList); } public static void showDialogError(Activity activity, CharSequence msg) { showDialogError(activity, msg, null); } public static void showDialogError(Activity activity, CharSequence msg, DialogInterface.OnClickListener cancelList) { dialogDoItem(activity, activity.getText(R.string.error), R.drawable.ic_info_default, msg, null, null, activity.getString(R.string.close), cancelList); } /******************************/ /* DIALOG DELETE */ /******************************/ public static void showDialogDeleteItem(Activity activity, String itemName, DialogInterface.OnClickListener posLis) { dialogDoItem(activity, Loc.get(R.string.question), R.drawable.ic_question_default, (itemName != null ? activity.getString(R.string.do_you_really_want_to_delete_x, Html.fromHtml(itemName)) : activity.getText(R.string.do_you_really_want_to_delete_selected_items)), activity.getString(R.string.yes), posLis, activity.getString(R.string.no), null); } /*******************************/ /* WEBVIEW CONSTRUCTION */ /*******************************/ public static void showDialogWebView(final Activity activity, final int title, final String msg) { showDialogWebView(activity, activity.getString(title), msg); } public static void showDialogWebView(final Activity activity, final String title, final String msg) { activity.runOnUiThread(new Runnable() { public void run() { AlertDialog.Builder b = new AlertDialog.Builder(activity); b.setCancelable(false); b.setTitle(title); b.setView(getFilledWebView(activity, msg)); b.setPositiveButton(R.string.close, null); b.show(); } }); } public static WebView getFilledWebView(Activity activity, String data) { WebView webView = new WebView(activity); //webView.loadData(UtilsHttp.repairHtmlFile(data), "text/html", "utf-8"); try { // webView.loadData(URLEncoder.encode( // UtilsHttp.repairHtmlFile(data),"utf-8").replaceAll("\\+"," "), // "text/html", "utf-8"); // http://stackoverflow.com/questions/4917860/android-character-encoding-raw-resource-files webView.loadDataWithBaseURL(null, data.replaceAll("\\+"," "), "text/html", "utf-8", null); } catch (Exception e) {} webView.setLayoutParams(new ViewGroup.LayoutParams( getDialogWidth(), LayoutParams.WRAP_CONTENT)); webView.setBackgroundColor(Color.WHITE); return webView; } /******************************/ /* DIALOG CONSTRUCTION */ /******************************/ public static void dialogDoItem(final Activity activity, final CharSequence title, final int icon, final CharSequence msg, final String posText, final DialogInterface.OnClickListener posLis, final String negText, final DialogInterface.OnClickListener negLis) { activity.runOnUiThread(new Runnable() { public void run() { AlertDialog.Builder b = new AlertDialog.Builder(activity); b.setCancelable(false); b.setTitle(title); b.setIcon(icon); b.setMessage(msg); if (!TextUtils.isEmpty(posText)) { b.setPositiveButton(posText, posLis); } if (!TextUtils.isEmpty(negText)) { b.setNegativeButton(negText, posLis); } b.show(); } }); } public static void setButtons(Activity a, int[] btns, View.OnClickListener onClick, View.OnLongClickListener onLongClick) { for (int btn : btns) { if (onClick != null) ((View) a.findViewById(btn)).setOnClickListener(onClick); if (onLongClick != null) ((View) a.findViewById(btn)).setOnLongClickListener(onLongClick); } } /******************************/ /* LIST VIEW PART */ /******************************/ public static ListView createListView(Context context, boolean setMultiple, ArrayList<DataInfo> adapterData) { ListView lv = new ListView(context); setListView(context, lv, setMultiple, adapterData); return lv; } /** * Prepare ListView with added data. Set IconedListAdapter as adapter, second line * to visible and fast scroll if more then 50 items in adapter array. * @param context * @param lv * @param adapterData */ public static void setListView(Context context, ListView lv, boolean setMultiple, ArrayList<DataInfo> adapterData) { if (setMultiple) lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); IconedListAdapter adapter = new IconedListAdapter(context, adapterData, lv); adapter.setTextView02Visible(View.VISIBLE, true); if (adapterData.size() > 50) lv.setFastScrollEnabled(true); lv.setAdapter(adapter); } }