[Rendering][Android][CRASH] Adaptive Cards Library Crashes with Large Card Sizes with background image
rankush opened this issue ยท 1 comments
Target Platforms
Android
SDK Version
2.8.4, main branch
Application Name
Webex APP && AdaptiveCards Visualizer
Problem Description
We are experiencing an issue with the Adaptive Cards Library where it crashes when handling a specific card. This issue is reproducible in both the Webex app and the AdaptiveCards Visualizer sample app. The JSON for the problematic card is attached to this issue for reference.
Here's a high-level overview of the problem:
-
The issue seems to originate from the Adaptive Cards Library. It occurs even when the card's JSON contains an image of a relatively small size (2-4 MB) even with a smaller resolution say 400 x 1200
-
The specific card causing the issue has dimensions of 900 pixels (Width) x 12500 pixels (Height). The provided image is intended to be the background of the card. As we dont see that any limit is enforced in Adaptive Cards lib for card sizes, the cad should get rendered properly.
-
But The library uses scaling logic to set the card background to match the card size. However, this scaling logic appears to have a flaw.
- See code here https://github.com/microsoft/AdaptiveCards-Mobile/blob/main/source/android/adaptivecards/src/main/java/io/adaptivecards/renderer/BackgroundImageLoaderAsync.java#L91C2-L97
- Library is scaling the image in both direction unnecessary, which in turn creating a BitmapDrawable of bigger size
double xScaleFactor = 900 / 400 = 2.25; double yScaleFactor = 12500 / 1200 = 10.41; scale factor = Math.max(2.25, 10.41) = 10.41
- Now when it creates the bitmapDrawable using the above scale factor at https://github.com/microsoft/AdaptiveCards-Mobile/blob/main/source/android/adaptivecards/src/main/java/io/adaptivecards/renderer/BackgroundImageLoaderAsync.java#L105-L113
- The size will become
400(width)x10.41 x 1200(height)x10.41 x 4 (32 bit bitmap) = 208066752 Bytes = 208 MB
- And the Android is supporting bitmap of < 100 MB
-
Due to this flaw, the image (intended to be set as the background) scales up to an excessive size. In our case, the image sometimes exceeded 1 GB.
Crash Logs
--------- beginning of crash
05-08 19:23:27.077 4423 4423 E AndroidRuntime: FATAL EXCEPTION: main
05-08 19:23:27.077 4423 4423 E AndroidRuntime: Process: io.adaptivecards.adaptivecardssample, PID: 4423
05-08 19:23:27.077 4423 4423 E AndroidRuntime: java.lang.RuntimeException: Canvas: trying to draw too large(1085175364bytes) bitmap.
05-08 19:23:27.077 4423 4423 E AndroidRuntime: at android.graphics.RecordingCanvas.throwIfCannotDraw(RecordingCanvas.java:266)
05-08 19:23:27.077 4423 4423 E AndroidRuntime: at android.graphics.BaseRecordingCanvas.drawBitmap(BaseRecordingCanvas.java:94)
05-08 19:23:27.077 4423 4423 E AndroidRuntime: at io.adaptivecards.renderer.BackgroundImageLoaderAsync$BackgroundImageDrawable.resizeBitmapForCover(BackgroundImageLoaderAsync.java:145)
05-08 19:23:27.077 4423 4423 E AndroidRuntime: at io.adaptivecards.renderer.BackgroundImageLoaderAsync$BackgroundImageDrawable.draw(BackgroundImageLoaderAsync.java:81)
05-08 19:23:27.077 4423 4423 E AndroidRuntime: at android.view.View.getDrawableRenderNode(View.java:23483)
05-08 19:23:27.077 4423 4423 E AndroidRuntime: at android.view.View.drawBackground(View.java:23412)
05-08 19:23:27.077 4423 4423 E AndroidRuntime: at android.view.View.draw(View.java:23186)
05-08 19:23:27.077 4423 4423 E AndroidRuntime: at android.view.View.updateDisplayListIfDirty(View.java:22061)
05-08 19:23:27.077 4423 4423 E AndroidRuntime: at android.view.View.draw(View.java:22925)
05-08 19:23:27.077 4423 4423 E AndroidRuntime: at android.view.ViewGroup.drawChild(ViewGroup.java:4529)
05-08 19:23:27.077 4423 4423 E AndroidRuntime: at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4290)
05-08 19:23:27.077 4423 4423 E AndroidRuntime: at android.view.View.updateDisplayListIfDirty(View.java:22052)
05-08 19:23:27.077 4423 4423 E AndroidRuntime: at android.view.View.draw(View.java:22925)
05-08 19:23:27.077 4423 4423 E AndroidRuntime: at android.view.ViewGroup.drawChild(ViewGroup.java:4529)
05-08 19:23:27.077 4423 4423 E AndroidRuntime: at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4290)
05-08 19:23:27.077 4423 4423 E AndroidRuntime: at android.view.View.draw(View.java:23197)
05-08 19:23:27.077 4423 4423 E AndroidRuntime: at android.view.View.updateDisplayListIfDirty(View.java:22061)
05-08 19:23:27.077 4423 4423 E AndroidRuntime: at android.view.View.draw(View.java:22925)
05-08 19:23:27.077 4423 4423 E AndroidRuntime: at android.view.ViewGroup.drawChild(ViewGroup.java:4529)
05-08 19:23:27.077 4423 4423 E AndroidRuntime: at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4290)
05-08 19:23:27.077 4423 4423 E AndroidRuntime: at android.view.View.draw(View.java:23197)
05-08 19:23:27.077 4423 4423 E AndroidRuntime: at android.widget.ScrollView.draw(ScrollView.java:1869)
05-08 19:23:27.077 4423 4423 E AndroidRuntime: at android.view.View.updateDisplayListIfDirty(View.java:22061)
05-08 19:23:27.077 4423 4423 E AndroidRuntime: at android.view.View.draw(View.java:22925)
05-08 19:23:27.077 4423 4423 E AndroidRuntime: at android.view.ViewGroup.drawChild(ViewGroup.java:4529)
05-08 19:23:27.077 4423 4423 E AndroidRuntime: at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4290)
05-08 19:23:27.077 4423 4423 E AndroidRuntime: at android.view.View.updateDisplayListIfDirty(View.java:22052)
05-08 19:23:27.077 4423 4423 E AndroidRuntime: at android.view.View.draw(View.java:22925)
05-08 19:23:27.077 4423 4423 E AndroidRuntime: at android.view.ViewGroup.drawChild(ViewGroup.java:4529)
05-08 19:23:27.077 4423 4423 E AndroidRuntime: at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4290)
05-08 19:23:27.077 4423 4423 E AndroidRuntime: at android.view.View.updateDisplayListIfDirty(View.java:22052)
05-08 19:23:27.077 4423 4423 E AndroidRuntime: at android.view.View.draw(View.java:22925)
05-08 19:23:27.077 4423 4423 E AndroidRuntime: at android.view.ViewGroup.drawChild(ViewGroup.java:4529)
05-08 19:23:27.077 4423 4423 E AndroidRuntime: at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4290)
05-08 19:23:27.077 4423 4423 E AndroidRuntime: at android.view.View.updateDisplayListIfDirty(View.java:22052)
05-08 19:23:27.077 4423 4423 E AndroidRuntime: at android.view.View.draw(View.java:22925)
05-08 19:23:27.077 4423 4423 E AndroidRuntime: at android.view.ViewGroup.drawChild(ViewGroup.java:4529)
05-08 19:23:27.077 4423 4423 E AndroidRuntime: at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4290)
05-08 19:23:27.077 4423 4423 E AndroidRuntime: at android.view.View.updateDisplayListIfDirty(View.java:22052)
05-08 19:23:27.077 4423 4423 E AndroidRuntime: at android.view.View.draw(View.java:22925)
05-08 19:23:27.077 4423 4423 E AndroidRuntime: at android.view.ViewGroup.drawChild(ViewGroup.java:4529)
05-08 19:23:27.077 4423 4423 E AndroidRuntime: at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4290)
05-08 19:23:27.077 4423 4423 E AndroidRuntime: at android.view.View.updateDisplayListIfDirty(View.java:22052)
05-08 19:23:27.077 4423 4423 E AndroidRuntime: at android.view.View.draw(View.java:22925)
05-08 19:23:27.077 4423 4423 E AndroidRuntime: at android.view.ViewGroup.drawChild(ViewGroup.java:4529)
05-08 19:23:27.077 4423 4423 E AndroidRuntime: at androidx.coordinatorlayout.widget.CoordinatorLayout.drawChild(CoordinatorLayout.java:1246)
05-08 19:23:27.077 4423 4423 E AndroidRuntime: at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4290)
05-08 19:23:27.077 4423 4423 E AndroidRuntime: at android.view.View.draw(View.java:23197)
05-08 19:23:27.077 4423 4423 E AndroidRuntime: at android.view.View.updateDisplayListIfDirty(View.java:22061)
05-08 19:23:27.077 4423 4423 E AndroidRuntime: at android.view.View.draw(View.java:22925)
05-08 19:23:27.077 4423 4423 E AndroidRuntime: at android.view.ViewGroup.drawChild(ViewGroup.java:4529)
05-08 19:23:27.077 4423 4423 E AndroidRuntime: at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4290)
05-08 19:23:27.077 4423 4423 E AndroidRuntime: at android.view.View.updateDisplayListIfDirty(View.java:22052)
05-08 19:23:27.077 4423 4423 E AndroidRuntime: at android.view.View.draw(View.java:22925)
05-08 19:23:27.077 4423 4423 E AndroidRuntime: at android.view.ViewGroup.drawChild(ViewGroup.java:4529)
05-08 19:23:27.077 4423 4423 E AndroidRuntime: at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4290)
05-08 19:23:27.077 4423 4423 E AndroidRuntime: at android.view.View.updateDisplayListIfDirty(View.java:22052)
05-08 19:23:27.077 4423 4423 E AndroidRuntime: at android.view.View.draw(View.java:22925)
05-08 19:23:27.077 4423 4423 E AndroidRuntime: at android.view.ViewGroup.drawChild(ViewGroup.java:4529)
05-08 19:23:27.077 4423 4423 E AndroidRuntime: at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4290)
05-08 19:23:27.077 4423 4423 E AndroidRuntime: at android.view.View.draw(View.java:23197)
05-08 19:23:27.077 4423 4423 E AndroidRuntime: at com.android.internal.policy.DecorView.draw(DecorView.java:821)
05-08 19:23:27.077 4423 4423 E AndroidRuntime: at android.view.View.updateDisplayListIfDirty(View.java:22061)
05-08 19:23:27.077 4423 4423 E AndroidRuntime: at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:689)
05-08 19:23:27.079 4423 4423 E AndroidRuntime: at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:695)
05-08 19:23:27.079 4423 4423 E AndroidRuntime: at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:793)
05-08 19:23:27.079 4423 4423 E AndroidRuntime: at android.view.ViewRootImpl.draw(ViewRootImpl.java:4670)
05-08 19:23:27.079 4423 4423 E AndroidRuntime: at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:4381)
05-08 19:23:27.079 4423 4423 E AndroidRuntime: at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:3600)
05-08 19:23:27.079 4423 4423 E AndroidRuntime: at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2328)
05-08 19:23:27.079 4423 4423 E AndroidRuntime: at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:9087)
05-08 19:23:27.079 4423 4423 E AndroidRuntime: at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1231)
05-08 19:23:27.079 4423 4423 E AndroidRuntime: at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1239)
05-08 19:23:27.079 4423 4423 E AndroidRuntime: at android.view.Choreographer.doCallbacks(Choreographer.java:899)
05-08 19:23:27.079 4423 4423 E AndroidRuntime: at android.view.Choreographer.doFrame(Choreographer.java:832)
05-08 19:23:27.079 4423 4423 E AndroidRuntime: at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1214)
05-08 19:23:27.079 4423 4423 E AndroidRuntime: at android.os.Handler.handleCallback(Handler.java:942)
05-08 19:23:27.079 4423 4423 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:99)
05-08 19:23:27.079 4423 4423 E AndroidRuntime: at android.os.Looper.loopOnce(Looper.java:201)
05-08 19:23:27.079 4423 4423 E AndroidRuntime: at android.os.Looper.loop(Looper.java:288)
05-08 19:23:27.079 4423 4423 E AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:7872)
05-08 19:23:27.079 4423 4423 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)
05-08 19:23:27.079 4423 4423 E AndroidRuntime: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
05-08 19:23:27.079 4423 4423 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)
Screenshots
Card JSON
{
"type": "AdaptiveCard",
"actions": [
{
"data": {
"callback_keyword": "survey_response",
"survey_name": "TACX WEEK"
},
"style": "positive",
"title": "Submit",
"type": "Action.Submit"
}
],
"backgroundImage": {
"url": "https://www.webex.com/content/dam/wbx/us/images/rebrand/webex-logo.png"
},
"body": [
{
"items": [
{
"horizontalAlignment": "Center",
"type": "Image",
"url": "https://www.webex.com/content/dam/wbx/us/images/rebrand/webex-logo.png"
},
{
"color": "accent",
"horizontalAlignment": "center",
"isSubtle": true,
"size": "extraLarge",
"text": "TACX WEEK",
"type": "TextBlock",
"weight": "bolder",
"wrap": true
},
{
"text": "Hey there! ๐ Thanks a ton for diving into the TAC week extravaganza with us! ๐ We hope you had a blast making new connections, trying out cool stuff, and most importantly, having a blast! ๐คฉ Now, let's keep that fun train rolling โ your feedback is our fuel to make the next adventure even more awesome! ๐ And hey, just so you know, your answers are in incognito as a superhero in disguise โ totally **anonymous**! Ready to share your thoughts? Let's do this! ๐ช",
"type": "TextBlock",
"wrap": true
},
{
"columns": [
{
"items": [
{
"choices": [
{
"title": "MX ๐ฒ๐ฝ",
"value": "mexico"
},
{
"title": "RTP ๐ณ",
"value": "rtp"
},
{
"title": "RCDN ๐๏ธ",
"value": "rcdn"
}
],
"id": "site",
"isMultiSelect": false,
"isRequired": false,
"label": "1. What site are you from? ๐",
"placeholder": "Site",
"style": "compact",
"type": "Input.ChoiceSet"
},
{
"choices": [
{
"title": "East โก๏ธ",
"value": "east"
},
{
"title": "West โฌ
๏ธ",
"value": "West"
}
],
"id": "shift",
"isMultiSelect": false,
"isRequired": false,
"label": "2. What shift are you from? ๐งญ",
"placeholder": "Shift",
"style": "compact",
"type": "Input.ChoiceSet"
},
{
"choices": [
{
"title": "Yes, Onsite ๐",
"value": "onsite"
},
{
"title": "Yes, Remote ๐ป",
"value": "remote"
},
{
"title": "Yes, Hybrid ๐",
"value": "hybrid"
},
{
"title": "No ๐ซ",
"value": "no"
}
],
"id": "attend",
"isMultiSelect": false,
"isRequired": false,
"label": "2. Were you able to attend to any of the sessions?",
"placeholder": "Select Option",
"style": "expanded",
"type": "Input.ChoiceSet"
},
{
"text": "Please rate each event:",
"type": "TextBlock",
"wrap": true
}
],
"type": "Column",
"width": 1
}
],
"type": "ColumnSet"
}
],
"style": "emphasis",
"type": "Container"
},
{
"items": [
{
"horizontalAlignment": "Center",
"size": "Large",
"text": "Directory Photos ๐ธ",
"type": "TextBlock",
"wrap": true
},
{
"choices": [
{
"title": "Informative ๐",
"value": "Informative"
},
{
"title": "Fun ๐",
"value": "Fun"
},
{
"title": "I would do it again ๐",
"value": "I would do it again"
},
{
"title": "I learned something ๐ง ",
"value": "I learned something"
},
{
"title": "This will change the way I do things โจ",
"value": "This will change the way I do things"
},
{
"title": "N/A ๐ซ",
"value": "N/A"
}
],
"id": "directory_photos_options",
"isMultiSelect": true,
"type": "Input.ChoiceSet"
},
{
"id": "directory_photos_comments",
"isMultiline": true,
"isRequired": false,
"label": "Any comments ๐ฌ",
"maxLength": 0,
"placeholder": "",
"style": "text",
"type": "Input.Text"
}
],
"spacing": "None",
"style": "good",
"type": "Container"
},
{
"items": [
{
"horizontalAlignment": "Center",
"size": "Large",
"text": "Your Brand Creation ๐จ",
"type": "TextBlock",
"wrap": true
},
{
"choices": [
{
"title": "Informative ๐",
"value": "Informative"
},
{
"title": "Fun ๐",
"value": "Fun"
},
{
"title": "I would do it again ๐",
"value": "I would do it again"
},
{
"title": "I learned something ๐ง ",
"value": "I learned something"
},
{
"title": "This will change the way I do things โจ",
"value": "This will change the way I do things"
},
{
"title": "N/A ๐ซ",
"value": "N/A"
}
],
"id": "brand_creation_options",
"isMultiSelect": true,
"type": "Input.ChoiceSet"
},
{
"id": "brand_creation_comments",
"isMultiline": true,
"isRequired": false,
"label": "Any comments ๐ฌ",
"maxLength": 0,
"placeholder": "",
"style": "text",
"type": "Input.Text"
}
],
"spacing": "None",
"style": "accent",
"type": "Container"
},
{
"items": [
{
"horizontalAlignment": "Center",
"size": "Large",
"text": "Speed Mentoring ๐๏ธ",
"type": "TextBlock",
"wrap": true
},
{
"choices": [
{
"title": "Informative ๐",
"value": "Informative"
},
{
"title": "Fun ๐",
"value": "Fun"
},
{
"title": "I would do it again ๐",
"value": "I would do it again"
},
{
"title": "I learned something ๐ง ",
"value": "I learned something"
},
{
"title": "This will change the way I do things โจ",
"value": "This will change the way I do things"
},
{
"title": "N/A ๐ซ",
"value": "N/A"
}
],
"id": "speed_mentoring_options",
"isMultiSelect": true,
"type": "Input.ChoiceSet"
},
{
"id": "speed_mentoring_comments",
"isMultiline": true,
"isRequired": false,
"label": "Any comments ๐ฌ",
"maxLength": 0,
"placeholder": "",
"style": "text",
"type": "Input.Text"
}
],
"spacing": "None",
"style": "accent",
"type": "Container"
},
{
"items": [
{
"horizontalAlignment": "Center",
"size": "Large",
"text": "Cooking Competition โฒ๏ธ",
"type": "TextBlock",
"wrap": true
},
{
"choices": [
{
"title": "Informative ๐",
"value": "Informative"
},
{
"title": "Fun ๐",
"value": "Fun"
},
{
"title": "I would do it again ๐",
"value": "I would do it again"
},
{
"title": "I learned something ๐ง ",
"value": "I learned something"
},
{
"title": "This will change the way I do things โจ",
"value": "This will change the way I do things"
},
{
"title": "N/A ๐ซ",
"value": "N/A"
}
],
"id": "cooking_competition_options",
"isMultiSelect": true,
"type": "Input.ChoiceSet"
},
{
"id": "cooking_competition_comments",
"isMultiline": true,
"isRequired": false,
"label": "Any comments ๐ฌ",
"maxLength": 0,
"placeholder": "",
"style": "text",
"type": "Input.Text"
}
],
"spacing": "None",
"style": "good",
"type": "Container"
},
{
"items": [
{
"horizontalAlignment": "Center",
"size": "Large",
"text": "AMA with our Senior Leaders โ",
"type": "TextBlock",
"wrap": true
},
{
"choices": [
{
"title": "Informative ๐",
"value": "Informative"
},
{
"title": "Fun ๐",
"value": "Fun"
},
{
"title": "I would do it again ๐",
"value": "I would do it again"
},
{
"title": "I learned something ๐ง ",
"value": "I learned something"
},
{
"title": "This will change the way I do things โจ",
"value": "This will change the way I do things"
},
{
"title": "N/A ๐ซ",
"value": "N/A"
}
],
"id": "ama_senior_leaders_options",
"isMultiSelect": true,
"type": "Input.ChoiceSet"
},
{
"id": "ama_senior_leaders_comments",
"isMultiline": true,
"isRequired": false,
"label": "Any comments ๐ฌ",
"maxLength": 0,
"placeholder": "",
"style": "text",
"type": "Input.Text"
}
],
"spacing": "None",
"style": "accent",
"type": "Container"
},
{
"items": [
{
"horizontalAlignment": "Center",
"size": "Large",
"text": "DM Corner ๐",
"type": "TextBlock",
"wrap": true
},
{
"choices": [
{
"title": "Informative ๐",
"value": "Informative"
},
{
"title": "Fun ๐",
"value": "Fun"
},
{
"title": "I would do it again ๐",
"value": "I would do it again"
},
{
"title": "I learned something ๐ง ",
"value": "I learned something"
},
{
"title": "This will change the way I do things โจ",
"value": "This will change the way I do things"
},
{
"title": "N/A ๐ซ",
"value": "N/A"
}
],
"id": "dm_corner_options",
"isMultiSelect": true,
"type": "Input.ChoiceSet"
},
{
"id": "dm_corner_comments",
"isMultiline": true,
"isRequired": false,
"label": "Any comments ๐ฌ",
"maxLength": 0,
"placeholder": "",
"style": "text",
"type": "Input.Text"
}
],
"spacing": "None",
"style": "good",
"type": "Container"
},
{
"items": [
{
"horizontalAlignment": "Center",
"size": "Large",
"text": "Wellbeing Day / Fitness activities ๐ช",
"type": "TextBlock",
"wrap": true
},
{
"choices": [
{
"title": "Informative ๐",
"value": "Informative"
},
{
"title": "Fun ๐",
"value": "Fun"
},
{
"title": "I would do it again ๐",
"value": "I would do it again"
},
{
"title": "I learned something ๐ง ",
"value": "I learned something"
},
{
"title": "This will change the way I do things โจ",
"value": "This will change the way I do things"
},
{
"title": "N/A ๐ซ",
"value": "N/A"
}
],
"id": "wellbeing_day_fitness_activity_options",
"isMultiSelect": true,
"type": "Input.ChoiceSet"
},
{
"id": "wellbeing_day_fitness_activity_comments",
"isMultiline": true,
"isRequired": false,
"label": "Any comments ๐ฌ",
"maxLength": 0,
"placeholder": "",
"style": "text",
"type": "Input.Text"
}
],
"spacing": "None",
"style": "accent",
"type": "Container"
},
{
"items": [
{
"horizontalAlignment": "Center",
"size": "Large",
"text": "Putt Putt Golf โณ๏ธ",
"type": "TextBlock",
"wrap": true
},
{
"choices": [
{
"title": "Informative ๐",
"value": "Informative"
},
{
"title": "Fun ๐",
"value": "Fun"
},
{
"title": "I would do it again ๐",
"value": "I would do it again"
},
{
"title": "I learned something ๐ง ",
"value": "I learned something"
},
{
"title": "This will change the way I do things โจ",
"value": "This will change the way I do things"
},
{
"title": "N/A ๐ซ",
"value": "N/A"
}
],
"id": "putt_putt_golf_options",
"isMultiSelect": true,
"type": "Input.ChoiceSet"
},
{
"id": "putt_putt_golf_comments",
"isMultiline": true,
"isRequired": false,
"label": "Any comments ๐ฌ",
"maxLength": 0,
"placeholder": "",
"style": "text",
"type": "Input.Text"
}
],
"spacing": "None",
"style": "good",
"type": "Container"
},
{
"items": [
{
"horizontalAlignment": "Center",
"size": "Large",
"text": "Bingo Bingo โญ๏ธ Technology Trivia",
"type": "TextBlock",
"wrap": true
},
{
"choices": [
{
"title": "Informative ๐",
"value": "Informative"
},
{
"title": "Fun ๐",
"value": "Fun"
},
{
"title": "I would do it again ๐",
"value": "I would do it again"
},
{
"title": "I learned something ๐ง ",
"value": "I learned something"
},
{
"title": "This will change the way I do things โจ",
"value": "This will change the way I do things"
},
{
"title": "N/A ๐ซ",
"value": "N/A"
}
],
"id": "bingo_bingo_technology_trivia_options",
"isMultiSelect": true,
"type": "Input.ChoiceSet"
},
{
"id": "bingo_bingo_technology_trivia_comments",
"isMultiline": true,
"isRequired": false,
"label": "Any comments ๐ฌ",
"maxLength": 0,
"placeholder": "",
"style": "text",
"type": "Input.Text"
}
],
"spacing": "None",
"style": "accent",
"type": "Container"
},
{
"items": [
{
"horizontalAlignment": "Center",
"size": "Large",
"text": "TAC Hero Awards ๐",
"type": "TextBlock",
"wrap": true
},
{
"choices": [
{
"title": "Informative ๐",
"value": "Informative"
},
{
"title": "Fun ๐",
"value": "Fun"
},
{
"title": "I would do it again ๐",
"value": "I would do it again"
},
{
"title": "I learned something ๐ง ",
"value": "I learned something"
},
{
"title": "This will change the way I do things โจ",
"value": "This will change the way I do things"
},
{
"title": "N/A ๐ซ",
"value": "N/A"
}
],
"id": "tac_hero_awards_options",
"isMultiSelect": true,
"type": "Input.ChoiceSet"
},
{
"id": "tac_hero_awards_comments",
"isMultiline": true,
"isRequired": false,
"label": "Any comments ๐ฌ",
"maxLength": 0,
"placeholder": "",
"style": "text",
"type": "Input.Text"
}
],
"spacing": "None",
"style": "good",
"type": "Container"
},
{
"items": [
{
"horizontalAlignment": "Center",
"size": "Large",
"text": "Video Games ๐น๏ธ",
"type": "TextBlock",
"wrap": true
},
{
"choices": [
{
"title": "Informative ๐",
"value": "Informative"
},
{
"title": "Fun ๐",
"value": "Fun"
},
{
"title": "I would do it again ๐",
"value": "I would do it again"
},
{
"title": "I learned something ๐ง ",
"value": "I learned something"
},
{
"title": "This will change the way I do things โจ",
"value": "This will change the way I do things"
},
{
"title": "N/A ๐ซ",
"value": "N/A"
}
],
"id": "video_games_options",
"isMultiSelect": true,
"type": "Input.ChoiceSet"
},
{
"id": "video_games_comments",
"isMultiline": true,
"isRequired": false,
"label": "Any comments ๐ฌ",
"maxLength": 0,
"placeholder": "",
"style": "text",
"type": "Input.Text"
}
],
"spacing": "None",
"style": "accent",
"type": "Container"
}
],
"$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
"version": "1.5"
}
Sample Code Language
No response
Sample Code
No response
Adaptive Cards is now a semi private repo
- Pull requests and issue creations will no longer be accepted and will be closed. Please send all issues with Adaptive Cards to Microsoft Teams docs repo (msteams-docs)
- Issues will be reviewed and prioritized from there
- Source code will still be available to the public.
- Packages will still be posted to the public.