diff --git a/build.gradle b/build.gradle
index 65949f4af9367756e7c0605c8d4c5e35e3bde3d1..df82bc36b177b244ba46132e1acdaa457c2cd9d4 100644
--- a/build.gradle
+++ b/build.gradle
@@ -101,6 +101,7 @@ dependencies {
implementation 'com.github.singpolyma:android-identicons:master-SNAPSHOT'
implementation 'org.snikket:webrtc-android:107.0.0'
implementation 'com.github.woltapp:blurhash:master'
+ implementation 'com.caverock:androidsvg-aar:1.4'
// INSERT
}
diff --git a/src/cheogram/res/layout/button_grid_item.xml b/src/cheogram/res/layout/button_grid_item.xml
new file mode 100644
index 0000000000000000000000000000000000000000..8a43c885aaac68cf8f620ce4916cbaba2c8af6c6
--- /dev/null
+++ b/src/cheogram/res/layout/button_grid_item.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
diff --git a/src/cheogram/res/layout/command_button_grid_field.xml b/src/cheogram/res/layout/command_button_grid_field.xml
new file mode 100644
index 0000000000000000000000000000000000000000..29245b738567349bca02c42c8dd402d119a9f352
--- /dev/null
+++ b/src/cheogram/res/layout/command_button_grid_field.xml
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/java/eu/siacs/conversations/entities/Conversation.java b/src/main/java/eu/siacs/conversations/entities/Conversation.java
index 8b35e5a25296bf3e846d30889848c6a4e925bfec..ac654179cccdd78f811a13b6950980e69a17aaa5 100644
--- a/src/main/java/eu/siacs/conversations/entities/Conversation.java
+++ b/src/main/java/eu/siacs/conversations/entities/Conversation.java
@@ -2,8 +2,12 @@ package eu.siacs.conversations.entities;
import android.content.ContentValues;
import android.content.Context;
+import android.content.DialogInterface;
import android.database.Cursor;
import android.database.DataSetObserver;
+import android.graphics.drawable.BitmapDrawable;
+import android.graphics.Bitmap;
+import android.graphics.Canvas;
import android.graphics.Rect;
import android.net.Uri;
import android.text.Editable;
@@ -22,6 +26,7 @@ import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.ArrayAdapter;
import android.widget.AdapterView;
+import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.GridLayout;
import android.widget.ListView;
@@ -33,11 +38,14 @@ import android.webkit.WebMessage;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.webkit.WebChromeClient;
+import android.util.DisplayMetrics;
import android.util.Pair;
import android.util.SparseArray;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
+import androidx.appcompat.app.AlertDialog;
+import androidx.appcompat.app.AlertDialog.Builder;
import androidx.core.content.ContextCompat;
import androidx.databinding.DataBindingUtil;
import androidx.databinding.ViewDataBinding;
@@ -46,6 +54,8 @@ import androidx.recyclerview.widget.RecyclerView;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.viewpager.widget.ViewPager;
+import com.caverock.androidsvg.SVG;
+
import com.google.android.material.tabs.TabLayout;
import com.google.android.material.textfield.TextInputLayout;
import com.google.common.base.Optional;
@@ -72,24 +82,27 @@ import eu.siacs.conversations.Config;
import eu.siacs.conversations.R;
import eu.siacs.conversations.crypto.OmemoSetting;
import eu.siacs.conversations.crypto.PgpDecryptionService;
-import eu.siacs.conversations.databinding.CommandPageBinding;
-import eu.siacs.conversations.databinding.CommandNoteBinding;
-import eu.siacs.conversations.databinding.CommandResultFieldBinding;
-import eu.siacs.conversations.databinding.CommandResultCellBinding;
-import eu.siacs.conversations.databinding.CommandItemCardBinding;
+import eu.siacs.conversations.databinding.CommandButtonGridFieldBinding;
import eu.siacs.conversations.databinding.CommandCheckboxFieldBinding;
+import eu.siacs.conversations.databinding.CommandItemCardBinding;
+import eu.siacs.conversations.databinding.CommandNoteBinding;
+import eu.siacs.conversations.databinding.CommandPageBinding;
import eu.siacs.conversations.databinding.CommandProgressBarBinding;
import eu.siacs.conversations.databinding.CommandRadioEditFieldBinding;
+import eu.siacs.conversations.databinding.CommandResultCellBinding;
+import eu.siacs.conversations.databinding.CommandResultFieldBinding;
import eu.siacs.conversations.databinding.CommandSearchListFieldBinding;
import eu.siacs.conversations.databinding.CommandSpinnerFieldBinding;
import eu.siacs.conversations.databinding.CommandTextFieldBinding;
import eu.siacs.conversations.databinding.CommandWebviewBinding;
+import eu.siacs.conversations.databinding.DialogQuickeditBinding;
import eu.siacs.conversations.persistance.DatabaseBackend;
import eu.siacs.conversations.services.AvatarService;
import eu.siacs.conversations.services.QuickConversationsService;
import eu.siacs.conversations.services.XmppConnectionService;
import eu.siacs.conversations.ui.text.FixedURLSpan;
import eu.siacs.conversations.ui.util.ShareUtil;
+import eu.siacs.conversations.ui.util.SoftKeyboardUtils;
import eu.siacs.conversations.utils.JidHelper;
import eu.siacs.conversations.utils.MessageUtils;
import eu.siacs.conversations.utils.UIHelper;
@@ -1843,6 +1856,133 @@ public class Conversation extends AbstractEntity implements Blockable, Comparabl
}
}
+ class ButtonGridFieldViewHolder extends ViewHolder {
+ public ButtonGridFieldViewHolder(CommandButtonGridFieldBinding binding) {
+ super(binding);
+ options = new ArrayAdapter