package de.mrbesen.telegram.objects; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import org.json.JSONArray; import org.json.JSONObject; public class TInlineKeyboardMarkup implements TReplyMarkup { List arr_btn; public TInlineKeyboardMarkup() { this(1); } /** * @param rows is a hint, how many lines will be needed */ public TInlineKeyboardMarkup(int rows) { arr_btn = new ArrayList<>(rows); for(int row = 0; row < rows; ++row) { arr_btn.add(row, new JSONArray()); } } /** * Insert button in first line * @param title * @param url * @return */ public TInlineKeyboardMarkup addUrlButton(String title, String url) { addUrlButton(title, url, 1); return this; } /** * Insert button in nth line * @param title * @param url * @param row (1 indexed) * @return */ public TInlineKeyboardMarkup addUrlButton(String title, String url, int row) { addButton(row, new JSONObject().put("text", title).put("url", url)); return this; } /** * insert button in nth line * @param title * @param callback * @param row (1 indexed) * @return */ public TInlineKeyboardMarkup addCallbackButton(String title, String callback, int row) { addButton(row, new JSONObject().put("text", title).put("callback_data", callback)); return this; } /** * Add a button, check if the row is available first * @param row * @param btn */ private void addButton(int row, JSONObject btn) { --row; if(arr_btn.size() < row) { //row existiert noch nicht row = arr_btn.size(); //auf nächst größte Zeile setzten, damit keine leerzeilen entstehen //resize arr_btn.add(row, new JSONArray()); } JSONArray arr = arr_btn.get(row); arr.put(btn); } public static TInlineKeyboardMarkup makeYesNo(String yes, String no) { return makeYesNo(yes, no, ""); } public static TInlineKeyboardMarkup makeYesNo(String yes, String no, String dataprefix) { if(dataprefix == null) dataprefix = ""; TInlineKeyboardMarkup kb = new TInlineKeyboardMarkup(1); kb.addCallbackButton(yes, dataprefix + "yes", 1); kb.addCallbackButton(no, dataprefix + "no", 1); return kb; } public static TInlineKeyboardMarkup makeSingleButton(String btn, String callback) { TInlineKeyboardMarkup kb = new TInlineKeyboardMarkup(1); kb.addCallbackButton(btn, callback, 1); return kb; } @Override public String toJSONString() { arr_btn.removeIf(a -> a.isEmpty()); //remove empty rows return new JSONObject().put("inline_keyboard", new JSONArray(arr_btn)).toString(); } }