From d359b89851cf396e0cb509af69c6998328257854 Mon Sep 17 00:00:00 2001 From: mrbesen Date: Tue, 12 Jan 2021 13:33:19 +0100 Subject: [PATCH] new keyboard code --- .../objects/TInlineKeyboardMarkup.java | 55 ++++++++++++++----- 1 file changed, 42 insertions(+), 13 deletions(-) diff --git a/src/main/java/de/mrbesen/telegram/objects/TInlineKeyboardMarkup.java b/src/main/java/de/mrbesen/telegram/objects/TInlineKeyboardMarkup.java index 1d90336..acb8e3a 100644 --- a/src/main/java/de/mrbesen/telegram/objects/TInlineKeyboardMarkup.java +++ b/src/main/java/de/mrbesen/telegram/objects/TInlineKeyboardMarkup.java @@ -1,27 +1,31 @@ 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 { - ArrayList arr_btn = new ArrayList<>(); + List arr_btn; public TInlineKeyboardMarkup() { this(1); - } - + } + + /** + * @param rows is a hint, how many lines will be needed + */ public TInlineKeyboardMarkup(int rows) { - if(rows < 1) - throw new IllegalArgumentException("You need at least one row."); - arr_btn = new ArrayList(); - - for( int row = 0; row < rows; row++ ) { - arr_btn.add(new JSONArray()); + 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 @@ -36,19 +40,43 @@ public class TInlineKeyboardMarkup implements TReplyMarkup { * Insert button in nth line * @param title * @param url - * @param row + * @param row (1 indexed) * @return */ public TInlineKeyboardMarkup addUrlButton(String title, String url, int row) { - arr_btn.get(row-1).put(new JSONObject().put("text", title).put("url", url)); + 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) { - arr_btn.get(row-1).put(new JSONObject().put("text", title).put("callback_data", callback)); + 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, ""); } @@ -69,6 +97,7 @@ public class TInlineKeyboardMarkup implements TReplyMarkup { @Override public String toJSONString() { + arr_btn.removeIf(a -> a.isEmpty()); //remove empty rows return new JSONObject().put("inline_keyboard", new JSONArray(arr_btn)).toString(); } }