diff --git a/.github/workflows/pages.yml b/.github/workflows/pages.yml
new file mode 100644
index 0000000..02f1089
--- /dev/null
+++ b/.github/workflows/pages.yml
@@ -0,0 +1,59 @@
+name: Deploy to GitHub Pages
+
+on:
+ # Runs on pushes targeting the default branch
+ push:
+ branches: [ master ]
+
+ # Allows you to run this workflow manually from the Actions tab
+ workflow_dispatch:
+
+# Allow this job to clone the repo and create a page deployment
+permissions:
+ contents: read
+ pages: write
+ id-token: write
+
+# Allow one concurrent deployment
+concurrency:
+ group: "pages"
+ cancel-in-progress: true
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v3
+
+ - name: Setup Node
+ uses: actions/setup-node@v3
+ with:
+ node-version: 18
+
+ - name: Setup PNPM
+ uses: pnpm/action-setup@v2.2.2
+ with:
+ version: 7.x.x
+
+ - name: Install deps
+ run: pnpm install
+
+ - name: Build
+ run: pnpm run build
+
+ - name: Upload Pages Artifact
+ uses: actions/upload-pages-artifact@v1
+ with:
+ path: "./dist/"
+
+ deploy:
+ needs: build
+ runs-on: ubuntu-latest
+ environment:
+ name: github-pages
+ url: ${{ steps.deployment.outputs.page_url }}
+ steps:
+ - name: Deploy to GitHub Pages
+ id: deployment
+ uses: actions/deploy-pages@v1
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..6704566
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,104 @@
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+lerna-debug.log*
+
+# Diagnostic reports (https://nodejs.org/api/report.html)
+report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
+
+# Runtime data
+pids
+*.pid
+*.seed
+*.pid.lock
+
+# Directory for instrumented libs generated by jscoverage/JSCover
+lib-cov
+
+# Coverage directory used by tools like istanbul
+coverage
+*.lcov
+
+# nyc test coverage
+.nyc_output
+
+# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
+.grunt
+
+# Bower dependency directory (https://bower.io/)
+bower_components
+
+# node-waf configuration
+.lock-wscript
+
+# Compiled binary addons (https://nodejs.org/api/addons.html)
+build/Release
+
+# Dependency directories
+node_modules/
+jspm_packages/
+
+# TypeScript v1 declaration files
+typings/
+
+# TypeScript cache
+*.tsbuildinfo
+
+# Optional npm cache directory
+.npm
+
+# Optional eslint cache
+.eslintcache
+
+# Microbundle cache
+.rpt2_cache/
+.rts2_cache_cjs/
+.rts2_cache_es/
+.rts2_cache_umd/
+
+# Optional REPL history
+.node_repl_history
+
+# Output of 'npm pack'
+*.tgz
+
+# Yarn Integrity file
+.yarn-integrity
+
+# dotenv environment variables file
+.env
+.env.test
+
+# parcel-bundler cache (https://parceljs.org/)
+.cache
+
+# Next.js build output
+.next
+
+# Nuxt.js build / generate output
+.nuxt
+dist
+
+# Gatsby files
+.cache/
+# Comment in the public line in if your project uses Gatsby and *not* Next.js
+# https://nextjs.org/blog/next-9-1#public-directory-support
+# public
+
+# vuepress build output
+.vuepress/dist
+
+# Serverless directories
+.serverless/
+
+# FuseBox cache
+.fusebox/
+
+# DynamoDB Local files
+.dynamodb/
+
+# TernJS port file
+.tern-port
diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..b58b603
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,5 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Editor-based HTTP Client requests
+/httpRequests/
diff --git a/.idea/ai-unchive.iml b/.idea/ai-unchive.iml
new file mode 100644
index 0000000..10a4077
--- /dev/null
+++ b/.idea/ai-unchive.iml
@@ -0,0 +1,13 @@
+
+
StartActivity method.Activities that can be launched include:
A round 'sprite' that can be placed on a Canvas, where it can react to touches and drags, interact with other sprites (ImageSprites and other Balls) and the edge of the Canvas, and move according to its property values.
For example, to have a Ball move 4 pixels toward the top of a Canvas every 500 milliseconds (half second), you would set the Speed property to 4 [pixels], the Interval property to 500 [milliseconds], the Heading property to 90 [degrees], and the Enabled property to True. These and its other properties can be changed at any time.
The difference between a Ball and an ImageSprite is that the latter can get its appearance from an image file, while a Ball's appearance can only be changed by varying its PaintColor and Radius properties.
Enabled), can be changed in the Designer or in the Blocks Editor.","helpUrl":"","showOnPalette":"true","nonVisible":"false","iconName":"","androidMinSdk":19,"properties":[{"name":"BackgroundColor","editorType":"color","defaultValue":"&HFF444444","propertyType":"common","editorArgs":[]},{"name":"BorderShadow","editorType":"boolean","defaultValue":"True","propertyType":"advanced","editorArgs":[]},{"name":"Enabled","editorType":"boolean","defaultValue":"True","propertyType":"common","editorArgs":[]},{"name":"FontBold","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]},{"name":"FontItalic","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]},{"name":"FontSize","editorType":"non_negative_float","defaultValue":"14.0","propertyType":"common","editorArgs":[]},{"name":"FontTypeface","editorType":"typeface","defaultValue":"0","propertyType":"common","editorArgs":[]},{"name":"FontTypefaceImport","editorType":"font_asset","defaultValue":"","propertyType":"advanced","editorArgs":[]},{"name":"HTMLFormat","editorType":"boolean","defaultValue":"False","propertyType":"advanced","editorArgs":[]},{"name":"Image","editorType":"image_asset","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"RotationAngle","editorType":"float","defaultValue":"0.0","propertyType":"advanced","editorArgs":[]},{"name":"Shape","editorType":"button_shape","defaultValue":"0","propertyType":"common","editorArgs":[]},{"name":"ShowFeedback","editorType":"boolean","defaultValue":"True","propertyType":"advanced","editorArgs":[]},{"name":"Text","editorType":"string","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"TextAlignment","editorType":"textalignment","defaultValue":"1","propertyType":"common","editorArgs":[]},{"name":"TextColor","editorType":"color","defaultValue":"&HFFFFFFFF","propertyType":"common","editorArgs":[]},{"name":"TouchColor","editorType":"color","defaultValue":"&HFFCCCCCC","propertyType":"advanced","editorArgs":[]},{"name":"Visible","editorType":"visibility","defaultValue":"True","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"BackgroundColor","description":"Returns the button's background color","type":"number","rw":"read-write","deprecated":"false"},{"name":"BorderShadow","description":"Returns true if the button have a outside border shadow on click.","type":"boolean","rw":"invisible","deprecated":"false"},{"name":"Column","description":"","type":"number","rw":"invisible","deprecated":"false"},{"name":"Enabled","description":"If set, user can tap check box to cause action.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"FontBold","description":"If set, button text is displayed in bold.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"FontItalic","description":"If set, button text is displayed in italics.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"FontSize","description":"Point size for button text.","type":"number","rw":"read-write","deprecated":"false"},{"name":"FontTypeface","description":"Font family for button text.","type":"number","rw":"invisible","deprecated":"false"},{"name":"FontTypefaceImport","description":"Set a custom font.","type":"text","rw":"write-only","deprecated":"false"},{"name":"HTMLFormat","description":"If true, then this button will show html text else it will show plain text. Note: Not all HTML is supported.","type":"boolean","rw":"invisible","deprecated":"false"},{"name":"Height","description":"","type":"number","rw":"read-write","deprecated":"false"},{"name":"HeightPercent","description":"","type":"number","rw":"write-only","deprecated":"false"},{"name":"Image","description":"Image to display on button.","type":"text","rw":"read-write","deprecated":"false"},{"name":"RotationAngle","description":"Sets the degrees that the button is rotated around the pivot point. Increasing values result in clockwise rotation.","type":"number","rw":"read-write","deprecated":"false"},{"name":"Row","description":"","type":"number","rw":"invisible","deprecated":"false"},{"name":"Shape","description":"Specifies the button's shape (default, rounded, rectangular, oval). The shape will not be visible if an Image is being displayed.","type":"number","rw":"invisible","deprecated":"false"},{"name":"ShowFeedback","description":"Specifies if a visual feedback should be shown for a button that as an image as background.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"Text","description":"Text to display on button.","type":"text","rw":"read-write","deprecated":"false"},{"name":"TextAlignment","description":"Left, center, or right.","type":"number","rw":"invisible","deprecated":"false"},{"name":"TextColor","description":"Color for button text.","type":"number","rw":"read-write","deprecated":"false"},{"name":"TouchColor","description":"Set the buttons touch color.","type":"number","rw":"read-write","deprecated":"false"},{"name":"Visible","description":"Specifies whether the component should be visible on the screen. Value is true if the component is showing and false if hidden.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"Width","description":"","type":"number","rw":"read-write","deprecated":"false"},{"name":"WidthPercent","description":"","type":"number","rw":"write-only","deprecated":"false"}],"events":[{"name":"Click","description":"User tapped and released the button.","deprecated":"false","params":[]},{"name":"GotFocus","description":"Indicates the cursor moved over the button so it is now possible to click it.","deprecated":"false","params":[]},{"name":"LongClick","description":"User held the button down.","deprecated":"false","params":[]},{"name":"LostFocus","description":"Indicates the cursor moved away from the button so it is now no longer possible to click it.","deprecated":"false","params":[]},{"name":"TouchDown","description":"Indicates that the button was pressed down.","deprecated":"false","params":[]},{"name":"TouchUp","description":"Indicates that a button has been released.","deprecated":"false","params":[]}],"methods":[{"name":"ButtonClick","description":"Perform a button click as function.","deprecated":"false","params":[]},{"name":"SetShadow","description":"Place a blurred shadow of text underneath the text, drawn with the specified x, y, radius, color (e.g. -11, 12, 13, black.","deprecated":"false","params":[{"name":"x","type":"number"},{"name":"y","type":"number"},{"name":"radius","type":"number"},{"name":"color","type":"number"}]},{"name":"WithIconFromFontAwesome","description":"Show a image on the given postion near to the button. You can use following words for the position: 'Left', 'Right', 'Top' or 'Bottom'. Use the padding to add space between the icon and text. Use a material icon as the button icon without uploading a image resource into your project. You can find the icon name (or code) here at https://fontawesome.com/cheatsheet Use as example for a heart icon just 'f004'.","deprecated":"false","params":[{"name":"position","type":"text"},{"name":"iconName","type":"text"},{"name":"iconColor","type":"number"},{"name":"padding","type":"number"},{"name":"size","type":"number"}]},{"name":"WithIconFromMaterialFont","description":"Show a image on the given postion near to the button. You can use following words for the position: 'Left', 'Right', 'Top' or 'Bottom'. Use the padding to add space between the icon and text. Use a material icon as the button icon without uploading a image resource into your project. You can find the icon name (or code) here at https://material.io/icons","deprecated":"false","params":[{"name":"position","type":"text"},{"name":"iconName","type":"text"},{"name":"iconColor","type":"number"},{"name":"padding","type":"number"},{"name":"size","type":"number"}]},{"name":"WithIconFromPicture","description":"Show a image on the given postion near to the button. You can use following words for the position: 'Left', 'Right', 'Top' or 'Bottom'. Use the padding to add space between the icon and text.","deprecated":"false","params":[{"name":"position","type":"text"},{"name":"picture","type":"text"},{"name":"padding","type":"number"},{"name":"width","type":"number"},{"name":"height","type":"number"}]}]},{"type":"com.google.appinventor.components.runtime.Camcorder","name":"Camcorder","external":"false","version":"1","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"MEDIA","helpString":"A component to record a video using the device's camcorder.After the video is recorded, the name of the file on the phone containing the clip is available as an argument to the AfterRecording event. The file name can be used, for example, to set the source property of a VideoPlayer component.","helpUrl":"","showOnPalette":"true","nonVisible":"true","iconName":"images/camcorder.png","androidMinSdk":19,"properties":[],"blockProperties":[],"events":[{"name":"AfterRecording","description":"Indicates that a video was recorded with the camera and provides the path to\n the stored picture.","deprecated":"false","params":[{"name":"clip","type":"text"}]}],"methods":[{"name":"RecordVideo","description":"Records a video, then raises the AfterRecoding event.","deprecated":"false","params":[]}]},{"type":"com.google.appinventor.components.runtime.Camera","name":"Camera","external":"false","version":"4","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"MEDIA","helpString":"A component to take a picture using the device's camera. After the picture is taken, the name of the file on the phone containing the picture is available as an argument to the AfterPicture event. The file name can be used, for example, to set the Picture property of an Image component.","helpUrl":"","showOnPalette":"true","nonVisible":"true","iconName":"images/camera.png","androidMinSdk":19,"properties":[],"blockProperties":[{"name":"UseFront","description":"Specifies whether the front-facing camera should be used (when available). If the device does not have a front-facing camera, this option will be ignored and the camera will open normally.","type":"boolean","rw":"read-write","deprecated":"true"}],"events":[{"name":"AfterPicture","description":"Returns the taken picture.","deprecated":"false","params":[{"name":"image","type":"text"}]}],"methods":[{"name":"HasFlash","description":"Returns true if your device has a flash.","deprecated":"false","params":[],"returnType":"boolean"},{"name":"TakePicture","description":"Take a picture with the camera of your device.","deprecated":"false","params":[]},{"name":"ToggleLight","description":"Toggle the flash of your device to on or off.","deprecated":"false","params":[]}]},{"type":"com.google.appinventor.components.runtime.Canvas","name":"Canvas","external":"false","version":"12","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"ANIMATION","helpString":"A two-dimensional touch-sensitive rectangular panel on which drawing can be done and sprites can be moved.
The BackgroundColor, PaintColor, BackgroundImage, Width, and Height of the Canvas can be set in either the Designer or in the Blocks Editor. The Width and Height are measured in pixels and must be positive.
Any location on the Canvas can be specified as a pair of (X, Y) values, where
There are events to tell when and where a Canvas has been touched or a Sprite (ImageSprite or Ball) has been dragged. There are also methods for drawing points, lines, and circles.
Non-visible component that provides the instant in time using the internal clock on the phone. It can fire a timer at regularly set intervals and perform time calculations, manipulations, and conversions.
Methods to convert an instant to text are also available. Acceptable patterns are empty string, MM/DD/YYYY HH:mm:ss a, or MMM d, yyyyHH:mm. The empty string will provide the default format, which is \"MMM d, yyyy HH:mm:ss a\" for FormatDateTime \"MMM d, yyyy\" for FormatDate. To see all possible format, please see here.
","helpUrl":"","showOnPalette":"true","nonVisible":"true","iconName":"images/clock.png","androidMinSdk":19,"properties":[{"name":"TimerAlwaysFires","editorType":"boolean","defaultValue":"True","propertyType":"common","editorArgs":[]},{"name":"TimerEnabled","editorType":"boolean","defaultValue":"True","propertyType":"common","editorArgs":[]},{"name":"TimerInterval","editorType":"non_negative_integer","defaultValue":"1000","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"TimerAlwaysFires","description":"Will fire even when application is not showing on the screen if true","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"TimerEnabled","description":"Fires timer if true","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"TimerInterval","description":"Interval between timer events in ms","type":"number","rw":"read-write","deprecated":"false"}],"events":[{"name":"Timer","description":"Timer has gone off.","deprecated":"false","params":[]}],"methods":[{"name":"AddDays","description":"An instant in time some days after the argument","deprecated":"false","params":[{"name":"instant","type":"InstantInTime"},{"name":"quantity","type":"number"}],"returnType":"InstantInTime"},{"name":"AddDuration","description":"An instant in time some duration after the argument","deprecated":"false","params":[{"name":"instant","type":"InstantInTime"},{"name":"quantity","type":"number"}],"returnType":"InstantInTime"},{"name":"AddHours","description":"An instant in time some hours after the argument","deprecated":"false","params":[{"name":"instant","type":"InstantInTime"},{"name":"quantity","type":"number"}],"returnType":"InstantInTime"},{"name":"AddMinutes","description":"An instant in time some minutes after the argument","deprecated":"false","params":[{"name":"instant","type":"InstantInTime"},{"name":"quantity","type":"number"}],"returnType":"InstantInTime"},{"name":"AddMonths","description":"An instant in time some months after the argument","deprecated":"false","params":[{"name":"instant","type":"InstantInTime"},{"name":"quantity","type":"number"}],"returnType":"InstantInTime"},{"name":"AddSeconds","description":"An instant in time some seconds after the argument","deprecated":"false","params":[{"name":"instant","type":"InstantInTime"},{"name":"quantity","type":"number"}],"returnType":"InstantInTime"},{"name":"AddWeeks","description":"An instant in time some weeks after the argument","deprecated":"false","params":[{"name":"instant","type":"InstantInTime"},{"name":"quantity","type":"number"}],"returnType":"InstantInTime"},{"name":"AddYears","description":"An instant in time some years after the argument","deprecated":"false","params":[{"name":"instant","type":"InstantInTime"},{"name":"quantity","type":"number"}],"returnType":"InstantInTime"},{"name":"DayOfMonth","description":"The day of the month","deprecated":"false","params":[{"name":"instant","type":"InstantInTime"}],"returnType":"number"},{"name":"Duration","description":"Milliseconds elapsed between instants","deprecated":"false","params":[{"name":"start","type":"InstantInTime"},{"name":"end","type":"InstantInTime"}],"returnType":"number"},{"name":"DurationToDays","description":"convert duration to days","deprecated":"false","params":[{"name":"duration","type":"number"}],"returnType":"number"},{"name":"DurationToHours","description":"convert duration to hours","deprecated":"false","params":[{"name":"duration","type":"number"}],"returnType":"number"},{"name":"DurationToMinutes","description":"convert duration to minutes","deprecated":"false","params":[{"name":"duration","type":"number"}],"returnType":"number"},{"name":"DurationToSeconds","description":"convert duration to seconds","deprecated":"false","params":[{"name":"duration","type":"number"}],"returnType":"number"},{"name":"DurationToWeeks","description":"convert duration to weeks","deprecated":"false","params":[{"name":"duration","type":"number"}],"returnType":"number"},{"name":"FormatDate","description":"Text representing the date of an instant in the specified pattern","deprecated":"false","params":[{"name":"instant","type":"InstantInTime"},{"name":"pattern","type":"text"}],"returnType":"text"},{"name":"FormatDateTime","description":"Text representing the date and time of an instant in the specified pattern","deprecated":"false","params":[{"name":"instant","type":"InstantInTime"},{"name":"pattern","type":"text"}],"returnType":"text"},{"name":"FormatTime","description":"Text representing the time of an instant","deprecated":"false","params":[{"name":"instant","type":"InstantInTime"}],"returnType":"text"},{"name":"GetMillis","description":"The instant in time measured as milliseconds since 1970.","deprecated":"false","params":[{"name":"instant","type":"InstantInTime"}],"returnType":"number"},{"name":"Hour","description":"The hour of the day","deprecated":"false","params":[{"name":"instant","type":"InstantInTime"}],"returnType":"number"},{"name":"MakeDate","description":"Allows the user to set the clock to be a date value.\nValid values for the month field are 1-12 and 1-31 for the day field.","deprecated":"false","params":[{"name":"year","type":"number"},{"name":"month","type":"number"},{"name":"day","type":"number"}],"returnType":"InstantInTime"},{"name":"MakeInstant","description":"An instant in time specified by MM/dd/YYYY hh:mm:ss or MM/dd/YYYY or hh:mm","deprecated":"false","params":[{"name":"from","type":"text"}],"returnType":"InstantInTime"},{"name":"MakeInstantFromMillis","description":"An instant in time specified by the milliseconds since 1970.","deprecated":"false","params":[{"name":"millis","type":"number"}],"returnType":"InstantInTime"},{"name":"MakeInstantFromParts","description":"Allows the user to set the date and time to be displayed when the clock opens.\nValid values for the month field are 1-12 and 1-31 for the day field.","deprecated":"false","params":[{"name":"year","type":"number"},{"name":"month","type":"number"},{"name":"day","type":"number"},{"name":"hour","type":"number"},{"name":"minute","type":"number"},{"name":"second","type":"number"}],"returnType":"InstantInTime"},{"name":"MakeTime","description":"Allows the user to set the time of the clock - Valid format is hh:mm:ss","deprecated":"false","params":[{"name":"hour","type":"number"},{"name":"minute","type":"number"},{"name":"second","type":"number"}],"returnType":"InstantInTime"},{"name":"Minute","description":"The minute of the hour","deprecated":"false","params":[{"name":"instant","type":"InstantInTime"}],"returnType":"number"},{"name":"Month","description":"The month of the year represented as a number from 1 to 12)","deprecated":"false","params":[{"name":"instant","type":"InstantInTime"}],"returnType":"number"},{"name":"MonthName","description":"The name of the month","deprecated":"false","params":[{"name":"instant","type":"InstantInTime"}],"returnType":"text"},{"name":"Now","description":"The current instant in time read from phone's clock","deprecated":"false","params":[],"returnType":"InstantInTime"},{"name":"Second","description":"The second of the minute","deprecated":"false","params":[{"name":"instant","type":"InstantInTime"}],"returnType":"number"},{"name":"SystemTime","description":"The phone's internal time","deprecated":"false","params":[],"returnType":"number"},{"name":"Weekday","description":"The day of the week represented as a number from 1 (Sunday) to 7 (Saturday)","deprecated":"false","params":[{"name":"instant","type":"InstantInTime"}],"returnType":"number"},{"name":"WeekdayName","description":"The name of the day of the week","deprecated":"false","params":[{"name":"instant","type":"InstantInTime"}],"returnType":"text"},{"name":"Year","description":"The year","deprecated":"false","params":[{"name":"instant","type":"InstantInTime"}],"returnType":"number"}]},{"type":"com.google.appinventor.components.runtime.CloudDB","name":"CloudDB","external":"false","version":"1","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"EXPERIMENTAL","helpString":"Non-visible component that communicates with CloudDB server to store and retrieve information.","helpUrl":"","showOnPalette":"true","nonVisible":"true","iconName":"images/cloudDB.png","androidMinSdk":19,"properties":[{"name":"DefaultRedisServer","editorType":"string","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"ProjectID","editorType":"string","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"RedisPort","editorType":"integer","defaultValue":"6381","propertyType":"common","editorArgs":[]},{"name":"RedisServer","editorType":"string","defaultValue":"DEFAULT","propertyType":"common","editorArgs":[]},{"name":"Token","editorType":"string","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"UseSSL","editorType":"boolean","defaultValue":"True","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"DefaultRedisServer","description":"The Default Redis Server to use.","type":"text","rw":"invisible","deprecated":"false"},{"name":"ProjectID","description":"Gets the ProjectID for this CloudDB project.","type":"text","rw":"read-only","deprecated":"false"},{"name":"RedisPort","description":"The Redis Server port to use. Defaults to 6381","type":"number","rw":"read-only","deprecated":"false"},{"name":"RedisServer","description":"The Redis Server to use to store data. A setting of \"DEFAULT\" means that the MIT server will be used.","type":"text","rw":"read-only","deprecated":"false"},{"name":"Token","description":"This field contains the authentication token used to login to the backed Redis server. For the \"DEFAULT\" server, do not edit this value, the system will fill it in for you. A system administrator may also provide a special value to you which can be used to share data between multiple projects from multiple people. If using your own Redis server, set a password in the server's config and enter it here.","type":"text","rw":"invisible","deprecated":"false"},{"name":"UseSSL","description":"Set to true to use SSL to talk to CloudDB/Redis server. This should be set to True for the \"DEFAULT\" server.","type":"boolean","rw":"invisible","deprecated":"false"}],"events":[{"name":"CloudDBError","description":"Indicates that an error occurred while communicating with the CloudDB Redis server.","deprecated":"false","params":[{"name":"message","type":"text"}]},{"name":"DataChanged","description":"Indicates that the data in the CloudDB project has changed.\n Launches an event with the tag and value that have been updated.","deprecated":"false","params":[{"name":"tag","type":"text"},{"name":"value","type":"any"}]},{"name":"FirstRemoved","description":"Event triggered by the \"RemoveFirstFromList\" function. The argument \"value\" is the object that was the first in the list, and which is now removed.","deprecated":"false","params":[{"name":"value","type":"any"}]},{"name":"GotValue","description":"Indicates that a GetValue request has succeeded.","deprecated":"false","params":[{"name":"tag","type":"text"},{"name":"value","type":"any"}]},{"name":"TagList","description":"Event triggered when we have received the list of known tags. Used with the \"GetTagList\" Function.","deprecated":"false","params":[{"name":"value","type":"list"}]}],"methods":[{"name":"AppendValueToList","description":"Append a value to the end of a list atomically. If two devices use this function simultaneously, both will be appended and no data lost.","deprecated":"false","params":[{"name":"tag","type":"text"},{"name":"itemToAdd","type":"any"}]},{"name":"ClearTag","description":"Remove the tag from CloudDB","deprecated":"false","params":[{"name":"tag","type":"text"}]},{"name":"CloudConnected","description":"returns True if we are on the network and will likely be able to connect to the CloudDB server.","deprecated":"false","params":[],"returnType":"boolean"},{"name":"GetTagList","description":"Get the list of tags for this application. When complete a \"TagList\" event will be triggered with the list of known tags.","deprecated":"false","params":[]},{"name":"GetValue","description":"Get the Value for a tag, doesn't return the value but will cause a GotValue event to fire when the value is looked up.","deprecated":"false","params":[{"name":"tag","type":"text"},{"name":"valueIfTagNotThere","type":"any"}]},{"name":"RemoveFirstFromList","description":"Return the first element of a list and atomically remove it. If two devices use this function simultaneously, one will get the first element and the the other will get the second element, or an error if there is no available element. When the element is available, the \"FirstRemoved\" event will be triggered.","deprecated":"false","params":[{"name":"tag","type":"text"}]},{"name":"StoreValue","description":"Store a value at a tag.","deprecated":"false","params":[{"name":"tag","type":"text"},{"name":"valueToStore","type":"any"}]}]},{"type":"com.google.appinventor.components.runtime.ContactPicker","name":"ContactPicker","external":"false","version":"11","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"SOCIAL","helpString":"A button that, when clicked on, displays a list of the contacts to choose among. After the user has made a selection, the following properties will be set to information about the chosen contact:ContactName: the contact's name EmailAddress: the contact's primary email address ContactUri: the contact's URI on the device EmailAddressList: a list of the contact's email addresses PhoneNumber: the contact's primary phone number (on Later Android Verisons)PhoneNumberList: a list of the contact's phone numbers (on Later Android Versions)Picture: the name of the file containing the contact's image, which can be used as a Picture property value for the Image or ImageSprite component.Other properties affect the appearance of the button (TextAlignment, BackgroundColor, etc.) and whether it can be clicked on (Enabled).\n
The ContactPicker component might not work on all phones. For example, on Android systems before system 3.0, it cannot pick phone numbers, and the list of email addresses will contain only one email.","helpUrl":"","showOnPalette":"true","nonVisible":"false","iconName":"","androidMinSdk":19,"properties":[{"name":"BackgroundColor","editorType":"color","defaultValue":"&HFF444444","propertyType":"common","editorArgs":[]},{"name":"BorderShadow","editorType":"boolean","defaultValue":"True","propertyType":"advanced","editorArgs":[]},{"name":"Enabled","editorType":"boolean","defaultValue":"True","propertyType":"common","editorArgs":[]},{"name":"FontBold","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]},{"name":"FontItalic","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]},{"name":"FontSize","editorType":"non_negative_float","defaultValue":"14.0","propertyType":"common","editorArgs":[]},{"name":"FontTypeface","editorType":"typeface","defaultValue":"0","propertyType":"common","editorArgs":[]},{"name":"FontTypefaceImport","editorType":"font_asset","defaultValue":"","propertyType":"advanced","editorArgs":[]},{"name":"HTMLFormat","editorType":"boolean","defaultValue":"False","propertyType":"advanced","editorArgs":[]},{"name":"Image","editorType":"image_asset","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"RotationAngle","editorType":"float","defaultValue":"0.0","propertyType":"advanced","editorArgs":[]},{"name":"Shape","editorType":"button_shape","defaultValue":"0","propertyType":"common","editorArgs":[]},{"name":"ShowFeedback","editorType":"boolean","defaultValue":"True","propertyType":"advanced","editorArgs":[]},{"name":"Text","editorType":"string","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"TextAlignment","editorType":"textalignment","defaultValue":"1","propertyType":"common","editorArgs":[]},{"name":"TextColor","editorType":"color","defaultValue":"&HFFFFFFFF","propertyType":"common","editorArgs":[]},{"name":"TouchColor","editorType":"color","defaultValue":"&HFFCCCCCC","propertyType":"advanced","editorArgs":[]},{"name":"Visible","editorType":"visibility","defaultValue":"True","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"BackgroundColor","description":"Returns the button's background color","type":"number","rw":"read-write","deprecated":"false"},{"name":"BorderShadow","description":"Returns true if the button have a outside border shadow on click.","type":"boolean","rw":"invisible","deprecated":"false"},{"name":"Column","description":"","type":"number","rw":"invisible","deprecated":"false"},{"name":"ContactName","description":"","type":"text","rw":"read-only","deprecated":"false"},{"name":"ContactUri","description":"URI that specifies the location of the contact on the device.","type":"text","rw":"read-only","deprecated":"false"},{"name":"EmailAddress","description":"","type":"text","rw":"read-only","deprecated":"false"},{"name":"EmailAddressList","description":"","type":"list","rw":"read-only","deprecated":"false"},{"name":"Enabled","description":"If set, user can tap check box to cause action.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"FontBold","description":"If set, button text is displayed in bold.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"FontItalic","description":"If set, button text is displayed in italics.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"FontSize","description":"Point size for button text.","type":"number","rw":"read-write","deprecated":"false"},{"name":"FontTypeface","description":"Font family for button text.","type":"number","rw":"invisible","deprecated":"false"},{"name":"FontTypefaceImport","description":"Set a custom font.","type":"text","rw":"write-only","deprecated":"false"},{"name":"HTMLFormat","description":"If true, then this button will show html text else it will show plain text. Note: Not all HTML is supported.","type":"boolean","rw":"invisible","deprecated":"false"},{"name":"Height","description":"","type":"number","rw":"read-write","deprecated":"false"},{"name":"HeightPercent","description":"","type":"number","rw":"write-only","deprecated":"false"},{"name":"Image","description":"Image to display on button.","type":"text","rw":"read-write","deprecated":"false"},{"name":"PhoneNumber","description":"","type":"text","rw":"read-only","deprecated":"false"},{"name":"PhoneNumberList","description":"","type":"list","rw":"read-only","deprecated":"false"},{"name":"Picture","description":"","type":"text","rw":"read-only","deprecated":"false"},{"name":"RotationAngle","description":"Sets the degrees that the button is rotated around the pivot point. Increasing values result in clockwise rotation.","type":"number","rw":"read-write","deprecated":"false"},{"name":"Row","description":"","type":"number","rw":"invisible","deprecated":"false"},{"name":"Shape","description":"Specifies the button's shape (default, rounded, rectangular, oval). The shape will not be visible if an Image is being displayed.","type":"number","rw":"invisible","deprecated":"false"},{"name":"ShowFeedback","description":"Specifies if a visual feedback should be shown for a button that as an image as background.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"Text","description":"Text to display on button.","type":"text","rw":"read-write","deprecated":"false"},{"name":"TextAlignment","description":"Left, center, or right.","type":"number","rw":"invisible","deprecated":"false"},{"name":"TextColor","description":"Color for button text.","type":"number","rw":"read-write","deprecated":"false"},{"name":"TouchColor","description":"Set the buttons touch color.","type":"number","rw":"read-write","deprecated":"false"},{"name":"Visible","description":"Specifies whether the component should be visible on the screen. Value is true if the component is showing and false if hidden.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"Width","description":"","type":"number","rw":"read-write","deprecated":"false"},{"name":"WidthPercent","description":"","type":"number","rw":"write-only","deprecated":"false"}],"events":[{"name":"AfterPicking","description":"Event to be raised after the picker activity returns its\n result and the properties have been filled in.","deprecated":"false","params":[{"name":"selection","type":"text"}]},{"name":"BeforePicking","description":"Event to raise when the button of the component is clicked or the list is shown\n using the Open block. This event occurs before the list of items is displayed, and\n can be used to prepare the list before it is shown.","deprecated":"false","params":[]},{"name":"GotFocus","description":"Indicates the cursor moved over the button so it is now possible to click it.","deprecated":"false","params":[]},{"name":"LostFocus","description":"Indicates the cursor moved away from the button so it is now no longer possible to click it.","deprecated":"false","params":[]},{"name":"TouchDown","description":"Indicates that the button was pressed down.","deprecated":"false","params":[]},{"name":"TouchUp","description":"Indicates that a button has been released.","deprecated":"false","params":[]}],"methods":[{"name":"ButtonClick","description":"Perform a button click as function.","deprecated":"false","params":[]},{"name":"Open","description":"Opens the picker, as though the user clicked on it.","deprecated":"false","params":[]},{"name":"SetShadow","description":"Place a blurred shadow of text underneath the text, drawn with the specified x, y, radius, color (e.g. -11, 12, 13, black.","deprecated":"false","params":[{"name":"x","type":"number"},{"name":"y","type":"number"},{"name":"radius","type":"number"},{"name":"color","type":"number"}]},{"name":"ViewContact","description":"view a contact via its URI","deprecated":"false","params":[{"name":"uri","type":"text"}]},{"name":"WithIconFromFontAwesome","description":"Show a image on the given postion near to the button. You can use following words for the position: 'Left', 'Right', 'Top' or 'Bottom'. Use the padding to add space between the icon and text. Use a material icon as the button icon without uploading a image resource into your project. You can find the icon name (or code) here at https://fontawesome.com/cheatsheet Use as example for a heart icon just 'f004'.","deprecated":"false","params":[{"name":"position","type":"text"},{"name":"iconName","type":"text"},{"name":"iconColor","type":"number"},{"name":"padding","type":"number"},{"name":"size","type":"number"}]},{"name":"WithIconFromMaterialFont","description":"Show a image on the given postion near to the button. You can use following words for the position: 'Left', 'Right', 'Top' or 'Bottom'. Use the padding to add space between the icon and text. Use a material icon as the button icon without uploading a image resource into your project. You can find the icon name (or code) here at https://material.io/icons","deprecated":"false","params":[{"name":"position","type":"text"},{"name":"iconName","type":"text"},{"name":"iconColor","type":"number"},{"name":"padding","type":"number"},{"name":"size","type":"number"}]},{"name":"WithIconFromPicture","description":"Show a image on the given postion near to the button. You can use following words for the position: 'Left', 'Right', 'Top' or 'Bottom'. Use the padding to add space between the icon and text.","deprecated":"false","params":[{"name":"position","type":"text"},{"name":"picture","type":"text"},{"name":"padding","type":"number"},{"name":"width","type":"number"},{"name":"height","type":"number"}]}]},{"type":"com.google.appinventor.components.runtime.DatePicker","name":"DatePicker","external":"false","version":"7","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"USERINTERFACE","helpString":"
A button that, when clicked on, launches a popup dialog to allow the user to select a date.
","helpUrl":"","showOnPalette":"true","nonVisible":"false","iconName":"","androidMinSdk":19,"properties":[{"name":"BackgroundColor","editorType":"color","defaultValue":"&HFF444444","propertyType":"common","editorArgs":[]},{"name":"BorderShadow","editorType":"boolean","defaultValue":"True","propertyType":"advanced","editorArgs":[]},{"name":"Enabled","editorType":"boolean","defaultValue":"True","propertyType":"common","editorArgs":[]},{"name":"FontBold","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]},{"name":"FontItalic","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]},{"name":"FontSize","editorType":"non_negative_float","defaultValue":"14.0","propertyType":"common","editorArgs":[]},{"name":"FontTypeface","editorType":"typeface","defaultValue":"0","propertyType":"common","editorArgs":[]},{"name":"FontTypefaceImport","editorType":"font_asset","defaultValue":"","propertyType":"advanced","editorArgs":[]},{"name":"HTMLFormat","editorType":"boolean","defaultValue":"False","propertyType":"advanced","editorArgs":[]},{"name":"Image","editorType":"image_asset","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"RotationAngle","editorType":"float","defaultValue":"0.0","propertyType":"advanced","editorArgs":[]},{"name":"Shape","editorType":"button_shape","defaultValue":"0","propertyType":"common","editorArgs":[]},{"name":"ShowFeedback","editorType":"boolean","defaultValue":"True","propertyType":"advanced","editorArgs":[]},{"name":"Text","editorType":"string","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"TextAlignment","editorType":"textalignment","defaultValue":"1","propertyType":"common","editorArgs":[]},{"name":"TextColor","editorType":"color","defaultValue":"&HFFFFFFFF","propertyType":"common","editorArgs":[]},{"name":"TouchColor","editorType":"color","defaultValue":"&HFFCCCCCC","propertyType":"advanced","editorArgs":[]},{"name":"Visible","editorType":"visibility","defaultValue":"True","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"BackgroundColor","description":"Returns the button's background color","type":"number","rw":"read-write","deprecated":"false"},{"name":"BorderShadow","description":"Returns true if the button have a outside border shadow on click.","type":"boolean","rw":"invisible","deprecated":"false"},{"name":"Column","description":"","type":"number","rw":"invisible","deprecated":"false"},{"name":"Day","description":"the Day of the month that was last picked using the DatePicker.","type":"number","rw":"read-only","deprecated":"false"},{"name":"Enabled","description":"If set, user can tap check box to cause action.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"FontBold","description":"If set, button text is displayed in bold.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"FontItalic","description":"If set, button text is displayed in italics.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"FontSize","description":"Point size for button text.","type":"number","rw":"read-write","deprecated":"false"},{"name":"FontTypeface","description":"Font family for button text.","type":"number","rw":"invisible","deprecated":"false"},{"name":"FontTypefaceImport","description":"Set a custom font.","type":"text","rw":"write-only","deprecated":"false"},{"name":"HTMLFormat","description":"If true, then this button will show html text else it will show plain text. Note: Not all HTML is supported.","type":"boolean","rw":"invisible","deprecated":"false"},{"name":"Height","description":"","type":"number","rw":"read-write","deprecated":"false"},{"name":"HeightPercent","description":"","type":"number","rw":"write-only","deprecated":"false"},{"name":"Image","description":"Image to display on button.","type":"text","rw":"read-write","deprecated":"false"},{"name":"Instant","description":"the instant of the date that was last picked using the DatePicker.","type":"InstantInTime","rw":"read-only","deprecated":"false"},{"name":"Month","description":"the number of the Month that was last picked using the DatePicker. Note that months start in 1 = January, 12 = December.","type":"number","rw":"read-only","deprecated":"false"},{"name":"MonthInText","description":"Returns the name of the Month that was last picked using the DatePicker, in textual format.","type":"text","rw":"read-only","deprecated":"false"},{"name":"RotationAngle","description":"Sets the degrees that the button is rotated around the pivot point. Increasing values result in clockwise rotation.","type":"number","rw":"read-write","deprecated":"false"},{"name":"Row","description":"","type":"number","rw":"invisible","deprecated":"false"},{"name":"Shape","description":"Specifies the button's shape (default, rounded, rectangular, oval). The shape will not be visible if an Image is being displayed.","type":"number","rw":"invisible","deprecated":"false"},{"name":"ShowFeedback","description":"Specifies if a visual feedback should be shown for a button that as an image as background.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"Text","description":"Text to display on button.","type":"text","rw":"read-write","deprecated":"false"},{"name":"TextAlignment","description":"Left, center, or right.","type":"number","rw":"invisible","deprecated":"false"},{"name":"TextColor","description":"Color for button text.","type":"number","rw":"read-write","deprecated":"false"},{"name":"TouchColor","description":"Set the buttons touch color.","type":"number","rw":"read-write","deprecated":"false"},{"name":"Visible","description":"Specifies whether the component should be visible on the screen. Value is true if the component is showing and false if hidden.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"Width","description":"","type":"number","rw":"read-write","deprecated":"false"},{"name":"WidthPercent","description":"","type":"number","rw":"write-only","deprecated":"false"},{"name":"Year","description":"the Year that was last picked using the DatePicker","type":"number","rw":"read-only","deprecated":"false"}],"events":[{"name":"AfterDateSet","description":"Event that runs after the user chooses a Date in the dialog","deprecated":"false","params":[]},{"name":"GotFocus","description":"Indicates the cursor moved over the button so it is now possible to click it.","deprecated":"false","params":[]},{"name":"LostFocus","description":"Indicates the cursor moved away from the button so it is now no longer possible to click it.","deprecated":"false","params":[]},{"name":"TouchDown","description":"Indicates that the button was pressed down.","deprecated":"false","params":[]},{"name":"TouchUp","description":"Indicates that a button has been released.","deprecated":"false","params":[]}],"methods":[{"name":"ButtonClick","description":"Perform a button click as function.","deprecated":"false","params":[]},{"name":"LaunchPicker","description":"Launches the DatePicker popup.","deprecated":"false","params":[]},{"name":"SetDateToDisplay","description":"Allows the user to set the date to be displayed when the date picker opens.\nValid values for the month field are 1-12 and 1-31 for the day field.","deprecated":"false","params":[{"name":"year","type":"number"},{"name":"month","type":"number"},{"name":"day","type":"number"}]},{"name":"SetDateToDisplayFromInstant","description":"Allows the user to set the date from the instant to be displayed when the date picker opens.","deprecated":"false","params":[{"name":"instant","type":"InstantInTime"}]},{"name":"SetShadow","description":"Place a blurred shadow of text underneath the text, drawn with the specified x, y, radius, color (e.g. -11, 12, 13, black.","deprecated":"false","params":[{"name":"x","type":"number"},{"name":"y","type":"number"},{"name":"radius","type":"number"},{"name":"color","type":"number"}]},{"name":"WithIconFromFontAwesome","description":"Show a image on the given postion near to the button. You can use following words for the position: 'Left', 'Right', 'Top' or 'Bottom'. Use the padding to add space between the icon and text. Use a material icon as the button icon without uploading a image resource into your project. You can find the icon name (or code) here at https://fontawesome.com/cheatsheet Use as example for a heart icon just 'f004'.","deprecated":"false","params":[{"name":"position","type":"text"},{"name":"iconName","type":"text"},{"name":"iconColor","type":"number"},{"name":"padding","type":"number"},{"name":"size","type":"number"}]},{"name":"WithIconFromMaterialFont","description":"Show a image on the given postion near to the button. You can use following words for the position: 'Left', 'Right', 'Top' or 'Bottom'. Use the padding to add space between the icon and text. Use a material icon as the button icon without uploading a image resource into your project. You can find the icon name (or code) here at https://material.io/icons","deprecated":"false","params":[{"name":"position","type":"text"},{"name":"iconName","type":"text"},{"name":"iconColor","type":"number"},{"name":"padding","type":"number"},{"name":"size","type":"number"}]},{"name":"WithIconFromPicture","description":"Show a image on the given postion near to the button. You can use following words for the position: 'Left', 'Right', 'Top' or 'Bottom'. Use the padding to add space between the icon and text.","deprecated":"false","params":[{"name":"position","type":"text"},{"name":"picture","type":"text"},{"name":"padding","type":"number"},{"name":"width","type":"number"},{"name":"height","type":"number"}]}]},{"type":"com.google.appinventor.components.runtime.DeviceTools","name":"DeviceTools","external":"false","version":"4","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"UTILITIES","helpString":"Component for DeviceTools","helpUrl":"","showOnPalette":"true","nonVisible":"true","iconName":"images/devicetools.png","androidMinSdk":19,"properties":[{"name":"ShowSuccessToast","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"AndroidVersion","description":"Get the android version of device.","type":"text","rw":"read-only","deprecated":"false"},{"name":"ApiVersion","description":"The user-visible SDK version of the framework.","type":"number","rw":"read-only","deprecated":"false"},{"name":"Board","description":"The name of the underlying board, like \"goldfish\".","type":"text","rw":"read-only","deprecated":"false"},{"name":"BootloaderVersion","description":"The system bootloader version number.","type":"text","rw":"read-only","deprecated":"false"},{"name":"Brand","description":"The consumer-visible brand with which the product/hardware will be associated, if any.","type":"text","rw":"read-only","deprecated":"false"},{"name":"BuildNumber","description":"Get the build number(Software) of the device.","type":"text","rw":"read-only","deprecated":"false"},{"name":"CountryCode","description":"The result is the code of your country.","type":"text","rw":"read-only","deprecated":"false"},{"name":"DeviceName","description":"The name of the industrial design.","type":"text","rw":"read-only","deprecated":"false"},{"name":"Fingerprint","description":"A string that uniquely identifies this build.","type":"text","rw":"read-only","deprecated":"false"},{"name":"GetDeviceId","description":"Returns the unique device specific 'AndroidID'. Developed by Cian.","type":"text","rw":"read-only","deprecated":"false"},{"name":"Hardware","description":"The name of the hardware (from the kernel command line or /proc).","type":"text","rw":"read-only","deprecated":"false"},{"name":"Id","description":"Either a changelist number, or a label like \"M4-rc20\".","type":"text","rw":"read-only","deprecated":"false"},{"name":"LanguageCode","description":"The result is the code of your device language.","type":"text","rw":"read-only","deprecated":"false"},{"name":"Manufacturer","description":"The manufacturer of the product/hardware.","type":"text","rw":"read-only","deprecated":"false"},{"name":"ModelName","description":"The end-user-visible name for the end product.","type":"text","rw":"read-only","deprecated":"false"},{"name":"Product","description":"The name of the overall product.","type":"text","rw":"read-only","deprecated":"false"},{"name":"RadioVersion","description":"Returns the version string for the radio firmware. May return null (if, for instance, the radio is not currently on).","type":"text","rw":"read-only","deprecated":"false"},{"name":"Serial","description":"DEPRECATED. DO NOT USE THIS ANYMORE. USE 'Get Serial' INSTEAD!","type":"text","rw":"read-only","deprecated":"true"},{"name":"ShowSuccessToast","description":"Returns true if 'Show Success Toast' is enabled.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"Tags","description":"Comma-separated tags describing the build, like \"unsigned,debug\".","type":"text","rw":"read-only","deprecated":"false"},{"name":"Type","description":"The type of build, like \"user\" or \"eng\".","type":"text","rw":"read-only","deprecated":"false"}],"events":[{"name":"GotIMEI","description":"Event to get the IMEI after it was requested.","deprecated":"false","params":[{"name":"imei","type":"text"}]},{"name":"GotSerial","description":"Event to get the serial number after it was requested.","deprecated":"false","params":[{"name":"serial","type":"text"}]}],"methods":[{"name":"CheckForDangerousAPK","description":"Returns TRUE if one of 12 known patching or root emulating packages is installed. The name of the package is not returned, so the user does not know which package name to change. Developed by Cian.","deprecated":"false","params":[],"returnType":"boolean"},{"name":"Copy","description":"Copy text to clipboard. In case 'Show Success Toast' is true, the toast with your message will be shown after copying a text to the clipboard.","deprecated":"false","params":[{"name":"text","type":"text"},{"name":"successToastMessage","type":"text"}]},{"name":"GetIMEI","description":"Get the IMEI of the device. The result will be then at the 'Got IMEI' event.","deprecated":"false","params":[]},{"name":"GetSerial","description":"A hardware serial number, if available. Alphanumeric only, case-insensitive. For apps targeting SDK higher than N_MR1 this field is set to UNKNOWN.","deprecated":"false","params":[]},{"name":"Parse","description":"Parse a text between two strings. Example: text = abcdef, start = a, end = d, result = bc. If there is a problem the 'if Text Not Found' will be returned.","deprecated":"false","params":[{"name":"text","type":"text"},{"name":"start","type":"text"},{"name":"end","type":"text"},{"name":"ifTextNotFound","type":"text"}],"returnType":"text"},{"name":"Paste","description":"Paste text from clipboard. In case 'Show Success Toast' is true, the toast with your message will be shown after pasting a text from the clipboard.","deprecated":"false","params":[{"name":"successToastMessage","type":"text"}],"returnType":"text"},{"name":"isADBDebuggingEnabled","description":"This returns TRUE if ADB debugging is enabled, which could be a sign of hacking your app, or a compromised device. Developed by Cian.","deprecated":"false","params":[],"returnType":"boolean"},{"name":"isEmulator","description":"Returns TRUE if the device operating on an emulator. Developed by Cian.","deprecated":"false","params":[],"returnType":"boolean"},{"name":"isPlayStoreInstalled","description":"Returns TRUE if the app was installed from Play Store. Developed by Cian.","deprecated":"false","params":[],"returnType":"boolean"}]},{"type":"com.google.appinventor.components.runtime.Download","name":"Download","external":"false","version":"2","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"CONNECTIVITY","helpString":"The Download component is a non-visible component that allows users to downlod any file to the device","helpUrl":"","showOnPalette":"true","nonVisible":"true","iconName":"images/download.png","androidMinSdk":19,"properties":[{"name":"AllowedOverRoaming","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]},{"name":"Description","editorType":"string","defaultValue":"Downloading file..","propertyType":"common","editorArgs":[]},{"name":"DownloadUrl","editorType":"string","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"RequiresCharging","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]},{"name":"RequiresDeviceIdle","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]},{"name":"SaveFileAs","editorType":"string","defaultValue":"NewFile.png","propertyType":"common","editorArgs":[]},{"name":"ScanningByMediaScanner","editorType":"boolean","defaultValue":"True","propertyType":"common","editorArgs":[]},{"name":"ShowNotification","editorType":"boolean","defaultValue":"True","propertyType":"common","editorArgs":[]},{"name":"SuppressWarnings","editorType":"boolean","defaultValue":"True","propertyType":"common","editorArgs":[]},{"name":"Title","editorType":"string","defaultValue":"Download..","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"AllowedOverRoaming","description":"Set whether this download may proceed over a roaming connection.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"Description","description":"Set the desription that you will see in the download notification.","type":"text","rw":"read-write","deprecated":"false"},{"name":"DownloadUrl","description":"Set here the url to the file that you want to download.","type":"text","rw":"read-write","deprecated":"false"},{"name":"RequiresCharging","description":"Specify that to run this download, the device needs to be plugged in. Works only for devices with api >= 24.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"RequiresDeviceIdle","description":"Specify that to run, the download needs the device to be in idle mode. Idle mode is a loose definition provided by the system, which means that the device is not in use, and has not been in use for some time. Works only for devices with api >= 24.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"SaveFileAs","description":"Set here the new filename for the file that you want to download.","type":"text","rw":"read-write","deprecated":"false"},{"name":"ScanningByMediaScanner","description":"If the file to be downloaded is to be scanned by MediaScanner.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"ShowNotification","description":"Control whether a system notification is posted by the download manager while this download is running or when it is completed.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"SuppressWarnings","description":"If false you will see a toast message with a error message when a error is occurred.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"Title","description":"Set the title that you will see in the download notification.","type":"text","rw":"read-write","deprecated":"false"},{"name":"isDownloadManagerAvailable","description":"This function is deprecated. Do not use it anymore. We will remove it in the future. Since we support min API 14 the download manager is by default available. The download manager was added in API 9.","type":"boolean","rw":"read-only","deprecated":"true"}],"events":[{"name":"DownloadComplete","description":"Event to detect if the download is successful finished. You can use the \"filePath\" to use the downloaded file into your app. The \"fileSize\" will be returned in bytes.","deprecated":"false","params":[{"name":"filePath","type":"text"},{"name":"fileName","type":"text"},{"name":"fileSize","type":"number"}]},{"name":"DownloadProgress","description":"Get the progress (in percentage) of the current download task.","deprecated":"false","params":[{"name":"progress","type":"number"}]},{"name":"GotFileSize","description":"Event to detect file size is ready to be used.","deprecated":"false","params":[{"name":"size","type":"number"}]},{"name":"NotificationClicked","description":"Event to detect when the user clicks on a running download, either from a system notification or from the downloads UI.","deprecated":"false","params":[]}],"methods":[{"name":"Download","description":"Start the download process of the given download url.","deprecated":"false","params":[]},{"name":"GetFileSize","description":"Get the file size (in bytes) of a file that is stored online or on your device. The block detect automatic if it is a online path or not. You will get the result in the \"Got File Size\" event.","deprecated":"false","params":[{"name":"path","type":"text"}]},{"name":"ShowDownload","description":"You can open the download folder with this block.","deprecated":"false","params":[]}]},{"type":"com.google.appinventor.components.runtime.EmailPicker","name":"EmailPicker","external":"false","version":"5","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"SOCIAL","helpString":"An EmailPicker is a kind of text box. If the user begins entering the name or email address of a contact, the phone will show a dropdown menu of choices that complete the entry. If there are many contacts, the dropdown can take several seconds to appear, and can show intermediate results while the matches are being computed.The initial contents of the text box and the contents< after user entry is in the Text property. If the Text property is initially empty, the contents of the Hint property will be faintly shown in the text box as a hint to the user.
Other properties affect the appearance of the text box (TextAlignment, BackgroundColor, etc.) and whether it can be used (Enabled).
Text boxes like this are usually used with Load a feature collection in GeoJSON format from the given url. On success, the event GotFeatures will be raised with the given url and a list of the features parsed from the GeoJSON as a list of (key, value) pairs. On failure, the LoadError event will be raised with any applicable HTTP response code and error message. A non-visible component that communicates with Google Fusion Tables. Fusion Tables let you store, share, query and visualize data tables; this component lets you query, create, and modify these tables. This component uses the Fusion Tables API V2.0. Applications using Fusion Tables must authentication to Google's servers. There are two ways this can be done. The first way uses an API Key which you the developer obtain (see below). With this approach end-users must also login to access a Fusion Table. The second approach is to use a Service Account. With this approach you create credentials and a special \"Service Account Email Address\" which you obtain from the Google APIs Console. You then tell the Fusion Table Control the name of the Service Account Email address and upload the secret key as an asset to your application and set the KeyFile property to point at this file. Finally you check the \"UseServiceAuthentication\" checkbox in the designer. When using a Service Account, end-users do not need to login to use Fusion Tables, your service account authenticates all access. To get an API key, follow these instructions. Your API Key will be near the bottom of that pane in the section called \"Simple API Access\".You will have to provide that key as the value for the ApiKey property in your Fusiontables app. Once you have an API key, set the value of the Query property to a valid Fusiontables SQL query and call SendQuery to execute the query. App Inventor will send the query to the Fusion Tables server and the GotResult block will fire when a result is returned from the server.Query results will be returned in CSV format, and can be converted to list format using the \"list from csv table\" or \"list from csv row\" blocks. Note that you do not need to worry about UTF-encoding the query. But you do need to make sure the query follows the syntax described in the reference manual, which means that things like capitalization for names of columns matters, and that single quotes must be used around column names if there are spaces in them. For legal query formats and examples, see the Fusion Tables API v2.0 reference manual. Note that you do not need to worry about UTF-encoding the query. But you do need to make sure it follows the syntax described in the reference manual, which means that things like capitalization for names of columns matters, and that single quotes need to be used around column names if there are spaces in them. Non-visible component that measures the force of gravity in m/s2 that is applied to a device on all three physical axes (x, y, z). Non-visible component that can measure angular velocity in three dimensions in units of degrees per second. In order to function, the component must have its A formatting element in which to place components that should be displayed from left to right. If you wish to have components displayed one over another, use A formatting element in which to place components that should be displayed from left to right. If you wish to have components displayed one over another, use This version is scrollable.","helpUrl":"","showOnPalette":"true","nonVisible":"false","iconName":"images/horizontalScroll.png","androidMinSdk":19,"properties":[{"name":"AlignHorizontal","editorType":"horizontal_alignment","defaultValue":"1","propertyType":"common","editorArgs":[]},{"name":"AlignVertical","editorType":"vertical_alignment","defaultValue":"1","propertyType":"common","editorArgs":[]},{"name":"BackgroundColor","editorType":"color","defaultValue":"&H00000000","propertyType":"common","editorArgs":[]},{"name":"Clickable","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]},{"name":"Image","editorType":"image_asset","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"Scrollbar","editorType":"boolean","defaultValue":"True","propertyType":"common","editorArgs":[]},{"name":"UseRoundCard","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]},{"name":"Visible","editorType":"visibility","defaultValue":"True","propertyType":"common","editorArgs":[]},{"name":"isCard","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"AlignHorizontal","description":"A number that encodes how contents of the arrangement are aligned horizontally. The choices are: 1 = left aligned, 2 = right aligned, 3 = horizontally centered. Alignment has no effect if the arrangement's width is automatic.","type":"number","rw":"read-write","deprecated":"false"},{"name":"AlignVertical","description":"A number that encodes how the contents of the arrangement are aligned vertically. The choices are: 1 = aligned at the top, 2 = vertically centered, 3 = aligned at the bottom. Alignment has no effect if the arrangement's height is automatic.","type":"number","rw":"read-write","deprecated":"false"},{"name":"BackgroundColor","description":"Returns the component's background color","type":"number","rw":"read-write","deprecated":"false"},{"name":"Clickable","description":"Set the component clickable or not clickable.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"Column","description":"","type":"number","rw":"invisible","deprecated":"false"},{"name":"FullClickable","description":"","type":"boolean","rw":"invisible","deprecated":"true"},{"name":"Height","description":"","type":"number","rw":"read-write","deprecated":"false"},{"name":"HeightPercent","description":"","type":"number","rw":"write-only","deprecated":"false"},{"name":"Image","description":"Specifies the path of the component's image. If there is both an Image and a BackgroundColor, only the Image will be visible.","type":"text","rw":"read-write","deprecated":"false"},{"name":"Row","description":"","type":"number","rw":"invisible","deprecated":"false"},{"name":"Scrollbar","description":"Whether to display a scrollbar","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"UseRoundCard","description":"If enabled the card layout will have then round corners.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"Visible","description":"Specifies whether the component should be visible on the screen. Value is true if the component is showing and false if hidden.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"Width","description":"","type":"number","rw":"read-write","deprecated":"false"},{"name":"WidthPercent","description":"","type":"number","rw":"write-only","deprecated":"false"},{"name":"isCard","description":"If enabled the arrangement will be convert to a card view. You can detect clicks on it with the \"Click\" event.","type":"boolean","rw":"read-write","deprecated":"false"}],"events":[{"name":"Click","description":"Click listener event.","deprecated":"false","params":[]},{"name":"LongClick","description":"Long click listener event.","deprecated":"false","params":[]}],"methods":[]},{"type":"com.google.appinventor.components.runtime.Image","name":"Image","external":"false","version":"5","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"USERINTERFACE","helpString":"Component for displaying images. The picture to display, and other aspects of the Image's appearance, can be specified in the Designer or in the Blocks Editor. You can also add gif images.","helpUrl":"","showOnPalette":"true","nonVisible":"false","iconName":"","androidMinSdk":19,"properties":[{"name":"Clickable","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]},{"name":"Picture","editorType":"image_asset","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"RotationAngle","editorType":"float","defaultValue":"0.0","propertyType":"common","editorArgs":[]},{"name":"ScalePictureToFit","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]},{"name":"Visible","editorType":"visibility","defaultValue":"True","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"Animation","description":"This is a limited form of animation that can attach a small number of motion types to images. The allowable motions are ScrollRightSlow, ScrollRight, ScrollRightFast, ScrollLeftSlow, ScrollLeft, ScrollLeftFast, and Stop","type":"text","rw":"write-only","deprecated":"false"},{"name":"Clickable","description":"Set the component clickable or not clickable.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"Column","description":"","type":"number","rw":"invisible","deprecated":"false"},{"name":"Height","description":"","type":"number","rw":"read-write","deprecated":"false"},{"name":"HeightPercent","description":"","type":"number","rw":"write-only","deprecated":"false"},{"name":"ImageTintColor","description":"Change the image tint color. You can use too alpha values if you want with the 'make a list' block. Do not forget to use the 'make color' block together with the 'make a list' block.","type":"number","rw":"read-write","deprecated":"false"},{"name":"Picture","description":"","type":"text","rw":"read-write","deprecated":"false"},{"name":"RotationAngle","description":"The angle at which the image picture appears rotated. This rotation does not appear on the designer screen, only on the device.","type":"number","rw":"read-write","deprecated":"false"},{"name":"Row","description":"","type":"number","rw":"invisible","deprecated":"false"},{"name":"ScalePictureToFit","description":"Specifies whether the image should be resized to match the size of the ImageView.","type":"boolean","rw":"write-only","deprecated":"false"},{"name":"Scaling","description":"This property determines how the picture scales according to the Height or Width of the Image. Scale proportionally (0) preserves the picture aspect ratio. Scale to fit (1) matches the Image area, even if the aspect ratio changes.","type":"number","rw":"read-write","deprecated":"false"},{"name":"Visible","description":"Specifies whether the component should be visible on the screen. Value is true if the component is showing and false if hidden.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"Width","description":"","type":"number","rw":"read-write","deprecated":"false"},{"name":"WidthPercent","description":"","type":"number","rw":"write-only","deprecated":"false"}],"events":[{"name":"Click","description":"Event to detect that a user has done a simple \"Click\".","deprecated":"false","params":[]},{"name":"LongClick","description":"Event to detect that a user has done a simple \"Long Click\".","deprecated":"false","params":[]}],"methods":[{"name":"ClearImageTintColor","description":"Clear the image tint color.","deprecated":"false","params":[]}]},{"type":"com.google.appinventor.components.runtime.ImageEditor","name":"ImageEditor","external":"false","version":"1","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"ANIMATION","helpString":"Non-visible component that allows users to edit images.","helpUrl":"","showOnPalette":"true","nonVisible":"true","iconName":"images/imageEditor.png","androidMinSdk":19,"properties":[{"name":"SaveNewImageAs","editorType":"string","defaultValue":"NewImage.png","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"SaveNewImageAs","description":"Save the new created image to a folder/ name of your choice.","type":"text","rw":"read-write","deprecated":"false"}],"events":[],"methods":[{"name":"BlurEffect","description":"This methods creates a blur effect.","deprecated":"false","params":[{"name":"imageA","type":"text"},{"name":"scale","type":"number"},{"name":"radius","type":"number"}],"returnType":"text"},{"name":"ColorBoostEffect","description":"Color boost technique is basically based on color filtering, which is to increase the intensity of a single color channel. For example: type = green/ blue or red; percent = 40%.","deprecated":"false","params":[{"name":"imageA","type":"text"},{"name":"type","type":"text"},{"name":"percent","type":"number"}],"returnType":"text"},{"name":"ColorFilter","description":"Set a color filter to your image. For example: red = 30; green = 40; blue = 20.","deprecated":"false","params":[{"name":"imageA","type":"text"},{"name":"red","type":"number"},{"name":"green","type":"number"},{"name":"blue","type":"number"}],"returnType":"text"},{"name":"FlipPicture","description":"Flip your image vertical or horizontal. For example: type = 1 (vertical); type = 2 (horizontal).","deprecated":"false","params":[{"name":"imageA","type":"text"},{"name":"type","type":"number"}],"returnType":"text"},{"name":"GammaEffect","description":"Set a gamma effect to your image. For example: red = 5; green = 10; blue = 20.","deprecated":"false","params":[{"name":"imageA","type":"text"},{"name":"red","type":"number"},{"name":"green","type":"number"},{"name":"blue","type":"number"}],"returnType":"text"},{"name":"GreyscaleEffect","description":"Grayscale is a simple image effect that changes colors to grayscale by default.","deprecated":"false","params":[{"name":"imageA","type":"text"}],"returnType":"text"},{"name":"HighlightEffect","description":"Set a highlight effect to your image.","deprecated":"false","params":[{"name":"imageA","type":"text"}],"returnType":"text"},{"name":"HueFilter","description":"Change the hue of an image. For example: level = 1 or 2 or 3 or 4 etc.","deprecated":"false","params":[{"name":"imageA","type":"text"},{"name":"level","type":"number"}],"returnType":"text"},{"name":"ImageRotation","description":"Rotate the image to the degree you need it. For example: degree = 100.","deprecated":"false","params":[{"name":"imageA","type":"text"},{"name":"degree","type":"number"}],"returnType":"text"},{"name":"InvertEffect","description":"This effect inverts your image.","deprecated":"false","params":[{"name":"imageA","type":"text"}],"returnType":"text"},{"name":"MergeTwoImages","description":"This methods creates a new side by side horizontal image.","deprecated":"false","params":[{"name":"leftImage","type":"text"},{"name":"rightImage","type":"text"}],"returnType":"text"},{"name":"Pixelate","description":"This methods creates a pixelate image effect. Use as example as pixelation Amount '1' for a hugh pixel effect and '99' for a almost not visible pixel effect.","deprecated":"false","params":[{"name":"imageA","type":"text"},{"name":"pixelationAmount","type":"number"}],"returnType":"text"},{"name":"RoundCorner","description":"Set a round corner to your image. For example: round = 45.","deprecated":"false","params":[{"name":"imageA","type":"text"},{"name":"round","type":"number"}],"returnType":"text"},{"name":"ScaleCenterCrop","description":"This methods creates a new scale center crop image.","deprecated":"false","params":[{"name":"imageA","type":"text"},{"name":"height","type":"number"},{"name":"width","type":"number"}],"returnType":"text"},{"name":"SepiaToningEffect","description":"Set a sepia toning effect to your image. For example: depth = 20; red = 10; green = 20; blue = 25.","deprecated":"false","params":[{"name":"imageA","type":"text"},{"name":"depth","type":"number"},{"name":"red","type":"number"},{"name":"green","type":"number"},{"name":"blue","type":"number"}],"returnType":"text"},{"name":"SetBrightness","description":"Change the brightness of your image. For example: value = 50 (maximum = 255=100% brightness).","deprecated":"false","params":[{"name":"imageA","type":"text"},{"name":"value","type":"number"}],"returnType":"text"},{"name":"SetColorDepth","description":"Change the color depth of an image as you wish. For example: bitOffset = 32 (bit) or bitOffset = 16 (bit).","deprecated":"false","params":[{"name":"imageA","type":"text"},{"name":"bitOffset","type":"number"}],"returnType":"text"},{"name":"SetContrast","description":"This changes the contrast of your image. For example: value = 1.0 means normal picture contrast. Below 1.0 like as example 0.7 means dark contrast, above 1.0 as example 1.5 means light contrast.","deprecated":"false","params":[{"name":"imageA","type":"text"},{"name":"value","type":"number"}],"returnType":"text"},{"name":"ShadingFilter","description":"Make a new image with a shading filter. For example: shadingColor = green(rgb value).","deprecated":"false","params":[{"name":"imageA","type":"text"},{"name":"shadingColor","type":"number"}],"returnType":"text"},{"name":"TintColorEffect","description":"That's a pretty new other cool effect. It changes the tint color of your image. For example: degree = 100.","deprecated":"false","params":[{"name":"imageA","type":"text"},{"name":"degree","type":"number"}],"returnType":"text"},{"name":"WatermarkEffect","description":"Set a watermark effect to an image and change the positon/size or color of the text. For example: text = hello; textSize = 25; textColor = red(rgb value); textAlphaValue = 255 (255= 100% visible,127.5= 50% visible, 0= 0% visible); pointX = 50; pointY = 100; text underline(boolean) = true or false.","deprecated":"false","params":[{"name":"imageA","type":"text"},{"name":"text","type":"text"},{"name":"textSize","type":"number"},{"name":"textColor","type":"number"},{"name":"textUnderline","type":"boolean"},{"name":"textAlphaValue","type":"number"},{"name":"pointX","type":"number"},{"name":"pointY","type":"number"}],"returnType":"text"},{"name":"isLandscape","description":"Return true if image is in landscape format, else return false.","deprecated":"false","params":[{"name":"image","type":"text"}],"returnType":"boolean"},{"name":"isPortrait","description":"Return true if image is in portrait format, else return false.","deprecated":"false","params":[{"name":"image","type":"text"}],"returnType":"boolean"},{"name":"isSquare","description":"Return true if image is in square format (means as high as wide or as wide as high), else return false.","deprecated":"false","params":[{"name":"image","type":"text"}],"returnType":"boolean"}]},{"type":"com.google.appinventor.components.runtime.ImagePicker","name":"ImagePicker","external":"false","version":"10","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"MEDIA","helpString":"A special-purpose button. When the user taps an image picker, the device's image gallery appears, and the user can choose an image.","helpUrl":"","showOnPalette":"true","nonVisible":"false","iconName":"","androidMinSdk":19,"properties":[{"name":"BackgroundColor","editorType":"color","defaultValue":"&HFF444444","propertyType":"common","editorArgs":[]},{"name":"BorderShadow","editorType":"boolean","defaultValue":"True","propertyType":"advanced","editorArgs":[]},{"name":"Enabled","editorType":"boolean","defaultValue":"True","propertyType":"common","editorArgs":[]},{"name":"FontBold","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]},{"name":"FontItalic","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]},{"name":"FontSize","editorType":"non_negative_float","defaultValue":"14.0","propertyType":"common","editorArgs":[]},{"name":"FontTypeface","editorType":"typeface","defaultValue":"0","propertyType":"common","editorArgs":[]},{"name":"FontTypefaceImport","editorType":"font_asset","defaultValue":"","propertyType":"advanced","editorArgs":[]},{"name":"HTMLFormat","editorType":"boolean","defaultValue":"False","propertyType":"advanced","editorArgs":[]},{"name":"Image","editorType":"image_asset","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"RotationAngle","editorType":"float","defaultValue":"0.0","propertyType":"advanced","editorArgs":[]},{"name":"Shape","editorType":"button_shape","defaultValue":"0","propertyType":"common","editorArgs":[]},{"name":"ShowFeedback","editorType":"boolean","defaultValue":"True","propertyType":"advanced","editorArgs":[]},{"name":"Text","editorType":"string","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"TextAlignment","editorType":"textalignment","defaultValue":"1","propertyType":"common","editorArgs":[]},{"name":"TextColor","editorType":"color","defaultValue":"&HFFFFFFFF","propertyType":"common","editorArgs":[]},{"name":"TouchColor","editorType":"color","defaultValue":"&HFFCCCCCC","propertyType":"advanced","editorArgs":[]},{"name":"Visible","editorType":"visibility","defaultValue":"True","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"BackgroundColor","description":"Returns the button's background color","type":"number","rw":"read-write","deprecated":"false"},{"name":"BorderShadow","description":"Returns true if the button have a outside border shadow on click.","type":"boolean","rw":"invisible","deprecated":"false"},{"name":"Column","description":"","type":"number","rw":"invisible","deprecated":"false"},{"name":"Enabled","description":"If set, user can tap check box to cause action.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"FontBold","description":"If set, button text is displayed in bold.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"FontItalic","description":"If set, button text is displayed in italics.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"FontSize","description":"Point size for button text.","type":"number","rw":"read-write","deprecated":"false"},{"name":"FontTypeface","description":"Font family for button text.","type":"number","rw":"invisible","deprecated":"false"},{"name":"FontTypefaceImport","description":"Set a custom font.","type":"text","rw":"write-only","deprecated":"false"},{"name":"HTMLFormat","description":"If true, then this button will show html text else it will show plain text. Note: Not all HTML is supported.","type":"boolean","rw":"invisible","deprecated":"false"},{"name":"Height","description":"","type":"number","rw":"read-write","deprecated":"false"},{"name":"HeightPercent","description":"","type":"number","rw":"write-only","deprecated":"false"},{"name":"Image","description":"Image to display on button.","type":"text","rw":"read-write","deprecated":"false"},{"name":"RotationAngle","description":"Sets the degrees that the button is rotated around the pivot point. Increasing values result in clockwise rotation.","type":"number","rw":"read-write","deprecated":"false"},{"name":"Row","description":"","type":"number","rw":"invisible","deprecated":"false"},{"name":"Selection","description":"Path to the file containing the image that was selected.","type":"text","rw":"read-only","deprecated":"false"},{"name":"Shape","description":"Specifies the button's shape (default, rounded, rectangular, oval). The shape will not be visible if an Image is being displayed.","type":"number","rw":"invisible","deprecated":"false"},{"name":"ShowFeedback","description":"Specifies if a visual feedback should be shown for a button that as an image as background.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"Text","description":"Text to display on button.","type":"text","rw":"read-write","deprecated":"false"},{"name":"TextAlignment","description":"Left, center, or right.","type":"number","rw":"invisible","deprecated":"false"},{"name":"TextColor","description":"Color for button text.","type":"number","rw":"read-write","deprecated":"false"},{"name":"TouchColor","description":"Set the buttons touch color.","type":"number","rw":"read-write","deprecated":"false"},{"name":"Visible","description":"Specifies whether the component should be visible on the screen. Value is true if the component is showing and false if hidden.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"Width","description":"","type":"number","rw":"read-write","deprecated":"false"},{"name":"WidthPercent","description":"","type":"number","rw":"write-only","deprecated":"false"}],"events":[{"name":"AfterPicking","description":"Event to be raised after the picker activity returns its\n result and the properties have been filled in.","deprecated":"false","params":[{"name":"selection","type":"text"}]},{"name":"BeforePicking","description":"Event to raise when the button of the component is clicked or the list is shown\n using the Open block. This event occurs before the list of items is displayed, and\n can be used to prepare the list before it is shown.","deprecated":"false","params":[]},{"name":"GotFocus","description":"Indicates the cursor moved over the button so it is now possible to click it.","deprecated":"false","params":[]},{"name":"LostFocus","description":"Indicates the cursor moved away from the button so it is now no longer possible to click it.","deprecated":"false","params":[]},{"name":"TouchDown","description":"Indicates that the button was pressed down.","deprecated":"false","params":[]},{"name":"TouchUp","description":"Indicates that a button has been released.","deprecated":"false","params":[]}],"methods":[{"name":"ButtonClick","description":"Perform a button click as function.","deprecated":"false","params":[]},{"name":"Open","description":"Opens the picker, as though the user clicked on it.","deprecated":"false","params":[]},{"name":"SetShadow","description":"Place a blurred shadow of text underneath the text, drawn with the specified x, y, radius, color (e.g. -11, 12, 13, black.","deprecated":"false","params":[{"name":"x","type":"number"},{"name":"y","type":"number"},{"name":"radius","type":"number"},{"name":"color","type":"number"}]},{"name":"WithIconFromFontAwesome","description":"Show a image on the given postion near to the button. You can use following words for the position: 'Left', 'Right', 'Top' or 'Bottom'. Use the padding to add space between the icon and text. Use a material icon as the button icon without uploading a image resource into your project. You can find the icon name (or code) here at https://fontawesome.com/cheatsheet Use as example for a heart icon just 'f004'.","deprecated":"false","params":[{"name":"position","type":"text"},{"name":"iconName","type":"text"},{"name":"iconColor","type":"number"},{"name":"padding","type":"number"},{"name":"size","type":"number"}]},{"name":"WithIconFromMaterialFont","description":"Show a image on the given postion near to the button. You can use following words for the position: 'Left', 'Right', 'Top' or 'Bottom'. Use the padding to add space between the icon and text. Use a material icon as the button icon without uploading a image resource into your project. You can find the icon name (or code) here at https://material.io/icons","deprecated":"false","params":[{"name":"position","type":"text"},{"name":"iconName","type":"text"},{"name":"iconColor","type":"number"},{"name":"padding","type":"number"},{"name":"size","type":"number"}]},{"name":"WithIconFromPicture","description":"Show a image on the given postion near to the button. You can use following words for the position: 'Left', 'Right', 'Top' or 'Bottom'. Use the padding to add space between the icon and text.","deprecated":"false","params":[{"name":"position","type":"text"},{"name":"picture","type":"text"},{"name":"padding","type":"number"},{"name":"width","type":"number"},{"name":"height","type":"number"}]}]},{"type":"com.google.appinventor.components.runtime.ImageSprite","name":"ImageSprite","external":"false","version":"6","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"ANIMATION","helpString":" A 'sprite' that can be placed on a To have an A button that, when clicked on, displays a list of texts for the user to choose among. The texts can be specified through the Designer or Blocks Editor by setting the Setting property ShowFilterBar to true, will make the list searchable. Other properties affect the appearance of the button ( This is a visible component that displays a list of text elements. Button components, with the user clicking on the button when text entry is complete.","helpUrl":"","showOnPalette":"true","nonVisible":"false","iconName":"","androidMinSdk":19,"properties":[{"name":"BackgroundColor","editorType":"color","defaultValue":"&H00000000","propertyType":"common","editorArgs":[]},{"name":"CursorColor","editorType":"color","defaultValue":"&HFF000000","propertyType":"advanced","editorArgs":[]},{"name":"CursorVisible","editorType":"boolean","defaultValue":"True","propertyType":"advanced","editorArgs":[]},{"name":"Enabled","editorType":"boolean","defaultValue":"True","propertyType":"common","editorArgs":[]},{"name":"FontBold","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]},{"name":"FontItalic","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]},{"name":"FontSize","editorType":"non_negative_float","defaultValue":"14.0","propertyType":"common","editorArgs":[]},{"name":"FontTypeface","editorType":"typeface","defaultValue":"0","propertyType":"common","editorArgs":[]},{"name":"FontTypefaceImport","editorType":"font_asset","defaultValue":"","propertyType":"advanced","editorArgs":[]},{"name":"Hint","editorType":"string","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"HintColor","editorType":"color","defaultValue":"&HFF000000","propertyType":"common","editorArgs":[]},{"name":"RotationAngle","editorType":"float","defaultValue":"0.0","propertyType":"advanced","editorArgs":[]},{"name":"Text","editorType":"textArea","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"TextAlignment","editorType":"textalignment","defaultValue":"0","propertyType":"common","editorArgs":[]},{"name":"TextColor","editorType":"color","defaultValue":"&HFF000000","propertyType":"common","editorArgs":[]},{"name":"Visible","editorType":"visibility","defaultValue":"True","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"BackgroundColor","description":"The background color of the input box. You can choose a color by name in the Designer or in the Blocks Editor. The default background color is 'default' (shaded 3-D look).","type":"number","rw":"read-write","deprecated":"false"},{"name":"Column","description":"","type":"number","rw":"invisible","deprecated":"false"},{"name":"CurrentPosition","description":"Get the current cursor position.","type":"number","rw":"read-only","deprecated":"false"},{"name":"CursorColor","description":"The color of the cursor.","type":"number","rw":"read-write","deprecated":"false"},{"name":"CursorVisible","description":"Makes the cursor visible (the default) or invisible.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"EnableCopyPaste","description":"DEPRECATED since this feature is not working. Use 'Enabled' instead.","type":"boolean","rw":"read-write","deprecated":"true"},{"name":"Enabled","description":"Whether the user can enter text into this input box. By default, this is true.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"FontBold","description":"Whether the font for the text should be bold. By default, it is not.","type":"boolean","rw":"invisible","deprecated":"false"},{"name":"FontItalic","description":"Whether the text should appear in italics. By default, it does not.","type":"boolean","rw":"invisible","deprecated":"false"},{"name":"FontSize","description":"The font size for the text. By default, it is 14.0 points.","type":"number","rw":"read-write","deprecated":"false"},{"name":"FontTypeface","description":"The font for the text. The value can be changed in the Designer.","type":"number","rw":"invisible","deprecated":"false"},{"name":"FontTypefaceImport","description":"Set a custom font.","type":"text","rw":"write-only","deprecated":"false"},{"name":"Height","description":"","type":"number","rw":"read-write","deprecated":"false"},{"name":"HeightPercent","description":"","type":"number","rw":"write-only","deprecated":"false"},{"name":"Hint","description":"Text that should appear faintly in the input box to provide a hint as to what the user should enter. This can only be seen if the Text property is empty.","type":"text","rw":"read-write","deprecated":"false"},{"name":"HintColor","description":"Set a custom hint text color.","type":"number","rw":"read-write","deprecated":"false"},{"name":"LineColor","description":"Please delete this block from your project.This block is deprecated and not longer supported.","type":"number","rw":"read-write","deprecated":"true"},{"name":"RotationAngle","description":"Sets the degrees that the textbox is rotated around the pivot point. Increasing values result in clockwise rotation.","type":"number","rw":"read-write","deprecated":"false"},{"name":"Row","description":"","type":"number","rw":"invisible","deprecated":"false"},{"name":"Text","description":"The text in the input box, which can be set by the programmer in the Designer or Blocks Editor, or it can be entered by the user (unless the Enabled property is false).","type":"text","rw":"read-write","deprecated":"false"},{"name":"TextAlignment","description":"Whether the text should be left justified, centered, or right justified. By default, text is left justified.","type":"number","rw":"invisible","deprecated":"false"},{"name":"TextColor","description":"The color for the text. You can choose a color by name in the Designer or in the Blocks Editor. The default text color is black.","type":"number","rw":"read-write","deprecated":"false"},{"name":"TextLength","description":"Returns the current text length as number.","type":"number","rw":"read-only","deprecated":"false"},{"name":"Visible","description":"Specifies whether the component should be visible on the screen. Value is true if the component is showing and false if hidden.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"Width","description":"","type":"number","rw":"read-write","deprecated":"false"},{"name":"WidthPercent","description":"","type":"number","rw":"write-only","deprecated":"false"}],"events":[{"name":"GotFocus","description":"Event raised when this component is selected for input, such as by\n the user touching it.","deprecated":"false","params":[]},{"name":"LostFocus","description":"Event raised when this component is no longer selected for input, such\n as if the user touches a different text box.","deprecated":"false","params":[]},{"name":"OnTextChanged","description":"Event to detect text changes.","deprecated":"false","params":[]}],"methods":[{"name":"RequestFocus","description":"Sets the textbox active.","deprecated":"false","params":[]},{"name":"SetCursorAt","description":"Set the cursor to the given position.","deprecated":"false","params":[{"name":"position","type":"number"}]},{"name":"SetCursorAtEnd","description":"Set the cursor to the end of the text.","deprecated":"false","params":[]},{"name":"SetShadow","description":"Place a blurred shadow of text underneath the text, drawn with the specified x, y, radius, color (e.g. -11, 12, 13, black","deprecated":"false","params":[{"name":"x","type":"number"},{"name":"y","type":"number"},{"name":"radius","type":"number"},{"name":"color","type":"number"}]}]},{"type":"com.google.appinventor.components.runtime.Ev3ColorSensor","name":"Ev3ColorSensor","external":"false","version":"1","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"EV3","helpString":"A component that provides a high-level interface to a color sensor on a LEGO MINDSTORMS EV3 robot.","helpUrl":"","showOnPalette":"true","nonVisible":"true","iconName":"images/legoMindstormsEv3.png","androidMinSdk":19,"properties":[{"name":"AboveRangeEventEnabled","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]},{"name":"BelowRangeEventEnabled","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]},{"name":"BluetoothClient","editorType":"BluetoothClient","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"BottomOfRange","editorType":"non_negative_integer","defaultValue":"30","propertyType":"common","editorArgs":[]},{"name":"ColorChangedEventEnabled","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]},{"name":"Mode","editorType":"lego_ev3_color_sensor_mode","defaultValue":"reflected","propertyType":"common","editorArgs":[]},{"name":"SensorPort","editorType":"lego_ev3_sensor_port","defaultValue":"1","propertyType":"common","editorArgs":[]},{"name":"TopOfRange","editorType":"non_negative_integer","defaultValue":"60","propertyType":"common","editorArgs":[]},{"name":"WithinRangeEventEnabled","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"AboveRangeEventEnabled","description":"Whether the AboveRange event should fire when the light level goes above the TopOfRange.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"BelowRangeEventEnabled","description":"Whether the BelowRange event should fire when the light level goes below the BottomOfRange.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"BluetoothClient","description":"The BluetoothClient component that should be used for communication.","type":"component","rw":"read-write","deprecated":"false"},{"name":"BottomOfRange","description":"The bottom of the range used for the BelowRange, WithinRange, and AboveRange events.","type":"number","rw":"read-write","deprecated":"false"},{"name":"ColorChangedEventEnabled","description":"Whether the ColorChanged event should fire when the Mode property is set to \"color\" and the detected color changes.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"Mode","description":"Get the current sensor mode.","type":"text","rw":"read-write","deprecated":"false"},{"name":"SensorPort","description":"The sensor port that the sensor is connected to.","type":"text","rw":"invisible","deprecated":"false"},{"name":"TopOfRange","description":"The top of the range used for the BelowRange, WithinRange, and AboveRange events.","type":"number","rw":"read-write","deprecated":"false"},{"name":"WithinRangeEventEnabled","description":"Whether the WithinRange event should fire when the light level goes between the BottomOfRange and the TopOfRange.","type":"boolean","rw":"read-write","deprecated":"false"}],"events":[{"name":"AboveRange","description":"Light level has gone above the range.","deprecated":"false","params":[]},{"name":"BelowRange","description":"Light level has gone below the range.","deprecated":"false","params":[]},{"name":"ColorChanged","description":"Called when the detected color has changed. The ColorChanged event will occur if the Mode property is set to \"color\" and the ColorChangedEventEnabled property is set to True.","deprecated":"false","params":[{"name":"colorCode","type":"number"},{"name":"colorName","type":"text"}]},{"name":"WithinRange","description":"Light level has gone within the range.","deprecated":"false","params":[]}],"methods":[{"name":"GetColorCode","description":"It returns the color code from 0 to 7 corresponding to no color, black, blue, green, yellow, red, white and brown.","deprecated":"false","params":[],"returnType":"number"},{"name":"GetColorName","description":"Return the color name in one of \"No Color\", \"Black\", \"Blue\", \"Green\", \"Yellow\", \"Red\", \"White\", \"Brown\".","deprecated":"false","params":[],"returnType":"text"},{"name":"GetLightLevel","description":"It returns the light level in percentage, or -1 when the light level cannot be read.","deprecated":"false","params":[],"returnType":"number"},{"name":"SetAmbientMode","description":"Make the sensor read the light level without reflected light.","deprecated":"false","params":[]},{"name":"SetColorMode","description":"Enter the color detection mode.","deprecated":"false","params":[]},{"name":"SetReflectedMode","description":"Make the sensor read the light level with reflected light.","deprecated":"false","params":[]}]},{"type":"com.google.appinventor.components.runtime.Ev3Commands","name":"Ev3Commands","external":"false","version":"1","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"EV3","helpString":"A component that provides a low-level interface to a LEGO MINDSTORMS EV3 robot, with functions to send system or direct commands to EV3 robots.","helpUrl":"","showOnPalette":"true","nonVisible":"true","iconName":"images/legoMindstormsEv3.png","androidMinSdk":19,"properties":[{"name":"BluetoothClient","editorType":"BluetoothClient","defaultValue":"","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"BluetoothClient","description":"The BluetoothClient component that should be used for communication.","type":"component","rw":"read-write","deprecated":"false"}],"events":[],"methods":[{"name":"GetBatteryCurrent","description":"Get the battery current.","deprecated":"false","params":[],"returnType":"number"},{"name":"GetBatteryVoltage","description":"Get the battery voltage.","deprecated":"false","params":[],"returnType":"number"},{"name":"GetFirmwareBuild","description":"Get the firmware build on EV3.","deprecated":"false","params":[],"returnType":"text"},{"name":"GetFirmwareVersion","description":"Get the firmware version on EV3.","deprecated":"false","params":[],"returnType":"text"},{"name":"GetHardwareVersion","description":"Get the hardware version of EV3.","deprecated":"false","params":[],"returnType":"text"},{"name":"GetOSBuild","description":"Get the OS build on EV3.","deprecated":"false","params":[],"returnType":"text"},{"name":"GetOSVersion","description":"Get the OS version on EV3.","deprecated":"false","params":[],"returnType":"text"},{"name":"KeepAlive","description":"Keep the EV3 brick from shutdown for a period of time.","deprecated":"false","params":[{"name":"minutes","type":"number"}]}]},{"type":"com.google.appinventor.components.runtime.Ev3GyroSensor","name":"Ev3GyroSensor","external":"false","version":"1","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"EV3","helpString":"A component that provides a high-level interface to a gyro sensor on a LEGO MINDSTORMS EV3 robot.","helpUrl":"","showOnPalette":"true","nonVisible":"true","iconName":"images/legoMindstormsEv3.png","androidMinSdk":19,"properties":[{"name":"BluetoothClient","editorType":"BluetoothClient","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"Mode","editorType":"lego_ev3_gyro_sensor_mode","defaultValue":"angle","propertyType":"common","editorArgs":[]},{"name":"SensorPort","editorType":"lego_ev3_sensor_port","defaultValue":"1","propertyType":"common","editorArgs":[]},{"name":"SensorValueChangedEventEnabled","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"BluetoothClient","description":"The BluetoothClient component that should be used for communication.","type":"component","rw":"read-write","deprecated":"false"},{"name":"Mode","description":"The sensor mode can be a text constant of either \"rate\" or \"angle\", which correspond to SetAngleMode or SetRateMode respectively.","type":"text","rw":"read-write","deprecated":"false"},{"name":"SensorPort","description":"The sensor port that the sensor is connected to.","type":"text","rw":"invisible","deprecated":"false"},{"name":"SensorValueChangedEventEnabled","description":"Whether the SensorValueChanged event should fire when the sensor value changed.","type":"boolean","rw":"read-write","deprecated":"false"}],"events":[{"name":"SensorValueChanged","description":"Called then the sensor value changed.","deprecated":"false","params":[{"name":"sensorValue","type":"number"}]}],"methods":[{"name":"GetSensorValue","description":"Returns the current angle or rotation speed based on current mode, or -1 if the value cannot be read from sensor.","deprecated":"false","params":[],"returnType":"number"},{"name":"SetAngleMode","description":"Measures the orientation of the sensor.","deprecated":"false","params":[]},{"name":"SetRateMode","description":"Measures the angular velocity of the sensor.","deprecated":"false","params":[]}]},{"type":"com.google.appinventor.components.runtime.Ev3Motors","name":"Ev3Motors","external":"false","version":"1","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"EV3","helpString":"A component that provides both high- and low-level interfaces to a LEGO MINDSTORMS EV3 robot, with functions that can control the motors.","helpUrl":"","showOnPalette":"true","nonVisible":"true","iconName":"images/legoMindstormsEv3.png","androidMinSdk":19,"properties":[{"name":"BluetoothClient","editorType":"BluetoothClient","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"EnableSpeedRegulation","editorType":"boolean","defaultValue":"True","propertyType":"common","editorArgs":[]},{"name":"MotorPorts","editorType":"string","defaultValue":"ABC","propertyType":"common","editorArgs":[]},{"name":"ReverseDirection","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]},{"name":"StopBeforeDisconnect","editorType":"boolean","defaultValue":"True","propertyType":"common","editorArgs":[]},{"name":"TachoCountChangedEventEnabled","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]},{"name":"WheelDiameter","editorType":"float","defaultValue":"4.32","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"BluetoothClient","description":"The BluetoothClient component that should be used for communication.","type":"component","rw":"read-write","deprecated":"false"},{"name":"EnableSpeedRegulation","description":"The robot adjusts the power to maintain the speed if speed regulation is enabled.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"MotorPorts","description":"The motor ports that the motors are connected to. The ports are specified by a sequence of port letters.","type":"text","rw":"invisible","deprecated":"false"},{"name":"ReverseDirection","description":"It specifies if the direction of the motors is reversed.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"StopBeforeDisconnect","description":"Whether to stop the motor before disconnecting.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"TachoCountChangedEventEnabled","description":"Whether the TachoCountChanged event should fire when the angle is changed.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"WheelDiameter","description":"The diameter of the wheels attached on the motors in centimeters.","type":"number","rw":"invisible","deprecated":"false"}],"events":[{"name":"TachoCountChanged","description":"Called when the tacho count has changed.","deprecated":"false","params":[{"name":"tachoCount","type":"number"}]}],"methods":[{"name":"GetTachoCount","description":"Get the current tacho count.","deprecated":"false","params":[],"returnType":"number"},{"name":"ResetTachoCount","description":"Set the current tacho count to zero.","deprecated":"false","params":[]},{"name":"RotateInDistance","description":"Rotate the motors in a distance.","deprecated":"false","params":[{"name":"power","type":"number"},{"name":"distance","type":"number"},{"name":"useBrake","type":"boolean"}]},{"name":"RotateInDuration","description":"Rotate the motors in a period of time.","deprecated":"false","params":[{"name":"power","type":"number"},{"name":"milliseconds","type":"number"},{"name":"useBrake","type":"boolean"}]},{"name":"RotateInTachoCounts","description":"Rotate the motors in a number of tacho counts.","deprecated":"false","params":[{"name":"power","type":"number"},{"name":"tachoCounts","type":"number"},{"name":"useBrake","type":"boolean"}]},{"name":"RotateIndefinitely","description":"Start to rotate the motors.","deprecated":"false","params":[{"name":"power","type":"number"}]},{"name":"RotateSyncInDistance","description":"Rotate the motors at the same speed for a distance in cm.","deprecated":"false","params":[{"name":"power","type":"number"},{"name":"distance","type":"number"},{"name":"turnRatio","type":"number"},{"name":"useBrake","type":"boolean"}]},{"name":"RotateSyncInDuration","description":"Rotate the motors at the same speed in a period of time.","deprecated":"false","params":[{"name":"power","type":"number"},{"name":"milliseconds","type":"number"},{"name":"turnRatio","type":"number"},{"name":"useBrake","type":"boolean"}]},{"name":"RotateSyncInTachoCounts","description":"Rotate the motors at the same speed in a number of tacho counts.","deprecated":"false","params":[{"name":"power","type":"number"},{"name":"tachoCounts","type":"number"},{"name":"turnRatio","type":"number"},{"name":"useBrake","type":"boolean"}]},{"name":"RotateSyncIndefinitely","description":"Start to rotate the motors at the same speed.","deprecated":"false","params":[{"name":"power","type":"number"},{"name":"turnRatio","type":"number"}]},{"name":"Stop","description":"Stop the motors of the robot.","deprecated":"false","params":[{"name":"useBrake","type":"boolean"}]},{"name":"ToggleDirection","description":"Toggle the direction of motors.","deprecated":"false","params":[]}]},{"type":"com.google.appinventor.components.runtime.Ev3Sound","name":"Ev3Sound","external":"false","version":"1","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"EV3","helpString":"A component that provides a high-level interface to sound functionalities on LEGO MINDSTORMS EV3 robot.","helpUrl":"","showOnPalette":"true","nonVisible":"true","iconName":"images/legoMindstormsEv3.png","androidMinSdk":19,"properties":[{"name":"BluetoothClient","editorType":"BluetoothClient","defaultValue":"","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"BluetoothClient","description":"The BluetoothClient component that should be used for communication.","type":"component","rw":"read-write","deprecated":"false"}],"events":[],"methods":[{"name":"PlayTone","description":"Make the robot play a tone.","deprecated":"false","params":[{"name":"volume","type":"number"},{"name":"frequency","type":"number"},{"name":"milliseconds","type":"number"}]},{"name":"StopSound","description":"Stop any sound on the robot.","deprecated":"false","params":[]}]},{"type":"com.google.appinventor.components.runtime.Ev3TouchSensor","name":"Ev3TouchSensor","external":"false","version":"1","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"EV3","helpString":"A component that provides a high-level interface to a touch sensor on a LEGO MINDSTORMS EV3 robot.","helpUrl":"","showOnPalette":"true","nonVisible":"true","iconName":"images/legoMindstormsEv3.png","androidMinSdk":19,"properties":[{"name":"BluetoothClient","editorType":"BluetoothClient","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"PressedEventEnabled","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]},{"name":"ReleasedEventEnabled","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]},{"name":"SensorPort","editorType":"lego_ev3_sensor_port","defaultValue":"1","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"BluetoothClient","description":"The BluetoothClient component that should be used for communication.","type":"component","rw":"read-write","deprecated":"false"},{"name":"PressedEventEnabled","description":"Whether the Released event should fire when the touch sensor is pressed.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"ReleasedEventEnabled","description":"Whether the Released event should fire when the touch sensor is released.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"SensorPort","description":"The sensor port that the sensor is connected to.","type":"text","rw":"invisible","deprecated":"false"}],"events":[{"name":"Pressed","description":"Called when the touch sensor is pressed.","deprecated":"false","params":[]},{"name":"Released","description":"Called when the touch sensor is pressed.","deprecated":"false","params":[]}],"methods":[{"name":"IsPressed","description":"Returns true if the touch sensor is pressed.","deprecated":"false","params":[],"returnType":"boolean"}]},{"type":"com.google.appinventor.components.runtime.Ev3UI","name":"Ev3UI","external":"false","version":"1","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"EV3","helpString":"A component that provides a high-level interface to a LEGO MINDSTORMS EV3 robot, with functions to draw graphs on EV3 screen.","helpUrl":"","showOnPalette":"true","nonVisible":"true","iconName":"images/legoMindstormsEv3.png","androidMinSdk":19,"properties":[{"name":"BluetoothClient","editorType":"BluetoothClient","defaultValue":"","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"BluetoothClient","description":"The BluetoothClient component that should be used for communication.","type":"component","rw":"read-write","deprecated":"false"}],"events":[],"methods":[{"name":"DrawCircle","description":"Draw a circle on the screen.","deprecated":"false","params":[{"name":"color","type":"number"},{"name":"x","type":"number"},{"name":"y","type":"number"},{"name":"radius","type":"number"},{"name":"fill","type":"boolean"}]},{"name":"DrawIcon","description":"Draw a built-in icon on screen.","deprecated":"false","params":[{"name":"color","type":"number"},{"name":"x","type":"number"},{"name":"y","type":"number"},{"name":"type","type":"number"},{"name":"no","type":"number"}]},{"name":"DrawLine","description":"Draw a line on the screen.","deprecated":"false","params":[{"name":"color","type":"number"},{"name":"x1","type":"number"},{"name":"y1","type":"number"},{"name":"x2","type":"number"},{"name":"y2","type":"number"}]},{"name":"DrawPoint","description":"Draw a point on the screen.","deprecated":"false","params":[{"name":"color","type":"number"},{"name":"x","type":"number"},{"name":"y","type":"number"}]},{"name":"DrawRect","description":"Draw a rectangle on the screen.","deprecated":"false","params":[{"name":"color","type":"number"},{"name":"x","type":"number"},{"name":"y","type":"number"},{"name":"width","type":"number"},{"name":"height","type":"number"},{"name":"fill","type":"boolean"}]},{"name":"FillScreen","description":"Fill the screen with a color.","deprecated":"false","params":[{"name":"color","type":"number"}]}]},{"type":"com.google.appinventor.components.runtime.Ev3UltrasonicSensor","name":"Ev3UltrasonicSensor","external":"false","version":"1","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"EV3","helpString":"A component that provides a high-level interface to an ultrasonic sensor on a LEGO MINDSTORMS EV3 robot.","helpUrl":"","showOnPalette":"true","nonVisible":"true","iconName":"images/legoMindstormsEv3.png","androidMinSdk":19,"properties":[{"name":"AboveRangeEventEnabled","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]},{"name":"BelowRangeEventEnabled","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]},{"name":"BluetoothClient","editorType":"BluetoothClient","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"BottomOfRange","editorType":"non_negative_integer","defaultValue":"30","propertyType":"common","editorArgs":[]},{"name":"SensorPort","editorType":"lego_ev3_sensor_port","defaultValue":"1","propertyType":"common","editorArgs":[]},{"name":"TopOfRange","editorType":"non_negative_integer","defaultValue":"90","propertyType":"common","editorArgs":[]},{"name":"Unit","editorType":"lego_ev3_ultrasonic_sensor_mode","defaultValue":"cm","propertyType":"common","editorArgs":[]},{"name":"WithinRangeEventEnabled","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"AboveRangeEventEnabled","description":"Whether the AboveRange event should fire when the distance goes above the TopOfRange.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"BelowRangeEventEnabled","description":"Whether the BelowRange event should fire when the distance goes below the BottomOfRange.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"BluetoothClient","description":"The BluetoothClient component that should be used for communication.","type":"component","rw":"read-write","deprecated":"false"},{"name":"BottomOfRange","description":"The bottom of the range used for the BelowRange, WithinRange, and AboveRange events.","type":"number","rw":"read-write","deprecated":"false"},{"name":"SensorPort","description":"The sensor port that the sensor is connected to.","type":"text","rw":"invisible","deprecated":"false"},{"name":"TopOfRange","description":"The top of the range used for the BelowRange, WithinRange, and AboveRange events.","type":"number","rw":"read-write","deprecated":"false"},{"name":"Unit","description":"The distance unit, which can be either \"cm\" or \"inch\".","type":"text","rw":"read-write","deprecated":"false"},{"name":"WithinRangeEventEnabled","description":"Whether the WithinRange event should fire when the distance goes between the BottomOfRange and the TopOfRange.","type":"boolean","rw":"read-write","deprecated":"false"}],"events":[{"name":"AboveRange","description":"Called when the detected distance has gone above the range.","deprecated":"false","params":[]},{"name":"BelowRange","description":"Called when the detected distance has gone below the range.","deprecated":"false","params":[]},{"name":"WithinRange","description":"Called when the detected distance has gone within the range.","deprecated":"false","params":[]}],"methods":[{"name":"GetDistance","description":"Returns the current distance in centimeters as a value between 0 and 254, or -1 if the distance can not be read.","deprecated":"false","params":[],"returnType":"number"},{"name":"SetCmUnit","description":"Measure the distance in centimeters.","deprecated":"false","params":[]},{"name":"SetInchUnit","description":"Measure the distance in inches.","deprecated":"false","params":[]}]},{"type":"com.google.appinventor.components.runtime.FAB","name":"FAB","external":"false","version":"1","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"INTERNAL","helpString":"Floating Button Component to make a Floating Action Button on the right bottom of the screen","helpUrl":"","showOnPalette":"true","nonVisible":"true","iconName":"images/fab.png","androidMinSdk":19,"properties":[{"name":"Color","editorType":"color","defaultValue":"&H00000000","propertyType":"common","editorArgs":[]},{"name":"Icon","editorType":"image_asset","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"MarginBottom","editorType":"non_negative_integer","defaultValue":"8","propertyType":"common","editorArgs":[]},{"name":"MarginRight","editorType":"non_negative_integer","defaultValue":"8","propertyType":"common","editorArgs":[]},{"name":"Size","editorType":"size","defaultValue":"1","propertyType":"common","editorArgs":[]},{"name":"UseAnimation","editorType":"boolean","defaultValue":"True","propertyType":"common","editorArgs":[]},{"name":"Visible","editorType":"boolean","defaultValue":"True","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"Color","description":"Returns Color","type":"number","rw":"read-write","deprecated":"false"},{"name":"Icon","description":"Returns Icon Path","type":"text","rw":"read-write","deprecated":"false"},{"name":"IsCreated","description":"Is FAB created?","type":"boolean","rw":"read-only","deprecated":"false"},{"name":"MarginBottom","description":"Set Bottom Margin in dp, Default = 16","type":"number","rw":"read-write","deprecated":"false"},{"name":"MarginRight","description":"Set Right Margin in dp, Default = 16","type":"number","rw":"read-write","deprecated":"false"},{"name":"Size","description":"Set FAB Size.\nSet it to 1 for Normal size, 2 for Mini.","type":"number","rw":"read-write","deprecated":"false"},{"name":"UseAnimation","description":"Are animations on?","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"Visible","description":"Is FAB visible?","type":"boolean","rw":"read-write","deprecated":"false"}],"events":[{"name":"Click","description":"FAB Clicked","deprecated":"false","params":[]},{"name":"LongClick","description":"FAB Long Clicked","deprecated":"false","params":[]}],"methods":[{"name":"Create","description":"Create FAB","deprecated":"false","params":[]}]},{"type":"com.google.appinventor.components.runtime.FeatureCollection","name":"FeatureCollection","external":"false","version":"2","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"MAPS","helpString":"A FeatureColletion contains one or more map features as a group. Any events fired on a feature in the collection will also trigger the corresponding event on the collection object. FeatureCollections can be loaded from external resources as a means of populating a Map with content.","helpUrl":"","showOnPalette":"true","nonVisible":"false","iconName":"","androidMinSdk":19,"properties":[{"name":"FeaturesFromGeoJSON","editorType":"text","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"Source","editorType":"geojson_type","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"Visible","editorType":"visibility","defaultValue":"True","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"Column","description":"","type":"number","rw":"invisible","deprecated":"false"},{"name":"Features","description":"The list of features placed on this map. This list also includes any features created by calls to FeatureFromDescription","type":"list","rw":"read-write","deprecated":"false"},{"name":"FeaturesFromGeoJSON","description":"Loads a collection of features from the given string. If the string is not valid GeoJSON, the ErrorLoadingFeatureCollection error will be run with url =
Note: If you set Persist on any Firebase component, on any screen, it makes all Firebase components on all screens persistent. This is a limitation of the low level Firebase library. Also be aware that if you want to set persist to true, you should do so before connecting the Companion for incremental development.","type":"boolean","rw":"invisible","deprecated":"false"},{"name":"ProjectBucket","description":"Gets the ProjectBucket for this FirebaseDB.","type":"text","rw":"read-write","deprecated":"false"}],"events":[{"name":"DataChanged","description":"Indicates that the data in the Firebase has changed.\n Launches an event with the tag and value that have been updated.","deprecated":"false","params":[{"name":"tag","type":"text"},{"name":"value","type":"any"}]},{"name":"FirebaseError","description":"Indicates that the communication with the Firebase signaled an error.","deprecated":"false","params":[{"name":"message","type":"text"}]},{"name":"FirstRemoved","description":"Event triggered by the \"RemoveFirst\" function. The argument \"value\" is the object that was the first in the list, and which is now removed.","deprecated":"false","params":[{"name":"value","type":"any"}]},{"name":"GotValue","description":"Indicates that a GetValue request has succeeded.","deprecated":"false","params":[{"name":"tag","type":"text"},{"name":"value","type":"any"}]},{"name":"TagList","description":"Event triggered when we have received the list of known tags. Used with the \"GetTagList\" Function.","deprecated":"false","params":[{"name":"value","type":"list"}]}],"methods":[{"name":"AppendValue","description":"Append a value to the end of a list atomically. If two devices use this function simultaneously, both will be appended and no data lost.","deprecated":"false","params":[{"name":"tag","type":"text"},{"name":"valueToAdd","type":"any"}]},{"name":"ClearTag","description":"Remove the tag from Firebase","deprecated":"false","params":[{"name":"tag","type":"text"}]},{"name":"GetTagList","description":"Get the list of tags for this application. When complete a \"TagList\" event will be triggered with the list of known tags.","deprecated":"false","params":[]},{"name":"GetValue","description":"GetValue asks Firebase to get the value stored under the given tag.\n It will pass valueIfTagNotThere to GotValue if there is no value stored\n under the tag.","deprecated":"false","params":[{"name":"tag","type":"text"},{"name":"valueIfTagNotThere","type":"any"}]},{"name":"GoOffline","description":"Take the database offline","deprecated":"false","params":[]},{"name":"GoOnline","description":"Take the database online","deprecated":"false","params":[]},{"name":"RemoveFirst","description":"Return the first element of a list and atomically remove it. If two devices use this function simultaneously, one will get the first element and the the other will get the second element, or an error if there is no available element. When the element is available, the \"FirstRemoved\" event will be triggered.","deprecated":"false","params":[{"name":"tag","type":"text"}]},{"name":"StoreValue","description":"Asks Firebase to store the given value under the given tag.","deprecated":"false","params":[{"name":"tag","type":"text"},{"name":"valueToStore","type":"any"}]},{"name":"Unauthenticate","description":"If you are having difficulty with the Companion and you are switching between different Firebase accounts, you may need to use this function to clear internal Firebase caches. You can just use the \"Do It\" function on this block in the blocks editor. Note: You should not normally need to use this block as part of an application.","deprecated":"false","params":[]}]},{"type":"com.google.appinventor.components.runtime.Form","name":"Form","external":"false","version":"41","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"LAYOUT_GENERAL","helpString":"Top-level component containing all other components in the program","helpUrl":"","showOnPalette":"false","nonVisible":"false","iconName":"","androidMinSdk":19,"properties":[{"name":"AboutScreen","editorType":"textArea","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"AboutScreenBackgroundColor","editorType":"color","defaultValue":"&HFF444444","propertyType":"common","editorArgs":[]},{"name":"AboutScreenLightTheme","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]},{"name":"AboutScreenTitle","editorType":"string","defaultValue":"About this application","propertyType":"common","editorArgs":[]},{"name":"AccentColor","editorType":"color","defaultValue":"&HFFFF4081","propertyType":"common","editorArgs":[]},{"name":"AlignHorizontal","editorType":"horizontal_alignment","defaultValue":"1","propertyType":"common","editorArgs":[]},{"name":"AlignVertical","editorType":"vertical_alignment","defaultValue":"1","propertyType":"common","editorArgs":[]},{"name":"AppId","editorType":"string","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"AppName","editorType":"string","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"BackgroundColor","editorType":"color","defaultValue":"&HFFFFFFFF","propertyType":"common","editorArgs":[]},{"name":"BackgroundImage","editorType":"image_asset","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"CloseScreenAnimation","editorType":"screen_animation","defaultValue":"default","propertyType":"common","editorArgs":[]},{"name":"HighQuality","editorType":"boolean","defaultValue":"False","propertyType":"advanced","editorArgs":[]},{"name":"Icon","editorType":"image_asset","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"KeepScreenOn","editorType":"boolean","defaultValue":"False","propertyType":"advanced","editorArgs":[]},{"name":"MinSdk","editorType":"min_sdk","defaultValue":"19","propertyType":"advanced","editorArgs":[]},{"name":"NavigationBarColor","editorType":"color","defaultValue":"&HFF000000","propertyType":"common","editorArgs":[]},{"name":"OpenScreenAnimation","editorType":"screen_animation","defaultValue":"default","propertyType":"common","editorArgs":[]},{"name":"PackageName","editorType":"string","defaultValue":"","propertyType":"advanced","editorArgs":[]},{"name":"PrimaryColor","editorType":"color","defaultValue":"&HFF3F51B5","propertyType":"common","editorArgs":[]},{"name":"PrimaryColorDark","editorType":"color","defaultValue":"&HFF303F9F","propertyType":"common","editorArgs":[]},{"name":"RTLSupport","editorType":"boolean","defaultValue":"False","propertyType":"advanced","editorArgs":[]},{"name":"ReceiveSharedText","editorType":"receive_types","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"ScreenOrientation","editorType":"screen_orientation","defaultValue":"unspecified","propertyType":"common","editorArgs":[]},{"name":"Scrollable","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]},{"name":"ShowListsAsJson","editorType":"boolean","defaultValue":"False","propertyType":"advanced","editorArgs":[]},{"name":"ShowNavBar","editorType":"boolean","defaultValue":"True","propertyType":"experimental","editorArgs":[]},{"name":"ShowOptionsMenu","editorType":"boolean","defaultValue":"True","propertyType":"common","editorArgs":[]},{"name":"ShowStatusBar","editorType":"boolean","defaultValue":"True","propertyType":"common","editorArgs":[]},{"name":"Sizing","editorType":"sizing","defaultValue":"Responsive","propertyType":"common","editorArgs":[]},{"name":"SplashEnabled","editorType":"boolean","defaultValue":"True","propertyType":"advanced","editorArgs":[]},{"name":"SplashIcon","editorType":"image_asset","defaultValue":"","propertyType":"advanced","editorArgs":[]},{"name":"Theme","editorType":"theme","defaultValue":"AppTheme","propertyType":"common","editorArgs":[]},{"name":"Title","editorType":"string","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"TitleBarFontTypeface","editorType":"typeface","defaultValue":"0","propertyType":"common","editorArgs":[]},{"name":"TitleBarSubTitle","editorType":"string","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"TitleBarTypefaceImport","editorType":"font_asset","defaultValue":"","propertyType":"advanced","editorArgs":[]},{"name":"TitleVisible","editorType":"boolean","defaultValue":"True","propertyType":"common","editorArgs":[]},{"name":"TutorialURL","editorType":"string","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"VersionCode","editorType":"non_negative_integer","defaultValue":"1","propertyType":"common","editorArgs":[]},{"name":"VersionName","editorType":"string","defaultValue":"1.0","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"AboutScreen","description":"Information about the screen. It appears when \"About this Application\" is selected from the system menu. Use it to inform people about your app. In multiple screen apps, each screen has its own AboutScreen info.","type":"text","rw":"read-write","deprecated":"false"},{"name":"AboutScreenBackgroundColor","description":"","type":"number","rw":"read-write","deprecated":"false"},{"name":"AboutScreenLightTheme","description":"","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"AboutScreenTitle","description":"Define the title of the about application option.","type":"text","rw":"write-only","deprecated":"false"},{"name":"AccentColor","description":"This is the accent color used for highlights and other user interface accents.","type":"number","rw":"invisible","deprecated":"false"},{"name":"AlignHorizontal","description":"A number that encodes how contents of the screen are aligned horizontally. The choices are: 1 = left aligned, 2 = horizontally centered, 3 = right aligned.","type":"number","rw":"read-write","deprecated":"false"},{"name":"AlignVertical","description":"A number that encodes how the contents of the arrangement are aligned vertically. The choices are: 1 = aligned at the top, 2 = vertically centered, 3 = aligned at the bottom. Vertical alignment has no effect if the screen is scrollable.","type":"number","rw":"read-write","deprecated":"false"},{"name":"AppId","description":"","type":"text","rw":"invisible","deprecated":"false"},{"name":"AppName","description":"This is the display name of the installed application in the phone.If the AppName is blank, it will be set to the name of the project when the project is built.","type":"text","rw":"invisible","deprecated":"false"},{"name":"BackgroundColor","description":"","type":"number","rw":"read-write","deprecated":"false"},{"name":"BackgroundImage","description":"The screen background image.","type":"text","rw":"read-write","deprecated":"false"},{"name":"CloseScreenAnimation","description":"The animation for closing current screen and returning to the previous screen. Valid options are default, fade, zoom, slidehorizontal, slidevertical, and none","type":"text","rw":"read-write","deprecated":"false"},{"name":"DrawerArrowIconColor","description":"Set the drawer arrow icon color.","type":"number","rw":"read-write","deprecated":"false"},{"name":"Height","description":"Screen height (y-size).","type":"number","rw":"read-only","deprecated":"false"},{"name":"HighQuality","description":"If set to true, pictures will be loaded in high quality.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"Icon","description":"","type":"text","rw":"invisible","deprecated":"false"},{"name":"IsCompanion","description":"This block will return true, if you are running your project current in the companion application. Else it will return false.","type":"boolean","rw":"read-only","deprecated":"false"},{"name":"IsSideMenuAdded","description":"Returns true if a side menu is added to the screen.","type":"boolean","rw":"read-only","deprecated":"false"},{"name":"IsSideMenuOpen","description":"Returns true if a side menu is current open. Else it will return false.","type":"boolean","rw":"read-only","deprecated":"false"},{"name":"KeepScreenOn","description":"Keep the device's screen turned on and bright.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"MinSdk","description":"","type":"number","rw":"invisible","deprecated":"false"},{"name":"NavigationBarColor","description":"Set navigation bar color. This will work starting from API Level 21 (Android Lollipop)","type":"number","rw":"read-write","deprecated":"false"},{"name":"NavigationBarLightIcons","description":"This option tells the system to use dark navigation bar icons, useful for lighter colored navigation bars. Works only for devices with API >= 26.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"NavigationIconColor","description":"Set the navigation icon color.","type":"number","rw":"read-write","deprecated":"false"},{"name":"OpenScreenAnimation","description":"The animation for switching to another screen. Valid options are default, fade, zoom, slidehorizontal, slidevertical, and none","type":"text","rw":"read-write","deprecated":"false"},{"name":"OptionsMenuIconColor","description":"Set the options menu icon color.","type":"number","rw":"read-write","deprecated":"false"},{"name":"PackageName","description":"Set a custom PackageName for the app","type":"text","rw":"invisible","deprecated":"false"},{"name":"PrimaryColor","description":"This is the primary color used for Material UI elements, such as the ActionBar.","type":"number","rw":"invisible","deprecated":"false"},{"name":"PrimaryColorDark","description":"This is the primary color used for darker elements in Material UI.","type":"number","rw":"invisible","deprecated":"false"},{"name":"RTLSupport","description":"","type":"boolean","rw":"invisible","deprecated":"false"},{"name":"ReceiveSharedText","description":"","type":"text","rw":"invisible","deprecated":"false"},{"name":"ScreenOrientation","description":"The requested screen orientation, specified as a text value. Commonly used values are landscape, portrait, sensor, user and unspecified. See the Android developer documentation for ActivityInfo.Screen_Orientation for the complete list of possible settings.","type":"text","rw":"read-write","deprecated":"false"},{"name":"Scrollable","description":"When checked, there will be a vertical scrollbar on the screen, and the height of the application can exceed the physical height of the device. When unchecked, the application height is constrained to the height of the device.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"ShowListsAsJson","description":"If false, lists will be converted to strings using Lisp notation, i.e., as symbols separated by spaces, e.g., (a 1 b2 (c d). If true, lists will appear as in Json or Python, e.g. [\"a\", 1, \"b\", 2, [\"c\", \"d\"]]. This property appears only in Screen 1, and the value for Screen 1 determines the behavior for all screens. The property defaults to \"false\" meaning that the App Inventor programmer must explicitly set it to \"true\" if JSON/Python syntax is desired. At some point in the future we will alter the system so that new projects are created with this property set to \"true\" by default. Existing projects will not be impacted. The App Inventor programmer can also set it back to \"false\" in newer projects if desired. ","type":"boolean","rw":"invisible","deprecated":"false"},{"name":"ShowNavBar","description":"Show/Hide Navigation Bar","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"ShowOptionsMenu","description":"","type":"boolean","rw":"invisible","deprecated":"false"},{"name":"ShowStatusBar","description":"The status bar is the topmost bar on the screen. This property reports whether the status bar is visible.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"ShowTitlebarBackButton","description":"If true it will show in the TitleBar a back button only if no side menu was added. If a side menu was added it will remove the ‘hamburger’-menu icon but the side menu can still be opened.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"Sizing","description":"If set to fixed, screen layouts will be created for a single fixed-size screen and autoscaled. If set to responsive, screen layouts will use the actual resolution of the device. See the documentation on responsive design in App Inventor for more information. This property appears on Screen1 only and controls the sizing for all screens in the app.","type":"text","rw":"invisible","deprecated":"false"},{"name":"SplashEnabled","description":"If set to true the user will see a splash screen while the app is loading the content.","type":"boolean","rw":"invisible","deprecated":"false"},{"name":"SplashIcon","description":"","type":"text","rw":"invisible","deprecated":"false"},{"name":"StatusBarColor","description":"Set status bar color. This will work starting from API Level 21 (Android Lollipop","type":"number","rw":"read-write","deprecated":"false"},{"name":"StatusbarLightIcons","description":"This option tells the system to use dark statusbar icons, useful for lighter colored status bars. Works only for devices with API >= 23.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"Theme","description":"Sets the theme used by the application.","type":"text","rw":"invisible","deprecated":"false"},{"name":"Title","description":"The caption for the form, which apears in the title bar","type":"text","rw":"read-write","deprecated":"false"},{"name":"TitleBarColor","description":"Set title bar color","type":"number","rw":"write-only","deprecated":"false"},{"name":"TitleBarFontTypeface","description":"","type":"number","rw":"invisible","deprecated":"false"},{"name":"TitleBarSubTitle","description":"Set the TitleBar's subtitle.","type":"text","rw":"read-write","deprecated":"false"},{"name":"TitleBarTypefaceImport","description":"Set a custom font.","type":"text","rw":"write-only","deprecated":"false"},{"name":"TitleVisible","description":"The title bar is the top gray bar on the screen. This property reports whether the title bar is visible.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"TitlebarTextColor","description":"Set a custom color for the TitleBar text.","type":"number","rw":"read-write","deprecated":"false"},{"name":"TutorialURL","description":"A URL to use to populate the Tutorial Sidebar while editing a project. Used as a teaching aid.","type":"text","rw":"invisible","deprecated":"false"},{"name":"VersionCode","description":"An integer value which must be incremented each time a new Android Application Package File (APK) is created for the Google Play Store.","type":"number","rw":"invisible","deprecated":"false"},{"name":"VersionName","description":"A string which can be changed to allow Google Play Store users to distinguish between different versions of the App.","type":"text","rw":"invisible","deprecated":"false"},{"name":"Width","description":"Screen width (x-size).","type":"number","rw":"read-only","deprecated":"false"},{"name":"isKeyboardVisible","description":"Returns the status of the keyboard. If the keyboard is visible then the result is true.","type":"boolean","rw":"read-only","deprecated":"false"}],"events":[{"name":"BackPressed","description":"Device back button pressed.","deprecated":"false","params":[]},{"name":"ErrorOccurred","description":"Event raised when an error occurs. Only some errors will raise this condition. For those errors, the system will show a notification by default. You can use this event handler to prescribe an error behavior different than the default.","deprecated":"false","params":[{"name":"component","type":"component"},{"name":"functionName","type":"text"},{"name":"errorNumber","type":"number"},{"name":"message","type":"text"}]},{"name":"GotReceivedShared","description":"Event to detect that a user shared content to your app throw the sharing dialog of any other app. Type stand for integer. 0 = nothing shared, 1 = audio, 2 = image, 3 = text or 4 = video","deprecated":"false","params":[{"name":"type","type":"number"},{"name":"value","type":"text"}]},{"name":"Initialize","description":"Screen starting","deprecated":"false","params":[]},{"name":"KeyboardVisiblityChanged","description":"Event will be invoked if the keyboard was visible or invisible.","deprecated":"false","params":[{"name":"isKeyboardVisible","type":"boolean"}]},{"name":"MenuInitialize","description":"Event to detect when the menu has loaded. Set here your blocks like TitleBarIcon or AddMenuItem.","deprecated":"false","params":[]},{"name":"MenuItemSelected","description":"Event to detect when a menu item has been selected.","deprecated":"false","params":[{"name":"menuItem","type":"text"}]},{"name":"OnAppPause","description":"The system calls this method as the first indication that the user is leaving your activity (though it does not always mean the activity is being destroyed).","deprecated":"false","params":[]},{"name":"OnAppResume","description":"When the activity enters the Resumed state, it comes to the foreground, and then the system invokes this event.","deprecated":"false","params":[]},{"name":"OnAppStop","description":"When your activity is no longer visible to the user, it has entered the Stopped state, and the system invokes this event.","deprecated":"false","params":[]},{"name":"OtherScreenClosed","description":"Event raised when another screen has closed and control has returned to this screen.","deprecated":"false","params":[{"name":"otherScreenName","type":"text"},{"name":"result","type":"any"}]},{"name":"PermissionDenied","description":"Event to handle when the app user has denied a needed permission.","deprecated":"false","params":[{"name":"component","type":"component"},{"name":"functionName","type":"text"},{"name":"permissionName","type":"text"}]},{"name":"PermissionGranted","description":"Event to handle when the app user has granted a needed permission. This event is only run when permission is\n granted in response to the AskForPermission method.","deprecated":"false","params":[{"name":"permissionName","type":"text"}]},{"name":"ScreenOrientationChanged","description":"Screen orientation changed","deprecated":"false","params":[]},{"name":"SideMenuClosed","description":"Event will be invoked if the side menu was closed.","deprecated":"false","params":[]},{"name":"SideMenuOpened","description":"Event will be invoked if the side menu was opened.","deprecated":"false","params":[]},{"name":"TitleBarIconSelected","description":"The event returns the 'icon' or 'name' of the selected icon.","deprecated":"false","params":[{"name":"icon","type":"text"},{"name":"name","type":"text"}]},{"name":"TitlebarBackButtonClicked","description":"Event to detect when a menu item has been selected.","deprecated":"false","params":[]}],"methods":[{"name":"AddMenuItem","description":"Add a new item to the menu. Use the 'make a list' block.","deprecated":"false","params":[{"name":"menuItem","type":"list"}]},{"name":"AddMenuItemWithIcon","description":"Add a new item with a icon on the left side to the menu. This function does not use the make a list block. If you want more items with icon then use this block again.","deprecated":"false","params":[{"name":"menuItem","type":"text"},{"name":"menuIcon","type":"text"}]},{"name":"AddTitleBarIcon","description":"Add a new action icon to the TitleBar. You will see a toast message on a long click with your choosen name. Add this block to the \"MenuInitialize\" event.","deprecated":"false","params":[{"name":"icon","type":"text"},{"name":"name","type":"text"}]},{"name":"ArePermissionsGranted","description":"Returns true if ALL needed app permissions were granted, else false.","deprecated":"false","params":[],"returnType":"boolean"},{"name":"AskForPermission","description":"Ask the user to grant access to a dangerous permission.","deprecated":"false","params":[{"name":"permissionName","type":"text"}]},{"name":"CanWriteSystemSettings","description":"Returns true if the app can write system settings, else it returns false. It will return true automatic for devices with android version below 6 (API 23).","deprecated":"false","params":[],"returnType":"boolean"},{"name":"HideKeyboard","description":"Hide the keyboard.","deprecated":"false","params":[]},{"name":"LockSideMenu","description":"Use this block to lock the side menu. This means the user can not open the side menu until the side menu unlock block is used.","deprecated":"false","params":[]},{"name":"MoveTaskToBack","description":"Move task to back. That means it will minimize your current app.","deprecated":"false","params":[]},{"name":"OpenAppSettings","description":"Opens the settings screen of the app. Useful if 'Are Permissions Granted' has returned false.","deprecated":"false","params":[]},{"name":"OpenSystemWriteSettings","description":"Opens the app's system settings page. This works only for devices with android 6+.","deprecated":"false","params":[]},{"name":"RemoveSideMenu","description":"Remove a first created side menu. This block will be usefull if you need to update a side menu dynamically. You can use this block too to test a side menu in the companion. Add then this block above of the 'Side Menu' block.","deprecated":"false","params":[]},{"name":"RemoveTitleBarIcons","description":"Remove all added action icons from the TitleBar.","deprecated":"false","params":[]},{"name":"ResetMenu","description":"Reset the menu back to its default","deprecated":"false","params":[]},{"name":"ShowAboutApplication","description":"Show the dialog which shows when pressing the \"About This Application\" button in the menu.","deprecated":"false","params":[]},{"name":"ShowKeyboard","description":"Show the keyboard","deprecated":"false","params":[]},{"name":"SideMenu","description":"Create a Side Menu. Set to \"layout\" your layout that will be then your side menu. Use as example a vertical arrangement. Your choosen layout will be then removed from the screen and only visible in the side menu.\"Information\": This block works on companion only if you add a side menu on button click.Don’t add it in companion on \"screen initialize event\". Else the companion will crash.Do NOT use this block with the Side Menu Layout component","deprecated":"false","params":[{"name":"layout","type":"component"}]},{"name":"SideMenuClose","description":"If you had set your side menu then you can use this block to close it as example with a button click.","deprecated":"false","params":[]},{"name":"SideMenuOpen","description":"If you had set your side menu then you can use this block to open it as example with a button click.","deprecated":"false","params":[]},{"name":"TaskDescription","description":"Sets information describing the task with this activity for presentation inside the Recents System UI. You will see the settings if the device API is >= 21 and you minimize the app.","deprecated":"false","params":[{"name":"text","type":"text"},{"name":"color","type":"number"}]},{"name":"UnlockSideMenu","description":"Use this block to unlock the side menu. This means the user can now open again the side menu.","deprecated":"false","params":[]},{"name":"VersionCode","description":"This block will returns the version code","deprecated":"false","params":[],"returnType":"number"},{"name":"VersionName","description":"This block will returns the version name","deprecated":"false","params":[],"returnType":"text"}]},{"type":"com.google.appinventor.components.runtime.FusiontablesControl","name":"FusiontablesControl","external":"false","version":"4","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"STORAGE","helpString":"Enabled property set to True, and the device must have a gyroscope sensor.VerticalArrangement instead.VerticalArrangement instead.Canvas, where it can react to touches and drags, interact with other sprites (Balls and other ImageSprites) and the edge of the Canvas, and move according to its property values. Its appearance is that of the image specified in its Picture property (unless its Visible property is False.ImageSprite move 10 pixels to the left every 1000 milliseconds (one second), for example, you would set the Speed property to 10 [pixels], the Interval property to 1000 [milliseconds], the Heading property to 180 [degrees], and the Enabled property to True. A sprite whose Rotates property is True will rotate its image as the sprite's Heading changes. Checking for collisions with a rotated sprite currently checks the sprite's unrotated position so that collision checking will be inaccurate for tall narrow or short wide sprites that are rotated. Any of the sprite properties can be changed at any time under program control.Text property. Other properties, all of which can be set in the Designer or Blocks Editor, control the appearance and placement of the text.","helpUrl":"","showOnPalette":"true","nonVisible":"false","iconName":"","androidMinSdk":19,"properties":[{"name":"BackgroundColor","editorType":"color","defaultValue":"&H00FFFFFF","propertyType":"common","editorArgs":[]},{"name":"Clickable","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]},{"name":"FontBold","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]},{"name":"FontItalic","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]},{"name":"FontSize","editorType":"non_negative_float","defaultValue":"14.0","propertyType":"common","editorArgs":[]},{"name":"FontTypeface","editorType":"typeface","defaultValue":"0","propertyType":"common","editorArgs":[]},{"name":"FontTypefaceImport","editorType":"font_asset","defaultValue":"","propertyType":"advanced","editorArgs":[]},{"name":"HTMLFormat","editorType":"boolean","defaultValue":"False","propertyType":"advanced","editorArgs":[]},{"name":"HasMargins","editorType":"boolean","defaultValue":"True","propertyType":"advanced","editorArgs":[]},{"name":"Marquee","editorType":"boolean","defaultValue":"false","propertyType":"advanced","editorArgs":[]},{"name":"RotationAngle","editorType":"float","defaultValue":"0.0","propertyType":"advanced","editorArgs":[]},{"name":"Text","editorType":"textArea","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"TextAlignment","editorType":"textalignment","defaultValue":"0","propertyType":"common","editorArgs":[]},{"name":"TextColor","editorType":"color","defaultValue":"&HFF000000","propertyType":"common","editorArgs":[]},{"name":"Visible","editorType":"visibility","defaultValue":"True","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"BackgroundColor","description":"","type":"number","rw":"read-write","deprecated":"false"},{"name":"Clickable","description":"Set the component clickable or not clickable.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"Column","description":"","type":"number","rw":"invisible","deprecated":"false"},{"name":"FontBold","description":"","type":"boolean","rw":"invisible","deprecated":"false"},{"name":"FontItalic","description":"","type":"boolean","rw":"invisible","deprecated":"false"},{"name":"FontSize","description":"","type":"number","rw":"read-write","deprecated":"false"},{"name":"FontTypeface","description":"","type":"number","rw":"invisible","deprecated":"false"},{"name":"FontTypefaceImport","description":"Set a custom font.","type":"text","rw":"write-only","deprecated":"false"},{"name":"HTMLFormat","description":"If true, then this label will show html text else it will show plain text. Note: Not all HTML is supported.","type":"boolean","rw":"invisible","deprecated":"false"},{"name":"HasMargins","description":"Reports whether or not the label appears with margins. All four margins (left, right, top, bottom) are the same. This property has no effect in the designer, where labels are always shown with margins.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"Height","description":"","type":"number","rw":"read-write","deprecated":"false"},{"name":"HeightPercent","description":"","type":"number","rw":"write-only","deprecated":"false"},{"name":"Marquee","description":"","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"RotationAngle","description":"Sets the degrees that the label is rotated around the pivot point. Increasing values result in clockwise rotation.","type":"number","rw":"read-write","deprecated":"false"},{"name":"Row","description":"","type":"number","rw":"invisible","deprecated":"false"},{"name":"Text","description":"","type":"text","rw":"read-write","deprecated":"false"},{"name":"TextAlignment","description":"","type":"number","rw":"invisible","deprecated":"false"},{"name":"TextColor","description":"","type":"number","rw":"read-write","deprecated":"false"},{"name":"Visible","description":"Specifies whether the component should be visible on the screen. Value is true if the component is showing and false if hidden.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"Width","description":"","type":"number","rw":"read-write","deprecated":"false"},{"name":"WidthPercent","description":"","type":"number","rw":"write-only","deprecated":"false"}],"events":[{"name":"Click","description":"Event to detect that a user has done a simple \"Click\".","deprecated":"false","params":[]},{"name":"LongClick","description":"Event to detect that a user has done a simple \"Long Click\".","deprecated":"false","params":[]}],"methods":[{"name":"SetShadow","description":"Place a blurred shadow of text underneath the text, drawn with the specified x, y, radius, color (e.g. -11, 12, 13, black","deprecated":"false","params":[{"name":"x","type":"number"},{"name":"y","type":"number"},{"name":"radius","type":"number"},{"name":"color","type":"number"}]}]},{"type":"com.google.appinventor.components.runtime.LeadBolt","name":"LeadBolt","external":"false","version":"2","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"ADVERTISING","helpString":"LeadBolt is a non-visible component allowing you to show Network and Rewarded ads.","helpUrl":"https://docs.kodular.io/components/monetization/leadbolt/","showOnPalette":"true","nonVisible":"true","iconName":"images/leadbolt.png","androidMinSdk":19,"properties":[{"name":"APIKey","editorType":"string","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"CommissionInterstitialAdsNetwork","editorType":"commission_interstitial_ads_network","defaultValue":"unity","propertyType":"common","editorArgs":[]},{"name":"CommissionRewardedAdsNetwork","editorType":"commission_rewarded_ads_network","defaultValue":"unity","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"APIKey","description":"","type":"text","rw":"invisible","deprecated":"false"},{"name":"CommissionInterstitialAdsNetwork","description":"Sets the ad network used to take the commission.","type":"text","rw":"write-only","deprecated":"false"},{"name":"CommissionRewardedAdsNetwork","description":"Sets the ad network used to take the commission.","type":"text","rw":"write-only","deprecated":"false"}],"events":[{"name":"LBCached","description":"Event triggered when ads are loaded","deprecated":"false","params":[{"name":"location","type":"text"}]},{"name":"LBClicked","description":"Event triggered when ads are clicked","deprecated":"false","params":[{"name":"location","type":"text"}]},{"name":"LBClosed","description":"Event triggered when ads are closed","deprecated":"false","params":[{"name":"location","type":"text"},{"name":"reward","type":"boolean"}]},{"name":"LBFailed","description":"Event triggered when ads are failed to load","deprecated":"false","params":[{"name":"location","type":"text"},{"name":"error","type":"text"},{"name":"isCache","type":"boolean"}]},{"name":"LBLoaded","description":"Event triggered when ads are shown","deprecated":"false","params":[{"name":"location","type":"text"}]}],"methods":[{"name":"IsNetworkAdReady","description":"Use this block after loading an ad to check whether it's ready to show.","deprecated":"false","params":[],"returnType":"boolean"},{"name":"IsRewardedAdReady","description":"Use this block after loading an ad to check whether it's ready to show.","deprecated":"false","params":[],"returnType":"boolean"},{"name":"LoadNetworkAd","description":"Use this block to load a Network ad.","deprecated":"false","params":[]},{"name":"LoadRewardedAd","description":"Use this block to load a Rewarded Video ad.","deprecated":"false","params":[]},{"name":"ShowNetworkAd","description":"Use this block after LoadNetworkAd to show the loaded ad.","deprecated":"false","params":[]},{"name":"ShowRewardedAd","description":"Use this block after LoadRewardedAd to show the loaded ad.","deprecated":"false","params":[]}]},{"type":"com.google.appinventor.components.runtime.LightSensor","name":"LightSensor","external":"false","version":"1","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"SENSORS","helpString":"Light Sensor to get the Illuminance from the Phone Sensor","helpUrl":"","showOnPalette":"true","nonVisible":"true","iconName":"images/lightSensor.png","androidMinSdk":19,"properties":[{"name":"Enabled","editorType":"boolean","defaultValue":"True","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"Available","description":"Whether Sensor is Available","type":"boolean","rw":"read-only","deprecated":"false"},{"name":"Enabled","description":"Whether Sensor should be Enabled","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"Illuminance","description":"Returns the illuminance in lux. To return values the sensor must be enabled","type":"number","rw":"read-only","deprecated":"false"}],"events":[{"name":"LightChanged","description":"Event that fires when the illuminance is changed","deprecated":"false","params":[{"name":"illuminance","type":"number"}]}],"methods":[]},{"type":"com.google.appinventor.components.runtime.LineString","name":"LineString","external":"false","version":"1","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"MAPS","helpString":"LineString","helpUrl":"","showOnPalette":"true","nonVisible":"false","iconName":"","androidMinSdk":19,"properties":[{"name":"Description","editorType":"text","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"Draggable","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]},{"name":"EnableInfobox","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]},{"name":"PointsFromString","editorType":"string","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"StrokeColor","editorType":"color","defaultValue":"&HFF000000","propertyType":"common","editorArgs":[]},{"name":"StrokeWidth","editorType":"text","defaultValue":"3","propertyType":"common","editorArgs":[]},{"name":"Title","editorType":"text","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"Visible","editorType":"visibility","defaultValue":"True","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"Description","description":"The description displayed in the info window that appears when the user clicks on the map feature.","type":"text","rw":"read-write","deprecated":"false"},{"name":"Draggable","description":"The Draggable property is used to set whether or not the user can drag the Marker by long-pressing and then dragging the marker to a new location.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"EnableInfobox","description":"Enable or disable the infobox window display when the user taps the feature.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"Points","description":"A list of latitude and longitude pairs that represent the line segments of the polyline.","type":"list","rw":"read-write","deprecated":"false"},{"name":"PointsFromString","description":"","type":"text","rw":"write-only","deprecated":"false"},{"name":"StrokeColor","description":"The paint color used to outline the map feature.","type":"number","rw":"read-write","deprecated":"false"},{"name":"StrokeWidth","description":"The width of the stroke used to outline the map feature.","type":"number","rw":"read-write","deprecated":"false"},{"name":"Title","description":"The title displayed in the info window that appears when the user clicks on the map feature.","type":"text","rw":"read-write","deprecated":"false"},{"name":"Type","description":"The type of the map feature.","type":"text","rw":"read-only","deprecated":"false"},{"name":"Visible","description":"Specifies whether the component should be visible on the screen. Value is true if the component is showing and false if hidden.","type":"boolean","rw":"read-write","deprecated":"false"}],"events":[{"name":"Click","description":"The user clicked on the feature.","deprecated":"false","params":[]},{"name":"Drag","description":"The user dragged the map feature.","deprecated":"false","params":[]},{"name":"LongClick","description":"The user long-pressed on the feature. This event will only trigger if Draggable is false.","deprecated":"false","params":[]},{"name":"StartDrag","description":"The user started a drag operation.","deprecated":"false","params":[]},{"name":"StopDrag","description":"The user stopped a drag operation.","deprecated":"false","params":[]}],"methods":[{"name":"DistanceToFeature","description":"Compute the distance, in meters, between two map features.","deprecated":"false","params":[{"name":"mapFeature","type":"component"},{"name":"centroids","type":"boolean"}],"returnType":"number"},{"name":"DistanceToPoint","description":"Compute the distance, in meters, between a map feature and a latitude, longitude point.","deprecated":"false","params":[{"name":"latitude","type":"number"},{"name":"longitude","type":"number"},{"name":"centroid","type":"boolean"}],"returnType":"number"},{"name":"HideInfobox","description":"Hide the infobox if it is shown. If the infobox is not visible this function has no effect.","deprecated":"false","params":[]},{"name":"ShowInfobox","description":"Show the infobox for the feature. This will show the infobox even if","deprecated":"false","params":[]}]},{"type":"com.google.appinventor.components.runtime.ListPicker","name":"ListPicker","external":"false","version":"16","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"USERINTERFACE","helpString":"ElementsFromString property to their string-separated concatenation (for example, choice 1, choice 2, choice 3) or by setting the Elements property to a List in the Blocks editor.TextAlignment, BackgroundColor, etc.) and whether it can be clicked on (Enabled).
The list can be set using the ElementsFromString property or using the Elements block in the blocks editor. LatitudeFromAddress method) and a longitude (with the LongitudeFromAddress method).
In order to function, the component must have its Enabled property set to True, and the device must have location sensing enabled through wireless networks or GPS satellites (if outdoors).
Non-visible component that measures the ambient geomagnetic field for all three physical axes (x, y, z) in Tesla https://en.wikipedia.org/wiki/Tesla_(unit).
","helpUrl":"","showOnPalette":"true","nonVisible":"true","iconName":"images/magneticSensor.png","androidMinSdk":19,"properties":[{"name":"Enabled","editorType":"boolean","defaultValue":"True","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"AbsoluteStrength","description":"","type":"number","rw":"read-only","deprecated":"false"},{"name":"Available","description":"","type":"boolean","rw":"read-only","deprecated":"false"},{"name":"Enabled","description":"","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"MaximumRange","description":"","type":"number","rw":"read-only","deprecated":"false"},{"name":"Xstrength","description":"","type":"number","rw":"read-only","deprecated":"false"},{"name":"Ystrength","description":"","type":"number","rw":"read-only","deprecated":"false"},{"name":"Zstrength","description":"","type":"number","rw":"read-only","deprecated":"false"}],"events":[{"name":"MagneticChanged","description":"Indicates that the magnetic sensor data has changed.","deprecated":"false","params":[{"name":"xStrength","type":"number"},{"name":"yStrength","type":"number"},{"name":"zStrength","type":"number"},{"name":"absoluteStrength","type":"number"}]}],"methods":[]},{"type":"com.google.appinventor.components.runtime.MakeroidAirtable","name":"MakeroidAirtable","external":"false","version":"1","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"STORAGE","helpString":"AirTable Component","helpUrl":"","showOnPalette":"true","nonVisible":"true","iconName":"images/airtable.png","androidMinSdk":19,"properties":[{"name":"ApiKey","editorType":"string","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"BaseId","editorType":"string","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"TableName","editorType":"string","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"ViewName","editorType":"string","defaultValue":"Grid view","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"ApiKey","description":"Your apiKey","type":"text","rw":"read-write","deprecated":"false"},{"name":"BaseId","description":"","type":"text","rw":"read-write","deprecated":"false"},{"name":"TableName","description":"","type":"text","rw":"read-write","deprecated":"false"},{"name":"ViewName","description":"","type":"text","rw":"read-write","deprecated":"false"}],"events":[{"name":"CellChanged","description":"Triggered when changing cell data. ResponseCode is a number","deprecated":"false","params":[{"name":"responseCode","type":"number"}]},{"name":"DeletedRowByNumber","description":"Triggered when destroying a row. ResponseCode is a number","deprecated":"false","params":[{"name":"responseCode","type":"number"}]},{"name":"GotAllRows","description":"Triggered when getting all rows. ResponseCode is a number, ResponseContent is a string","deprecated":"false","params":[{"name":"responseCode","type":"number"},{"name":"responseContent","type":"text"},{"name":"totalRows","type":"number"}]},{"name":"GotCell","description":"Triggered when receiving cell data. ResponseCode is a number, the other ones are strings","deprecated":"false","params":[{"name":"responseCode","type":"number"},{"name":"value","type":"text"},{"name":"rowId","type":"text"},{"name":"createdTime","type":"text"}]},{"name":"GotColumn","description":"Triggered when receiving column data. ResponseCode is a number, the other ones are lists","deprecated":"false","params":[{"name":"responseCode","type":"number"},{"name":"values","type":"list"},{"name":"rowIds","type":"list"},{"name":"createdTimes","type":"list"}]},{"name":"GotRow","description":"Triggered when receiving row data. ResponseCode is a number, Values is a list","deprecated":"false","params":[{"name":"responseCode","type":"number"},{"name":"values","type":"list"}]},{"name":"RowCreated","description":"Triggered when creating a row. ResponseCode is a number","deprecated":"false","params":[{"name":"responseCode","type":"number"}]},{"name":"RowUpdated","description":"Triggered when updating a row. ResponseCode is a number","deprecated":"false","params":[{"name":"responseCode","type":"number"}]}],"methods":[{"name":"CreateRow","description":"Creates a new row","deprecated":"false","params":[{"name":"columnNames","type":"list"},{"name":"values","type":"list"}]},{"name":"DeleteRowNum","description":"Deletes the given row","deprecated":"false","params":[{"name":"rowNumber","type":"number"}]},{"name":"GetAllRows","description":"Gets all rows","deprecated":"false","params":[]},{"name":"GetCell","description":"Gets cell data","deprecated":"false","params":[{"name":"rowNumber","type":"number"},{"name":"columnName","type":"text"}]},{"name":"GetColumn","description":"Gets column data","deprecated":"false","params":[{"name":"columnName","type":"text"},{"name":"maxRecord","type":"number"}]},{"name":"GetRow","description":"Gets row data","deprecated":"false","params":[{"name":"rowNumber","type":"number"}]},{"name":"SetCell","description":"Changes the value of a cell","deprecated":"false","params":[{"name":"rowNumber","type":"number"},{"name":"columnName","type":"text"},{"name":"value","type":"text"}]},{"name":"UpdateRowByNum","description":"Updates the given row data","deprecated":"false","params":[{"name":"rowNumber","type":"number"},{"name":"columnNames","type":"list"},{"name":"values","type":"list"}]}]},{"type":"com.google.appinventor.components.runtime.MakeroidAnimationUtilities","name":"MakeroidAnimationUtilities","external":"false","version":"1","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"UTILITIES","helpString":"Component for MakeroidAnimationUtilities","helpUrl":"https://docs.kodular.io/components/drawing-and-animation/animation-util/","showOnPalette":"true","nonVisible":"true","iconName":"images/animationUtil.png","androidMinSdk":19,"properties":[],"blockProperties":[],"events":[{"name":"Error","description":"This event is triggered when there was a error catched. Possible values for the error code and method: 1 'GetLeftPosition', 2 'GetTopPosition', 3 'GetRightPosition', 4 'GetBottomPosition', 5 'GetXPosition', 6 'GetYPosition', 7 'Rotation', 8 'BounceHorizontal', 9 'BounceVertical', 10 'OvershootHorizontal', 11 'OvershootVertical', 12 'Zoom'. The error message will return you the error reason.","deprecated":"false","params":[{"name":"errorCode","type":"number"},{"name":"errorMessage","type":"text"},{"name":"method","type":"text"}]}],"methods":[{"name":"BounceHorizontal","description":"Start a horizontal bounce animation. The duration is set in millisecond. Use as example for 1 second '1000'.","deprecated":"false","params":[{"name":"component","type":"component"},{"name":"startPosition","type":"number"},{"name":"endPosition","type":"number"},{"name":"duration","type":"number"}]},{"name":"BounceVertical","description":"Start a vertical bounce animation. The duration is set in millisecond. Use as example for 1 second '1000'.","deprecated":"false","params":[{"name":"component","type":"component"},{"name":"startPosition","type":"number"},{"name":"endPosition","type":"number"},{"name":"duration","type":"number"}]},{"name":"GetBottomPosition","description":"Returns the bottom position of a component. It will return '-9999' if there was a error.","deprecated":"false","params":[{"name":"component","type":"component"}],"returnType":"number"},{"name":"GetLeftPosition","description":"Returns the left position of a component. It will return '-9999' if there was a error.","deprecated":"false","params":[{"name":"component","type":"component"}],"returnType":"number"},{"name":"GetRightPosition","description":"Returns the right position of a component. It will return '-9999' if there was a error.","deprecated":"false","params":[{"name":"component","type":"component"}],"returnType":"number"},{"name":"GetTopPosition","description":"Returns the top position of a component. It will return '-9999' if there was a error.","deprecated":"false","params":[{"name":"component","type":"component"}],"returnType":"number"},{"name":"GetXPosition","description":"Returns the x position of a component. It will return '-9999' if there was a error.","deprecated":"false","params":[{"name":"component","type":"component"}],"returnType":"number"},{"name":"GetYPosition","description":"Returns the y position of a component. It will return '-9999' if there was a error.","deprecated":"false","params":[{"name":"component","type":"component"}],"returnType":"number"},{"name":"OvershootHorizontal","description":"Start a horizontal overshoot animation. If 'tension' is set to 0 you will not see a overshoot animation. Then you will see just a simple deceleration animation. The duration is set in millisecond. Use as example for 1 second '1000'.","deprecated":"false","params":[{"name":"component","type":"component"},{"name":"startPosition","type":"number"},{"name":"endPosition","type":"number"},{"name":"duration","type":"number"},{"name":"tension","type":"number"}]},{"name":"OvershootVertical","description":"Start a vertical overshoot animation. If 'tension' is set to 0 you will not see a overshoot animation. Then you will see just a simple deceleration animation. The duration is set in millisecond. Use as example for 1 second '1000'.","deprecated":"false","params":[{"name":"component","type":"component"},{"name":"startPosition","type":"number"},{"name":"endPosition","type":"number"},{"name":"duration","type":"number"},{"name":"tension","type":"number"}]},{"name":"Rotation","description":"Start a rotation on any component. Use as example in 'rotation Start Degrees' 0, in 'rotation End Degrees' 360 and in 'duration' 300 (millisecond) to run a clockwise, 360 degress animation. You can also use negative numbers for the degress.","deprecated":"false","params":[{"name":"component","type":"component"},{"name":"rotationStartDegrees","type":"number"},{"name":"rotationEndDegrees","type":"number"},{"name":"duration","type":"number"}]},{"name":"Zoom","description":"Start a zoom animation. 'tension' is set to 0 you will not see a overshoot animation. Then you will see just a simple deceleration animation. The duration is set in millisecond. Use as example for 1 second '1000'.","deprecated":"false","params":[{"name":"component","type":"component"},{"name":"startScale","type":"number"},{"name":"endScale","type":"number"},{"name":"duration","type":"number"}]}]},{"type":"com.google.appinventor.components.runtime.MakeroidArduino","name":"MakeroidArduino","external":"false","version":"1","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"CONNECTIVITY","helpString":"Arduino USB Serial Component","helpUrl":"","showOnPalette":"true","nonVisible":"true","iconName":"images/arduino.png","androidMinSdk":19,"properties":[],"blockProperties":[],"events":[{"name":"AfterReadArduino","description":"Triggered after Read function","deprecated":"false","params":[{"name":"success","type":"boolean"},{"name":"data","type":"text"}]}],"methods":[{"name":"BaudRate","description":"Default baud rate is 9600 bps","deprecated":"false","params":[{"name":"baudRate","type":"number"}]},{"name":"CloseArduino","description":"Closes Arduino Connection","deprecated":"false","params":[],"returnType":"boolean"},{"name":"InitializeArduino","description":"Initializes Arduino Connection","deprecated":"false","params":[]},{"name":"IsOpenedArduino","description":"Returns true when the Arduino connection is open","deprecated":"false","params":[],"returnType":"boolean"},{"name":"OpenArduino","description":"Opens Arduino Connection","deprecated":"false","params":[],"returnType":"boolean"},{"name":"ReadArduino","description":"Read from Serial","deprecated":"false","params":[]},{"name":"WriteArduino","description":"Write Data to Serial","deprecated":"false","params":[{"name":"writeDataArduino","type":"text"}]}]},{"type":"com.google.appinventor.components.runtime.MakeroidBottomSheet","name":"MakeroidBottomSheet","external":"false","version":"2","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"VIEWS","helpString":"Component for MakeroidBottomSheet","helpUrl":"","showOnPalette":"true","nonVisible":"true","iconName":"images/bottomsheet.png","androidMinSdk":19,"properties":[{"name":"DimBackground","editorType":"boolean","defaultValue":"True","propertyType":"common","editorArgs":[]},{"name":"ShowStatusBar","editorType":"boolean","defaultValue":"True","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"DimBackground","description":"If set to true the user will see a dark background effect. Else the background have then no dark background effect.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"ShowStatusBar","description":"The status bar is the topmost bar on the screen. This property reports whether the status bar is visible.","type":"boolean","rw":"read-write","deprecated":"false"}],"events":[{"name":"Closed","description":"Event to detect that the dialog was closed.","deprecated":"false","params":[]},{"name":"Opened","description":"Event to detect that the dialog was opened.","deprecated":"false","params":[]}],"methods":[{"name":"HideDialog","description":"Hide the bottom sheet dialog.","deprecated":"false","params":[]},{"name":"RegisterComponentAsDialog","description":"Register any component as example a 'button', that will be later your bottom sheet dialog.","deprecated":"false","params":[{"name":"component","type":"component"}]},{"name":"RegisterLayoutAsDialog","description":"Register any layout as example a 'horizontal arrangement', that will be later your bottom sheet dialog.","deprecated":"false","params":[{"name":"layout","type":"component"}]},{"name":"ShowDialog","description":"Show the bottom sheet dialog.","deprecated":"false","params":[]}]},{"type":"com.google.appinventor.components.runtime.MakeroidCardView","name":"MakeroidCardView","external":"false","version":"3","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"LAYOUT_GENERAL","helpString":"write in ode","helpUrl":"","showOnPalette":"true","nonVisible":"false","iconName":"","androidMinSdk":19,"properties":[{"name":"AlignHorizontal","editorType":"horizontal_alignment","defaultValue":"1","propertyType":"common","editorArgs":[]},{"name":"AlignVertical","editorType":"vertical_alignment","defaultValue":"1","propertyType":"common","editorArgs":[]},{"name":"BackgroundColor","editorType":"color","defaultValue":"&HFFFFFFFF","propertyType":"common","editorArgs":[]},{"name":"ContentPaddingBottom","editorType":"non_negative_integer","defaultValue":"8","propertyType":"common","editorArgs":[]},{"name":"ContentPaddingLeft","editorType":"non_negative_integer","defaultValue":"8","propertyType":"common","editorArgs":[]},{"name":"ContentPaddingRight","editorType":"non_negative_integer","defaultValue":"8","propertyType":"common","editorArgs":[]},{"name":"ContentPaddingTop","editorType":"non_negative_integer","defaultValue":"8","propertyType":"common","editorArgs":[]},{"name":"CornerRadius","editorType":"non_negative_float","defaultValue":"2","propertyType":"common","editorArgs":[]},{"name":"Elevation","editorType":"non_negative_float","defaultValue":"2","propertyType":"common","editorArgs":[]},{"name":"FullClickable","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]},{"name":"StrokeColor","editorType":"color","defaultValue":"&HFFCCCCCC","propertyType":"common","editorArgs":[]},{"name":"StrokeWidth","editorType":"non_negative_float","defaultValue":"0","propertyType":"common","editorArgs":[]},{"name":"TouchColor","editorType":"color","defaultValue":"&HFFCCCCCC","propertyType":"advanced","editorArgs":[]},{"name":"Visible","editorType":"visibility","defaultValue":"True","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"AlignHorizontal","description":"A number that encodes how contents of the arrangement are aligned horizontally. The choices are: 1 = left aligned, 2 = right aligned, 3 = horizontally centered. Alignment has no effect if the arrangement's width is automatic.","type":"number","rw":"read-write","deprecated":"false"},{"name":"AlignVertical","description":"","type":"number","rw":"write-only","deprecated":"false"},{"name":"BackgroundColor","description":"Specifies the card view background color.","type":"number","rw":"read-write","deprecated":"false"},{"name":"Column","description":"","type":"number","rw":"invisible","deprecated":"false"},{"name":"ContentPaddingBottom","description":"Sets the bottom padding between the card view edges and the children of CardView.","type":"number","rw":"read-write","deprecated":"false"},{"name":"ContentPaddingLeft","description":"Sets the left padding between the card view edges and the children of card view.","type":"number","rw":"read-write","deprecated":"false"},{"name":"ContentPaddingRight","description":"Sets the right padding between the card view edges and the children of card view.","type":"number","rw":"read-write","deprecated":"false"},{"name":"ContentPaddingTop","description":"Sets the top padding between the card view edges and the children of card view.","type":"number","rw":"read-write","deprecated":"false"},{"name":"CornerRadius","description":"The corner radius from the card view.","type":"number","rw":"read-write","deprecated":"false"},{"name":"Elevation","description":"The card view elevation value.","type":"number","rw":"read-write","deprecated":"false"},{"name":"FullClickable","description":"If set to true, the card will consume all click events. This means if you have added as example buttons into the card, then will the card consume the touch event on the button. And this means that the button would not be clickable, but only the entire card.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"Height","description":"","type":"number","rw":"read-write","deprecated":"false"},{"name":"HeightPercent","description":"","type":"number","rw":"write-only","deprecated":"false"},{"name":"Row","description":"","type":"number","rw":"invisible","deprecated":"false"},{"name":"StrokeColor","description":"The stroke color for the card view.","type":"number","rw":"read-write","deprecated":"false"},{"name":"StrokeWidth","description":"The stroke width for the card view.","type":"number","rw":"read-write","deprecated":"false"},{"name":"TouchColor","description":"Set the touch color also known as ripple color to the card view component.","type":"number","rw":"invisible","deprecated":"false"},{"name":"Visible","description":"Specifies whether the component should be visible on the screen. Value is true if the component is showing and false if hidden.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"Width","description":"","type":"number","rw":"read-write","deprecated":"false"},{"name":"WidthPercent","description":"","type":"number","rw":"write-only","deprecated":"false"}],"events":[{"name":"Click","description":"Event to detect that a user has done a simple \"Click\".","deprecated":"false","params":[]},{"name":"TouchDown","description":"Event to detect that a user has done a simple touch down on the card.","deprecated":"false","params":[]},{"name":"TouchUp","description":"Event to detect that a user has done a simple touch up on the card.","deprecated":"false","params":[]}],"methods":[]},{"type":"com.google.appinventor.components.runtime.MakeroidChromeCustomTabs","name":"MakeroidChromeCustomTabs","external":"false","version":"2","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"EXPERIMENTAL","helpString":"Chrome Custom Tabs component","helpUrl":"","showOnPalette":"true","nonVisible":"true","iconName":"images/chrome.png","androidMinSdk":19,"properties":[{"name":"DefaultShareMenuItem","editorType":"boolean","defaultValue":"True","propertyType":"common","editorArgs":[]},{"name":"InstantAppsEnabled","editorType":"boolean","defaultValue":"True","propertyType":"common","editorArgs":[]},{"name":"ShowTitle","editorType":"boolean","defaultValue":"True","propertyType":"common","editorArgs":[]},{"name":"ToolbarColor","editorType":"color","defaultValue":"&HFF3F51B5","propertyType":"common","editorArgs":[]},{"name":"Url","editorType":"string","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"UrlBarHidingOnScroll","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"DefaultShareMenuItem","description":"Whether or not to add the default share menu item into the menu.","type":"boolean","rw":"invisible","deprecated":"false"},{"name":"InstantAppsEnabled","description":"Whether or not to enable instant apps.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"ShowTitle","description":"Whether or not to show the title.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"ToolbarColor","description":"Specifies the color of the toolbar.","type":"number","rw":"read-write","deprecated":"false"},{"name":"Url","description":"The URL to load in the custom tab. The URL must start with 'http://' or 'https://'","type":"text","rw":"read-write","deprecated":"false"},{"name":"UrlBarHidingOnScroll","description":"Whether or not to hide the url bar on scrolling.","type":"boolean","rw":"invisible","deprecated":"false"}],"events":[],"methods":[{"name":"AddMenuItemOpenApp","description":"Use this block to add a menu item with the given title to open any app you want with the package name. The package name can be as example 'com.instagram.android' to open Instagram on the menu item click. If the app is not installed the menu item will not be added.","deprecated":"false","params":[{"name":"title","type":"text"},{"name":"packageName","type":"text"}]},{"name":"AddMenuItemOpenPage","description":"Use this block to add a menu item with the given title and page link. The page can be as example 'https://www.instagram.com/kodular/'. If the user have Instagram installed,the page will then be opened in the official Instagram app. Else in the default browser.","deprecated":"false","params":[{"name":"title","type":"text"},{"name":"page","type":"text"}]},{"name":"OpenCustomTab","description":"Use this block to open the custom tab.","deprecated":"false","params":[]}]},{"type":"com.google.appinventor.components.runtime.MakeroidCircularProgress","name":"MakeroidCircularProgress","external":"false","version":"1","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"USERINTERFACE","helpString":"Component for MakeroidCircularProgress","helpUrl":"","showOnPalette":"true","nonVisible":"false","iconName":"","androidMinSdk":19,"properties":[{"name":"Color","editorType":"color","defaultValue":"&HFF2196F2","propertyType":"common","editorArgs":[]},{"name":"Visible","editorType":"visibility","defaultValue":"True","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"Color","description":"Change the indeterminate color of the circular progress bar.","type":"number","rw":"read-write","deprecated":"false"},{"name":"Column","description":"","type":"number","rw":"invisible","deprecated":"false"},{"name":"Height","description":"","type":"number","rw":"read-write","deprecated":"false"},{"name":"HeightPercent","description":"","type":"number","rw":"write-only","deprecated":"false"},{"name":"Row","description":"","type":"number","rw":"invisible","deprecated":"false"},{"name":"Visible","description":"Specifies whether the component should be visible on the screen. Value is true if the component is showing and false if hidden.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"Width","description":"","type":"number","rw":"read-write","deprecated":"false"},{"name":"WidthPercent","description":"","type":"number","rw":"write-only","deprecated":"false"}],"events":[],"methods":[]},{"type":"com.google.appinventor.components.runtime.MakeroidCloudinary","name":"MakeroidCloudinary","external":"false","version":"1","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"STORAGE","helpString":"Non-visible component that allows you to upload media to Cloudinary.","helpUrl":"","showOnPalette":"true","nonVisible":"true","iconName":"images/cloudinary.png","androidMinSdk":19,"properties":[{"name":"APIKey","editorType":"string","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"APISecret","editorType":"string","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"CloudName","editorType":"string","defaultValue":"","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"APIKey","description":"Your Cloudinary API key.","type":"text","rw":"read-write","deprecated":"false"},{"name":"APISecret","description":"Your Cloudinary API secret.","type":"text","rw":"read-write","deprecated":"false"},{"name":"CloudName","description":"Your Cloudinary cloud name.","type":"text","rw":"read-write","deprecated":"false"}],"events":[{"name":"MediaUploaded","description":"Event raised after the Upload Media block has been used","deprecated":"false","params":[{"name":"responseContent","type":"text"},{"name":"url","type":"text"}]}],"methods":[{"name":"UploadMedia","description":"Uploads the specified media file to your Cloudinary media library.","deprecated":"false","params":[{"name":"path","type":"text"}]}]},{"type":"com.google.appinventor.components.runtime.MakeroidDebuggableComponent","name":"MakeroidDebuggableComponent","external":"false","version":"1","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"INTERNAL","helpString":"This component makes the app debuggable","helpUrl":"","showOnPalette":"true","nonVisible":"true","iconName":"images/debug.png","androidMinSdk":19,"properties":[],"blockProperties":[],"events":[],"methods":[]},{"type":"com.google.appinventor.components.runtime.MakeroidDynamicButton","name":"MakeroidDynamicButton","external":"false","version":"3","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"DYNAMIC","helpString":"A component to create dynamic buttons in Arrangments","helpUrl":"","showOnPalette":"true","nonVisible":"true","iconName":"images/button.png","androidMinSdk":19,"properties":[],"blockProperties":[],"events":[{"name":"ButtonClick","description":"Trigger when a Dynamic Button is clicked.","deprecated":"false","params":[{"name":"id","type":"number"}]},{"name":"ButtonLongClick","description":"Trigger when a Dynamic Button is long clicked.","deprecated":"false","params":[{"name":"id","type":"number"}]}],"methods":[{"name":"CreateButton","description":"Create a Dynamic Button.","deprecated":"false","params":[{"name":"id","type":"number"},{"name":"arrangement","type":"component"}]},{"name":"DeleteButton","description":"This block is DEPRECATED! Please use instead the 'Delete Button' block without arrangement parameter.","deprecated":"true","params":[{"name":"id","type":"number"},{"name":"arrangement","type":"component"}]},{"name":"DeleteButtonNew","description":"Delete a Dynamic Button.","deprecated":"false","params":[{"name":"id","type":"number"}]},{"name":"GetButtonById","description":"Returns the button referenced by its id.","deprecated":"false","params":[{"name":"id","type":"number"}],"returnType":"component"},{"name":"GetEnabled","description":"Get the Enabled status of a button.","deprecated":"false","params":[{"name":"id","type":"number"}],"returnType":"boolean"},{"name":"GetFontSize","description":"Get the Font Size of a button.","deprecated":"false","params":[{"name":"id","type":"number"}],"returnType":"number"},{"name":"GetHeight","description":"Get the Height of a button.","deprecated":"false","params":[{"name":"id","type":"number"}],"returnType":"number"},{"name":"GetText","description":"Get the Text of a button.","deprecated":"false","params":[{"name":"id","type":"number"}],"returnType":"text"},{"name":"GetWidth","description":"Get the Width of a button.","deprecated":"false","params":[{"name":"id","type":"number"}],"returnType":"number"},{"name":"SetBackgroundColor","description":"Update the Background Color of a button.","deprecated":"false","params":[{"name":"id","type":"number"},{"name":"color","type":"number"}]},{"name":"SetEnabled","description":"Update the Enabled status of a button.","deprecated":"false","params":[{"name":"id","type":"number"},{"name":"enabled","type":"boolean"}]},{"name":"SetFont","description":"Update the Font of a button.","deprecated":"false","params":[{"name":"id","type":"number"},{"name":"bold","type":"boolean"},{"name":"italic","type":"boolean"}]},{"name":"SetFontSize","description":"Update the Font Size of a button.","deprecated":"false","params":[{"name":"id","type":"number"},{"name":"size","type":"number"}]},{"name":"SetHeight","description":"Update the Height of a button.","deprecated":"false","params":[{"name":"id","type":"number"},{"name":"height","type":"number"}]},{"name":"SetText","description":"Update the Text of a button.","deprecated":"false","params":[{"name":"id","type":"number"},{"name":"text","type":"text"}]},{"name":"SetTextColor","description":"Update the Text Color of a button.","deprecated":"false","params":[{"name":"id","type":"number"},{"name":"color","type":"number"}]},{"name":"SetWidth","description":"Update the Width of a button.","deprecated":"false","params":[{"name":"id","type":"number"},{"name":"width","type":"number"}]}]},{"type":"com.google.appinventor.components.runtime.MakeroidDynamicLabel","name":"MakeroidDynamicLabel","external":"false","version":"2","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"DYNAMIC","helpString":"A component to create dynamic labels in Arrangments","helpUrl":"","showOnPalette":"true","nonVisible":"true","iconName":"images/label.png","androidMinSdk":19,"properties":[],"blockProperties":[{"name":"AlignmentCenter","description":"Center alignment (1)","type":"number","rw":"read-only","deprecated":"false"},{"name":"AlignmentLeft","description":"Left alignment (0)","type":"number","rw":"read-only","deprecated":"false"},{"name":"AlignmentRight","description":"Right alignment (2)","type":"number","rw":"read-only","deprecated":"false"}],"events":[],"methods":[{"name":"CreateLabel","description":"Create a Dynamic Label","deprecated":"false","params":[{"name":"id","type":"number"},{"name":"arrangement","type":"component"}]},{"name":"DeleteLabel","description":"Remove a label component with the given id.","deprecated":"false","params":[{"name":"id","type":"number"}]},{"name":"GetFontSize","description":"Get the Font Size of a Label","deprecated":"false","params":[{"name":"id","type":"number"}],"returnType":"number"},{"name":"GetHeight","description":"Get the Height of a Label","deprecated":"false","params":[{"name":"id","type":"number"}],"returnType":"number"},{"name":"GetLabelById","description":"Returns the label referenced by its id.","deprecated":"false","params":[{"name":"id","type":"number"}],"returnType":"component"},{"name":"GetText","description":"Get the Text of a Label","deprecated":"false","params":[{"name":"id","type":"number"}],"returnType":"text"},{"name":"GetWidth","description":"Get the Width of a Label","deprecated":"false","params":[{"name":"id","type":"number"}],"returnType":"number"},{"name":"SetAlignment","description":"Update the Text Alignment of a Label","deprecated":"false","params":[{"name":"id","type":"number"},{"name":"alignment","type":"number"}]},{"name":"SetBackgroundColor","description":"Update the Background Color of a Label","deprecated":"false","params":[{"name":"id","type":"number"},{"name":"color","type":"number"}]},{"name":"SetFont","description":"Update the Font of a Label","deprecated":"false","params":[{"name":"id","type":"number"},{"name":"bold","type":"boolean"},{"name":"italic","type":"boolean"}]},{"name":"SetFontSize","description":"Update the Font Size of a Label","deprecated":"false","params":[{"name":"id","type":"number"},{"name":"size","type":"number"}]},{"name":"SetHeight","description":"Update the Height of a Label","deprecated":"false","params":[{"name":"id","type":"number"},{"name":"height","type":"number"}]},{"name":"SetText","description":"Update the Text of a Label","deprecated":"false","params":[{"name":"id","type":"number"},{"name":"text","type":"text"},{"name":"html","type":"boolean"}]},{"name":"SetTextColor","description":"Update the Text Color of a Label","deprecated":"false","params":[{"name":"id","type":"number"},{"name":"color","type":"number"}]},{"name":"SetWidth","description":"Update the Width of a Label","deprecated":"false","params":[{"name":"id","type":"number"},{"name":"width","type":"number"}]}]},{"type":"com.google.appinventor.components.runtime.MakeroidDynamicTextBox","name":"MakeroidDynamicTextBox","external":"false","version":"2","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"DYNAMIC","helpString":"A component to create dynamic textboxes in Arrangments","helpUrl":"https://docs.kodular.io/components/dynamic/dynamic-textbox/","showOnPalette":"true","nonVisible":"true","iconName":"images/textbox.png","androidMinSdk":19,"properties":[],"blockProperties":[],"events":[{"name":"OnTextChanged","description":"Trigger when the text of a Dynamic TextBox changes","deprecated":"false","params":[{"name":"id","type":"number"},{"name":"text","type":"text"}]}],"methods":[{"name":"CreateTextBox","description":"Create a Dynamic TextBox","deprecated":"false","params":[{"name":"id","type":"number"},{"name":"arrangement","type":"component"}]},{"name":"DeleteTextBox","description":"Remove a textbox component with the given id.","deprecated":"false","params":[{"name":"id","type":"number"}]},{"name":"GetButtonById","description":"Returns the button referenced by its id.","deprecated":"false","params":[{"name":"id","type":"number"}],"returnType":"component"},{"name":"GetEnabled","description":"Get the Enabled status of a TextBox","deprecated":"false","params":[{"name":"id","type":"number"}],"returnType":"boolean"},{"name":"GetFontSize","description":"Get the Font Size of a TextBox","deprecated":"false","params":[{"name":"id","type":"number"}],"returnType":"number"},{"name":"GetHeight","description":"Get the Height of a TextBox","deprecated":"false","params":[{"name":"id","type":"number"}],"returnType":"number"},{"name":"GetText","description":"Get the Text of a TextBox","deprecated":"false","params":[{"name":"id","type":"number"}],"returnType":"text"},{"name":"GetWidth","description":"Get the Width of a TextBox","deprecated":"false","params":[{"name":"id","type":"number"}],"returnType":"number"},{"name":"SetAlignment","description":"Update the Text Alignment of a TextBox","deprecated":"false","params":[{"name":"id","type":"number"},{"name":"alignment","type":"number"}]},{"name":"SetBackgroundColor","description":"Update the Background Color of a TextBox","deprecated":"false","params":[{"name":"id","type":"number"},{"name":"color","type":"number"}]},{"name":"SetEnabled","description":"Update the Enabled status of a TextBox","deprecated":"false","params":[{"name":"id","type":"number"},{"name":"enabled","type":"boolean"}]},{"name":"SetFont","description":"Update the Font of a TextBox","deprecated":"false","params":[{"name":"id","type":"number"},{"name":"bold","type":"boolean"},{"name":"italic","type":"boolean"}]},{"name":"SetFontSize","description":"Update the Font Size of a TextBox","deprecated":"false","params":[{"name":"id","type":"number"},{"name":"size","type":"number"}]},{"name":"SetHeight","description":"Update the Height of a TextBox","deprecated":"false","params":[{"name":"id","type":"number"},{"name":"height","type":"number"}]},{"name":"SetText","description":"Update the Text of a TextBox","deprecated":"false","params":[{"name":"id","type":"number"},{"name":"text","type":"text"}]},{"name":"SetTextColor","description":"Update the Text Color of a TextBox","deprecated":"false","params":[{"name":"id","type":"number"},{"name":"color","type":"number"}]},{"name":"SetWidth","description":"Update the Width of a TextBox","deprecated":"false","params":[{"name":"id","type":"number"},{"name":"width","type":"number"}]}]},{"type":"com.google.appinventor.components.runtime.MakeroidExoPlayer","name":"MakeroidExoPlayer","external":"false","version":"4","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"MEDIA","helpString":"Component for MakeroidExoPlayer","helpUrl":"","showOnPalette":"true","nonVisible":"true","iconName":"images/exoplayer.png","androidMinSdk":19,"properties":[{"name":"Loop","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]},{"name":"Source","editorType":"asset","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"Volume","editorType":"non_negative_float","defaultValue":"50","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"CurrentPosition","description":"Returns the current position of the source file that is playing in milliseconds.","type":"number","rw":"read-only","deprecated":"false"},{"name":"Duration","description":"Returns the duration of the source file.","type":"number","rw":"read-only","deprecated":"false"},{"name":"Loop","description":"If true, the player will loop when it plays.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"Source","description":"Set the path to the audio source. Can be a asset file, from external card, or from a online stream.","type":"text","rw":"read-write","deprecated":"false"},{"name":"Volume","description":"Sets the volume to a number between 0 and 100","type":"number","rw":"read-write","deprecated":"false"}],"events":[{"name":"Completed","description":"This event is invoked if the player state is completed.","deprecated":"false","params":[]},{"name":"GotMetaData","description":"This event returns meta data from the audio stream. Works for files but not for streams as example radio streams.","deprecated":"false","params":[{"name":"artist","type":"text"},{"name":"title","type":"text"},{"name":"album","type":"text"},{"name":"albumArtist","type":"text"},{"name":"track","type":"text"}]},{"name":"OnPlayerError","description":"This event returns the error reason for any problems.","deprecated":"false","params":[{"name":"errorMessage","type":"text"}]},{"name":"OtherPlayerStarted","description":"This event is signaled when another player has started (and the current player is playing or paused, but not stopped).","deprecated":"false","params":[]},{"name":"OtherPlayerStopped","description":"This event is signaled when another player has stopped (and the current player is playing or paused, but not stopped).","deprecated":"false","params":[]},{"name":"StatusChanged","description":"This event returns true or false for the respective simpleExoPlayer statuses.","deprecated":"false","params":[{"name":"isPlaying","type":"boolean"},{"name":"isPause","type":"boolean"},{"name":"isStopped","type":"boolean"},{"name":"isLoading","type":"boolean"}]}],"methods":[{"name":"Pause","description":"Pause the player.","deprecated":"false","params":[]},{"name":"Resume","description":"Resume the player.","deprecated":"false","params":[]},{"name":"SeekTo","description":"Set a position where the source file should start playing in milliseconds.","deprecated":"false","params":[{"name":"position","type":"number"}]},{"name":"Start","description":"Start the player.","deprecated":"false","params":[]},{"name":"Stop","description":"Stop the player.","deprecated":"false","params":[]},{"name":"isLoading","description":"Returns true if the player is current loading.","deprecated":"false","params":[],"returnType":"boolean"},{"name":"isPause","description":"Returns true if the player is current in pause mode.","deprecated":"false","params":[],"returnType":"boolean"},{"name":"isPlaying","description":"Returns true if the player is current playing.","deprecated":"false","params":[],"returnType":"boolean"},{"name":"isStopped","description":"Returns true if the player is current stopped.","deprecated":"false","params":[],"returnType":"boolean"}]},{"type":"com.google.appinventor.components.runtime.MakeroidFBBannerAd","name":"MakeroidFBBannerAd","external":"false","version":"1","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"ADVERTISING","helpString":"...in ode messages file","helpUrl":"https://docs.kodular.io/components/monetization/facebook-banner/","showOnPalette":"true","nonVisible":"false","iconName":"images/facebook.png","androidMinSdk":19,"properties":[{"name":"PlacementID","editorType":"text","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"Visible","editorType":"visibility","defaultValue":"True","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"Column","description":"","type":"number","rw":"invisible","deprecated":"false"},{"name":"PlacementID","description":"Set Placement ID","type":"text","rw":"read-write","deprecated":"false"},{"name":"Row","description":"","type":"number","rw":"invisible","deprecated":"false"},{"name":"Visible","description":"Specifies whether the component should be visible on the screen. Value is true if the component is showing and false if hidden.","type":"boolean","rw":"read-write","deprecated":"false"}],"events":[{"name":"AdClicked","description":"Event triggered when ads are clicked","deprecated":"false","params":[]},{"name":"AdClosed","description":"Event triggered when ads are closed","deprecated":"false","params":[]},{"name":"AdLoaded","description":"Event triggered when ads are loaded","deprecated":"false","params":[]},{"name":"Error","description":"Event triggered when ads failed to load","deprecated":"false","params":[{"name":"error","type":"text"}]}],"methods":[{"name":"LoadAd","description":"Load Ad","deprecated":"false","params":[]}]},{"type":"com.google.appinventor.components.runtime.MakeroidFBInterstitialAd","name":"MakeroidFBInterstitialAd","external":"false","version":"3","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"ADVERTISING","helpString":"...in ode messages file","helpUrl":"https://docs.kodular.io/components/monetization/facebook-interstitial/","showOnPalette":"true","nonVisible":"true","iconName":"images/facebook.png","androidMinSdk":19,"properties":[{"name":"CommissionInterstitialAdsNetwork","editorType":"commission_interstitial_ads_network","defaultValue":"unity","propertyType":"common","editorArgs":[]},{"name":"PlacementID","editorType":"text","defaultValue":"","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"CommissionInterstitialAdsNetwork","description":"Sets the ad network used to take the commission.","type":"text","rw":"write-only","deprecated":"false"},{"name":"PlacementID","description":"","type":"text","rw":"invisible","deprecated":"false"}],"events":[{"name":"AdClosed","description":"Called when the user is about to return to the application after clicking on an ad","deprecated":"false","params":[]},{"name":"AdLoaded","description":"Called when an ad is received","deprecated":"false","params":[]},{"name":"Error","description":"Called when an ad request failed. message will display the reason for why the ad failed","deprecated":"false","params":[{"name":"error","type":"text"}]}],"methods":[{"name":"LoadAd","description":"Loads a new ad.","deprecated":"false","params":[]},{"name":"ShowAd","description":"Shows an ad to the user.","deprecated":"false","params":[]}]},{"type":"com.google.appinventor.components.runtime.MakeroidFab","name":"MakeroidFab","external":"false","version":"2","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"USERINTERFACE","helpString":"write in ode","helpUrl":"https://docs.kodular.io/components/user-interface/floating-action-button/","showOnPalette":"true","nonVisible":"true","iconName":"images/fab.png","androidMinSdk":19,"properties":[{"name":"BackgroundColor","editorType":"color","defaultValue":"&HFF2196F2","propertyType":"common","editorArgs":[]},{"name":"CallFabClickOnTextMessageClick","editorType":"boolean","defaultValue":"False","propertyType":"advanced","editorArgs":[]},{"name":"CallFabLongClickOnTextMessageLongClick","editorType":"boolean","defaultValue":"False","propertyType":"advanced","editorArgs":[]},{"name":"Elevation","editorType":"non_negative_float","defaultValue":"10","propertyType":"common","editorArgs":[]},{"name":"HideTextMessageOnTextClick","editorType":"boolean","defaultValue":"True","propertyType":"advanced","editorArgs":[]},{"name":"HideTextMessageOnTextLongClick","editorType":"boolean","defaultValue":"True","propertyType":"advanced","editorArgs":[]},{"name":"Icon","editorType":"image_asset","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"IconColor","editorType":"color","defaultValue":"&HFFFFFFFF","propertyType":"common","editorArgs":[]},{"name":"IconName","editorType":"string","defaultValue":"add","propertyType":"common","editorArgs":[]},{"name":"MarginBottom","editorType":"non_negative_integer","defaultValue":"16","propertyType":"common","editorArgs":[]},{"name":"MarginRight","editorType":"non_negative_integer","defaultValue":"16","propertyType":"common","editorArgs":[]},{"name":"RippleColor","editorType":"color","defaultValue":"&HFFFFFFFF","propertyType":"advanced","editorArgs":[]},{"name":"RotationDuration","editorType":"integer","defaultValue":"300","propertyType":"advanced","editorArgs":[]},{"name":"RotationEndDegrees","editorType":"float","defaultValue":"360","propertyType":"advanced","editorArgs":[]},{"name":"RotationOnClick","editorType":"boolean","defaultValue":"True","propertyType":"advanced","editorArgs":[]},{"name":"RotationStartDegrees","editorType":"float","defaultValue":"0","propertyType":"advanced","editorArgs":[]},{"name":"ShowTextMessageOnLeftSide","editorType":"boolean","defaultValue":"True","propertyType":"advanced","editorArgs":[]},{"name":"Size","editorType":"size","defaultValue":"1","propertyType":"common","editorArgs":[]},{"name":"TextMessageBackgroundColor","editorType":"color","defaultValue":"&HFF444444","propertyType":"advanced","editorArgs":[]},{"name":"TextMessageCornerRadius","editorType":"non_negative_float","defaultValue":"8","propertyType":"advanced","editorArgs":[]},{"name":"TextMessageText","editorType":"string","defaultValue":"","propertyType":"advanced","editorArgs":[]},{"name":"TextMessageTextColor","editorType":"color","defaultValue":"&HFFFFFFFF","propertyType":"advanced","editorArgs":[]},{"name":"Visible","editorType":"boolean","defaultValue":"True","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"BackgroundColor","description":"Returns the fab's background color.","type":"number","rw":"read-write","deprecated":"false"},{"name":"CallFabClickOnTextMessageClick","description":"If true the FAB click listener will be invoked on a text message click.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"CallFabLongClickOnTextMessageLongClick","description":"If true the FAB long click listener will be invoked on a text message long click.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"Elevation","description":"","type":"number","rw":"read-write","deprecated":"false"},{"name":"HideTextMessageOnTextClick","description":"Hide the text message when clicking on the message","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"HideTextMessageOnTextLongClick","description":"Hide the text message after a long click on the text message.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"Icon","description":"The path for the used image in FAB.","type":"text","rw":"read-write","deprecated":"false"},{"name":"IconColor","description":"The color for the material icon.","type":"number","rw":"read-write","deprecated":"false"},{"name":"IconName","description":"Use a material icon for the fab without uploading a image resource into your project. You can find the icon name (or code) here at https://material.io/icons","type":"text","rw":"read-write","deprecated":"false"},{"name":"MarginBottom","description":"Returns the fab's bottom margin.","type":"number","rw":"read-write","deprecated":"false"},{"name":"MarginRight","description":"Returns right margin","type":"number","rw":"read-write","deprecated":"false"},{"name":"RippleColor","description":"Returns the fab's ripple color.","type":"number","rw":"read-write","deprecated":"false"},{"name":"RotationDuration","description":"Returns the fab's rotation duration in milliseconds.","type":"number","rw":"read-write","deprecated":"false"},{"name":"RotationEndDegrees","description":"Returns the fab's rotation end degrees.","type":"number","rw":"read-write","deprecated":"false"},{"name":"RotationOnClick","description":"Returns true if the fab will rotate on click.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"RotationStartDegrees","description":"Returns the fab's rotation start degrees.","type":"number","rw":"read-write","deprecated":"false"},{"name":"ShowTextMessageOnLeftSide","description":"Set the text message to the left side of the floating button. If false the text will be on the right side.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"Size","description":"Sets the size of the button. Use '1' for normal, '2' for mini or '3' for auto size based on the screen size.","type":"number","rw":"read-write","deprecated":"false"},{"name":"TextMessageBackgroundColor","description":"Set the text message background color.","type":"number","rw":"read-write","deprecated":"false"},{"name":"TextMessageCornerRadius","description":"Set the text message corner radius.","type":"number","rw":"read-write","deprecated":"false"},{"name":"TextMessageText","description":"Set the text message.","type":"text","rw":"read-write","deprecated":"false"},{"name":"TextMessageTextColor","description":"Set the text message color.","type":"number","rw":"read-write","deprecated":"false"},{"name":"Visible","description":"Returns true if the fab button is visible.","type":"boolean","rw":"read-write","deprecated":"false"}],"events":[{"name":"Click","description":"Event to detect that the fab button was clicked.","deprecated":"false","params":[]},{"name":"LongClick","description":"Event to detect that the fab button was long clicked.","deprecated":"false","params":[]}],"methods":[{"name":"Hide","description":"Hides the fab button.","deprecated":"false","params":[]},{"name":"HideTextMessage","description":"Hides text message.","deprecated":"false","params":[]},{"name":"Show","description":"Shows the fab button.","deprecated":"false","params":[]},{"name":"ShowTextMessage","description":"Show a new text message near to the fab with the given properties. You can do the changes with the properties in the advanded category.","deprecated":"false","params":[]},{"name":"StartRotationAnimation","description":"Starts a rotation animation. You can use the 'Rotation Duration','Rotation Start Degrees' and 'Rotation End Degrees' to define the animation. This block will work too if the 'Rotation On Click' property is disabled.","deprecated":"false","params":[]}]},{"type":"com.google.appinventor.components.runtime.MakeroidFtp","name":"MakeroidFtp","external":"false","version":"2","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"CONNECTIVITY","helpString":"write in ode","helpUrl":"","showOnPalette":"true","nonVisible":"true","iconName":"images/ftp.png","androidMinSdk":19,"properties":[{"name":"FtpServer","editorType":"string","defaultValue":"ftp.example.org","propertyType":"common","editorArgs":[]},{"name":"Password","editorType":"string","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"Port","editorType":"integer","defaultValue":"21","propertyType":"common","editorArgs":[]},{"name":"Username","editorType":"string","defaultValue":"Your Username","propertyType":"common","editorArgs":[]},{"name":"WorkingDirectory","editorType":"string","defaultValue":"/","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"FtpServer","description":"Set the ftp server url.","type":"text","rw":"read-write","deprecated":"false"},{"name":"Password","description":"Set the password to login into the ftp server.","type":"text","rw":"read-write","deprecated":"false"},{"name":"Port","description":"Set the ftp port number.","type":"number","rw":"read-write","deprecated":"false"},{"name":"Username","description":"Set the username to login into the ftp server.","type":"text","rw":"read-write","deprecated":"false"},{"name":"WorkingDirectory","description":"Set the ftp working dir.","type":"text","rw":"read-write","deprecated":"false"}],"events":[{"name":"ConnectError","description":"This event returns the reason if a try to connect was not successful.","deprecated":"false","params":[{"name":"error","type":"text"}]},{"name":"ConnectionStatus","description":"This event returns the status of the connection. If it is connect it will return true, else false.","deprecated":"false","params":[{"name":"isConnected","type":"boolean"}]},{"name":"DisconnectError","description":"This event returns the reason if a try to disconnect was not successful.","deprecated":"false","params":[{"name":"error","type":"text"}]},{"name":"DownloadDone","description":"This event is invoked when the download is finished.","deprecated":"false","params":[]},{"name":"DownloadError","description":"This event returns the reason if a download was not successful.","deprecated":"false","params":[{"name":"error","type":"text"}]},{"name":"UploadDone","description":"This event is invoked when the upload is finished.","deprecated":"false","params":[]},{"name":"UploadError","description":"This event returns the reason if a upload was not successful.","deprecated":"false","params":[{"name":"error","type":"text"}]}],"methods":[{"name":"Connect","description":"Start the connection to the ftp server.","deprecated":"false","params":[]},{"name":"Disconnect","description":"Disconnect the current connection.","deprecated":"false","params":[]},{"name":"DownloadFile","description":"Start downloading a file.","deprecated":"false","params":[{"name":"remoteFilepath","type":"text"},{"name":"destination","type":"text"}]},{"name":"GetListOfFiles","description":"Get a list of files in a directory. Returns a empty list if a error occurs.","deprecated":"false","params":[{"name":"dir","type":"text"}],"returnType":"list"},{"name":"UploadFile","description":"Start uploading a file.","deprecated":"false","params":[{"name":"filePath","type":"text"},{"name":"newName","type":"text"}]},{"name":"deleteDir","description":"Delete a directory on the ftp server.","deprecated":"false","params":[{"name":"dir","type":"text"}]},{"name":"makeDir","description":"Make/create a directory on the ftp server.","deprecated":"false","params":[{"name":"dir","type":"text"}]}]},{"type":"com.google.appinventor.components.runtime.MakeroidInstantAccess","name":"MakeroidInstantAccess","external":"false","version":"1","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"INTERNAL","helpString":"Component for MakeroidInstantAccess","helpUrl":"","showOnPalette":"true","nonVisible":"true","iconName":"images/instantAccess.png","androidMinSdk":19,"properties":[{"name":"ClientID","editorType":"string","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"ClientSecret","editorType":"string","defaultValue":"","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"ClientID","description":"","type":"text","rw":"invisible","deprecated":"false"},{"name":"ClientSecret","description":"","type":"text","rw":"invisible","deprecated":"false"}],"events":[{"name":"OnRequestSent","description":"A event to detect that the login request was sent.","deprecated":"false","params":[{"name":"success","type":"boolean"},{"name":"data","type":"text"},{"name":"message","type":"text"}]},{"name":"OnStatusReceived","description":"A event to detect that the status was received.","deprecated":"false","params":[{"name":"success","type":"boolean"},{"name":"data","type":"text"},{"name":"message","type":"text"}]}],"methods":[{"name":"CheckStatus","description":"Check the current status with a given username.","deprecated":"false","params":[{"name":"user","type":"text"}]},{"name":"ClientID","description":"Returns the client id.","deprecated":"false","params":[],"returnType":"text"},{"name":"ClientSecret","description":"Returns the client secret.","deprecated":"false","params":[],"returnType":"text"},{"name":"Request","description":"Start a request to user with the instant access login service.","deprecated":"false","params":[{"name":"user","type":"text"}]}]},{"type":"com.google.appinventor.components.runtime.MakeroidLinearProgressbar","name":"MakeroidLinearProgressbar","external":"false","version":"1","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"USERINTERFACE","helpString":"Component for MakeroidLinearProgressbar","helpUrl":"","showOnPalette":"true","nonVisible":"false","iconName":"","androidMinSdk":19,"properties":[{"name":"Indeterminate","editorType":"boolean","defaultValue":"True","propertyType":"common","editorArgs":[]},{"name":"IndeterminateColor","editorType":"color","defaultValue":"&HFF2196F2","propertyType":"common","editorArgs":[]},{"name":"Maximum","editorType":"integer","defaultValue":"100","propertyType":"common","editorArgs":[]},{"name":"Minimum","editorType":"integer","defaultValue":"0","propertyType":"common","editorArgs":[]},{"name":"ProgressColor","editorType":"color","defaultValue":"&HFF2196F2","propertyType":"common","editorArgs":[]},{"name":"Visible","editorType":"visibility","defaultValue":"True","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"Column","description":"","type":"number","rw":"invisible","deprecated":"false"},{"name":"Indeterminate","description":"Change the indeterminate mode for this progress bar. In indeterminate mode, the progress is ignored and the progress bar shows an infinite animation instead.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"IndeterminateColor","description":"Change the indeterminate color of the progress bar.","type":"number","rw":"read-write","deprecated":"false"},{"name":"Maximum","description":"Set the upper range of the progress bar max.","type":"number","rw":"read-write","deprecated":"false"},{"name":"Minimum","description":"Set the lower range of the progress bar to min. This function works only for devices with API >= 26","type":"number","rw":"read-write","deprecated":"false"},{"name":"Progress","description":"Sets the current progress to the specified value. Does not do anything if the progress bar is in indeterminate mode.","type":"number","rw":"read-write","deprecated":"false"},{"name":"ProgressColor","description":"Change the progress color of the progress bar.","type":"number","rw":"read-write","deprecated":"false"},{"name":"Row","description":"","type":"number","rw":"invisible","deprecated":"false"},{"name":"Visible","description":"Specifies whether the component should be visible on the screen. Value is true if the component is showing and false if hidden.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"Width","description":"","type":"number","rw":"read-write","deprecated":"false"},{"name":"WidthPercent","description":"","type":"number","rw":"write-only","deprecated":"false"}],"events":[{"name":"ProgressChanged","description":"Event that indicates that the progress of the progress bar has been changed. Returns the current progress value. If \"Indeterminate\" is set to true, then it returns \"0\".","deprecated":"false","params":[{"name":"progress","type":"number"}]}],"methods":[{"name":"IncrementProgressBy","description":"Increase the progress bar's progress by the specified amount.","deprecated":"false","params":[{"name":"value","type":"number"}]}]},{"type":"com.google.appinventor.components.runtime.MakeroidListViewImageText","name":"MakeroidListViewImageText","external":"false","version":"3","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"LISTVIEWS","helpString":"This is a visible component that displays a list of a image and two labels","helpUrl":"https://docs.kodular.io/components/user-interface/list-view-image-and-text/","showOnPalette":"true","nonVisible":"false","iconName":"images/listView.png","androidMinSdk":19,"properties":[{"name":"BackgroundColor","editorType":"color","defaultValue":"&H00FFFFFF","propertyType":"common","editorArgs":[]},{"name":"DividerColor","editorType":"color","defaultValue":"&HFFCCCCCC","propertyType":"advanced","editorArgs":[]},{"name":"ImageSide","editorType":"left_right","defaultValue":"1","propertyType":"common","editorArgs":[]},{"name":"ItemSize","editorType":"list_item_size","defaultValue":"1","propertyType":"common","editorArgs":[]},{"name":"SubtitleBold","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]},{"name":"SubtitleColor","editorType":"color","defaultValue":"&HFF757575","propertyType":"common","editorArgs":[]},{"name":"SubtitleFontTypeface","editorType":"typeface","defaultValue":"0","propertyType":"common","editorArgs":[]},{"name":"SubtitleFontTypefaceImport","editorType":"font_asset","defaultValue":"","propertyType":"advanced","editorArgs":[]},{"name":"SubtitleHTML","editorType":"boolean","defaultValue":"False","propertyType":"advanced","editorArgs":[]},{"name":"SubtitleItalic","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]},{"name":"TitleBold","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]},{"name":"TitleColor","editorType":"color","defaultValue":"&HFF212121","propertyType":"common","editorArgs":[]},{"name":"TitleFontTypeface","editorType":"typeface","defaultValue":"0","propertyType":"common","editorArgs":[]},{"name":"TitleFontTypefaceImport","editorType":"font_asset","defaultValue":"","propertyType":"advanced","editorArgs":[]},{"name":"TitleHTML","editorType":"boolean","defaultValue":"False","propertyType":"advanced","editorArgs":[]},{"name":"TitleItalic","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]},{"name":"Visible","editorType":"visibility","defaultValue":"True","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"BackgroundColor","description":"Set the background color of the listview","type":"number","rw":"read-write","deprecated":"false"},{"name":"Column","description":"","type":"number","rw":"invisible","deprecated":"false"},{"name":"DividerColor","description":"Set the divider color of the listview","type":"number","rw":"read-write","deprecated":"false"},{"name":"Height","description":"Determines the height of the list on the view.","type":"number","rw":"read-write","deprecated":"false"},{"name":"HeightPercent","description":"","type":"number","rw":"write-only","deprecated":"false"},{"name":"ImageSide","description":"Set the side of the image.\nSet it to 1 for Left side and 2 for Right side","type":"number","rw":"read-write","deprecated":"false"},{"name":"ItemSize","description":"Set ListItem Size.\nSet it to 1 for Normal size, 2 for Small size and 3 for Big size.","type":"number","rw":"read-write","deprecated":"false"},{"name":"Row","description":"","type":"number","rw":"invisible","deprecated":"false"},{"name":"SubtitleBold","description":"Whether the subtitle should be in bold text","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"SubtitleColor","description":"Changed the color of the subtitle text","type":"number","rw":"read-write","deprecated":"false"},{"name":"SubtitleFontTypeface","description":"Change the Typeface of the Subtitle","type":"number","rw":"invisible","deprecated":"false"},{"name":"SubtitleFontTypefaceImport","description":"Set a custom title font.","type":"text","rw":"write-only","deprecated":"false"},{"name":"SubtitleHTML","description":"If true, then the subtitle will show html text else it will show plain text. Note: Not all HTML is supported.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"SubtitleItalic","description":"Whether the subtitle should be in italic text","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"TitleBold","description":"Whether the title should be in bold text","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"TitleColor","description":"Changed the color of the title text","type":"number","rw":"read-write","deprecated":"false"},{"name":"TitleFontTypeface","description":"Change the Typeface of the Title","type":"number","rw":"invisible","deprecated":"false"},{"name":"TitleFontTypefaceImport","description":"Set a custom title font.","type":"text","rw":"write-only","deprecated":"false"},{"name":"TitleHTML","description":"If true, then the title will show html text else it will show plain text. Note: Not all HTML is supported.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"TitleItalic","description":"Whether the title should be in italic text","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"Visible","description":"Specifies whether the component should be visible on the screen. Value is true if the component is showing and false if hidden.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"Width","description":"Determines the width of the list on the view.","type":"number","rw":"read-write","deprecated":"false"},{"name":"WidthPercent","description":"","type":"number","rw":"write-only","deprecated":"false"}],"events":[{"name":"Click","description":"Triggers when the user clicks on a item in the list","deprecated":"false","params":[{"name":"position","type":"number"},{"name":"title","type":"text"},{"name":"subtitle","type":"text"},{"name":"image","type":"text"}]},{"name":"LongClick","description":"Triggers when the user long clicks on a item in the list","deprecated":"false","params":[{"name":"position","type":"number"},{"name":"title","type":"text"},{"name":"subtitle","type":"text"},{"name":"image","type":"text"}]}],"methods":[{"name":"AddItem","description":"Add a item to the list","deprecated":"false","params":[{"name":"image","type":"text"},{"name":"title","type":"text"},{"name":"subtitle","type":"text"}]},{"name":"AddItemFromList","description":"Add a item to the list","deprecated":"false","params":[{"name":"list","type":"list"}]},{"name":"ClearList","description":"Remove all the items from the list","deprecated":"false","params":[]},{"name":"RemoveItem","description":"Remove a item from the list","deprecated":"false","params":[{"name":"position","type":"number"}]},{"name":"UpdateItem","description":"Update a item of the list","deprecated":"false","params":[{"name":"position","type":"number"},{"name":"image","type":"text"},{"name":"title","type":"text"},{"name":"subtitle","type":"text"}]}]},{"type":"com.google.appinventor.components.runtime.MakeroidNotification","name":"MakeroidNotification","external":"false","version":"1","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"EXPERIMENTAL","helpString":"A component to send a notification to the users device","helpUrl":"","showOnPalette":"true","nonVisible":"true","iconName":"images/notification.png","androidMinSdk":19,"properties":[{"name":"Priority","editorType":"notification_priority","defaultValue":"1","propertyType":"common","editorArgs":[]},{"name":"Visiblity","editorType":"notification_visibility","defaultValue":"1","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"Priority","description":"Set the priority level. 1 = \"Default\", 2 = \"high\", 3 = \"low\", 4 = \"max\", 5 = \"min\"","type":"number","rw":"read-write","deprecated":"false"},{"name":"Visiblity","description":"Set the visibility property. 1 = \"public\", 2 = \"private\", 3 = \"secret\".","type":"number","rw":"read-write","deprecated":"false"}],"events":[],"methods":[{"name":"AreNotificationsEnabled","description":"Check wether the app can send Notifications","deprecated":"false","params":[],"returnType":"boolean"},{"name":"BigPictureNotification","description":"Send a normal notification","deprecated":"false","params":[{"name":"notificationID","type":"number"},{"name":"title","type":"text"},{"name":"message","type":"text"},{"name":"bigPicture","type":"text"},{"name":"startValue","type":"text"},{"name":"removeOnClick","type":"boolean"}]},{"name":"CancelAll","description":"Cancel all Notifications","deprecated":"false","params":[]},{"name":"CancelNotification","description":"Cancel a Notification with an id","deprecated":"false","params":[{"name":"id","type":"number"}]},{"name":"NormalNotification","description":"Send a normal notification","deprecated":"false","params":[{"name":"notificationID","type":"number"},{"name":"title","type":"text"},{"name":"message","type":"text"},{"name":"startValue","type":"text"},{"name":"removeOnClick","type":"boolean"}]},{"name":"SimpleNotification","description":"Send a simple notification","deprecated":"false","params":[{"name":"title","type":"text"},{"name":"message","type":"text"}]}]},{"type":"com.google.appinventor.components.runtime.MakeroidShell","name":"MakeroidShell","external":"false","version":"2","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"UTILITIES","helpString":"Checks Root status and executes Shell command","helpUrl":"","showOnPalette":"true","nonVisible":"true","iconName":"images/shell.png","androidMinSdk":19,"properties":[],"blockProperties":[],"events":[{"name":"GotOutput","description":"Read output after executing shell command","deprecated":"false","params":[{"name":"out","type":"text"}]}],"methods":[{"name":"CheckForSuperUserAPK","description":"Returns TRUE if one of 6 known root packages or varients is installed. The name of the package is not returned, so the user does not know which package name to change. Developed by Cian.","deprecated":"false","params":[],"returnType":"boolean"},{"name":"Execute","description":"Executes shell commands. To get output, use \"GotOutput\" event block.","deprecated":"false","params":[{"name":"in","type":"text"}]},{"name":"IsRooted","description":"Returns true if Phone is Rooted","deprecated":"false","params":[],"returnType":"boolean"},{"name":"isSystemUser","description":"This returns TRUE if the system user is running the application, and could be a sign of a rooted device. Developed by Cian.","deprecated":"false","params":[],"returnType":"boolean"}]},{"type":"com.google.appinventor.components.runtime.MakeroidShortcutBadge","name":"MakeroidShortcutBadge","external":"false","version":"1","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"EXPERIMENTAL","helpString":"Shortcut Badge component","helpUrl":"","showOnPalette":"true","nonVisible":"true","iconName":"images/notification.png","androidMinSdk":19,"properties":[],"blockProperties":[],"events":[],"methods":[{"name":"ApplyCount","description":"Use this block to apply a notification badge count.","deprecated":"false","params":[{"name":"count","type":"number"}]},{"name":"Count","description":"Use this block to return the notification count.","deprecated":"false","params":[],"returnType":"number"},{"name":"RemoveCount","description":"Use this block to remove the notification badge count.","deprecated":"false","params":[]}]},{"type":"com.google.appinventor.components.runtime.MakeroidSideMenuLayout","name":"MakeroidSideMenuLayout","external":"false","version":"2","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"NAVIGATION","helpString":"Display a real Navigation Menu in the Side Menu","helpUrl":"","showOnPalette":"true","nonVisible":"true","iconName":"images/makeroidSideMenuLayout.png","androidMinSdk":19,"properties":[{"name":"BackgroundColor","editorType":"color","defaultValue":"&HFFFFFFFF","propertyType":"common","editorArgs":[]},{"name":"CircleHeaderPicture","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]},{"name":"DisabledColor","editorType":"color","defaultValue":"&HFF9E9E9E","propertyType":"common","editorArgs":[]},{"name":"EnabledColor","editorType":"color","defaultValue":"&HFF000000","propertyType":"common","editorArgs":[]},{"name":"HeaderBackgroundImage","editorType":"image_asset","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"HeaderPicture","editorType":"image_asset","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"HeaderSubtitle","editorType":"text","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"HeaderTitle","editorType":"text","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"SelectedColor","editorType":"color","defaultValue":"&HFFE81E63","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"BackgroundColor","description":"Set the background color of the Sidemenu Layout","type":"number","rw":"read-write","deprecated":"false"},{"name":"CircleHeaderPicture","description":"Sets (or not) the header picture to use a circle shape","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"DisabledColor","description":"Sets the color of the disabled elements of the SideMenu","type":"number","rw":"read-write","deprecated":"false"},{"name":"EnabledColor","description":"Sets the color of the enabled elements of the SideMenu","type":"number","rw":"read-write","deprecated":"false"},{"name":"HeaderBackgroundImage","description":"Sets the Header Background Picture","type":"text","rw":"read-write","deprecated":"false"},{"name":"HeaderPicture","description":"Sets the Header Picture of the Side Menu","type":"text","rw":"read-write","deprecated":"false"},{"name":"HeaderSubtitle","description":"Sets the Header Subtitle","type":"text","rw":"read-write","deprecated":"false"},{"name":"HeaderTitle","description":"Sets the Header Title","type":"text","rw":"read-write","deprecated":"false"},{"name":"SelectedColor","description":"Sets the color of the selected element of the SideMenu","type":"number","rw":"read-write","deprecated":"false"}],"events":[{"name":"OnMenuItemClick","description":"Triggers when the user clicks on an item of the Navigation Menu","deprecated":"false","params":[{"name":"title","type":"text"}]}],"methods":[{"name":"AddItem","description":"Add an item to the Navigation Menu","deprecated":"false","params":[{"name":"title","type":"text"},{"name":"image","type":"text"},{"name":"enabled","type":"boolean"},{"name":"checked","type":"boolean"},{"name":"group","type":"number"}]},{"name":"RemoveItem","description":"Remove an item from the Navigation Menu","deprecated":"false","params":[{"name":"title","type":"text"}]},{"name":"UpdateItem","description":"Update an item of the Navigation Menu","deprecated":"false","params":[{"name":"title","type":"text"},{"name":"newTitle","type":"text"},{"name":"image","type":"text"},{"name":"enabled","type":"boolean"},{"name":"checked","type":"boolean"}]}]},{"type":"com.google.appinventor.components.runtime.MakeroidSnackbar","name":"MakeroidSnackbar","external":"false","version":"4","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"USERINTERFACE","helpString":"Snackbar","helpUrl":"","showOnPalette":"true","nonVisible":"true","iconName":"images/snackbar.png","androidMinSdk":19,"properties":[{"name":"BackgroundColor","editorType":"color","defaultValue":"&HFF444444","propertyType":"common","editorArgs":[]},{"name":"ButtonTextColor","editorType":"color","defaultValue":"&HFFFFFFFF","propertyType":"common","editorArgs":[]},{"name":"Duration","editorType":"snackbar_duration","defaultValue":"0","propertyType":"common","editorArgs":[]},{"name":"TextColor","editorType":"color","defaultValue":"&HFFFFFFFF","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"BackgroundColor","description":"Specifies the snackbar's background color.","type":"number","rw":"read-write","deprecated":"false"},{"name":"ButtonTextColor","description":"Specifies the text color for action button.","type":"number","rw":"read-write","deprecated":"false"},{"name":"Duration","description":"specifies the length of time that the Snackbar is shown - either \"short\" or \"long\".","type":"number","rw":"invisible","deprecated":"false"},{"name":"TextColor","description":"","type":"number","rw":"read-write","deprecated":"false"}],"events":[{"name":"Click","description":"User clicked on the action button.","deprecated":"false","params":[]},{"name":"OnDismissed","description":"Event to detect the snackbar was dissmissed. Possiple results can be: \"UNDEFINED\", \"ACTION\", \"CONSECUTIVE\", \"MANUAL\", \"SWIPE\" or \"TIMEOUT\". You can find more information at: https://developer.android.com/reference/android/support/design/widget/Snackbar.Callback.html","deprecated":"false","params":[{"name":"event","type":"text"}]},{"name":"OnShown","description":"Event to detect the snackbar is shown.","deprecated":"false","params":[]}],"methods":[{"name":"Dismiss","description":"Dismiss the snackbar.","deprecated":"false","params":[]},{"name":"IsShown","description":"Returns true whether this snackbar is currently being shown.","deprecated":"false","params":[],"returnType":"boolean"},{"name":"Show","description":"Show Snackbar (message supports HTML formatting)","deprecated":"false","params":[{"name":"message","type":"text"}]},{"name":"ShowWithButton","description":"Show Snackbar with action button (message supports HTML formatting)","deprecated":"false","params":[{"name":"message","type":"text"},{"name":"buttonText","type":"text"}]}]},{"type":"com.google.appinventor.components.runtime.MakeroidSpotlight","name":"MakeroidSpotlight","external":"false","version":"2","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"USERINTERFACE","helpString":"Spotlight component","helpUrl":"","showOnPalette":"true","nonVisible":"true","iconName":"images/spotlight.png","androidMinSdk":19,"properties":[{"name":"CirclePadding","editorType":"integer","defaultValue":"20","propertyType":"common","editorArgs":[]},{"name":"Component","editorType":"component","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"DismissOnBackPress","editorType":"boolean","defaultValue":"True","propertyType":"common","editorArgs":[]},{"name":"DismissOnTouch","editorType":"boolean","defaultValue":"True","propertyType":"common","editorArgs":[]},{"name":"EnableDismissAfterShown","editorType":"boolean","defaultValue":"True","propertyType":"common","editorArgs":[]},{"name":"EnableRevealAnimation","editorType":"boolean","defaultValue":"True","propertyType":"common","editorArgs":[]},{"name":"FadeinTextDuration","editorType":"integer","defaultValue":"400","propertyType":"common","editorArgs":[]},{"name":"FontHeadingTypeface","editorType":"typeface","defaultValue":"0","propertyType":"common","editorArgs":[]},{"name":"FontHeadingTypefaceImport","editorType":"asset","defaultValue":"","propertyType":"advanced","editorArgs":[]},{"name":"FontSubheadingTypeface","editorType":"typeface","defaultValue":"0","propertyType":"common","editorArgs":[]},{"name":"FontSubheadingTypefaceImport","editorType":"asset","defaultValue":"","propertyType":"advanced","editorArgs":[]},{"name":"HeadingText","editorType":"string","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"HeadingTextColor","editorType":"color","defaultValue":"&HFF3F51B5","propertyType":"common","editorArgs":[]},{"name":"HeadingTextSize","editorType":"integer","defaultValue":"32","propertyType":"common","editorArgs":[]},{"name":"IntroAnimationDuration","editorType":"integer","defaultValue":"400","propertyType":"common","editorArgs":[]},{"name":"LineAndArcColor","editorType":"color","defaultValue":"&HFF3F51B5","propertyType":"common","editorArgs":[]},{"name":"LineAnimationDuration","editorType":"integer","defaultValue":"400","propertyType":"common","editorArgs":[]},{"name":"MaskColor","editorType":"color","defaultValue":"&Hbe000000","propertyType":"common","editorArgs":[]},{"name":"ShowTargetArc","editorType":"boolean","defaultValue":"True","propertyType":"common","editorArgs":[]},{"name":"SubheadingText","editorType":"string","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"SubheadingTextColor","editorType":"color","defaultValue":"&HFFFFFFFF","propertyType":"common","editorArgs":[]},{"name":"SubheadingTextSize","editorType":"integer","defaultValue":"16","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"CirclePadding","description":"The padding for the circle spotlight. Default is '20'.","type":"number","rw":"read-write","deprecated":"false"},{"name":"Component","description":"The component to show in the spotlight.","type":"component","rw":"read-write","deprecated":"false"},{"name":"DismissOnBackPress","description":"Dismiss the spotlight on back pressed.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"DismissOnTouch","description":"Dismiss the spotlight on touch","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"EnableDismissAfterShown","description":"Dismiss spotlight on touch after spotlight is completely visible.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"EnableRevealAnimation","description":"Enable reveal animation (Only for Lollipop and above).","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"FadeinTextDuration","description":"Fade in animation duration for spotlight text (Heading and Sub-heading).","type":"number","rw":"read-write","deprecated":"false"},{"name":"FontHeadingTypeface","description":"","type":"number","rw":"invisible","deprecated":"false"},{"name":"FontHeadingTypefaceImport","description":"Set a custom font.","type":"text","rw":"write-only","deprecated":"false"},{"name":"FontSubheadingTypeface","description":"","type":"number","rw":"invisible","deprecated":"false"},{"name":"FontSubheadingTypefaceImport","description":"Set a custom font.","type":"text","rw":"write-only","deprecated":"false"},{"name":"HeadingText","description":"The Spotlight heading text.","type":"text","rw":"read-write","deprecated":"false"},{"name":"HeadingTextColor","description":"The Spotlight heading text color.","type":"number","rw":"read-write","deprecated":"false"},{"name":"HeadingTextSize","description":"The Spotlight heading size.","type":"number","rw":"read-write","deprecated":"false"},{"name":"IntroAnimationDuration","description":"Intro animation duration (For Reveal and Fadein).","type":"number","rw":"read-write","deprecated":"false"},{"name":"LineAndArcColor","description":"The Spotlight line and arc color.","type":"number","rw":"read-write","deprecated":"false"},{"name":"LineAnimationDuration","description":"Line animation duration","type":"number","rw":"read-write","deprecated":"false"},{"name":"MaskColor","description":"The Spotlight mask color","type":"number","rw":"read-write","deprecated":"false"},{"name":"ShowTargetArc","description":"If set to true you will see a half round circle below the spotlight circle.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"SubheadingText","description":"The Spotlight subheading text.","type":"text","rw":"read-write","deprecated":"false"},{"name":"SubheadingTextColor","description":"The Spotlight subheading text color.","type":"number","rw":"read-write","deprecated":"false"},{"name":"SubheadingTextSize","description":"The Spotlight subheading text size.","type":"number","rw":"read-write","deprecated":"false"}],"events":[{"name":"Clicked","description":"Event triggered when the spotlight is clicked.","deprecated":"false","params":[]}],"methods":[{"name":"ShowSpotlight","description":"Use this block to show the spotlight.","deprecated":"false","params":[]},{"name":"ShowSpotlightOnFAB","description":"Use this block to show the spotlight on a floating action button.","deprecated":"false","params":[{"name":"floatingActionButton","type":"component"}]}]},{"type":"com.google.appinventor.components.runtime.MakeroidSwipeRefreshLayout","name":"MakeroidSwipeRefreshLayout","external":"false","version":"2","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"LAYOUT_GENERAL","helpString":"Component for MakeroidSwipeRefreshLayout","helpUrl":"","showOnPalette":"true","nonVisible":"false","iconName":"","androidMinSdk":19,"properties":[{"name":"AlignHorizontal","editorType":"horizontal_alignment","defaultValue":"1","propertyType":"common","editorArgs":[]},{"name":"AlignVertical","editorType":"vertical_alignment","defaultValue":"1","propertyType":"common","editorArgs":[]},{"name":"BackgroundColor","editorType":"color","defaultValue":"&H00000000","propertyType":"common","editorArgs":[]},{"name":"Enabled","editorType":"boolean","defaultValue":"True","propertyType":"common","editorArgs":[]},{"name":"LargeSize","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]},{"name":"NestedScrolling","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]},{"name":"ProgressBackgroundColor","editorType":"color","defaultValue":"&HFFFFFFFF","propertyType":"common","editorArgs":[]},{"name":"Visible","editorType":"visibility","defaultValue":"True","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"AlignHorizontal","description":"A number that encodes how contents of the arrangement are aligned horizontally. The choices are: 1 = left aligned, 2 = right aligned, 3 = horizontally centered. Alignment has no effect if the arrangement's width is automatic.","type":"number","rw":"read-write","deprecated":"false"},{"name":"AlignVertical","description":"A number that encodes how the contents of the arrangement are aligned vertically. The choices are: 1 = aligned at the top, 2 = vertically centered, 3 = aligned at the bottom. Alignment has no effect if the arrangement's height is automatic.","type":"number","rw":"read-write","deprecated":"false"},{"name":"BackgroundColor","description":"The background color of the swipe refresh layout.","type":"number","rw":"read-write","deprecated":"false"},{"name":"Column","description":"","type":"number","rw":"invisible","deprecated":"false"},{"name":"Enabled","description":"If set to true the swpipe refresh layout is enabled.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"Height","description":"","type":"number","rw":"read-write","deprecated":"false"},{"name":"HeightPercent","description":"","type":"number","rw":"write-only","deprecated":"false"},{"name":"IsRefreshing","description":"Returns true if is actively showing refresh progress.","type":"boolean","rw":"read-only","deprecated":"false"},{"name":"LargeSize","description":"If enabled is set to true the pull size will be large, else the size is default.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"NestedScrolling","description":"Enable or disable nested scrolling for this view.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"ProgressAnimationColors","description":"Set the colors used in the progress animation. Use a 'make a list' block. The first color on the list is than the first spinner color.","type":"list","rw":"read-write","deprecated":"false"},{"name":"ProgressBackgroundColor","description":"Change the pull to refresh background color.","type":"number","rw":"read-write","deprecated":"false"},{"name":"Refreshing","description":"Notify the widget that refresh state has changed. Do not call this when refresh is triggered by a swipe gesture.","type":"boolean","rw":"write-only","deprecated":"false"},{"name":"Row","description":"","type":"number","rw":"invisible","deprecated":"false"},{"name":"Visible","description":"Specifies whether the component should be visible on the screen. Value is true if the component is showing and false if hidden.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"Width","description":"","type":"number","rw":"read-write","deprecated":"false"},{"name":"WidthPercent","description":"","type":"number","rw":"write-only","deprecated":"false"}],"events":[{"name":"OnRefresh","description":"Event to detect when a refresh is triggered via the swipe gesture.","deprecated":"false","params":[]}],"methods":[]},{"type":"com.google.appinventor.components.runtime.MakeroidTabLayout","name":"MakeroidTabLayout","external":"false","version":"1","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"NAVIGATION","helpString":"Component for MakeroidTabLayout","helpUrl":"","showOnPalette":"true","nonVisible":"false","iconName":"images/tabLayout.png","androidMinSdk":19,"properties":[{"name":"TabsActiveTextColor","editorType":"color","defaultValue":"&HFFFF4081","propertyType":"common","editorArgs":[]},{"name":"TabsBackgroundColor","editorType":"color","defaultValue":"&HFF3F51B5","propertyType":"common","editorArgs":[]},{"name":"TabsIndicatorColor","editorType":"color","defaultValue":"&HFFFFFFFF","propertyType":"common","editorArgs":[]},{"name":"TabsMode","editorType":"tabs_mode","defaultValue":"1","propertyType":"common","editorArgs":[]},{"name":"TabsTextColor","editorType":"color","defaultValue":"&HFFFFFFFF","propertyType":"common","editorArgs":[]},{"name":"Visible","editorType":"visibility","defaultValue":"True","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"Column","description":"","type":"number","rw":"invisible","deprecated":"false"},{"name":"GetCurrentTab","description":"Get the current selected tab.","type":"number","rw":"read-only","deprecated":"false"},{"name":"Row","description":"","type":"number","rw":"invisible","deprecated":"false"},{"name":"SelectTab","description":"Select a tab which is then the active tab.","type":"number","rw":"write-only","deprecated":"false"},{"name":"TabsActiveTextColor","description":"Specifies the tab's text color for active tab's.","type":"number","rw":"read-write","deprecated":"false"},{"name":"TabsBackgroundColor","description":"Specifies the tab's background color.","type":"number","rw":"read-write","deprecated":"false"},{"name":"TabsIndicatorColor","description":"Specifies the tab's indicator color.","type":"number","rw":"read-write","deprecated":"false"},{"name":"TabsMode","description":"Choose the mode used for the tab's. If no mode is specified, 'Scrollable' is taken as 'Default'. Use '0' for scrollable and '1' for fixed.","type":"number","rw":"read-write","deprecated":"false"},{"name":"TabsTextColor","description":"Specifies the tab's text color for not selected tab's.","type":"number","rw":"read-write","deprecated":"false"},{"name":"Visible","description":"Specifies whether the component should be visible on the screen. Value is true if the component is showing and false if hidden.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"Width","description":"","type":"number","rw":"read-write","deprecated":"false"},{"name":"WidthPercent","description":"","type":"number","rw":"write-only","deprecated":"false"}],"events":[{"name":"TabItemSelected","description":"The event returns the name or the position of the selected tab.","deprecated":"false","params":[{"name":"tab","type":"text"},{"name":"position","type":"number"}]}],"methods":[{"name":"AddNewTab","description":"Add a new tab to the tab layout. If you don't want a icon then let it empty.","deprecated":"false","params":[{"name":"name","type":"text"},{"name":"icon","type":"text"}]},{"name":"AddNewTabAt","description":"Add a new tab to the tab layout at the given position. If you don't want a icon then let it empty.","deprecated":"false","params":[{"name":"name","type":"text"},{"name":"icon","type":"text"},{"name":"position","type":"number"}]},{"name":"CountTabs","description":"Returns the number of current added tab's.","deprecated":"false","params":[],"returnType":"number"},{"name":"RemoveAllTabs","description":"Remove all tab's from tab layout.","deprecated":"false","params":[]},{"name":"RemoveTabAt","description":"Removes a before added tab. If you want to delete the first tab then use as position '1'.","deprecated":"false","params":[{"name":"position","type":"number"}]}]},{"type":"com.google.appinventor.components.runtime.MakeroidViewFlipper","name":"MakeroidViewFlipper","external":"false","version":"1","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"VIEWS","helpString":"Component for MakeroidViewFlipper","helpUrl":"","showOnPalette":"true","nonVisible":"false","iconName":"images/viewFlipper.png","androidMinSdk":19,"properties":[{"name":"AddImagesFromString","editorType":"textArea","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"BackgroundColor","editorType":"color","defaultValue":"&H00000000","propertyType":"common","editorArgs":[]},{"name":"FlipInterval","editorType":"non_negative_integer","defaultValue":"1000","propertyType":"common","editorArgs":[]},{"name":"Swipeable","editorType":"boolean","defaultValue":"True","propertyType":"common","editorArgs":[]},{"name":"Visible","editorType":"visibility","defaultValue":"True","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"AddImagesFromString","description":"Use this function if you try to create a image view flipper. Use images separated by commas such as: Image1.png,Image2.png,Image3.png.","type":"text","rw":"write-only","deprecated":"false"},{"name":"BackgroundColor","description":"Specifies the view flippers background color.","type":"number","rw":"read-write","deprecated":"false"},{"name":"Column","description":"","type":"number","rw":"invisible","deprecated":"false"},{"name":"FlipInterval","description":"How long to wait before flipping to the next view in milliseconds.","type":"number","rw":"read-write","deprecated":"false"},{"name":"Height","description":"","type":"number","rw":"read-write","deprecated":"false"},{"name":"HeightPercent","description":"","type":"number","rw":"write-only","deprecated":"false"},{"name":"Row","description":"","type":"number","rw":"invisible","deprecated":"false"},{"name":"Swipeable","description":"If set to true you can swipe with your fingers through views.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"Visible","description":"Specifies whether the component should be visible on the screen. Value is true if the component is showing and false if hidden.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"Width","description":"","type":"number","rw":"read-write","deprecated":"false"},{"name":"WidthPercent","description":"","type":"number","rw":"write-only","deprecated":"false"}],"events":[],"methods":[{"name":"AddComponentToView","description":"Add a component to the view flipper. The first added component will be the first visible component on the screen.","deprecated":"false","params":[{"name":"component","type":"component"}]},{"name":"AddImagesToView","description":"Use this function if you try to create a image view flipper. Please use a 'make a list' block.","deprecated":"false","params":[{"name":"images","type":"list"}]},{"name":"ShowNext","description":"Show the next view.","deprecated":"false","params":[]},{"name":"ShowPrevious","description":"Show the previous view.","deprecated":"false","params":[]},{"name":"StartFlipping","description":"Start a timer to cycle through child views.","deprecated":"false","params":[]},{"name":"StopFlipping","description":"No more flips.","deprecated":"false","params":[]},{"name":"isFlipping","description":"Returns true if the child views are flipping.","deprecated":"false","params":[]}]},{"type":"com.google.appinventor.components.runtime.MakeroidViewPager","name":"MakeroidViewPager","external":"false","version":"3","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"NAVIGATION","helpString":"Component for MakeroidViewPager","helpUrl":"","showOnPalette":"true","nonVisible":"false","iconName":"images/viewPager.png","androidMinSdk":19,"properties":[{"name":"ShowTabs","editorType":"boolean","defaultValue":"True","propertyType":"experimental","editorArgs":[]},{"name":"TabsActiveTextColor","editorType":"color","defaultValue":"&HFFFF4081","propertyType":"common","editorArgs":[]},{"name":"TabsBackgroundColor","editorType":"color","defaultValue":"&HFF3F51B5","propertyType":"common","editorArgs":[]},{"name":"TabsIndicatorColor","editorType":"color","defaultValue":"&HFFFFFFFF","propertyType":"common","editorArgs":[]},{"name":"TabsMode","editorType":"tabs_mode","defaultValue":"1","propertyType":"common","editorArgs":[]},{"name":"TabsTextColor","editorType":"color","defaultValue":"&HFFFFFFFF","propertyType":"common","editorArgs":[]},{"name":"Visible","editorType":"visibility","defaultValue":"True","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"Column","description":"","type":"number","rw":"invisible","deprecated":"false"},{"name":"GetCurrentPage","description":"Get the current selected visible page.","type":"number","rw":"read-only","deprecated":"false"},{"name":"Height","description":"","type":"number","rw":"read-write","deprecated":"false"},{"name":"HeightPercent","description":"","type":"number","rw":"write-only","deprecated":"false"},{"name":"Row","description":"","type":"number","rw":"invisible","deprecated":"false"},{"name":"SelectPage","description":"Select a page which is then the active page.","type":"number","rw":"write-only","deprecated":"false"},{"name":"ShowTabs","description":"If set to true, you will see tabs above the view pager.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"TabsActiveTextColor","description":"Specifies the tab's text color for active tab's.","type":"number","rw":"read-write","deprecated":"false"},{"name":"TabsBackgroundColor","description":"Specifies the tab's background color.","type":"number","rw":"read-write","deprecated":"false"},{"name":"TabsIndicatorColor","description":"Specifies the tab's indicator color.","type":"number","rw":"read-write","deprecated":"false"},{"name":"TabsMode","description":"Choose the mode used for the tab's. If no mode is specified, 'Scrollable' is taken as 'Default'. Use '0' for scrollable and '1' for fixed.","type":"number","rw":"read-write","deprecated":"false"},{"name":"TabsTextColor","description":"Specifies the tab's text color for not selected tab's.","type":"number","rw":"read-write","deprecated":"false"},{"name":"Visible","description":"Specifies whether the component should be visible on the screen. Value is true if the component is showing and false if hidden.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"Width","description":"","type":"number","rw":"read-write","deprecated":"false"},{"name":"WidthPercent","description":"","type":"number","rw":"write-only","deprecated":"false"}],"events":[{"name":"PageSelected","description":"Event to detect that a page was selected.","deprecated":"false","params":[{"name":"position","type":"number"}]}],"methods":[{"name":"AddComponentToView","description":"Add a component to the view pager. The first added component will be the first visible component on the screen.","deprecated":"false","params":[{"name":"component","type":"component"},{"name":"tabName","type":"text"}]},{"name":"RemoveAllTabs","description":"Remove all tab's from view pager.","deprecated":"false","params":[]},{"name":"RemoveViewAt","description":"Removes a before added view from the view pager. If you want to delete the first page then use as position '1'.","deprecated":"false","params":[{"name":"position","type":"number"}]}]},{"type":"com.google.appinventor.components.runtime.MakeroidWhiteMobi","name":"MakeroidWhiteMobi","external":"false","version":"1","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"INTERNAL","helpString":"WhiteMobi component","helpUrl":"https://docs.kodular.io/components/monetization/whitemobi/","showOnPalette":"true","nonVisible":"true","iconName":"images/whitemobi.png","androidMinSdk":19,"properties":[{"name":"ApplicationKey","editorType":"string","defaultValue":"","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"ApplicationKey","description":"Return the application key.","type":"text","rw":"read-write","deprecated":"false"}],"events":[{"name":"OfferCompleted","description":"Event triggered when an offer has been completed","deprecated":"false","params":[{"name":"amount","type":"number"}]}],"methods":[{"name":"ShowOfferWall","description":"Show WhiteMobi offerwall","deprecated":"false","params":[]}]},{"type":"com.google.appinventor.components.runtime.MakeroidYoutubePlayer","name":"MakeroidYoutubePlayer","external":"false","version":"2","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"GOOGLE","helpString":"Component for MakeroidYoutubePlayer","helpUrl":"","showOnPalette":"true","nonVisible":"false","iconName":"images/youtubePlayer.png","androidMinSdk":17,"properties":[{"name":"EnableLiveVideoUI","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]},{"name":"StartSecond","editorType":"non_negative_float","defaultValue":"0","propertyType":"common","editorArgs":[]},{"name":"Visible","editorType":"visibility","defaultValue":"True","propertyType":"common","editorArgs":[]},{"name":"Volume","editorType":"integer","defaultValue":"50","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"Column","description":"","type":"number","rw":"invisible","deprecated":"false"},{"name":"EnableLiveVideoUI","description":"If you want to play live videos you must setup the UI accordingly, by calling this method. If enabled, the user can not select a second on the video progress bar.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"GetCurrentSecond","description":"Returns the current second.","type":"number","rw":"read-only","deprecated":"false"},{"name":"GetVideoDuration","description":"Returns the video duration in seconds.","type":"number","rw":"read-only","deprecated":"false"},{"name":"Height","description":"","type":"number","rw":"read-write","deprecated":"false"},{"name":"HeightPercent","description":"","type":"number","rw":"write-only","deprecated":"false"},{"name":"IsFullscreen","description":"Returns true if the player is in fullscreen mode.","type":"boolean","rw":"read-only","deprecated":"false"},{"name":"Row","description":"","type":"number","rw":"invisible","deprecated":"false"},{"name":"StartSecond","description":"The time from which the video should start playing.","type":"number","rw":"read-write","deprecated":"false"},{"name":"TestVideoId","description":"Use this block to test the youtube player. Powered by Kodular.io","type":"text","rw":"read-only","deprecated":"false"},{"name":"Visible","description":"Specifies whether the component should be visible on the screen. Value is true if the component is showing and false if hidden.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"Volume","description":"Set the volume to a number between 0 and 100.Use only integer numbers.","type":"number","rw":"read-write","deprecated":"false"},{"name":"Width","description":"","type":"number","rw":"read-write","deprecated":"false"},{"name":"WidthPercent","description":"","type":"number","rw":"write-only","deprecated":"false"}],"events":[{"name":"Error","description":"Use this event to detect that there was any error with the player. Return values: 'UNKNOWN', 'INVALID_PARAMETER_IN_REQUEST', 'HTML_5_PLAYER', 'VIDEO_NOT_FOUND', 'VIDEO_NOT_PLAYABLE_IN_EMBEDDED_PLAYER', 'INVALID_VOLUME' or 'INVALID_SEEK_TO'.","deprecated":"false","params":[{"name":"error","type":"text"}]},{"name":"Fullscreen","description":"Event to get notified when the player enters or exits fullscreen. The variable 'fullscreen' returns true or false.","deprecated":"false","params":[{"name":"fullscreen","type":"boolean"}]},{"name":"Initialized","description":"Use this event to start the playing of a normal or instant youtube video.","deprecated":"false","params":[]},{"name":"PlaybackQualityChanged","description":"Use this event to detect that the playback quality was changed. Return values: 'UNKNOWN', 'SMALL', 'MEDIUM', 'LARGE', 'HD720', 'HD1080', 'HIGH_RES' or 'DEFAULT'.","deprecated":"false","params":[{"name":"quality","type":"text"}]},{"name":"PlaybackRateChanged","description":"Use this event to detect that the playback rate was changed. Return values: 'UNKNOWN', 'RATE_0_25', 'RATE_0_5', 'RATE_1', 'RATE_1_5' or 'RATE_2'.","deprecated":"false","params":[{"name":"rate","type":"text"}]},{"name":"StateChanged","description":"Use this event to detect that the state changes. Return values: 'UNKNOWN', 'UNSTARTED', 'ENDED', 'PLAYING', 'PAUSED', 'BUFFERING' or 'VIDEO_CUED'.","deprecated":"false","params":[{"name":"state","type":"text"}]}],"methods":[{"name":"EnterFullscreen","description":"Enter the video in fullscreen mode.","deprecated":"false","params":[]},{"name":"ExitFullscreen","description":"Exit the video from fullscreen mode.","deprecated":"false","params":[]},{"name":"GetThumbnailFromVideoId","description":"This block will return the thumbnail image path from a video id. Use only as example '_bZj-LOXdH8' from a youtube video.","deprecated":"false","params":[{"name":"videoId","type":"text"}],"returnType":"text"},{"name":"InstantLoad","description":"Use this block together with the 'Youtube Player' Initialized event. Loads and automatically plays the specified youtube video. Use only as example '_bZj-LOXdH8' from a youtube video.","deprecated":"false","params":[{"name":"videoId","type":"text"}]},{"name":"Load","description":"Loads the specified video's thumbnail and prepares the player to play the video. Does not automatically play the video. Use only as example '_bZj-LOXdH8' from a youtube video.","deprecated":"false","params":[{"name":"videoId","type":"text"}]},{"name":"Pause","description":"Pause the youtube video.","deprecated":"false","params":[]},{"name":"Play","description":"Plays the youtube video.","deprecated":"false","params":[]},{"name":"SeekTo","description":"Set a position where the youtube video should start playing in seconds.","deprecated":"false","params":[{"name":"position","type":"number"}]},{"name":"ToggleFullscreen","description":"Toggle the state of the video player.","deprecated":"false","params":[]}]},{"type":"com.google.appinventor.components.runtime.Map","name":"Map","external":"false","version":"5","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"MAPS","helpString":"A two-dimensional container that renders map tiles in the background and allows for multiple Marker elements to identify points on the map. Map tiles are supplied by OpenStreetMap contributors and the United States Geological Survey.
The Map component provides three utilities for manipulating its boundaries within App Inventor. First, a locking mechanism is provided to allow the map to be moved relative to other components on the Screen. Second, when unlocked, the user can pan the Map to any location. At this new location, the "Set Initial Boundary" button can be pressed to save the current Map coordinates to its properties. Lastly, if the Map is moved to a different location, for example to add Markers off-screen, then the "Reset Map to Initial Bounds" button can be used to re-center the Map at the starting location.
","helpUrl":"","showOnPalette":"true","nonVisible":"false","iconName":"","androidMinSdk":19,"properties":[{"name":"CenterFromString","editorType":"geographic_point","defaultValue":"42.359144, -71.093612","propertyType":"common","editorArgs":[]},{"name":"EnablePan","editorType":"boolean","defaultValue":"True","propertyType":"common","editorArgs":[]},{"name":"EnableRotation","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]},{"name":"EnableZoom","editorType":"boolean","defaultValue":"True","propertyType":"common","editorArgs":[]},{"name":"LocationSensor","editorType":"component:com.google.appinventor.components.runtime.LocationSensor","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"MapType","editorType":"map_type","defaultValue":"1","propertyType":"common","editorArgs":[]},{"name":"Rotation","editorType":"float","defaultValue":"0.0","propertyType":"common","editorArgs":[]},{"name":"ScaleUnits","editorType":"map_unit_system","defaultValue":"1","propertyType":"common","editorArgs":[]},{"name":"ShowCompass","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]},{"name":"ShowScale","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]},{"name":"ShowUser","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]},{"name":"ShowZoom","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]},{"name":"Visible","editorType":"visibility","defaultValue":"True","propertyType":"common","editorArgs":[]},{"name":"ZoomLevel","editorType":"map_zoom","defaultValue":"13","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"BoundingBox","description":"Bounding box for the map stored as [[North, West], [South, East]].","type":"list","rw":"read-write","deprecated":"false"},{"name":"CenterFromString","description":"Set the initial center coordinate of the map. The value is specified as a comma-separated pair of decimal latitude and longitude coordinates, for example, 42.359144, -71.093612.
In blocks code, it is recommended for performance reasons to use SetCenter with numerical latitude and longitude rather than convert to the string representation for use with this property.
","type":"text","rw":"write-only","deprecated":"false"},{"name":"Column","description":"","type":"number","rw":"invisible","deprecated":"false"},{"name":"EnablePan","description":"Enable two-finger panning of the Map","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"EnableRotation","description":"If set to true, the user can use multitouch gestures to rotate the map around its current center.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"EnableZoom","description":"If this property is set to true, multitouch zoom gestures are allowed on the map. Otherwise, the map zoom cannot be changed by the user except via the zoom control buttons.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"Features","description":"The list of features placed on this map. This list also includes any features created by calls to FeatureFromDescription","type":"list","rw":"read-write","deprecated":"false"},{"name":"Height","description":"","type":"number","rw":"read-write","deprecated":"false"},{"name":"HeightPercent","description":"","type":"number","rw":"write-only","deprecated":"false"},{"name":"Latitude","description":"The latitude of the center of the map.","type":"number","rw":"read-only","deprecated":"false"},{"name":"LocationSensor","description":"Uses the provided LocationSensor for user location data rather than the built-in location provider.","type":"component","rw":"write-only","deprecated":"false"},{"name":"Longitude","description":"The longitude of the center of the map.","type":"number","rw":"read-only","deprecated":"false"},{"name":"MapType","description":"The type of tile layer to use as the base of the map. Valid values are: 1 (Roads), 2 (Aerial), 3 (Terrain)","type":"number","rw":"read-write","deprecated":"false"},{"name":"Rotation","description":"Sets or gets the rotation of the map in decimal degrees if any","type":"number","rw":"read-write","deprecated":"false"},{"name":"Row","description":"","type":"number","rw":"invisible","deprecated":"false"},{"name":"ScaleUnits","description":"","type":"number","rw":"read-write","deprecated":"false"},{"name":"ShowCompass","description":"Show a compass icon rotated based on user orientation.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"ShowScale","description":"Shows a scale reference on the map.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"ShowUser","description":"Show the user's location on the map.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"ShowZoom","description":"Show zoom buttons on the map.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"UserLatitude","description":"Returns the user's latitude if ShowUser is enabled.","type":"number","rw":"read-only","deprecated":"false"},{"name":"UserLongitude","description":"Returns the user's longitude if ShowUser is enabled.","type":"number","rw":"read-only","deprecated":"false"},{"name":"Visible","description":"Specifies whether the component should be visible on the screen. Value is true if the component is showing and false if hidden.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"Width","description":"","type":"number","rw":"read-write","deprecated":"false"},{"name":"WidthPercent","description":"","type":"number","rw":"write-only","deprecated":"false"},{"name":"ZoomLevel","description":"The zoom level of the map. Valid values of ZoomLevel are dependent on the tile provider and the latitude and longitude of the map. For example, zoom levels are more constrained over oceans than dense city centers to conserve space for storing tiles, so valid values may be 1-7 over ocean and 1-18 over cities. Tile providers may send warning or error tiles if the zoom level is too great for the server to support.","type":"number","rw":"read-write","deprecated":"false"}],"events":[{"name":"BoundsChange","description":"User has changed the map bounds by panning or zooming the map.","deprecated":"false","params":[]},{"name":"DoubleTapAtPoint","description":"The user double-tapped at a point on the map. This event will be followed by a ZoomChanged event if zooming gestures are enabled and the map is not at the highest possible zoom level.","deprecated":"false","params":[{"name":"latitude","type":"number"},{"name":"longitude","type":"number"}]},{"name":"FeatureClick","description":"The user clicked on a map feature.","deprecated":"false","params":[{"name":"feature","type":"component"}]},{"name":"FeatureDrag","description":"The user dragged a map feature.","deprecated":"false","params":[{"name":"feature","type":"component"}]},{"name":"FeatureLongClick","description":"The user long-pressed on a map feature.","deprecated":"false","params":[{"name":"feature","type":"component"}]},{"name":"FeatureStartDrag","description":"The user started dragging a map feature.","deprecated":"false","params":[{"name":"feature","type":"component"}]},{"name":"FeatureStopDrag","description":"The user stopped dragging a map feature.","deprecated":"false","params":[{"name":"feature","type":"component"}]},{"name":"GotFeatures","description":"A GeoJSON document was successfully read from url. The features specified in the document are provided as a list in features.","deprecated":"false","params":[{"name":"url","type":"text"},{"name":"features","type":"list"}]},{"name":"InvalidPoint","description":"An invalid coordinate was supplied during a maps operation. The message parameter will have more details about the issue.","deprecated":"false","params":[{"name":"message","type":"text"}]},{"name":"LoadError","description":"An error was encountered while processing a GeoJSON document at the given url. The responseCode parameter will contain an HTTP status code and the errorMessage parameter will contain a detailed error message.","deprecated":"false","params":[{"name":"url","type":"text"},{"name":"responseCode","type":"number"},{"name":"errorMessage","type":"text"}]},{"name":"LongPressAtPoint","description":"The user long-pressed at a point on the map.","deprecated":"false","params":[{"name":"latitude","type":"number"},{"name":"longitude","type":"number"}]},{"name":"Ready","description":"Map has been initialized and is ready for user interaction.","deprecated":"false","params":[]},{"name":"TapAtPoint","description":"The user tapped at a point on the map.","deprecated":"false","params":[{"name":"latitude","type":"number"},{"name":"longitude","type":"number"}]},{"name":"ZoomChange","description":"User has changed the zoom level of the map.","deprecated":"false","params":[]}],"methods":[{"name":"CreateMarker","description":"Create a new marker with default properties at the specified latitude and longitude.","deprecated":"false","params":[{"name":"latitude","type":"number"},{"name":"longitude","type":"number"}],"returnType":"component"},{"name":"FeatureFromDescription","description":"Convert a feature description into an App Inventor map feature. Currently the only\n supported conversion is from a GeoJSON point to Marker component. If the feature has\n properties, they will be mapped into App Inventor properties using the following mapping:\n\n description becomes Description;\n draggable becomes Draggable;\n infobox becomes EnableInfobox;\n fill becomes FillColor;\n image becomes ImageAsset;\n stroke becomes StrokeColor;\n stroke-width becomes StrokeWidth;\n title becomes Title;\n visible becomes Visible","deprecated":"false","params":[{"name":"description","type":"list"}],"returnType":"any"},{"name":"LoadFromURL","description":"Load a feature collection in GeoJSON format from the given url. On success, the event GotFeatures will be raised with the given url and a list of the features parsed from the GeoJSON as a list of (key, value) pairs. On failure, the LoadError event will be raised with any applicable HTTP response code and error message.
","deprecated":"false","params":[{"name":"url","type":"text"}]},{"name":"PanTo","description":"Pan the map center to the given latitude and longitude and adjust the zoom level to the specified zoom.","deprecated":"false","params":[{"name":"latitude","type":"number"},{"name":"longitude","type":"number"},{"name":"zoom","type":"number"}]},{"name":"Save","description":"Save the contents of the Map to the specified path.","deprecated":"false","params":[{"name":"path","type":"text"}]}]},{"type":"com.google.appinventor.components.runtime.Marker","name":"Marker","external":"false","version":"2","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"MAPS","helpString":"An icon positioned at a point to indicate information on a map. Markers can be used to provide an info window, custom fill and stroke colors, and custom images to convey information to the user.
","helpUrl":"","showOnPalette":"true","nonVisible":"false","iconName":"","androidMinSdk":19,"properties":[{"name":"AnchorHorizontal","editorType":"horizontal_alignment","defaultValue":"3","propertyType":"common","editorArgs":[]},{"name":"AnchorVertical","editorType":"vertical_alignment","defaultValue":"3","propertyType":"common","editorArgs":[]},{"name":"Description","editorType":"text","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"Draggable","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]},{"name":"EnableInfobox","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]},{"name":"FillColor","editorType":"color","defaultValue":"&HFFF34336","propertyType":"common","editorArgs":[]},{"name":"ImageAsset","editorType":"image_asset","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"Latitude","editorType":"latitude","defaultValue":"0","propertyType":"common","editorArgs":[]},{"name":"Longitude","editorType":"longitude","defaultValue":"0","propertyType":"common","editorArgs":[]},{"name":"StrokeColor","editorType":"color","defaultValue":"&HFF000000","propertyType":"common","editorArgs":[]},{"name":"StrokeWidth","editorType":"integer","defaultValue":"1","propertyType":"common","editorArgs":[]},{"name":"Title","editorType":"text","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"Visible","editorType":"visibility","defaultValue":"True","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"AnchorHorizontal","description":"The horizontal alignment property controls where the Marker's anchor is located relative to its width.","type":"number","rw":"read-write","deprecated":"false"},{"name":"AnchorVertical","description":"The vertical alignment property controls where the Marker's anchor is located relative to its height.","type":"number","rw":"read-write","deprecated":"false"},{"name":"Description","description":"The description displayed in the info window that appears when the user clicks on the map feature.","type":"text","rw":"read-write","deprecated":"false"},{"name":"Draggable","description":"The Draggable property is used to set whether or not the user can drag the Marker by long-pressing and then dragging the marker to a new location.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"EnableInfobox","description":"Enable or disable the infobox window display when the user taps the feature.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"FillColor","description":"The paint color used to fill in the map feature.","type":"number","rw":"read-write","deprecated":"false"},{"name":"Height","description":"","type":"number","rw":"read-write","deprecated":"false"},{"name":"HeightPercent","description":"","type":"number","rw":"write-only","deprecated":"false"},{"name":"ImageAsset","description":"The ImageAsset property is used to provide an alternative image for the Marker.","type":"text","rw":"read-write","deprecated":"false"},{"name":"Latitude","description":"","type":"number","rw":"read-write","deprecated":"false"},{"name":"Longitude","description":"","type":"number","rw":"read-write","deprecated":"false"},{"name":"ShowShadow","description":"Gets whether or not the shadow of the Marker is shown.","type":"boolean","rw":"invisible","deprecated":"false"},{"name":"StrokeColor","description":"The paint color used to outline the map feature.","type":"number","rw":"read-write","deprecated":"false"},{"name":"StrokeWidth","description":"The width of the stroke used to outline the map feature.","type":"number","rw":"read-write","deprecated":"false"},{"name":"Title","description":"The title displayed in the info window that appears when the user clicks on the map feature.","type":"text","rw":"read-write","deprecated":"false"},{"name":"Type","description":"","type":"text","rw":"read-only","deprecated":"false"},{"name":"Visible","description":"Specifies whether the component should be visible on the screen. Value is true if the component is showing and false if hidden.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"Width","description":"","type":"number","rw":"read-write","deprecated":"false"},{"name":"WidthPercent","description":"","type":"number","rw":"write-only","deprecated":"false"}],"events":[{"name":"Click","description":"The user clicked on the feature.","deprecated":"false","params":[]},{"name":"Drag","description":"The user dragged the map feature.","deprecated":"false","params":[]},{"name":"LongClick","description":"The user long-pressed on the feature. This event will only trigger if Draggable is false.","deprecated":"false","params":[]},{"name":"StartDrag","description":"The user started a drag operation.","deprecated":"false","params":[]},{"name":"StopDrag","description":"The user stopped a drag operation.","deprecated":"false","params":[]}],"methods":[{"name":"BearingToFeature","description":"Returns the bearing from the Marker to the given map feature, in degrees from due north. If the centroids parameter is true, the bearing will be to the center of the map feature. Otherwise, the bearing will be computed to the point in the feature nearest the Marker.","deprecated":"false","params":[{"name":"mapFeature","type":"component"},{"name":"centroids","type":"boolean"}],"returnType":"number"},{"name":"BearingToPoint","description":"Returns the bearing from the Marker to the given latitude and longitude, in degrees from due north.","deprecated":"false","params":[{"name":"latitude","type":"number"},{"name":"longitude","type":"number"}],"returnType":"number"},{"name":"DistanceToFeature","description":"Compute the distance, in meters, between two map features.","deprecated":"false","params":[{"name":"mapFeature","type":"component"},{"name":"centroids","type":"boolean"}],"returnType":"number"},{"name":"DistanceToPoint","description":"Compute the distance, in meters, between a map feature and a latitude, longitude point.","deprecated":"false","params":[{"name":"latitude","type":"number"},{"name":"longitude","type":"number"}],"returnType":"number"},{"name":"HideInfobox","description":"Hide the infobox if it is shown. If the infobox is not visible this function has no effect.","deprecated":"false","params":[]},{"name":"SetLocation","description":"Set the location of the marker.","deprecated":"false","params":[{"name":"latitude","type":"number"},{"name":"longitude","type":"number"}]},{"name":"ShowInfobox","description":"Show the infobox for the feature. This will show the infobox even if","deprecated":"false","params":[]}]},{"type":"com.google.appinventor.components.runtime.Metadata","name":"Metadata","external":"false","version":"2","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"MEDIA","helpString":"Metadata Component to Read the Meta Data of a File","helpUrl":"","showOnPalette":"true","nonVisible":"true","iconName":"images/metadata.png","androidMinSdk":19,"properties":[{"name":"File","editorType":"asset","defaultValue":"","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"File","description":"The name of the file.","type":"text","rw":"read-write","deprecated":"false"}],"events":[{"name":"NoMetadata","description":"Triggers when there is no metadata found in the file.","deprecated":"false","params":[{"name":"type","type":"text"}]}],"methods":[{"name":"Album","description":"Get the Album from the file.","deprecated":"false","params":[],"returnType":"text"},{"name":"Artist","description":"Get the Artist from the file.","deprecated":"false","params":[],"returnType":"text"},{"name":"Author","description":"Get the Author from the file.","deprecated":"false","params":[],"returnType":"text"},{"name":"Bitrate","description":"Get the Bitrate from the file.","deprecated":"false","params":[],"returnType":"text"},{"name":"Composer","description":"Get the Composer from the file.","deprecated":"false","params":[],"returnType":"text"},{"name":"CustomItem","description":"Get a custom metadata item from the file\nyou can find a list of ids on https://developer.android.com/reference/android/media/MediaMetadataRetriever.html","deprecated":"false","params":[{"name":"id","type":"number"}],"returnType":"text"},{"name":"Date","description":"Get the Date from the file.","deprecated":"false","params":[],"returnType":"text"},{"name":"DiscNumber","description":"Get the Disc Number from the file.","deprecated":"false","params":[],"returnType":"text"},{"name":"Duration","description":"Get the Duration from the file.","deprecated":"false","params":[],"returnType":"text"},{"name":"EmbeddedPicture","description":"This method finds the optional graphic or album/cover art associated associated with the data source. If there are more than one pictures, (any) one of them is returned.","deprecated":"false","params":[],"returnType":"text"},{"name":"Genre","description":"Get the Genre from the file.","deprecated":"false","params":[],"returnType":"text"},{"name":"HasAudio","description":"Get the Has Audio from the file.","deprecated":"false","params":[],"returnType":"text"},{"name":"HasVideo","description":"Get the Has Video from the file.","deprecated":"false","params":[],"returnType":"text"},{"name":"Location","description":"Get the Location from the file.","deprecated":"false","params":[],"returnType":"text"},{"name":"Mimetype","description":"Get the Mimetype from the file.","deprecated":"false","params":[],"returnType":"text"},{"name":"Title","description":"Get the Title from the file.","deprecated":"false","params":[],"returnType":"text"},{"name":"TrackNumber","description":"Get the Track Number from the file.","deprecated":"false","params":[],"returnType":"text"},{"name":"VideoHeight","description":"Get the Video Height from the file.","deprecated":"false","params":[],"returnType":"text"},{"name":"VideoRotation","description":"Get the Video Rotation from the file.","deprecated":"false","params":[],"returnType":"text"},{"name":"VideoWidth","description":"Get the Video Width from the file.","deprecated":"false","params":[],"returnType":"text"},{"name":"Writer","description":"Get the Writer from the file.","deprecated":"false","params":[],"returnType":"text"},{"name":"Year","description":"Get the Year from the file.","deprecated":"false","params":[],"returnType":"text"}]},{"type":"com.google.appinventor.components.runtime.NearField","name":"NearField","external":"false","version":"1","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"SENSORS","helpString":"Non-visible component to provide NFC capabilities. For now this component supports the reading and writing of text tags only (if supported by the device)
In order to read and write text tags, the component must have its ReadMode property set to True or False respectively.
Note: This component will only work on Screen1 of any App Inventor app.
","helpUrl":"","showOnPalette":"true","nonVisible":"true","iconName":"images/nearfield.png","androidMinSdk":19,"properties":[{"name":"ReadMode","editorType":"boolean","defaultValue":"True","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"LastMessage","description":"","type":"text","rw":"read-only","deprecated":"false"},{"name":"ReadMode","description":"","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"TextToWrite","description":"","type":"text","rw":"read-write","deprecated":"false"},{"name":"WriteType","description":"","type":"number","rw":"read-only","deprecated":"false"}],"events":[{"name":"TagRead","description":"Indicates that a new tag has been detected.\n Currently this is only a plain text tag, as specified in the\n manifest. See Compiler.java.","deprecated":"false","params":[{"name":"tagID","type":"text"},{"name":"message","type":"text"}]},{"name":"TagWritten","description":"Event to detect when a tag was written.","deprecated":"false","params":[]}],"methods":[]},{"type":"com.google.appinventor.components.runtime.Network","name":"Network","external":"false","version":"1","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"CONNECTIVITY","helpString":"Provides basic information about the network connectivity of the device","helpUrl":"","showOnPalette":"true","nonVisible":"true","iconName":"images/network.png","androidMinSdk":19,"properties":[],"blockProperties":[],"events":[{"name":"OnConnect","description":"Called when the device connects to a network.","deprecated":"false","params":[]},{"name":"OnDisconnect","description":"Called when the device disconnects from a network.","deprecated":"false","params":[]}],"methods":[{"name":"IsConnected","description":"Returns \"True\" if the device is connected to a network, \"False\" otherwise.","deprecated":"false","params":[],"returnType":"boolean"},{"name":"Type","description":"Returns the type of network the device is connected to. e.g. \"wifi\" or \"mobile\".","deprecated":"false","params":[],"returnType":"text"}]},{"type":"com.google.appinventor.components.runtime.NotificationComponent","name":"NotificationComponent","external":"false","version":"1","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"INTERNAL","helpString":"A component to send a notification to the users device","helpUrl":"","showOnPalette":"true","nonVisible":"true","iconName":"images/notification.png","androidMinSdk":19,"properties":[{"name":"Priority","editorType":"notification_priority","defaultValue":"1","propertyType":"common","editorArgs":[]},{"name":"Visiblity","editorType":"notification_visibility","defaultValue":"1","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"Priority","description":"Set the priority level. 1 = \"Default\", 2 = \"high\", 3 = \"low\", 4 = \"max\", 5 = \"min\"","type":"number","rw":"read-write","deprecated":"false"},{"name":"Visiblity","description":"Set the visibility property. 1 = \"public\", 2 = \"private\", 3 = \"secret\".","type":"number","rw":"read-write","deprecated":"false"}],"events":[],"methods":[{"name":"AreNotificationsEnabled","description":"Check wether the app can send Notifications","deprecated":"false","params":[],"returnType":"boolean"},{"name":"CancelAll","description":"Cancel all Notifications","deprecated":"false","params":[]},{"name":"CancelNotification","description":"Cancel a Notification with an id","deprecated":"false","params":[{"name":"id","type":"number"}]},{"name":"NotificationBuilderAndroidCar","description":"Set the accent color for Android Car devices","deprecated":"false","params":[{"name":"accentColor","type":"number"}]},{"name":"NotificationBuilderAndroidWear","description":"Set the background image for Android Wear devices","deprecated":"false","params":[{"name":"backgroundImage","type":"text"}]},{"name":"NotificationBuilderAutoCancel","description":"Set whether the notifcation should me removed after the user clicks on it.","deprecated":"false","params":[{"name":"autoCancel","type":"boolean"}]},{"name":"NotificationBuilderBigPicture","description":"Set the big picture for the notification","deprecated":"false","params":[{"name":"bigPicture","type":"text"}]},{"name":"NotificationBuilderID","description":"Set the notification id.","deprecated":"false","params":[{"name":"id","type":"number"}]},{"name":"NotificationBuilderPriority","description":"Set the notification builder priority. 1 = \"Default\", 2 = \"high\", 3 = \"low\", 4 = \"max\", 5 = \"min\"","deprecated":"false","params":[{"name":"priority","type":"number"}]},{"name":"NotificationBuilderSend","description":"Send the notification that you build","deprecated":"false","params":[]},{"name":"NotificationBuilderStart","description":"Start building a new notification","deprecated":"false","params":[{"name":"title","type":"text"},{"name":"message","type":"text"}]},{"name":"NotificationBuilderStartValue","description":"Set the start value of the notification.","deprecated":"false","params":[{"name":"startValue","type":"text"}]},{"name":"NotificationBuilderVisibility","description":"Set the notification builder visibility. 1 = \"public\", 2 = \"private\", 3 = \"secret\".","deprecated":"false","params":[{"name":"visiblity","type":"number"}]},{"name":"SendAdvancedNotification","description":"Send a advanced notification (Android Wear Support)","deprecated":"false","params":[{"name":"id","type":"number"},{"name":"title","type":"text"},{"name":"message","type":"text"},{"name":"startValue","type":"text"},{"name":"timeOn","type":"number"},{"name":"timeOff","type":"number"}]},{"name":"SendNotification","description":"Send a notification","deprecated":"false","params":[{"name":"title","type":"text"},{"name":"message","type":"text"}]}]},{"type":"com.google.appinventor.components.runtime.Notifier","name":"Notifier","external":"false","version":"10","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"USERINTERFACE","helpString":"The Notifier component displays alert dialogs, messages, and temporary alerts, and creates Android log entries through the following methods:Non-visible component providing information about the device's physical orientation in three dimensions:
This event is signalled when the device's orientation has changed. It\n reports the new values of azimuth, pich, and roll, and it also sets the Azimuth, Pitch,\n and roll properties.
\nAzimuth is the compass heading in degrees, pitch indicates how the device\n is tilted from top to bottom, and roll indicates how much the device is tilted from\n side to side.
","deprecated":"false","params":[{"name":"azimuth","type":"number"},{"name":"pitch","type":"number"},{"name":"roll","type":"number"}]}],"methods":[]},{"type":"com.google.appinventor.components.runtime.Package","name":"Package","external":"false","version":"3","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"UTILITIES","helpString":"Component for Package","helpUrl":"","showOnPalette":"true","nonVisible":"true","iconName":"images/package.png","androidMinSdk":19,"properties":[],"blockProperties":[{"name":"AppName","description":"Returns the name from the current running app.","type":"text","rw":"read-only","deprecated":"false"},{"name":"PackageName","description":"Returns the package name from the current running app.","type":"text","rw":"read-only","deprecated":"false"},{"name":"VersionCode","description":"This block will returns the version code of the current running app.","type":"number","rw":"read-only","deprecated":"false"},{"name":"VersionName","description":"This block will returns the version name of the current running app.","type":"text","rw":"read-only","deprecated":"false"}],"events":[],"methods":[{"name":"AppNameFrom","description":"Returns the name from the given package name.","deprecated":"false","params":[{"name":"packageName","type":"text"}],"returnType":"text"},{"name":"GetPackageIcon","description":"Try to show the application icon of the given package name. If the application cannot be found, \"Package not found\" is the output.","deprecated":"false","params":[{"name":"packageName","type":"text"}],"returnType":"text"},{"name":"IsPackageInstalled","description":"Returns true if a package (app) is installed.","deprecated":"false","params":[{"name":"packageName","type":"text"}],"returnType":"boolean"},{"name":"VersionCodeFrom","description":"This block will returns the version code of the package name. Returns '-1' if the package is not installed.","deprecated":"false","params":[{"name":"packageName","type":"text"}],"returnType":"number"},{"name":"VersionNameFrom","description":"This block will returns the version name of the package name. Returns 'Package not found' if the package is not installed.","deprecated":"false","params":[{"name":"packageName","type":"text"}],"returnType":"text"},{"name":"isPermissionGranted","description":"Check whether a particular package has been granted a particular permission.","deprecated":"false","params":[{"name":"permissionName","type":"text"},{"name":"packageName","type":"text"}],"returnType":"boolean"}]},{"type":"com.google.appinventor.components.runtime.PasswordTextBox","name":"PasswordTextBox","external":"false","version":"5","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"INTERNAL","helpString":"A box for entering passwords. This is the same as the ordinary TextBox component except this does not display the characters typed by the user.
The value of the text in the box can be found or set through the Text property. If blank, the Hint property, which appears as faint text in the box, can provide the user with guidance as to what to type.
Text boxes are usually used with the Button component, with the user clicking on the button when text entry is complete.
Text property is empty.","type":"text","rw":"read-write","deprecated":"false"},{"name":"HintColor","description":"Set a custom hint text color.","type":"number","rw":"read-write","deprecated":"false"},{"name":"LineColor","description":"Please delete this block from your project.This block is deprecated and not longer supported.","type":"number","rw":"read-write","deprecated":"true"},{"name":"RotationAngle","description":"Sets the degrees that the textbox is rotated around the pivot point. Increasing values result in clockwise rotation.","type":"number","rw":"read-write","deprecated":"false"},{"name":"Row","description":"","type":"number","rw":"invisible","deprecated":"false"},{"name":"Text","description":"The text in the input box, which can be set by the programmer in the Designer or Blocks Editor, or it can be entered by the user (unless the Enabled property is false).","type":"text","rw":"read-write","deprecated":"false"},{"name":"TextAlignment","description":"Whether the text should be left justified, centered, or right justified. By default, text is left justified.","type":"number","rw":"invisible","deprecated":"false"},{"name":"TextColor","description":"The color for the text. You can choose a color by name in the Designer or in the Blocks Editor. The default text color is black.","type":"number","rw":"read-write","deprecated":"false"},{"name":"TextLength","description":"Returns the current text length as number.","type":"number","rw":"read-only","deprecated":"false"},{"name":"Visible","description":"Specifies whether the component should be visible on the screen. Value is true if the component is showing and false if hidden.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"Width","description":"","type":"number","rw":"read-write","deprecated":"false"},{"name":"WidthPercent","description":"","type":"number","rw":"write-only","deprecated":"false"}],"events":[{"name":"GotFocus","description":"Event raised when this component is selected for input, such as by\n the user touching it.","deprecated":"false","params":[]},{"name":"LostFocus","description":"Event raised when this component is no longer selected for input, such\n as if the user touches a different text box.","deprecated":"false","params":[]},{"name":"OnTextChanged","description":"Event to detect text changes.","deprecated":"false","params":[]}],"methods":[{"name":"RequestFocus","description":"Sets the textbox active.","deprecated":"false","params":[]},{"name":"SetCursorAt","description":"Set the cursor to the given position.","deprecated":"false","params":[{"name":"position","type":"number"}]},{"name":"SetCursorAtEnd","description":"Set the cursor to the end of the text.","deprecated":"false","params":[]},{"name":"SetShadow","description":"Place a blurred shadow of text underneath the text, drawn with the specified x, y, radius, color (e.g. -11, 12, 13, black","deprecated":"false","params":[{"name":"x","type":"number"},{"name":"y","type":"number"},{"name":"radius","type":"number"},{"name":"color","type":"number"}]}]},{"type":"com.google.appinventor.components.runtime.Pedometer","name":"Pedometer","external":"false","version":"2","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"SENSORS","helpString":"A Component that acts like a Pedometer. It senses motion via the Accerleromter and attempts to determine if a step has been taken. Using a configurable stride length, it can estimate the distance traveled as well. ","helpUrl":"","showOnPalette":"true","nonVisible":"true","iconName":"images/pedometer.png","androidMinSdk":19,"properties":[{"name":"StopDetectionTimeout","editorType":"non_negative_integer","defaultValue":"2000","propertyType":"common","editorArgs":[]},{"name":"StrideLength","editorType":"non_negative_float","defaultValue":"0.73","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"CalibrateStrideLength","description":"deprecated","type":"boolean","rw":"read-write","deprecated":"true"},{"name":"Distance","description":"The approximate distance traveled in meters.","type":"number","rw":"read-only","deprecated":"false"},{"name":"ElapsedTime","description":"Time elapsed in milliseconds since the pedometer was started.","type":"number","rw":"read-only","deprecated":"false"},{"name":"Moving","description":"deprecated","type":"boolean","rw":"read-only","deprecated":"true"},{"name":"SimpleSteps","description":"The number of simple steps taken since the pedometer has started.","type":"number","rw":"read-only","deprecated":"false"},{"name":"StopDetectionTimeout","description":"The duration in milliseconds of idleness (no steps detected) after which to go into a \"stopped\" state","type":"number","rw":"read-write","deprecated":"false"},{"name":"StrideLength","description":"Set the average stride length in meters.","type":"number","rw":"read-write","deprecated":"false"},{"name":"UseGPS","description":"","type":"boolean","rw":"write-only","deprecated":"true"},{"name":"WalkSteps","description":"the number of walk steps taken since the pedometer has started.","type":"number","rw":"read-only","deprecated":"false"}],"events":[{"name":"CalibrationFailed","description":"deprecated","deprecated":"true","params":[]},{"name":"GPSAvailable","description":"deprecated","deprecated":"true","params":[]},{"name":"GPSLost","description":"deprecated","deprecated":"true","params":[]},{"name":"SimpleStep","description":"This event is run when a raw step is detected","deprecated":"false","params":[{"name":"simpleSteps","type":"number"},{"name":"distance","type":"number"}]},{"name":"StartedMoving","description":"deprecated","deprecated":"true","params":[]},{"name":"StoppedMoving","description":"deprecated","deprecated":"true","params":[]},{"name":"WalkStep","description":"This event is run when a walking step is detected. A walking step is a step that appears to be involved in forward motion.","deprecated":"false","params":[{"name":"walkSteps","type":"number"},{"name":"distance","type":"number"}]}],"methods":[{"name":"Pause","description":"Pause counting of steps and distance.","deprecated":"false","params":[]},{"name":"Reset","description":"Resets the step counter, distance measure and time running.","deprecated":"false","params":[]},{"name":"Resume","description":"Resumes counting, synonym of Start.","deprecated":"false","params":[]},{"name":"Save","description":"Saves the pedometer state to the phone. Permits permits accumulation of steps and distance between invocations of an App that uses the pedometer. Different Apps will have their own saved state.","deprecated":"false","params":[]},{"name":"Start","description":"Start counting steps","deprecated":"false","params":[]},{"name":"Stop","description":"Stop counting steps","deprecated":"false","params":[]}]},{"type":"com.google.appinventor.components.runtime.PhoneCall","name":"PhoneCall","external":"false","version":"2","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"SOCIAL","helpString":"A non-visible component that makes a phone call to the number specified in the PhoneNumber property, which can be set either in the Designer or Blocks Editor. The component has a MakePhoneCall method, enabling the program to launch a phone call.
Often, this component is used with the ContactPicker component, which lets the user select a contact from the ones stored on the phone and sets the PhoneNumber property to the contact's phone number.
To directly specify the phone number (e.g., 650-555-1212), set the PhoneNumber property to a Text with the specified digits (e.g., \"6505551212\"). Dashes, dots, and parentheses may be included (e.g., \"(650)-555-1212\") but will be ignored; spaces may not be included.
ContactName: the contact's name PhoneNumber: the contact's phone number EmailAddress: the contact's email address Picture: the name of the file containing the contact's image, which can be used as a Picture property value for the Image or ImageSprite component.Other properties affect the appearance of the button (TextAlignment, BackgroundColor, etc.) and whether it can be clicked on (Enabled).
The PhoneNumberPicker component may not work on all Android devices. For example, on Android systems before system 3.0, the returned lists of phone numbers and email addresses will be empty.\n","helpUrl":"","showOnPalette":"true","nonVisible":"false","iconName":"","androidMinSdk":19,"properties":[{"name":"BackgroundColor","editorType":"color","defaultValue":"&HFF444444","propertyType":"common","editorArgs":[]},{"name":"BorderShadow","editorType":"boolean","defaultValue":"True","propertyType":"advanced","editorArgs":[]},{"name":"Enabled","editorType":"boolean","defaultValue":"True","propertyType":"common","editorArgs":[]},{"name":"FontBold","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]},{"name":"FontItalic","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]},{"name":"FontSize","editorType":"non_negative_float","defaultValue":"14.0","propertyType":"common","editorArgs":[]},{"name":"FontTypeface","editorType":"typeface","defaultValue":"0","propertyType":"common","editorArgs":[]},{"name":"FontTypefaceImport","editorType":"font_asset","defaultValue":"","propertyType":"advanced","editorArgs":[]},{"name":"HTMLFormat","editorType":"boolean","defaultValue":"False","propertyType":"advanced","editorArgs":[]},{"name":"Image","editorType":"image_asset","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"RotationAngle","editorType":"float","defaultValue":"0.0","propertyType":"advanced","editorArgs":[]},{"name":"Shape","editorType":"button_shape","defaultValue":"0","propertyType":"common","editorArgs":[]},{"name":"ShowFeedback","editorType":"boolean","defaultValue":"True","propertyType":"advanced","editorArgs":[]},{"name":"Text","editorType":"string","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"TextAlignment","editorType":"textalignment","defaultValue":"1","propertyType":"common","editorArgs":[]},{"name":"TextColor","editorType":"color","defaultValue":"&HFFFFFFFF","propertyType":"common","editorArgs":[]},{"name":"TouchColor","editorType":"color","defaultValue":"&HFFCCCCCC","propertyType":"advanced","editorArgs":[]},{"name":"Visible","editorType":"visibility","defaultValue":"True","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"BackgroundColor","description":"Returns the button's background color","type":"number","rw":"read-write","deprecated":"false"},{"name":"BorderShadow","description":"Returns true if the button have a outside border shadow on click.","type":"boolean","rw":"invisible","deprecated":"false"},{"name":"Column","description":"","type":"number","rw":"invisible","deprecated":"false"},{"name":"ContactName","description":"","type":"text","rw":"read-only","deprecated":"false"},{"name":"ContactUri","description":"URI that specifies the location of the contact on the device.","type":"text","rw":"read-only","deprecated":"false"},{"name":"EmailAddress","description":"","type":"text","rw":"read-only","deprecated":"false"},{"name":"EmailAddressList","description":"","type":"list","rw":"read-only","deprecated":"false"},{"name":"Enabled","description":"If set, user can tap check box to cause action.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"FontBold","description":"If set, button text is displayed in bold.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"FontItalic","description":"If set, button text is displayed in italics.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"FontSize","description":"Point size for button text.","type":"number","rw":"read-write","deprecated":"false"},{"name":"FontTypeface","description":"Font family for button text.","type":"number","rw":"invisible","deprecated":"false"},{"name":"FontTypefaceImport","description":"Set a custom font.","type":"text","rw":"write-only","deprecated":"false"},{"name":"HTMLFormat","description":"If true, then this button will show html text else it will show plain text. Note: Not all HTML is supported.","type":"boolean","rw":"invisible","deprecated":"false"},{"name":"Height","description":"","type":"number","rw":"read-write","deprecated":"false"},{"name":"HeightPercent","description":"","type":"number","rw":"write-only","deprecated":"false"},{"name":"Image","description":"Image to display on button.","type":"text","rw":"read-write","deprecated":"false"},{"name":"PhoneNumber","description":"","type":"text","rw":"read-only","deprecated":"false"},{"name":"PhoneNumberList","description":"","type":"list","rw":"read-only","deprecated":"false"},{"name":"Picture","description":"","type":"text","rw":"read-only","deprecated":"false"},{"name":"RotationAngle","description":"Sets the degrees that the button is rotated around the pivot point. Increasing values result in clockwise rotation.","type":"number","rw":"read-write","deprecated":"false"},{"name":"Row","description":"","type":"number","rw":"invisible","deprecated":"false"},{"name":"Shape","description":"Specifies the button's shape (default, rounded, rectangular, oval). The shape will not be visible if an Image is being displayed.","type":"number","rw":"invisible","deprecated":"false"},{"name":"ShowFeedback","description":"Specifies if a visual feedback should be shown for a button that as an image as background.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"Text","description":"Text to display on button.","type":"text","rw":"read-write","deprecated":"false"},{"name":"TextAlignment","description":"Left, center, or right.","type":"number","rw":"invisible","deprecated":"false"},{"name":"TextColor","description":"Color for button text.","type":"number","rw":"read-write","deprecated":"false"},{"name":"TouchColor","description":"Set the buttons touch color.","type":"number","rw":"read-write","deprecated":"false"},{"name":"Visible","description":"Specifies whether the component should be visible on the screen. Value is true if the component is showing and false if hidden.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"Width","description":"","type":"number","rw":"read-write","deprecated":"false"},{"name":"WidthPercent","description":"","type":"number","rw":"write-only","deprecated":"false"}],"events":[{"name":"AfterPicking","description":"Event to be raised after the picker activity returns its\n result and the properties have been filled in.","deprecated":"false","params":[{"name":"selection","type":"text"}]},{"name":"BeforePicking","description":"Event to raise when the button of the component is clicked or the list is shown\n using the Open block. This event occurs before the list of items is displayed, and\n can be used to prepare the list before it is shown.","deprecated":"false","params":[]},{"name":"GotFocus","description":"Indicates the cursor moved over the button so it is now possible to click it.","deprecated":"false","params":[]},{"name":"LostFocus","description":"Indicates the cursor moved away from the button so it is now no longer possible to click it.","deprecated":"false","params":[]},{"name":"TouchDown","description":"Indicates that the button was pressed down.","deprecated":"false","params":[]},{"name":"TouchUp","description":"Indicates that a button has been released.","deprecated":"false","params":[]}],"methods":[{"name":"ButtonClick","description":"Perform a button click as function.","deprecated":"false","params":[]},{"name":"Open","description":"Opens the picker, as though the user clicked on it.","deprecated":"false","params":[]},{"name":"SetShadow","description":"Place a blurred shadow of text underneath the text, drawn with the specified x, y, radius, color (e.g. -11, 12, 13, black.","deprecated":"false","params":[{"name":"x","type":"number"},{"name":"y","type":"number"},{"name":"radius","type":"number"},{"name":"color","type":"number"}]},{"name":"ViewContact","description":"view a contact via its URI","deprecated":"false","params":[{"name":"uri","type":"text"}]},{"name":"WithIconFromFontAwesome","description":"Show a image on the given postion near to the button. You can use following words for the position: 'Left', 'Right', 'Top' or 'Bottom'. Use the padding to add space between the icon and text. Use a material icon as the button icon without uploading a image resource into your project. You can find the icon name (or code) here at https://fontawesome.com/cheatsheet Use as example for a heart icon just 'f004'.","deprecated":"false","params":[{"name":"position","type":"text"},{"name":"iconName","type":"text"},{"name":"iconColor","type":"number"},{"name":"padding","type":"number"},{"name":"size","type":"number"}]},{"name":"WithIconFromMaterialFont","description":"Show a image on the given postion near to the button. You can use following words for the position: 'Left', 'Right', 'Top' or 'Bottom'. Use the padding to add space between the icon and text. Use a material icon as the button icon without uploading a image resource into your project. You can find the icon name (or code) here at https://material.io/icons","deprecated":"false","params":[{"name":"position","type":"text"},{"name":"iconName","type":"text"},{"name":"iconColor","type":"number"},{"name":"padding","type":"number"},{"name":"size","type":"number"}]},{"name":"WithIconFromPicture","description":"Show a image on the given postion near to the button. You can use following words for the position: 'Left', 'Right', 'Top' or 'Bottom'. Use the padding to add space between the icon and text.","deprecated":"false","params":[{"name":"position","type":"text"},{"name":"picture","type":"text"},{"name":"padding","type":"number"},{"name":"width","type":"number"},{"name":"height","type":"number"}]}]},{"type":"com.google.appinventor.components.runtime.PhoneStatus","name":"PhoneStatus","external":"false","version":"1","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"INTERNAL","helpString":"Component that returns information about the phone.","helpUrl":"","showOnPalette":"true","nonVisible":"true","iconName":"images/phoneip.png","androidMinSdk":19,"properties":[{"name":"WebRTC","editorType":"boolean","defaultValue":"True","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"WebRTC","description":"If True we are using WebRTC to talk to the server.","type":"boolean","rw":"read-write","deprecated":"false"}],"events":[{"name":"OnSettings","description":"This event is fired when the \"settings\" menu item is selected (only available in the\n Companion App, defined in ReplForm.java).","deprecated":"false","params":[]}],"methods":[{"name":"GetInstaller","description":"Return the app that installed us","deprecated":"false","params":[],"returnType":"text"},{"name":"GetVersionName","description":"Return the our VersionName property","deprecated":"false","params":[],"returnType":"text"},{"name":"GetWifiIpAddress","description":"Returns the IP address of the phone in the form of a String","deprecated":"false","params":[],"returnType":"text"},{"name":"SdkLevel","description":"Get the current Android SDK Level","deprecated":"false","params":[],"returnType":"number"},{"name":"doFault","description":"Causes an Exception, used to debug exception processing.","deprecated":"false","params":[]},{"name":"installURL","description":"Downloads the URL and installs it as an Android Package","deprecated":"false","params":[{"name":"url","type":"text"}]},{"name":"isConnected","description":"Returns TRUE if the phone is on Wifi, FALSE otherwise","deprecated":"false","params":[],"returnType":"boolean"},{"name":"isDirect","description":"Returns true if we are running in the emulator or USB Connection","deprecated":"false","params":[],"returnType":"boolean"},{"name":"setAssetsLoaded","description":"Declare that we have loaded our initial assets and other assets should come from the sdcard","deprecated":"false","params":[]},{"name":"setHmacSeedReturnCode","description":"Establish the secret seed for HOTP generation. Return the SHA1 of the provided seed, this will be used to contact the rendezvous server. Note: This code also starts the connection negotiation process if we are using WebRTC. This is a bit of a kludge...","deprecated":"false","params":[{"name":"seed","type":"text"},{"name":"rendezvousServer","type":"text"}],"returnType":"text"},{"name":"shutdown","description":"Really Exit the Application","deprecated":"false","params":[]},{"name":"startHTTPD","description":"Start the internal AppInvHTTPD to listen for incoming forms. FOR REPL USE ONLY!","deprecated":"false","params":[{"name":"secure","type":"boolean"}]}]},{"type":"com.google.appinventor.components.runtime.Player","name":"Player","external":"false","version":"8","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"MEDIA","helpString":"Multimedia component that plays audio and controls phone vibration. The name of a multimedia field is specified in the Source property, which can be set in the Designer or in the Blocks Editor. The length of time for a vibration is specified in the Blocks Editor in milliseconds (thousandths of a second).\n
For supported audio formats, see Android Supported Media Formats.
\nThis component is best for long sound files, such as songs, while the Sound component is more efficient for short files, such as sound effects.
Non-visible component that measures the ambient air pressure in hPa or mbar.
","helpUrl":"","showOnPalette":"true","nonVisible":"true","iconName":"images/pressureSensor.png","androidMinSdk":19,"properties":[{"name":"Enabled","editorType":"boolean","defaultValue":"True","propertyType":"common","editorArgs":[]},{"name":"KeepRunningWhenOnPause","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"Altitude","description":"","type":"number","rw":"read-only","deprecated":"false"},{"name":"Available","description":"","type":"boolean","rw":"read-only","deprecated":"false"},{"name":"Enabled","description":"","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"KeepRunningWhenOnPause","description":"","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"MaximumRange","description":"","type":"number","rw":"read-only","deprecated":"false"},{"name":"Pressure","description":"","type":"number","rw":"read-only","deprecated":"false"}],"events":[{"name":"PressureChanged","description":"Event is invoked when pressure is changed.","deprecated":"false","params":[{"name":"pressure","type":"number"},{"name":"altitude","type":"number"}]}],"methods":[]},{"type":"com.google.appinventor.components.runtime.ProximitySensor","name":"ProximitySensor","external":"false","version":"1","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"SENSORS","helpString":"Non-visible component that can measures the proximity of an object in cm relative to the view screen of a device. This sensor is typically used to determine whether a handset is being held up to a persons ear; i.e. lets you determine how far away an object is from a device. Many devices return the absolute distance, in cm, but some return only near and far values. In this case, the sensor usually reports its maximum range value in the far state and a lesser value in the near state.
","helpUrl":"","showOnPalette":"true","nonVisible":"true","iconName":"images/proximitysensor.png","androidMinSdk":19,"properties":[{"name":"Enabled","editorType":"boolean","defaultValue":"True","propertyType":"common","editorArgs":[]},{"name":"KeepRunningWhenOnPause","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"Available","description":"Reports whether or not the device has a proximity sensor","type":"boolean","rw":"read-only","deprecated":"false"},{"name":"Distance","description":"Returns the distance from the object to the device","type":"number","rw":"read-only","deprecated":"false"},{"name":"Enabled","description":"If enabled, then device will listen for changes in proximity","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"KeepRunningWhenOnPause","description":"If set to true, it will keep sensing for proximity changes even when the app is not visible","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"MaximumRange","description":"Reports the Maximum Range of the device's ProximitySensor","type":"number","rw":"read-only","deprecated":"false"}],"events":[{"name":"ProximityChanged","description":"Triggered when distance (in cm) of the object to the device changes.","deprecated":"false","params":[{"name":"distance","type":"number"}]}],"methods":[]},{"type":"com.google.appinventor.components.runtime.PushNotifications","name":"PushNotifications","external":"false","version":"5","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"SOCIAL","helpString":"Push Notifications component powered by OneSignal","helpUrl":"","showOnPalette":"true","nonVisible":"true","iconName":"images/pushNotifications.png","androidMinSdk":19,"properties":[{"name":"OneSignalAppId","editorType":"string","defaultValue":"","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"EnableLog","description":"If you want to enable the log then set it to true.","type":"boolean","rw":"write-only","deprecated":"false"},{"name":"EnableSound","description":"Enable Sound.","type":"boolean","rw":"write-only","deprecated":"false"},{"name":"EnableVibration","description":"Enable Vibration.","type":"boolean","rw":"write-only","deprecated":"false"},{"name":"GetEmailSubscriptionEmailAddress","description":"Get the email subscription email address.","type":"text","rw":"read-only","deprecated":"false"},{"name":"GetEmailSubscriptionUserId","description":"Get the email subscription user id.","type":"text","rw":"read-only","deprecated":"false"},{"name":"GetPermissionStatus","description":"Get Permission Status","type":"boolean","rw":"read-only","deprecated":"false"},{"name":"GetSubscriptionStatus","description":"Get the subscription Status","type":"boolean","rw":"read-only","deprecated":"false"},{"name":"GetUserId","description":"Get the User ID. If there is no user id it will return '-1'.","type":"text","rw":"read-only","deprecated":"false"},{"name":"OneSignalAppId","description":"Set here your One Signal App ID","type":"text","rw":"invisible","deprecated":"false"},{"name":"SetSubscription","description":"If you want to subscripe then set it to true.","type":"boolean","rw":"write-only","deprecated":"false"}],"events":[{"name":"GotAvailableTags","description":"Event to detect available one signal tags.","deprecated":"false","params":[{"name":"tagsAsString","type":"text"},{"name":"tagsAsList","type":"list"}]},{"name":"NotificationOpened","description":"User opened a notification.","deprecated":"false","params":[{"name":"id","type":"text"},{"name":"title","type":"text"},{"name":"message","type":"text"}]},{"name":"NotificationReceived","description":"User received a notification.","deprecated":"false","params":[{"name":"id","type":"text"},{"name":"title","type":"text"},{"name":"message","type":"text"}]},{"name":"SendMessageDone","description":"Returns true if your message was send with success out of your app to all users.","deprecated":"false","params":[{"name":"success","type":"boolean"}]}],"methods":[{"name":"ClearAllNotifications","description":"Clear All Notifications.","deprecated":"false","params":[]},{"name":"DeleteTag","description":"Deletes a single tag that was previously set on a user.","deprecated":"false","params":[{"name":"key","type":"text"}]},{"name":"GetAvailableTags","description":"Get a list of available tags.","deprecated":"false","params":[]},{"name":"SendMessage","description":"Send a message to all users. The message and your REST Api Key can not be empty! You will find your REST Api Key in your OneSignal account settings.","deprecated":"false","params":[{"name":"title","type":"text"},{"name":"message","type":"text"},{"name":"restApiKey","type":"text"}]},{"name":"SendTag","description":"Tag a user based on an app event of your choosing so later you can create segments in to target these users.","deprecated":"false","params":[{"name":"key","type":"text"},{"name":"value","type":"text"}]}]},{"type":"com.google.appinventor.components.runtime.QrCode","name":"QrCode","external":"false","version":"1","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"MEDIA","helpString":"Component for QrCode","helpUrl":"","showOnPalette":"true","nonVisible":"true","iconName":"images/qrCode.png","androidMinSdk":19,"properties":[{"name":"BackgroundColor","editorType":"color","defaultValue":"&HFFFFFFFF","propertyType":"common","editorArgs":[]},{"name":"Charset","editorType":"string","defaultValue":"UTF-8","propertyType":"advanced","editorArgs":[]},{"name":"Format","editorType":"string","defaultValue":"png","propertyType":"common","editorArgs":[]},{"name":"FrontColor","editorType":"color","defaultValue":"&HFF000000","propertyType":"common","editorArgs":[]},{"name":"Margin","editorType":"integer","defaultValue":"0","propertyType":"common","editorArgs":[]},{"name":"Size","editorType":"integer","defaultValue":"200","propertyType":"common","editorArgs":[]},{"name":"Text","editorType":"textArea","defaultValue":"Default","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"BackgroundColor","description":"Set the background color of the qr code result.","type":"number","rw":"read-write","deprecated":"false"},{"name":"Charset","description":"Set the charset of the input text.","type":"text","rw":"read-write","deprecated":"false"},{"name":"Format","description":"It's possible to create the QR code picture using different file formats, available are PNG, GIF, JPEG and the vector graphic formats SVG and EPS.","type":"text","rw":"read-write","deprecated":"false"},{"name":"FrontColor","description":"Set the color of the qr code result.","type":"number","rw":"read-write","deprecated":"false"},{"name":"Margin","description":"Thickness of a margin in pixels. The margin will always have the same color as the background.","type":"number","rw":"read-write","deprecated":"false"},{"name":"Size","description":"Set the size/resolution of the qr code.","type":"number","rw":"read-write","deprecated":"false"},{"name":"Text","description":"This is the text that is converted as qr code.","type":"text","rw":"read-write","deprecated":"false"}],"events":[{"name":"GotResponse","description":"You will find here the success state and image url.","deprecated":"false","params":[{"name":"success","type":"boolean"},{"name":"url","type":"text"}]}],"methods":[{"name":"GenerateQrCode","description":"Create a QR Code and the result is a link to it. Example: Set the resolution(in pixel) to 200(height and width has the same value) and text to: Hello world!. Result: QR code resolution is 200x200, text = Hello world! Your text input is encoded in the link automatically.","deprecated":"false","params":[]}]},{"type":"com.google.appinventor.components.runtime.Radiobutton","name":"Radiobutton","external":"false","version":"2","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"USERINTERFACE","helpString":"Component for Radiobutton","helpUrl":"https://docs.kodular.io/components/user-interface/radio-button/","showOnPalette":"true","nonVisible":"false","iconName":"","androidMinSdk":19,"properties":[{"name":"Checked","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]},{"name":"Enabled","editorType":"boolean","defaultValue":"True","propertyType":"common","editorArgs":[]},{"name":"FontBold","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]},{"name":"FontItalic","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]},{"name":"FontTypeface","editorType":"typeface","defaultValue":"0","propertyType":"common","editorArgs":[]},{"name":"FontTypefaceImport","editorType":"font_asset","defaultValue":"","propertyType":"advanced","editorArgs":[]},{"name":"RadioButtonColor","editorType":"color","defaultValue":"&HFF000000","propertyType":"common","editorArgs":[]},{"name":"Text","editorType":"textArea","defaultValue":"Radio Button Text","propertyType":"common","editorArgs":[]},{"name":"TextColor","editorType":"color","defaultValue":"&HFF000000","propertyType":"common","editorArgs":[]},{"name":"TextSize","editorType":"non_negative_float","defaultValue":"14.0","propertyType":"common","editorArgs":[]},{"name":"Visible","editorType":"visibility","defaultValue":"True","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"Checked","description":"Set the radio button to checked or unchecked","type":"boolean","rw":"write-only","deprecated":"false"},{"name":"Column","description":"","type":"number","rw":"invisible","deprecated":"false"},{"name":"Enabled","description":"If set, user can touch the radio button.","type":"boolean","rw":"write-only","deprecated":"false"},{"name":"FontBold","description":"","type":"boolean","rw":"invisible","deprecated":"false"},{"name":"FontItalic","description":"","type":"boolean","rw":"invisible","deprecated":"false"},{"name":"FontTypeface","description":"","type":"number","rw":"invisible","deprecated":"false"},{"name":"FontTypefaceImport","description":"Set a custom font.","type":"text","rw":"write-only","deprecated":"false"},{"name":"Height","description":"","type":"number","rw":"read-write","deprecated":"false"},{"name":"HeightPercent","description":"","type":"number","rw":"write-only","deprecated":"false"},{"name":"RadioButtonColor","description":"Change the radio button component color.","type":"number","rw":"read-write","deprecated":"false"},{"name":"Row","description":"","type":"number","rw":"invisible","deprecated":"false"},{"name":"Text","description":"Set here the radio button text.","type":"text","rw":"read-write","deprecated":"false"},{"name":"TextColor","description":"Set the text color for the radio button.","type":"number","rw":"read-write","deprecated":"false"},{"name":"TextSize","description":"The text size of the radio button.","type":"number","rw":"read-write","deprecated":"false"},{"name":"Visible","description":"Specifies whether the component should be visible on the screen. Value is true if the component is showing and false if hidden.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"Width","description":"","type":"number","rw":"read-write","deprecated":"false"},{"name":"WidthPercent","description":"","type":"number","rw":"write-only","deprecated":"false"},{"name":"isChecked","description":"Returns true if the radio button is checked, else false.","type":"boolean","rw":"read-only","deprecated":"false"}],"events":[{"name":"Changed","description":"Event invoked when the radio button state has been changed.","deprecated":"false","params":[{"name":"checked","type":"boolean"}]}],"methods":[{"name":"Toggle","description":"Change the checked state of the view to the inverse of its current state","deprecated":"false","params":[]}]},{"type":"com.google.appinventor.components.runtime.Ratingbar","name":"Ratingbar","external":"false","version":"1","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"USERINTERFACE","helpString":"Component for Ratingbar","helpUrl":"https://docs.kodular.io/components/user-interface/rating-bar/","showOnPalette":"true","nonVisible":"false","iconName":"images/ratingbar.png","androidMinSdk":19,"properties":[{"name":"BackgroundColor","editorType":"color","defaultValue":"&HFF9E9E9E","propertyType":"common","editorArgs":[]},{"name":"IsIndicator","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]},{"name":"SetNumberOfStars","editorType":"string","defaultValue":"5","propertyType":"common","editorArgs":[]},{"name":"SetStepSize","editorType":"float","defaultValue":".5","propertyType":"common","editorArgs":[]},{"name":"StarColor","editorType":"color","defaultValue":"&HFFF34336","propertyType":"common","editorArgs":[]},{"name":"Visible","editorType":"visibility","defaultValue":"True","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"BackgroundColor","description":"Change the background color of the star.","type":"number","rw":"read-write","deprecated":"false"},{"name":"Column","description":"","type":"number","rw":"invisible","deprecated":"false"},{"name":"GetNumberOfStars","description":"Returns the number of stars shown.","type":"number","rw":"read-only","deprecated":"false"},{"name":"GetRating","description":"Gets the current rating (number of stars filled).","type":"number","rw":"read-only","deprecated":"false"},{"name":"GetStepSize","description":"Gets the step size (granularity) of this rating bar.","type":"number","rw":"read-only","deprecated":"false"},{"name":"IsIndicator","description":"Whether this rating bar should only be an indicator (thus non-changeable by the user).","type":"boolean","rw":"write-only","deprecated":"false"},{"name":"Row","description":"","type":"number","rw":"invisible","deprecated":"false"},{"name":"SetNumberOfStars","description":"Sets the number of stars to show.","type":"number","rw":"write-only","deprecated":"false"},{"name":"SetRating","description":"Sets the rating (the number of stars filled).","type":"number","rw":"write-only","deprecated":"false"},{"name":"SetStepSize","description":"Sets the step size (granularity) of this rating bar.","type":"number","rw":"write-only","deprecated":"false"},{"name":"StarColor","description":"Change the color of the star.","type":"number","rw":"read-write","deprecated":"false"},{"name":"Visible","description":"Specifies whether the component should be visible on the screen. Value is true if the component is showing and false if hidden.","type":"boolean","rw":"read-write","deprecated":"false"}],"events":[{"name":"Changed","description":"Event invoked when the rating has been changed.","deprecated":"false","params":[{"name":"rating","type":"number"}]}],"methods":[]},{"type":"com.google.appinventor.components.runtime.Rectangle","name":"Rectangle","external":"false","version":"1","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"MAPS","helpString":"Rectangle","helpUrl":"","showOnPalette":"true","nonVisible":"false","iconName":"","androidMinSdk":19,"properties":[{"name":"Description","editorType":"text","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"Draggable","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]},{"name":"EastLongitude","editorType":"float","defaultValue":"0","propertyType":"common","editorArgs":[]},{"name":"EnableInfobox","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]},{"name":"FillColor","editorType":"color","defaultValue":"&HFFF34336","propertyType":"common","editorArgs":[]},{"name":"NorthLatitude","editorType":"float","defaultValue":"0","propertyType":"common","editorArgs":[]},{"name":"SouthLatitude","editorType":"float","defaultValue":"0","propertyType":"common","editorArgs":[]},{"name":"StrokeColor","editorType":"color","defaultValue":"&HFF000000","propertyType":"common","editorArgs":[]},{"name":"StrokeWidth","editorType":"integer","defaultValue":"1","propertyType":"common","editorArgs":[]},{"name":"Title","editorType":"text","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"Visible","editorType":"visibility","defaultValue":"True","propertyType":"common","editorArgs":[]},{"name":"WestLongitude","editorType":"float","defaultValue":"0","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"Description","description":"The description displayed in the info window that appears when the user clicks on the map feature.","type":"text","rw":"read-write","deprecated":"false"},{"name":"Draggable","description":"The Draggable property is used to set whether or not the user can drag the Marker by long-pressing and then dragging the marker to a new location.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"EastLongitude","description":"","type":"number","rw":"read-write","deprecated":"false"},{"name":"EnableInfobox","description":"Enable or disable the infobox window display when the user taps the feature.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"FillColor","description":"The paint color used to fill in the map feature.","type":"number","rw":"read-write","deprecated":"false"},{"name":"NorthLatitude","description":"","type":"number","rw":"read-write","deprecated":"false"},{"name":"SouthLatitude","description":"","type":"number","rw":"read-write","deprecated":"false"},{"name":"StrokeColor","description":"The paint color used to outline the map feature.","type":"number","rw":"read-write","deprecated":"false"},{"name":"StrokeWidth","description":"The width of the stroke used to outline the map feature.","type":"number","rw":"read-write","deprecated":"false"},{"name":"Title","description":"The title displayed in the info window that appears when the user clicks on the map feature.","type":"text","rw":"read-write","deprecated":"false"},{"name":"Type","description":"The type of the feature. For rectangles, this returns the text \"Rectangle\".","type":"text","rw":"read-only","deprecated":"false"},{"name":"Visible","description":"Specifies whether the component should be visible on the screen. Value is true if the component is showing and false if hidden.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"WestLongitude","description":"","type":"number","rw":"read-write","deprecated":"false"}],"events":[{"name":"Click","description":"The user clicked on the feature.","deprecated":"false","params":[]},{"name":"Drag","description":"The user dragged the map feature.","deprecated":"false","params":[]},{"name":"LongClick","description":"The user long-pressed on the feature. This event will only trigger if Draggable is false.","deprecated":"false","params":[]},{"name":"StartDrag","description":"The user started a drag operation.","deprecated":"false","params":[]},{"name":"StopDrag","description":"The user stopped a drag operation.","deprecated":"false","params":[]}],"methods":[{"name":"Bounds","description":"Returns the bounding box of the Rectangle in the format ((North West) (South East)).","deprecated":"false","params":[],"returnType":"list"},{"name":"Center","description":"Returns the center of the Rectangle as a list of the form (Latitude Longitude).","deprecated":"false","params":[],"returnType":"list"},{"name":"DistanceToFeature","description":"Compute the distance, in meters, between two map features.","deprecated":"false","params":[{"name":"mapFeature","type":"component"},{"name":"centroids","type":"boolean"}],"returnType":"number"},{"name":"DistanceToPoint","description":"Compute the distance, in meters, between a map feature and a latitude, longitude point.","deprecated":"false","params":[{"name":"latitude","type":"number"},{"name":"longitude","type":"number"},{"name":"centroid","type":"boolean"}],"returnType":"number"},{"name":"HideInfobox","description":"Hide the infobox if it is shown. If the infobox is not visible this function has no effect.","deprecated":"false","params":[]},{"name":"SetCenter","description":"Moves the Rectangle so that it is centered on the given latitude and longitude while attempting to maintain the width and height of the Rectangle as measured from the center to the edges.","deprecated":"false","params":[{"name":"latitude","type":"number"},{"name":"longitude","type":"number"}]},{"name":"ShowInfobox","description":"Show the infobox for the feature. This will show the infobox even if","deprecated":"false","params":[]}]},{"type":"com.google.appinventor.components.runtime.SQLite","name":"SQLite","external":"false","version":"1","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"STORAGE","helpString":"Tool developed by Carlos Pedroza to access the application's SQlite database.","helpUrl":"https://docs.kodular.io/components/storage/sqlite/","showOnPalette":"true","nonVisible":"true","iconName":"images/SQLite.png","androidMinSdk":19,"properties":[{"name":"ReturnHeader","editorType":"boolean","defaultValue":"false","propertyType":"common","editorArgs":[]},{"name":"SuppressToast","editorType":"boolean","defaultValue":"false","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"ReturnHeader","description":"Returns whether the header row should be returned in the result of a Select statement.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"SuppressToast","description":"Returns whether Success Toast should be suppressed.","type":"boolean","rw":"read-write","deprecated":"false"}],"events":[{"name":"AfterExecution","description":"Event handler after the SQL statement is executed, returns whether the execution was succesful.","deprecated":"false","params":[{"name":"wasExecuted","type":"boolean"}]},{"name":"AfterQuery","description":"Event handler after the RawQuery or Query is executed and returns a list with the selected data and number of records.","deprecated":"false","params":[{"name":"result","type":"list"},{"name":"numberOfRecords","type":"number"}]},{"name":"ErrorOccurred","description":"Event handler when an error ocurred, returns a string with a message from the error.","deprecated":"false","params":[{"name":"message","type":"text"}]}],"methods":[{"name":"ClearDatabase","description":"Clears the database to version 1. Use only while developing, this shouldn't be use on production.","deprecated":"false","params":[]},{"name":"Delete","description":"Executes pre-compiled DELETE statement with specified parameters. Parameters: 1) String table - Name of the table. 2) String whereClause - Optional WHERE clause to apply when deleting (Example: 'ID = ?'), pasing an empty a string will delete all rows. 3) List whereArgs - List with arguments for the WHERE clause. These arguments will be replaced by '?' in the whereClause. Returns the number of rows affected if a whereClause is passed in, 0 otherwise.","deprecated":"false","params":[{"name":"table","type":"text"},{"name":"whereClause","type":"text"},{"name":"whereArgs","type":"list"}],"returnType":"number"},{"name":"GetPath","description":"Returns the path to the database","deprecated":"false","params":[],"returnType":"text"},{"name":"Insert","description":"Executes pre-compiled INSERT statement with specified parameters. Parameters: 1) String table - Name of the table. 2) YailList columns - List with the columns that will contain the data to be inserted in the database. 3) YailList values - List with the data to be inserted in the database. Returns the row ID of the newly inserted row, or -1 if an error occurred.","deprecated":"false","params":[{"name":"table","type":"text"},{"name":"columns","type":"list"},{"name":"values","type":"list"}],"returnType":"number"},{"name":"MultipleSQL","description":"Execute Multiple SQL Statement asynchronously and returns whether the transaction was succesful in the AfterExecution Event Handler. Use it when returned data isn't needed. Parameter: 1 ) List of SQL.","deprecated":"false","params":[{"name":"list","type":"list"}]},{"name":"Query","description":"Executes pre-compiled QUERY statement with specified parameters. Parameters: 1) String table: Name of the table. 2) YailList columns: List of which columns to return, passing an empty list will return all columns. 3) String selection: Filter declaring which rows to return, formatted as an SQL WHERE clause, passing an empty string will return all rows. 4) YailList selectionArgs: List with the arguments that will replace onto '?' in the selection filter. 5) String groupBy: A filter declaring how to group rows, formatted as an SQL GROUP BY clause (excluding the GROUP BY itself), passing an empty string will cause the row to not be grouped. 6) String having: A filter declare which row groups to include if row grouping is being used, passing an empty string will cause all row groups to be included. 7) String orderBy: How to order the rows, formatted as an SQL ORDER BY clause (excluding the ORDER BY itself), passing an empty string will use the default sort order (unordered). 8) String limit: Limits the number of rows returned by the query, formatted as LIMIT clause, passing an empty string denotes no LIMIT clause. The result query is available in the AfterQuery event handler","deprecated":"false","params":[{"name":"table","type":"text"},{"name":"columns","type":"list"},{"name":"selection","type":"text"},{"name":"selectionArgs","type":"list"},{"name":"groupBy","type":"text"},{"name":"having","type":"text"},{"name":"orderBy","type":"text"},{"name":"limit","type":"text"}]},{"name":"RawQuery","description":"Executes the provided rawQuery Statement asynchronously. Returns a YailList with the selected data and number of records in the AfterQuery Event. Parameter: 1) String sql. 2) YailList selectionArgs: List with the arguments that will replace '?' in where clause in the query, to prevent SQL injections","deprecated":"false","params":[{"name":"sql","type":"text"},{"name":"selectionArgs","type":"list"}]},{"name":"Replace","description":"Executes pre-compiled REPLACE OR INSERT INTO statement with specified parameters. Parameters: 1) String table - Name of the table. 2) YailList columns - List with the columns that will contain the data to be replaced in the database. 3) YailList values - List with the data to be replaced in the database. Returns the row ID of the newly replaced row, or -1 if an error occurred.","deprecated":"false","params":[{"name":"table","type":"text"},{"name":"columns","type":"list"},{"name":"values","type":"list"}],"returnType":"number"},{"name":"SingleSQL","description":"Execute a Single SQL Statement asynchronously and returns whether the transaction was succesful in the AfterExecution Event Handler. Use it when returned data isn't needed. Parameter: 1) String sql.","deprecated":"false","params":[{"name":"sql","type":"text"}]},{"name":"Update","description":"Executes pre-compiled UPDATE statement with specified parameters. Parameters: 1) String table - Name of the table. 2) YailList columns - List with the columns that will contain the data to be inserted in the database. 3) YailList values - List with the data to be inserted in the database. 4) String whereClause - optional WHERE clause to apply when updating, leave an empty string to update all rows. Include ?s, which will be updated by the values from whereArgs. 5) YailList whereArgs - List with the columns that will contain the data to be updated in the database. Returns the row ID of the newly inserted row, or -1 if an error occurred.","deprecated":"false","params":[{"name":"table","type":"text"},{"name":"columns","type":"list"},{"name":"values","type":"list"},{"name":"whereClause","type":"text"},{"name":"whereArgs","type":"list"}],"returnType":"number"}]},{"type":"com.google.appinventor.components.runtime.Screenshot","name":"Screenshot","external":"false","version":"2","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"UTILITIES","helpString":"Component for Screenshot","helpUrl":"","showOnPalette":"true","nonVisible":"true","iconName":"images/screenshot.png","androidMinSdk":19,"properties":[{"name":"AllowScreenshots","editorType":"boolean","defaultValue":"True","propertyType":"common","editorArgs":[]},{"name":"DimAmount","editorType":"non_negative_float","defaultValue":"0.5","propertyType":"common","editorArgs":[]},{"name":"FileName","editorType":"string","defaultValue":"Screenshot.png","propertyType":"common","editorArgs":[]},{"name":"NotificationBigStyle","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]},{"name":"NotificationShareButton","editorType":"boolean","defaultValue":"True","propertyType":"common","editorArgs":[]},{"name":"NotificationShareTitle","editorType":"string","defaultValue":"Share","propertyType":"common","editorArgs":[]},{"name":"NotificationTitle","editorType":"string","defaultValue":"Screenshot..","propertyType":"common","editorArgs":[]},{"name":"ShowNotification","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]},{"name":"ShowPreview","editorType":"boolean","defaultValue":"True","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"AllowScreenshots","description":"This feature allows users of your app to make or ban screenshots of their app. If disabled and a person tries to make a screenshot, they will receive then a default system message that this is not possible.","type":"boolean","rw":"write-only","deprecated":"false"},{"name":"DimAmount","description":"Set the amount of dim behind the preview window if ShowPreview(...) is enabled. Use '0.0' for no dim and '1.0' for full dim.","type":"number","rw":"read-write","deprecated":"false"},{"name":"FileName","description":"This will be the name for the taken screenshot image file.","type":"text","rw":"read-write","deprecated":"false"},{"name":"NotificationBigStyle","description":"This will display the notification in a big style.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"NotificationShareButton","description":"If enabled you will see a notification with a share button after the screenshot is taken.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"NotificationShareTitle","description":"This will set the notification share button text if the option \"Show Notification\" is enabled.","type":"text","rw":"read-write","deprecated":"false"},{"name":"NotificationTitle","description":"This will set the notification title if the option \"Show Notification\" is enabled. ","type":"text","rw":"read-write","deprecated":"false"},{"name":"ShowNotification","description":"If enabled you will see a notification in the statusbar after the screenshot is taken.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"ShowPreview","description":"If enabled you will see a short preview animation after the screenshot is taken.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"arePermissionsGranted","description":"Returns true if the write and read permission is granted, else false.","type":"boolean","rw":"read-only","deprecated":"false"},{"name":"isReadPermissionGranted","description":"Returns true if the read permission is granted, else false.","type":"boolean","rw":"read-only","deprecated":"false"},{"name":"isWritePermissionGranted","description":"Returns true if the write permission is granted, else false.","type":"boolean","rw":"read-only","deprecated":"false"}],"events":[{"name":"GotScreenshot","description":"Event to detect that a screenshot was made by the user. Returns the image path to the taken screenshot.","deprecated":"false","params":[{"name":"image","type":"text"}]}],"methods":[{"name":"TakeScreenshot","description":"Take a screenshot of the current visible screen.","deprecated":"false","params":[]}]},{"type":"com.google.appinventor.components.runtime.Sharing","name":"Sharing","external":"false","version":"2","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"SOCIAL","helpString":"Sharing is a non-visible component that enables sharing files and/or messages between your app and other apps installed on a device. The component will display a list of the installed apps that can handle the information provided, and will allow the user to choose one to share the content with, for instance a mail app, a social network app, a texting app, and so on.Appinventor/assets, would be: \"file:///sdcard/Appinventor/assets/arrow.gif\"\"/storage/Appinventor/assets/arrow.gif\"A multimedia component that plays sound files and optionally vibrates for the number of milliseconds (thousandths of a second) specified in the Blocks Editor. The name of the sound file to play can be specified either in the Designer or in the Blocks Editor.
For supported sound file formats, see Android Supported Media Formats.
This Sound component is best for short sound files, such as sound effects, while the Player component is more efficient for longer sounds, such as songs.
You might get an error if you attempt to play a sound immeditely after setting the source.
","helpUrl":"","showOnPalette":"true","nonVisible":"true","iconName":"images/soundEffect.png","androidMinSdk":19,"properties":[{"name":"MinimumInterval","editorType":"non_negative_integer","defaultValue":"500","propertyType":"common","editorArgs":[]},{"name":"Source","editorType":"audio_asset","defaultValue":"","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"MinimumInterval","description":"The minimum interval, in milliseconds, between sounds. If you play a sound, all further Play() calls will be ignored until the interval has elapsed.","type":"number","rw":"read-write","deprecated":"false"},{"name":"Source","description":"The name of the sound file. Only certain formats are supported. See http://developer.android.com/guide/appendix/media-formats.html.","type":"text","rw":"read-write","deprecated":"false"}],"events":[],"methods":[{"name":"Pause","description":"Pauses playing the sound if it is being played.","deprecated":"false","params":[]},{"name":"Play","description":"Plays the sound specified by the Source property.","deprecated":"false","params":[]},{"name":"Resume","description":"Resumes playing the sound after a pause.","deprecated":"false","params":[]},{"name":"SoundNormal","description":"Ringer mode that may be audible and may vibrate.","deprecated":"false","params":[]},{"name":"SoundSilent","description":"Ringer mode that will be silent and will not vibrate.","deprecated":"false","params":[]},{"name":"SoundVibrate","description":"Ringer mode that will be silent and will vibrate.","deprecated":"false","params":[]},{"name":"Stop","description":"Stops playing the sound if it is being played.","deprecated":"false","params":[]},{"name":"Vibrate","description":"Vibrates for the specified number of milliseconds.","deprecated":"false","params":[{"name":"millisecs","type":"number"}]},{"name":"VibratePattern","description":"Vibrate with a given pattern","deprecated":"false","params":[{"name":"vibrate","type":"number"},{"name":"delay","type":"number"},{"name":"repeat","type":"boolean"}]}]},{"type":"com.google.appinventor.components.runtime.SoundRecorder","name":"SoundRecorder","external":"false","version":"3","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"MEDIA","helpString":"Multimedia component that records audio.
","helpUrl":"","showOnPalette":"true","nonVisible":"true","iconName":"images/soundRecorder.png","androidMinSdk":19,"properties":[{"name":"SavedRecording","editorType":"string","defaultValue":"/mnt/sdcard/Makeroid/mySound.3gp","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"SavedRecording","description":"Specifies the path to the file where the recording should be stored. If this proprety is the empty string, then starting a recording will create a file in an appropriate location. If the property is not the empty string, it should specify a complete path to a file in an existing directory, including a file name with the extension .3gp.","type":"text","rw":"read-write","deprecated":"false"}],"events":[{"name":"AfterSoundRecorded","description":"Provides the location of the newly created sound.","deprecated":"false","params":[{"name":"sound","type":"text"}]},{"name":"StartedRecording","description":"Indicates that the recorder has started, and can be stopped.","deprecated":"false","params":[]},{"name":"StoppedRecording","description":"Indicates that the recorder has stopped, and can be started again.","deprecated":"false","params":[]}],"methods":[{"name":"Pause","description":"Pause recording.","deprecated":"false","params":[]},{"name":"Start","description":"Starts recording.","deprecated":"false","params":[]},{"name":"Stop","description":"Stops recording.","deprecated":"false","params":[]}]},{"type":"com.google.appinventor.components.runtime.SoundSensor","name":"SoundSensor","external":"false","version":"1","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"SENSORS","helpString":"Physical world component that can detect such data as: sound amplitude (measurement of the degree of change [positive or negative] ).","helpUrl":"","showOnPalette":"true","nonVisible":"true","iconName":"images/soundSensor.png","androidMinSdk":19,"properties":[{"name":"Listen","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]},{"name":"MaxSoundlevel","editorType":"integer","defaultValue":"100","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"Amplitude","description":"Returns the real sound amplitude which can be between 0 to 32768.","type":"number","rw":"read-only","deprecated":"false"},{"name":"Listen","description":"Starts or Stops listening to sound changes","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"MaxSoundlevel","description":"Returns the max sound level.","type":"number","rw":"read-write","deprecated":"false"},{"name":"SoundLevel","description":"Returns the sound level.","type":"number","rw":"read-only","deprecated":"false"}],"events":[{"name":"SoundChanged","description":"Triggered when the sound level has changed","deprecated":"false","params":[{"name":"value","type":"number"}]}],"methods":[]},{"type":"com.google.appinventor.components.runtime.SpaceView","name":"SpaceView","external":"false","version":"1","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"LAYOUT_GENERAL","helpString":"Component for SpaceView","helpUrl":"https://docs.kodular.io/components/layout/space/","showOnPalette":"true","nonVisible":"false","iconName":"images/space.png","androidMinSdk":19,"properties":[{"name":"Visible","editorType":"visibility","defaultValue":"True","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"Column","description":"","type":"number","rw":"invisible","deprecated":"false"},{"name":"Height","description":"","type":"number","rw":"read-write","deprecated":"false"},{"name":"HeightPercent","description":"","type":"number","rw":"write-only","deprecated":"false"},{"name":"Row","description":"","type":"number","rw":"invisible","deprecated":"false"},{"name":"Visible","description":"Specifies whether the component should be visible on the screen. Value is true if the component is showing and false if hidden.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"Width","description":"","type":"number","rw":"read-write","deprecated":"false"},{"name":"WidthPercent","description":"","type":"number","rw":"write-only","deprecated":"false"}],"events":[],"methods":[]},{"type":"com.google.appinventor.components.runtime.SpeechRecognizer","name":"SpeechRecognizer","external":"false","version":"2","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"MEDIA","helpString":"Component for using Voice Recognition to convert from speech to text","helpUrl":"","showOnPalette":"true","nonVisible":"true","iconName":"images/speechRecognizer.png","androidMinSdk":19,"properties":[],"blockProperties":[{"name":"Result","description":"","type":"text","rw":"read-only","deprecated":"false"}],"events":[{"name":"AfterGettingText","description":"Simple event to raise after the VoiceReco activity has returned","deprecated":"false","params":[{"name":"result","type":"text"}]},{"name":"BeforeGettingText","description":"Simple event to raise when VoiceReco is invoked but before the VoiceReco\n activity is started.","deprecated":"false","params":[]}],"methods":[{"name":"GetText","description":"Solicits speech input from the user. After the speech is converted to\n text, the AfterGettingText event will be raised.","deprecated":"false","params":[]}]},{"type":"com.google.appinventor.components.runtime.Spinner","name":"Spinner","external":"false","version":"3","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"USERINTERFACE","helpString":"A spinner component that displays a pop-up with a list of elements. These elements can be set in the Designer or Blocks Editor by setting theElementsFromString property to a string-separated concatenation (for example, choice 1, choice 2, choice 3) or by setting the Elements property to a List in the Blocks editor. Spinners are created with the first item already selected. So selecting it does not generate an After Picking event. Consequently it's useful to make the first Spinner item be a non-choice like \"Select from below...\".
,
, , ,, , , , , , , . Example: Test.","type":"text","rw":"read-write","deprecated":"false"},{"name":"TextOn","description":"Set here the switch on text. HTML tags are too possiple: , ,,
, , ,, , , , , , , . Example: Test.","type":"text","rw":"read-write","deprecated":"false"},{"name":"TextSize","description":"The text size of the switch.","type":"number","rw":"read-write","deprecated":"false"},{"name":"ThumbColor","description":"Change the disabled color of the switch.","type":"number","rw":"read-write","deprecated":"false"},{"name":"TrackColor","description":"Change the enabled color of the switch.","type":"number","rw":"read-write","deprecated":"false"},{"name":"Visible","description":"Specifies whether the component should be visible on the screen. Value is true if the component is showing and false if hidden.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"Width","description":"","type":"number","rw":"read-write","deprecated":"false"},{"name":"WidthPercent","description":"","type":"number","rw":"write-only","deprecated":"false"},{"name":"isChecked","description":"Return true if the switch is checked else false.","type":"boolean","rw":"read-only","deprecated":"false"}],"events":[{"name":"Clicked","description":"Event invoked when a switch has been clicked. Returns true or false if the switch is checked or not.","deprecated":"false","params":[{"name":"isChecked","type":"boolean"}]}],"methods":[{"name":"ThumbImage","description":"Set the drawable used for the switch 'thumb' - the piece that the user can physically touch and drag along the track. If 'color Filter Enabled' is set to true, the image will get a light tint filter with the same color that you used as thumb color.","deprecated":"false","params":[{"name":"image","type":"text"}]},{"name":"ThumbImageFromMaterialFont","description":"Set the drawable used for the switch 'thumb' - the piece that the user can physically touch and drag along the track. You can find the icon name (or code) here at https://material.io/icons . Use as size as example '300'.","deprecated":"false","params":[{"name":"iconName","type":"text"},{"name":"size","type":"number"}]}]},{"type":"com.google.appinventor.components.runtime.TableArrangement","name":"TableArrangement","external":"false","version":"1","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"LAYOUT_GENERAL","helpString":"A formatting element in which to place components that should be displayed in tabular form.
","helpUrl":"","showOnPalette":"true","nonVisible":"false","iconName":"","androidMinSdk":19,"properties":[{"name":"Columns","editorType":"non_negative_integer","defaultValue":"2","propertyType":"common","editorArgs":[]},{"name":"Rows","editorType":"non_negative_integer","defaultValue":"2","propertyType":"common","editorArgs":[]},{"name":"Visible","editorType":"visibility","defaultValue":"True","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"Column","description":"","type":"number","rw":"invisible","deprecated":"false"},{"name":"Columns","description":"","type":"number","rw":"invisible","deprecated":"false"},{"name":"Height","description":"","type":"number","rw":"read-write","deprecated":"false"},{"name":"HeightPercent","description":"","type":"number","rw":"write-only","deprecated":"false"},{"name":"Row","description":"","type":"number","rw":"invisible","deprecated":"false"},{"name":"Rows","description":"","type":"number","rw":"invisible","deprecated":"false"},{"name":"Visible","description":"Specifies whether the component should be visible on the screen. Value is true if the component is showing and false if hidden.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"Width","description":"","type":"number","rw":"read-write","deprecated":"false"},{"name":"WidthPercent","description":"","type":"number","rw":"write-only","deprecated":"false"}],"events":[],"methods":[]},{"type":"com.google.appinventor.components.runtime.TemperatureSensor","name":"TemperatureSensor","external":"false","version":"1","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"SENSORS","helpString":"Non-visible component that measures the temperature of the air in the room in degrees Celsius. This sensor implementation varies across devices.
","helpUrl":"","showOnPalette":"true","nonVisible":"true","iconName":"images/temperatureSensor.png","androidMinSdk":19,"properties":[{"name":"Enabled","editorType":"boolean","defaultValue":"True","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"Available","description":"Whether Sensor is Available","type":"boolean","rw":"read-only","deprecated":"false"},{"name":"Enabled","description":"Whether Sensor should be Enabled","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"Temperature","description":"Returns the temperature in degrees celsius. To return values the sensor must be enabled","type":"number","rw":"read-only","deprecated":"false"}],"events":[{"name":"TemperatureChanged","description":"Event that fires when the temperature is changed","deprecated":"false","params":[{"name":"temperature","type":"number"}]}],"methods":[]},{"type":"com.google.appinventor.components.runtime.TextBox","name":"TextBox","external":"false","version":"12","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"USERINTERFACE","helpString":"A box for the user to enter text. The initial or user-entered text value is in the
Textproperty. If blank, theHintproperty, which appears as faint text in the box, can provide the user with guidance as to what to type.The
MultiLineproperty determines if the text can havemore than one line. For a single line text box, the keyboard will closeautomatically when the user presses the Done key. To close the keyboard for multiline text boxes, the app should use the HideKeyboard method or rely on the user to press the Back key.The
NumbersOnlyproperty restricts the keyboard to acceptnumeric input only.Other properties affect the appearance of the text box (
TextAlignment,BackgroundColor, etc.) and whether it can be used (Enabled).Text boxes are usually used with the
Buttoncomponent, with the user clicking on the button when text entry is complete.If the text entered by the user should not be displayed, use
","helpUrl":"https://docs.kodular.io/components/user-interface/textbox/","showOnPalette":"true","nonVisible":"false","iconName":"","androidMinSdk":19,"properties":[{"name":"BackgroundColor","editorType":"color","defaultValue":"&H00000000","propertyType":"common","editorArgs":[]},{"name":"CursorColor","editorType":"color","defaultValue":"&HFF000000","propertyType":"advanced","editorArgs":[]},{"name":"CursorVisible","editorType":"boolean","defaultValue":"True","propertyType":"advanced","editorArgs":[]},{"name":"Enabled","editorType":"boolean","defaultValue":"True","propertyType":"common","editorArgs":[]},{"name":"ErrorText","editorType":"string","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"FontBold","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]},{"name":"FontItalic","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]},{"name":"FontSize","editorType":"non_negative_float","defaultValue":"14.0","propertyType":"common","editorArgs":[]},{"name":"FontTypeface","editorType":"typeface","defaultValue":"0","propertyType":"common","editorArgs":[]},{"name":"FontTypefaceImport","editorType":"font_asset","defaultValue":"","propertyType":"advanced","editorArgs":[]},{"name":"HighlightColor","editorType":"color","defaultValue":"&H00000000","propertyType":"advanced","editorArgs":[]},{"name":"Hint","editorType":"string","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"HintColor","editorType":"color","defaultValue":"&HFF000000","propertyType":"common","editorArgs":[]},{"name":"InputType","editorType":"input_type","defaultValue":"1","propertyType":"common","editorArgs":[]},{"name":"MultiLine","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]},{"name":"NumbersOnly","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]},{"name":"RotationAngle","editorType":"float","defaultValue":"0.0","propertyType":"advanced","editorArgs":[]},{"name":"Text","editorType":"textArea","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"TextAlignment","editorType":"textalignment","defaultValue":"0","propertyType":"common","editorArgs":[]},{"name":"TextColor","editorType":"color","defaultValue":"&HFF000000","propertyType":"common","editorArgs":[]},{"name":"Visible","editorType":"visibility","defaultValue":"True","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"BackgroundColor","description":"The background color of the input box. You can choose a color by name in the Designer or in the Blocks Editor. The default background color is 'default' (shaded 3-D look).","type":"number","rw":"read-write","deprecated":"false"},{"name":"Column","description":"","type":"number","rw":"invisible","deprecated":"false"},{"name":"CurrentPosition","description":"Get the current cursor position.","type":"number","rw":"read-only","deprecated":"false"},{"name":"CursorColor","description":"The color of the cursor.","type":"number","rw":"read-write","deprecated":"false"},{"name":"CursorVisible","description":"Makes the cursor visible (the default) or invisible.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"EnableCopyPaste","description":"DEPRECATED since this feature is not working. Use 'Enabled' instead.","type":"boolean","rw":"read-write","deprecated":"true"},{"name":"Enabled","description":"Whether the user can enter text into this input box. By default, this is true.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"ErrorText","description":"Returns the error text.","type":"text","rw":"read-write","deprecated":"false"},{"name":"FontBold","description":"Whether the font for the text should be bold. By default, it is not.","type":"boolean","rw":"invisible","deprecated":"false"},{"name":"FontItalic","description":"Whether the text should appear in italics. By default, it does not.","type":"boolean","rw":"invisible","deprecated":"false"},{"name":"FontSize","description":"The font size for the text. By default, it is 14.0 points.","type":"number","rw":"read-write","deprecated":"false"},{"name":"FontTypeface","description":"The font for the text. The value can be changed in the Designer.","type":"number","rw":"invisible","deprecated":"false"},{"name":"FontTypefaceImport","description":"Set a custom font.","type":"text","rw":"write-only","deprecated":"false"},{"name":"Height","description":"","type":"number","rw":"read-write","deprecated":"false"},{"name":"HeightPercent","description":"","type":"number","rw":"write-only","deprecated":"false"},{"name":"HighlightColor","description":"Returns the color of the highlighted text.","type":"number","rw":"read-write","deprecated":"false"},{"name":"Hint","description":"Text that should appear faintly in the input box to provide a hint as to what the user should enter. This can only be seen if thePasswordTextBoxinstead.Textproperty is empty.","type":"text","rw":"read-write","deprecated":"false"},{"name":"HintColor","description":"Set a custom hint text color.","type":"number","rw":"read-write","deprecated":"false"},{"name":"InputType","description":"The input type you want for this TextBox.","type":"number","rw":"read-write","deprecated":"false"},{"name":"LineColor","description":"Please delete this block from your project.This block is deprecated and not longer supported.","type":"number","rw":"read-write","deprecated":"true"},{"name":"MultiLine","description":"If true, then this text box accepts multiple lines of input, which are entered using the return key. For single line text boxes there is a Done key instead of a return key, and pressing Done hides the keyboard. The app should call the HideKeyboard method to hide the keyboard for a mutiline text box.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"NumbersOnly","description":"If true, then this text box accepts only numbers as keyboard input. Numbers can include a decimal point and an optional leading minus sign. This applies to keyboard input only. Even if NumbersOnly is true, you can use [set Text to] to enter any text at all.","type":"boolean","rw":"read-write","deprecated":"true"},{"name":"RotationAngle","description":"Sets the degrees that the textbox is rotated around the pivot point. Increasing values result in clockwise rotation.","type":"number","rw":"read-write","deprecated":"false"},{"name":"Row","description":"","type":"number","rw":"invisible","deprecated":"false"},{"name":"Text","description":"The text in the input box, which can be set by the programmer in the Designer or Blocks Editor, or it can be entered by the user (unless theEnabledproperty is false).","type":"text","rw":"read-write","deprecated":"false"},{"name":"TextAlignment","description":"Whether the text should be left justified, centered, or right justified. By default, text is left justified.","type":"number","rw":"invisible","deprecated":"false"},{"name":"TextColor","description":"The color for the text. You can choose a color by name in the Designer or in the Blocks Editor. The default text color is black.","type":"number","rw":"read-write","deprecated":"false"},{"name":"TextLength","description":"Returns the current text length as number.","type":"number","rw":"read-only","deprecated":"false"},{"name":"Visible","description":"Specifies whether the component should be visible on the screen. Value is true if the component is showing and false if hidden.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"Width","description":"","type":"number","rw":"read-write","deprecated":"false"},{"name":"WidthPercent","description":"","type":"number","rw":"write-only","deprecated":"false"}],"events":[{"name":"GotFocus","description":"Event raised when this component is selected for input, such as by\n the user touching it.","deprecated":"false","params":[]},{"name":"LostFocus","description":"Event raised when this component is no longer selected for input, such\n as if the user touches a different text box.","deprecated":"false","params":[]},{"name":"OnTextChanged","description":"Event to detect text changes.","deprecated":"false","params":[]}],"methods":[{"name":"HideKeyboard","description":"Hide the keyboard. Only multiline text boxes need this. Single line text boxes close the keyboard when the users presses the Done key.","deprecated":"false","params":[]},{"name":"RequestFocus","description":"Sets the textbox active.","deprecated":"false","params":[]},{"name":"SetCursorAt","description":"Set the cursor to the given position.","deprecated":"false","params":[{"name":"position","type":"number"}]},{"name":"SetCursorAtEnd","description":"Set the cursor to the end of the text.","deprecated":"false","params":[]},{"name":"SetShadow","description":"Place a blurred shadow of text underneath the text, drawn with the specified x, y, radius, color (e.g. -11, 12, 13, black","deprecated":"false","params":[{"name":"x","type":"number"},{"name":"y","type":"number"},{"name":"radius","type":"number"},{"name":"color","type":"number"}]},{"name":"ShowError","description":"Shows an error message next to the textbox.","deprecated":"false","params":[]}]},{"type":"com.google.appinventor.components.runtime.TextToSpeech","name":"TextToSpeech","external":"false","version":"5","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"MEDIA","helpString":"The TestToSpeech component speaks a given text aloud. You can set the pitch and the rate of speech.You can also set a language by supplying a language code. This changes the pronounciation of words, not the actual language spoken. For example, setting the language to French and speaking English text will sound like someone speaking English (en) with a French accent.
You can also specify a country by supplying a country code. This can affect the pronounciation. For example, British English (GBR) will sound different from US English (USA). Not every country code will affect every language.
The languages and countries available depend on the particular device, and can be listed with the AvailableLanguages and AvailableCountries properties.
","helpUrl":"","showOnPalette":"true","nonVisible":"true","iconName":"images/textToSpeech.png","androidMinSdk":19,"properties":[{"name":"Country","editorType":"countries","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"Language","editorType":"languages","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"Pitch","editorType":"float","defaultValue":"1.0","propertyType":"common","editorArgs":[]},{"name":"SpeechRate","editorType":"float","defaultValue":"1.0","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"AvailableCountries","description":"List of the country codes available on this device for use with TextToSpeech. Check the Android developer documentation under supported languages to find the meanings of these abbreviations.","type":"list","rw":"read-only","deprecated":"false"},{"name":"AvailableLanguages","description":"List of the languages available on this device for use with TextToSpeech. Check the Android developer documentation under supported languages to find the meanings of these abbreviations.","type":"list","rw":"read-only","deprecated":"false"},{"name":"Country","description":"Country code to use for speech generation. This can affect the pronounciation. For example, British English (GBR) will sound different from US English (USA). Not every country code will affect every language.","type":"text","rw":"read-write","deprecated":"false"},{"name":"Language","description":"Sets the language for TextToSpeech. This changes the way that words are pronounced, not the actual language that is spoken. For example setting the language to and speaking English text with sound like someone speaking English with a Frernch accent.","type":"text","rw":"read-write","deprecated":"false"},{"name":"Pitch","description":"Sets the Pitch for TextToSpeech The values should be between 0 and 2 where lower values lower the tone of synthesized voice and greater values raise it.","type":"number","rw":"read-write","deprecated":"false"},{"name":"Result","description":"","type":"boolean","rw":"read-only","deprecated":"false"},{"name":"SpeechRate","description":"Sets the SpeechRate for TextToSpeech. The values should be between 0 and 2 where lower values slow down the pitch and greater values accelerate it.","type":"number","rw":"read-write","deprecated":"false"}],"events":[{"name":"AfterSpeaking","description":"Event to raise after the message is spoken.","deprecated":"false","params":[{"name":"result","type":"boolean"}]},{"name":"BeforeSpeaking","description":"Event to raise when Speak is invoked, before the message is spoken.","deprecated":"false","params":[]}],"methods":[{"name":"Speak","description":"Speaks the given message.","deprecated":"false","params":[{"name":"message","type":"text"}]}]},{"type":"com.google.appinventor.components.runtime.Texting","name":"Texting","external":"false","version":"3","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"SOCIAL","helpString":"A component that will, when the
SendMessagemethod is called, send the text message specified in theMessageproperty to the phone number specified in thePhoneNumberproperty.If the
ReceivingEnabledproperty is set to 1 messages will not be received. IfReceivingEnabledis set to 2 messages will be received only when the application is running. Finally ifReceivingEnabledis set to 3, messages will be received when the application is running and when the application is not running they will be queued and a notification displayed to the user.When a message arrives, the
MessageReceivedevent is raised and provides the sending number and message.An app that includes this component will receive messages even when it is in the background (i.e. when it's not visible on the screen) and, moreso, even if the app is not running, so long as it's installed on the phone. If the phone receives a text message when the app is not in the foreground, the phone will show a notification in the notification bar. Selecting the notification will bring up the app. As an app developer, you'll probably want to give your users the ability to control ReceivingEnabled so that they can make the phone ignore text messages.
If the GoogleVoiceEnabled property is true, messages can be sent over Wifi using Google Voice. This option requires that the user have a Google Voice account and that the mobile Voice app is installed on the phone. The Google Voice option works only on phones that support Android 2.0 (Eclair) or higher.
To specify the phone number (e.g., 650-555-1212), set the
PhoneNumberproperty to a Text string with the specified digits (e.g., 6505551212). Dashes, dots, and parentheses may be included (e.g., (650)-555-1212) but will be ignored; spaces may not be included.Another way for an app to specify a phone number would be to include a
","helpUrl":"","showOnPalette":"true","nonVisible":"true","iconName":"images/texting.png","androidMinSdk":19,"properties":[{"name":"GoogleVoiceEnabled","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]},{"name":"Message","editorType":"string","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"PhoneNumber","editorType":"string","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"ReceivingEnabled","editorType":"text_receiving","defaultValue":"2","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"GoogleVoiceEnabled","description":"If true, then SendMessage will attempt to send messages over Wifi using Google Voice. This requires that the Google Voice app must be installed and set up on the phone or tablet, with a Google Voice account. If GoogleVoiceEnabled is false, the device must have phone and texting service in order to send or receive messages with this component.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"Message","description":"The message that will be sent when the SendMessage method is called.","type":"text","rw":"read-write","deprecated":"false"},{"name":"PhoneNumber","description":"The number that the message will be sent to when the SendMessage method is called. The number is a text string with the specified digits (e.g., 6505551212). Dashes, dots, and parentheses may be included (e.g., (650)-555-1212) but will be ignored; spaces should not be included.","type":"text","rw":"read-write","deprecated":"false"},{"name":"ReceivingEnabled","description":"If set to 1 (OFF) no messages will be received. If set to 2 (FOREGROUND) or3 (ALWAYS) the component will respond to messages if it is running. If the app is not running then the message will be discarded if set to 2 (FOREGROUND). If set to 3 (ALWAYS) and the app is not running the phone will show a notification. Selecting the notification will bring up the app and signal the MessageReceived event. Messages received when the app is dormant will be queued, and so several MessageReceived events might appear when the app awakens. As an app developer, it would be a good idea to give your users control over this property, so they can make their phones ignore text messages when your app is installed.","type":"number","rw":"read-write","deprecated":"false"}],"events":[{"name":"MessageReceived","description":"Event that's raised when a text message is received by the phone.","deprecated":"false","params":[{"name":"number","type":"text"},{"name":"messageText","type":"text"}]}],"methods":[{"name":"SendMessage","description":"Send a text message","deprecated":"false","params":[]}]},{"type":"com.google.appinventor.components.runtime.TimePicker","name":"TimePicker","external":"false","version":"7","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"USERINTERFACE","helpString":"PhoneNumberPickercomponent, which lets the users select a phone numbers from the ones stored in the the phone's contacts.A button that, when clicked on, launches a popup dialog to allow the user to select a time.
","helpUrl":"","showOnPalette":"true","nonVisible":"false","iconName":"","androidMinSdk":19,"properties":[{"name":"BackgroundColor","editorType":"color","defaultValue":"&HFF444444","propertyType":"common","editorArgs":[]},{"name":"BorderShadow","editorType":"boolean","defaultValue":"True","propertyType":"advanced","editorArgs":[]},{"name":"Enabled","editorType":"boolean","defaultValue":"True","propertyType":"common","editorArgs":[]},{"name":"FontBold","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]},{"name":"FontItalic","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]},{"name":"FontSize","editorType":"non_negative_float","defaultValue":"14.0","propertyType":"common","editorArgs":[]},{"name":"FontTypeface","editorType":"typeface","defaultValue":"0","propertyType":"common","editorArgs":[]},{"name":"FontTypefaceImport","editorType":"font_asset","defaultValue":"","propertyType":"advanced","editorArgs":[]},{"name":"HTMLFormat","editorType":"boolean","defaultValue":"False","propertyType":"advanced","editorArgs":[]},{"name":"Image","editorType":"image_asset","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"RotationAngle","editorType":"float","defaultValue":"0.0","propertyType":"advanced","editorArgs":[]},{"name":"Shape","editorType":"button_shape","defaultValue":"0","propertyType":"common","editorArgs":[]},{"name":"ShowFeedback","editorType":"boolean","defaultValue":"True","propertyType":"advanced","editorArgs":[]},{"name":"Text","editorType":"string","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"TextAlignment","editorType":"textalignment","defaultValue":"1","propertyType":"common","editorArgs":[]},{"name":"TextColor","editorType":"color","defaultValue":"&HFFFFFFFF","propertyType":"common","editorArgs":[]},{"name":"TouchColor","editorType":"color","defaultValue":"&HFFCCCCCC","propertyType":"advanced","editorArgs":[]},{"name":"Visible","editorType":"visibility","defaultValue":"True","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"BackgroundColor","description":"Returns the button's background color","type":"number","rw":"read-write","deprecated":"false"},{"name":"BorderShadow","description":"Returns true if the button have a outside border shadow on click.","type":"boolean","rw":"invisible","deprecated":"false"},{"name":"Column","description":"","type":"number","rw":"invisible","deprecated":"false"},{"name":"Enabled","description":"If set, user can tap check box to cause action.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"FontBold","description":"If set, button text is displayed in bold.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"FontItalic","description":"If set, button text is displayed in italics.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"FontSize","description":"Point size for button text.","type":"number","rw":"read-write","deprecated":"false"},{"name":"FontTypeface","description":"Font family for button text.","type":"number","rw":"invisible","deprecated":"false"},{"name":"FontTypefaceImport","description":"Set a custom font.","type":"text","rw":"write-only","deprecated":"false"},{"name":"HTMLFormat","description":"If true, then this button will show html text else it will show plain text. Note: Not all HTML is supported.","type":"boolean","rw":"invisible","deprecated":"false"},{"name":"Height","description":"","type":"number","rw":"read-write","deprecated":"false"},{"name":"HeightPercent","description":"","type":"number","rw":"write-only","deprecated":"false"},{"name":"Hour","description":"The hour of the last time set using the time picker. The hour is in a 24 hour format. If the last time set was 11:53 pm, this property will return 23.","type":"number","rw":"read-only","deprecated":"false"},{"name":"Image","description":"Image to display on button.","type":"text","rw":"read-write","deprecated":"false"},{"name":"Instant","description":"The instant of the last time set using the time picker","type":"InstantInTime","rw":"read-only","deprecated":"false"},{"name":"Minute","description":"The minute of the last time set using the time picker","type":"number","rw":"read-only","deprecated":"false"},{"name":"RotationAngle","description":"Sets the degrees that the button is rotated around the pivot point. Increasing values result in clockwise rotation.","type":"number","rw":"read-write","deprecated":"false"},{"name":"Row","description":"","type":"number","rw":"invisible","deprecated":"false"},{"name":"Shape","description":"Specifies the button's shape (default, rounded, rectangular, oval). The shape will not be visible if an Image is being displayed.","type":"number","rw":"invisible","deprecated":"false"},{"name":"ShowFeedback","description":"Specifies if a visual feedback should be shown for a button that as an image as background.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"Text","description":"Text to display on button.","type":"text","rw":"read-write","deprecated":"false"},{"name":"TextAlignment","description":"Left, center, or right.","type":"number","rw":"invisible","deprecated":"false"},{"name":"TextColor","description":"Color for button text.","type":"number","rw":"read-write","deprecated":"false"},{"name":"TouchColor","description":"Set the buttons touch color.","type":"number","rw":"read-write","deprecated":"false"},{"name":"Visible","description":"Specifies whether the component should be visible on the screen. Value is true if the component is showing and false if hidden.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"Width","description":"","type":"number","rw":"read-write","deprecated":"false"},{"name":"WidthPercent","description":"","type":"number","rw":"write-only","deprecated":"false"}],"events":[{"name":"AfterTimeSet","description":"This event is run when a user has set the time in the popup dialog.","deprecated":"false","params":[]},{"name":"GotFocus","description":"Indicates the cursor moved over the button so it is now possible to click it.","deprecated":"false","params":[]},{"name":"LostFocus","description":"Indicates the cursor moved away from the button so it is now no longer possible to click it.","deprecated":"false","params":[]},{"name":"TouchDown","description":"Indicates that the button was pressed down.","deprecated":"false","params":[]},{"name":"TouchUp","description":"Indicates that a button has been released.","deprecated":"false","params":[]}],"methods":[{"name":"ButtonClick","description":"Perform a button click as function.","deprecated":"false","params":[]},{"name":"LaunchPicker","description":"Launches the TimePicker popup.","deprecated":"false","params":[]},{"name":"SetShadow","description":"Place a blurred shadow of text underneath the text, drawn with the specified x, y, radius, color (e.g. -11, 12, 13, black.","deprecated":"false","params":[{"name":"x","type":"number"},{"name":"y","type":"number"},{"name":"radius","type":"number"},{"name":"color","type":"number"}]},{"name":"SetTimeToDisplay","description":"Set the time to be shown in the Time Picker popup. Current time is shown by default.","deprecated":"false","params":[{"name":"hour","type":"number"},{"name":"minute","type":"number"}]},{"name":"SetTimeToDisplayFromInstant","description":"Set the time from the instant to be shown in the Time Picker popup. Current time is shown by default.","deprecated":"false","params":[{"name":"instant","type":"InstantInTime"}]},{"name":"WithIconFromFontAwesome","description":"Show a image on the given postion near to the button. You can use following words for the position: 'Left', 'Right', 'Top' or 'Bottom'. Use the padding to add space between the icon and text. Use a material icon as the button icon without uploading a image resource into your project. You can find the icon name (or code) here at https://fontawesome.com/cheatsheet Use as example for a heart icon just 'f004'.","deprecated":"false","params":[{"name":"position","type":"text"},{"name":"iconName","type":"text"},{"name":"iconColor","type":"number"},{"name":"padding","type":"number"},{"name":"size","type":"number"}]},{"name":"WithIconFromMaterialFont","description":"Show a image on the given postion near to the button. You can use following words for the position: 'Left', 'Right', 'Top' or 'Bottom'. Use the padding to add space between the icon and text. Use a material icon as the button icon without uploading a image resource into your project. You can find the icon name (or code) here at https://material.io/icons","deprecated":"false","params":[{"name":"position","type":"text"},{"name":"iconName","type":"text"},{"name":"iconColor","type":"number"},{"name":"padding","type":"number"},{"name":"size","type":"number"}]},{"name":"WithIconFromPicture","description":"Show a image on the given postion near to the button. You can use following words for the position: 'Left', 'Right', 'Top' or 'Bottom'. Use the padding to add space between the icon and text.","deprecated":"false","params":[{"name":"position","type":"text"},{"name":"picture","type":"text"},{"name":"padding","type":"number"},{"name":"width","type":"number"},{"name":"height","type":"number"}]}]},{"type":"com.google.appinventor.components.runtime.TinyDB","name":"TinyDB","external":"false","version":"2","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"STORAGE","helpString":"TinyDB is a non-visible component that stores data for an app.Apps created with App Inventor are initialized each time they run: If an app sets the value of a variable and the user then quits the app, the value of that variable will not be remembered the next time the app is run. In contrast, TinyDB is a persistent data store for the app, that is, the data stored there will be available each time the app is run. An example might be a game that saves the high score and retrieves it each time the game is played.
Data items are strings stored under tags . To store a data item, you specify the tag it should be stored under. Subsequently, you can retrieve the data that was stored under a given tag.
There is only one data store per app. Even if you have multiple TinyDB components, they will use the same data store. To get the effect of separate stores, use different keys. Also each app has its own data store. You cannot use TinyDB to pass data between two different apps on the phone, although you can use TinyDb to shares data between the different screens of a multi-screen app.
When you are developing apps using the AI Companion, all the apps using that companion will share the same TinyDb. That sharing will disappear once the apps are packaged. But, during development, you should be careful to clear the TinyDb each time you start working on a new app.
","helpUrl":"","showOnPalette":"true","nonVisible":"true","iconName":"images/tinyDB.png","androidMinSdk":19,"properties":[{"name":"Namespace","editorType":"string","defaultValue":"TinyDB1","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"Namespace","description":"Namespace for storing data.","type":"text","rw":"read-write","deprecated":"false"}],"events":[],"methods":[{"name":"ClearAll","description":"Clear the entire data store","deprecated":"false","params":[]},{"name":"ClearTag","description":"Clear the entry with the given tag","deprecated":"false","params":[{"name":"tag","type":"text"}]},{"name":"GetTags","description":"Return a list of all the tags in the data store","deprecated":"false","params":[],"returnType":"any"},{"name":"GetValue","description":"Retrieve the value stored under the given tag. If there's no such tag, then return valueIfTagNotThere.","deprecated":"false","params":[{"name":"tag","type":"text"},{"name":"valueIfTagNotThere","type":"any"}],"returnType":"any"},{"name":"StoreValue","description":"Store the given value under the given tag. The storage persists on the\n phone when the app is restarted.","deprecated":"false","params":[{"name":"tag","type":"text"},{"name":"valueToStore","type":"any"}]}]},{"type":"com.google.appinventor.components.runtime.TinyWebDB","name":"TinyWebDB","external":"false","version":"2","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"STORAGE","helpString":"Non-visible component that communicates with a Web service to store and retrieve information.","helpUrl":"","showOnPalette":"true","nonVisible":"true","iconName":"images/tinyWebDB.png","androidMinSdk":19,"properties":[{"name":"ServiceURL","editorType":"string","defaultValue":"http://tinywebdb.builder.makeroid.io","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"ServiceURL","description":"Specifies the URL of the Web service.","type":"text","rw":"read-write","deprecated":"false"}],"events":[{"name":"GotValue","description":"Indicates that a GetValue server request has succeeded.","deprecated":"false","params":[{"name":"tagFromWebDB","type":"text"},{"name":"valueFromWebDB","type":"any"}]},{"name":"ValueStored","description":"Event indicating that a StoreValue server request has succeeded.","deprecated":"false","params":[]},{"name":"WebServiceError","description":"Indicates that the communication with the Web service signaled an error.","deprecated":"false","params":[{"name":"message","type":"text"}]}],"methods":[{"name":"GetValue","description":"GetValue asks the Web service to get the value stored under the given tag.","deprecated":"false","params":[{"name":"tag","type":"text"}]},{"name":"StoreValue","description":"Asks the Web service to store the given value under the given tag.","deprecated":"false","params":[{"name":"tag","type":"text"},{"name":"valueToStore","type":"any"}]}]},{"type":"com.google.appinventor.components.runtime.Twitter","name":"Twitter","external":"false","version":"4","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"SOCIAL","helpString":"A non-visible component that enables communication with Twitter. Once a user has logged into their Twitter account (and the authorization has been confirmed successful by theIsAuthorizedevent), many more operations are available:\n
- Searching Twitter for tweets or labels (
\nSearchTwitter)- Sending a Tweet (
\nTweet)- Sending a Tweet with an Image (
\nTweetWithImage)- Directing a message to a specific user (
\nDirectMessage)- Receiving the most recent messages directed to the logged-in user (
\nRequestDirectMessages)- Following a specific user (
\nFollow)- Ceasing to follow a specific user (
\nStopFollowing)- Getting a list of users following the logged-in user (
\nRequestFollowers)- Getting the most recent messages of users followed by the logged-in user (
\nRequestFriendTimeline)- Getting the most recent mentions of the logged-in user (
RequestMentions)You must obtain a Consumer Key and Consumer Secret for Twitter authorization specific to your app from http://twitter.com/oauth_clients/new","helpUrl":"","showOnPalette":"true","nonVisible":"true","iconName":"images/twitter.png","androidMinSdk":19,"properties":[{"name":"ConsumerKey","editorType":"string","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"ConsumerSecret","editorType":"string","defaultValue":"","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"ConsumerKey","description":"The the consumer key to be used when authorizing with Twitter via OAuth.","type":"text","rw":"read-write","deprecated":"false"},{"name":"ConsumerSecret","description":"The consumer secret to be used when authorizing with Twitter via OAuth","type":"text","rw":"read-write","deprecated":"false"},{"name":"DirectMessages","description":"This property contains a list of the most recent messages mentioning the logged-in user. Initially, the list is empty. To set it, the program must:
\nThe value of this property will then be set to the list of direct messages retrieved (and maintain that value until any subsequent call to
- Call the
Authorizemethod.- Wait for the
Authorizedevent.- Call the
RequestDirectMessagesmethod.- Wait for the
DirectMessagesReceivedevent.RequestDirectMessages).","type":"list","rw":"read-only","deprecated":"false"},{"name":"Followers","description":"This property contains a list of the followers of the logged-in user. Initially, the list is empty. To set it, the program must:\nThe value of this property will then be set to the list of followers (and maintain its value until any subsequent call to
- Call the
Authorizemethod.- Wait for the
IsAuthorizedevent.- Call the
RequestFollowersmethod.- Wait for the
FollowersReceivedevent.RequestFollowers).","type":"list","rw":"read-only","deprecated":"false"},{"name":"FriendTimeline","description":"This property contains the 20 most recent messages of users being followed. Initially, the list is empty. To set it, the program must:\nThe value of this property will then be set to the list of messages (and maintain its value until any subsequent call to
- Call the
Authorizemethod.- Wait for the
IsAuthorizedevent.- Specify users to follow with one or more calls to the
Followmethod.- Call the
RequestFriendTimelinemethod.- Wait for the
FriendTimelineReceivedevent.RequestFriendTimeline.","type":"list","rw":"read-only","deprecated":"false"},{"name":"Mentions","description":"This property contains a list of mentions of the logged-in user. Initially, the list is empty. To set it, the program must:\nThe value of this property will then be set to the list of mentions (and will maintain its value until any subsequent calls to
- Call the
Authorizemethod.- Wait for the
IsAuthorizedevent.- Call the
RequestMentionsmethod.- Wait for the
MentionsReceivedevent.RequestMentions).","type":"list","rw":"read-only","deprecated":"false"},{"name":"SearchResults","description":"This property, which is initially empty, is set to a list of search results after the program:\nThe value of the property will then be the same as the parameter to
- Calls the
SearchTwittermethod.- Waits for the
SearchSuccessfulevent.SearchSuccessful. Note that it is not necessary to call theAuthorizemethod before callingSearchTwitter.","type":"list","rw":"read-only","deprecated":"false"},{"name":"TwitPic_API_Key","description":"The API Key for image uploading, provided by TwitPic.","type":"text","rw":"read-write","deprecated":"true"},{"name":"Username","description":"The user name of the authorized user. Empty if there is no authorized user.","type":"text","rw":"read-only","deprecated":"false"}],"events":[{"name":"DirectMessagesReceived","description":"This event is raised when the recent messages requested throughRequestDirectMessageshave been retrieved. A list of the messages can then be found in themessagesparameter or theMessagesproperty.","deprecated":"false","params":[{"name":"messages","type":"list"}]},{"name":"FollowersReceived","description":"This event is raised when all of the followers of the logged-in user requested throughRequestFollowershave been retrieved. A list of the followers can then be found in thefollowersparameter or theFollowersproperty.","deprecated":"false","params":[{"name":"followers2","type":"list"}]},{"name":"FriendTimelineReceived","description":"This event is raised when the messages requested throughRequestFriendTimelinehave been retrieved. Thetimelineparameter and theTimelineproperty will contain a list of lists, where each sub-list contains a status update of the form (username message)","deprecated":"false","params":[{"name":"timeline","type":"list"}]},{"name":"IsAuthorized","description":"This event is raised after the program callsAuthorizeif the authorization was successful. It is also called after a call toCheckAuthorizedif we already have a valid access token. After this event has been raised, any other method for this component can be called.","deprecated":"false","params":[]},{"name":"MentionsReceived","description":"This event is raised when the mentions of the logged-in user requested throughRequestMentionshave been retrieved. A list of the mentions can then be found in thementionsparameter or theMentionsproperty.","deprecated":"false","params":[{"name":"mentions","type":"list"}]},{"name":"SearchSuccessful","description":"This event is raised when the results of the search requested throughSearchSuccessfulhave been retrieved. A list of the results can then be found in theresultsparameter or theResultsproperty.","deprecated":"false","params":[{"name":"searchResults","type":"list"}]}],"methods":[{"name":"Authorize","description":"Redirects user to login to Twitter via the Web browser using the OAuth protocol if we don't already have authorization.","deprecated":"false","params":[]},{"name":"CheckAuthorized","description":"Checks whether we already have access, and if so, causes IsAuthorized event handler to be called.","deprecated":"false","params":[]},{"name":"DeAuthorize","description":"Removes Twitter authorization from this running app instance","deprecated":"false","params":[]},{"name":"DirectMessage","description":"This sends a direct (private) message to the specified user. The message will be trimmed if it exceeds 160characters.Requirements: This should only be called after the
","deprecated":"false","params":[{"name":"user","type":"text"},{"name":"message","type":"text"}]},{"name":"Follow","description":"Starts following a user.","deprecated":"false","params":[{"name":"user","type":"text"}]},{"name":"Login","description":"Twitter's API no longer supports login via username and password. Use the Authorize call instead.","deprecated":"false","params":[{"name":"username","type":"text"},{"name":"password","type":"text"}]},{"name":"RequestDirectMessages","description":"Requests the 20 most recent direct messages sent to the logged-in user. When the messages have been retrieved, the system will raise theIsAuthorizedevent has been raised, indicating that the user has successfully logged in to Twitter.DirectMessagesReceivedevent and set theDirectMessagesproperty to the list of messages.Requirements: This should only be called after the
","deprecated":"false","params":[]},{"name":"RequestFollowers","description":"Gets who is following you.","deprecated":"false","params":[]},{"name":"RequestFriendTimeline","description":"Gets the most recent 20 messages in the user's timeline.","deprecated":"false","params":[]},{"name":"RequestMentions","description":"Requests the 20 most recent mentions of the logged-in user. When the mentions have been retrieved, the system will raise theIsAuthorizedevent has been raised, indicating that the user has successfully logged in to Twitter.MentionsReceivedevent and set theMentionsproperty to the list of mentions.Requirements: This should only be called after the
","deprecated":"false","params":[]},{"name":"SearchTwitter","description":"This searches Twitter for the given String query.IsAuthorizedevent has been raised, indicating that the user has successfully logged in to Twitter.Requirements: This should only be called after the
","deprecated":"false","params":[{"name":"query","type":"text"}]},{"name":"StopFollowing","description":"Stops following a user.","deprecated":"false","params":[{"name":"user","type":"text"}]},{"name":"Tweet","description":"This sends a tweet as the logged-in user with the specified Text, which will be trimmed if it exceeds 160 characters.IsAuthorizedevent has been raised, indicating that the user has successfully logged in to Twitter.Requirements: This should only be called after the
","deprecated":"false","params":[{"name":"status","type":"text"}]},{"name":"TweetWithImage","description":"This sends a tweet as the logged-in user with the specified Text and a path to the image to be uploaded, which will be trimmed if it exceeds 160 characters. If an image is not found or invalid, only the text will be tweeted.IsAuthorizedevent has been raised, indicating that the user has successfully logged in to Twitter.Requirements: This should only be called after the
","deprecated":"false","params":[{"name":"status","type":"text"},{"name":"imagePath","type":"text"}]}]},{"type":"com.google.appinventor.components.runtime.VerticalArrangement","name":"VerticalArrangement","external":"false","version":"9","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"LAYOUT_GENERAL","helpString":"IsAuthorizedevent has been raised, indicating that the user has successfully logged in to Twitter.A formatting element in which to place components that should be displayed one below another. (The first child component is stored on top, the second beneath it, etc.) If you wish to have components displayed next to one another, use
","helpUrl":"","showOnPalette":"true","nonVisible":"false","iconName":"","androidMinSdk":19,"properties":[{"name":"AlignHorizontal","editorType":"horizontal_alignment","defaultValue":"1","propertyType":"common","editorArgs":[]},{"name":"AlignVertical","editorType":"vertical_alignment","defaultValue":"1","propertyType":"common","editorArgs":[]},{"name":"BackgroundColor","editorType":"color","defaultValue":"&H00000000","propertyType":"common","editorArgs":[]},{"name":"Clickable","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]},{"name":"Image","editorType":"image_asset","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"Scrollbar","editorType":"boolean","defaultValue":"True","propertyType":"common","editorArgs":[]},{"name":"UseRoundCard","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]},{"name":"Visible","editorType":"visibility","defaultValue":"True","propertyType":"common","editorArgs":[]},{"name":"isCard","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"AlignHorizontal","description":"A number that encodes how contents of the arrangement are aligned horizontally. The choices are: 1 = left aligned, 2 = right aligned, 3 = horizontally centered. Alignment has no effect if the arrangement's width is automatic.","type":"number","rw":"read-write","deprecated":"false"},{"name":"AlignVertical","description":"A number that encodes how the contents of the arrangement are aligned vertically. The choices are: 1 = aligned at the top, 2 = vertically centered, 3 = aligned at the bottom. Alignment has no effect if the arrangement's height is automatic.","type":"number","rw":"read-write","deprecated":"false"},{"name":"BackgroundColor","description":"Returns the component's background color","type":"number","rw":"read-write","deprecated":"false"},{"name":"Clickable","description":"Set the component clickable or not clickable.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"Column","description":"","type":"number","rw":"invisible","deprecated":"false"},{"name":"FullClickable","description":"","type":"boolean","rw":"invisible","deprecated":"true"},{"name":"Height","description":"","type":"number","rw":"read-write","deprecated":"false"},{"name":"HeightPercent","description":"","type":"number","rw":"write-only","deprecated":"false"},{"name":"Image","description":"Specifies the path of the component's image. If there is both an Image and a BackgroundColor, only the Image will be visible.","type":"text","rw":"read-write","deprecated":"false"},{"name":"Row","description":"","type":"number","rw":"invisible","deprecated":"false"},{"name":"Scrollbar","description":"Whether to display a scrollbar","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"UseRoundCard","description":"If enabled the card layout will have then round corners.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"Visible","description":"Specifies whether the component should be visible on the screen. Value is true if the component is showing and false if hidden.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"Width","description":"","type":"number","rw":"read-write","deprecated":"false"},{"name":"WidthPercent","description":"","type":"number","rw":"write-only","deprecated":"false"},{"name":"isCard","description":"If enabled the arrangement will be convert to a card view. You can detect clicks on it with the \"Click\" event.","type":"boolean","rw":"read-write","deprecated":"false"}],"events":[{"name":"Click","description":"Click listener event.","deprecated":"false","params":[]},{"name":"LongClick","description":"Long click listener event.","deprecated":"false","params":[]}],"methods":[]},{"type":"com.google.appinventor.components.runtime.VerticalScrollArrangement","name":"VerticalScrollArrangement","external":"false","version":"7","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"LAYOUT_GENERAL","helpString":"HorizontalArrangementinstead.A formatting element in which to place components that should be displayed one below another. (The first child component is stored on top, the second beneath it, etc.) If you wish to have components displayed next to one another, use
HorizontalArrangementinstead.This version is scrollable","helpUrl":"","showOnPalette":"true","nonVisible":"false","iconName":"images/verticalScroll.png","androidMinSdk":19,"properties":[{"name":"AlignHorizontal","editorType":"horizontal_alignment","defaultValue":"1","propertyType":"common","editorArgs":[]},{"name":"AlignVertical","editorType":"vertical_alignment","defaultValue":"1","propertyType":"common","editorArgs":[]},{"name":"BackgroundColor","editorType":"color","defaultValue":"&H00000000","propertyType":"common","editorArgs":[]},{"name":"Clickable","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]},{"name":"Image","editorType":"image_asset","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"Scrollbar","editorType":"boolean","defaultValue":"True","propertyType":"common","editorArgs":[]},{"name":"UseRoundCard","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]},{"name":"Visible","editorType":"visibility","defaultValue":"True","propertyType":"common","editorArgs":[]},{"name":"isCard","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"AlignHorizontal","description":"A number that encodes how contents of the arrangement are aligned horizontally. The choices are: 1 = left aligned, 2 = right aligned, 3 = horizontally centered. Alignment has no effect if the arrangement's width is automatic.","type":"number","rw":"read-write","deprecated":"false"},{"name":"AlignVertical","description":"A number that encodes how the contents of the arrangement are aligned vertically. The choices are: 1 = aligned at the top, 2 = vertically centered, 3 = aligned at the bottom. Alignment has no effect if the arrangement's height is automatic.","type":"number","rw":"read-write","deprecated":"false"},{"name":"BackgroundColor","description":"Returns the component's background color","type":"number","rw":"read-write","deprecated":"false"},{"name":"Clickable","description":"Set the component clickable or not clickable.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"Column","description":"","type":"number","rw":"invisible","deprecated":"false"},{"name":"FullClickable","description":"","type":"boolean","rw":"invisible","deprecated":"true"},{"name":"Height","description":"","type":"number","rw":"read-write","deprecated":"false"},{"name":"HeightPercent","description":"","type":"number","rw":"write-only","deprecated":"false"},{"name":"Image","description":"Specifies the path of the component's image. If there is both an Image and a BackgroundColor, only the Image will be visible.","type":"text","rw":"read-write","deprecated":"false"},{"name":"Row","description":"","type":"number","rw":"invisible","deprecated":"false"},{"name":"Scrollbar","description":"Whether to display a scrollbar","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"UseRoundCard","description":"If enabled the card layout will have then round corners.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"Visible","description":"Specifies whether the component should be visible on the screen. Value is true if the component is showing and false if hidden.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"Width","description":"","type":"number","rw":"read-write","deprecated":"false"},{"name":"WidthPercent","description":"","type":"number","rw":"write-only","deprecated":"false"},{"name":"isCard","description":"If enabled the arrangement will be convert to a card view. You can detect clicks on it with the \"Click\" event.","type":"boolean","rw":"read-write","deprecated":"false"}],"events":[{"name":"Click","description":"Click listener event.","deprecated":"false","params":[]},{"name":"LongClick","description":"Long click listener event.","deprecated":"false","params":[]}],"methods":[]},{"type":"com.google.appinventor.components.runtime.VideoPicker","name":"VideoPicker","external":"false","version":"4","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"MEDIA","helpString":"A special-purpose button. When the user taps an video picker, the device's video gallery appears, and the user can choose an video.","helpUrl":"","showOnPalette":"true","nonVisible":"false","iconName":"","androidMinSdk":19,"properties":[{"name":"BackgroundColor","editorType":"color","defaultValue":"&HFF444444","propertyType":"common","editorArgs":[]},{"name":"BorderShadow","editorType":"boolean","defaultValue":"True","propertyType":"advanced","editorArgs":[]},{"name":"Enabled","editorType":"boolean","defaultValue":"True","propertyType":"common","editorArgs":[]},{"name":"FontBold","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]},{"name":"FontItalic","editorType":"boolean","defaultValue":"False","propertyType":"common","editorArgs":[]},{"name":"FontSize","editorType":"non_negative_float","defaultValue":"14.0","propertyType":"common","editorArgs":[]},{"name":"FontTypeface","editorType":"typeface","defaultValue":"0","propertyType":"common","editorArgs":[]},{"name":"FontTypefaceImport","editorType":"font_asset","defaultValue":"","propertyType":"advanced","editorArgs":[]},{"name":"HTMLFormat","editorType":"boolean","defaultValue":"False","propertyType":"advanced","editorArgs":[]},{"name":"Image","editorType":"image_asset","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"RotationAngle","editorType":"float","defaultValue":"0.0","propertyType":"advanced","editorArgs":[]},{"name":"Shape","editorType":"button_shape","defaultValue":"0","propertyType":"common","editorArgs":[]},{"name":"ShowFeedback","editorType":"boolean","defaultValue":"True","propertyType":"advanced","editorArgs":[]},{"name":"Text","editorType":"string","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"TextAlignment","editorType":"textalignment","defaultValue":"1","propertyType":"common","editorArgs":[]},{"name":"TextColor","editorType":"color","defaultValue":"&HFFFFFFFF","propertyType":"common","editorArgs":[]},{"name":"TouchColor","editorType":"color","defaultValue":"&HFFCCCCCC","propertyType":"advanced","editorArgs":[]},{"name":"Visible","editorType":"visibility","defaultValue":"True","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"BackgroundColor","description":"Returns the button's background color","type":"number","rw":"read-write","deprecated":"false"},{"name":"BorderShadow","description":"Returns true if the button have a outside border shadow on click.","type":"boolean","rw":"invisible","deprecated":"false"},{"name":"Column","description":"","type":"number","rw":"invisible","deprecated":"false"},{"name":"Enabled","description":"If set, user can tap check box to cause action.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"FontBold","description":"If set, button text is displayed in bold.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"FontItalic","description":"If set, button text is displayed in italics.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"FontSize","description":"Point size for button text.","type":"number","rw":"read-write","deprecated":"false"},{"name":"FontTypeface","description":"Font family for button text.","type":"number","rw":"invisible","deprecated":"false"},{"name":"FontTypefaceImport","description":"Set a custom font.","type":"text","rw":"write-only","deprecated":"false"},{"name":"HTMLFormat","description":"If true, then this button will show html text else it will show plain text. Note: Not all HTML is supported.","type":"boolean","rw":"invisible","deprecated":"false"},{"name":"Height","description":"","type":"number","rw":"read-write","deprecated":"false"},{"name":"HeightPercent","description":"","type":"number","rw":"write-only","deprecated":"false"},{"name":"Image","description":"Image to display on button.","type":"text","rw":"read-write","deprecated":"false"},{"name":"RotationAngle","description":"Sets the degrees that the button is rotated around the pivot point. Increasing values result in clockwise rotation.","type":"number","rw":"read-write","deprecated":"false"},{"name":"Row","description":"","type":"number","rw":"invisible","deprecated":"false"},{"name":"Selection","description":"Path to the file containing the video that was selected.","type":"text","rw":"read-only","deprecated":"false"},{"name":"Shape","description":"Specifies the button's shape (default, rounded, rectangular, oval). The shape will not be visible if an Image is being displayed.","type":"number","rw":"invisible","deprecated":"false"},{"name":"ShowFeedback","description":"Specifies if a visual feedback should be shown for a button that as an image as background.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"Text","description":"Text to display on button.","type":"text","rw":"read-write","deprecated":"false"},{"name":"TextAlignment","description":"Left, center, or right.","type":"number","rw":"invisible","deprecated":"false"},{"name":"TextColor","description":"Color for button text.","type":"number","rw":"read-write","deprecated":"false"},{"name":"TouchColor","description":"Set the buttons touch color.","type":"number","rw":"read-write","deprecated":"false"},{"name":"Visible","description":"Specifies whether the component should be visible on the screen. Value is true if the component is showing and false if hidden.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"Width","description":"","type":"number","rw":"read-write","deprecated":"false"},{"name":"WidthPercent","description":"","type":"number","rw":"write-only","deprecated":"false"}],"events":[{"name":"AfterPicking","description":"Event to be raised after the picker activity returns its\n result and the properties have been filled in.","deprecated":"false","params":[{"name":"selection","type":"text"}]},{"name":"BeforePicking","description":"Event to raise when the button of the component is clicked or the list is shown\n using the Open block. This event occurs before the list of items is displayed, and\n can be used to prepare the list before it is shown.","deprecated":"false","params":[]},{"name":"GotFocus","description":"Indicates the cursor moved over the button so it is now possible to click it.","deprecated":"false","params":[]},{"name":"LostFocus","description":"Indicates the cursor moved away from the button so it is now no longer possible to click it.","deprecated":"false","params":[]},{"name":"TouchDown","description":"Indicates that the button was pressed down.","deprecated":"false","params":[]},{"name":"TouchUp","description":"Indicates that a button has been released.","deprecated":"false","params":[]}],"methods":[{"name":"ButtonClick","description":"Perform a button click as function.","deprecated":"false","params":[]},{"name":"Open","description":"Opens the picker, as though the user clicked on it.","deprecated":"false","params":[]},{"name":"SetShadow","description":"Place a blurred shadow of text underneath the text, drawn with the specified x, y, radius, color (e.g. -11, 12, 13, black.","deprecated":"false","params":[{"name":"x","type":"number"},{"name":"y","type":"number"},{"name":"radius","type":"number"},{"name":"color","type":"number"}]},{"name":"WithIconFromFontAwesome","description":"Show a image on the given postion near to the button. You can use following words for the position: 'Left', 'Right', 'Top' or 'Bottom'. Use the padding to add space between the icon and text. Use a material icon as the button icon without uploading a image resource into your project. You can find the icon name (or code) here at https://fontawesome.com/cheatsheet Use as example for a heart icon just 'f004'.","deprecated":"false","params":[{"name":"position","type":"text"},{"name":"iconName","type":"text"},{"name":"iconColor","type":"number"},{"name":"padding","type":"number"},{"name":"size","type":"number"}]},{"name":"WithIconFromMaterialFont","description":"Show a image on the given postion near to the button. You can use following words for the position: 'Left', 'Right', 'Top' or 'Bottom'. Use the padding to add space between the icon and text. Use a material icon as the button icon without uploading a image resource into your project. You can find the icon name (or code) here at https://material.io/icons","deprecated":"false","params":[{"name":"position","type":"text"},{"name":"iconName","type":"text"},{"name":"iconColor","type":"number"},{"name":"padding","type":"number"},{"name":"size","type":"number"}]},{"name":"WithIconFromPicture","description":"Show a image on the given postion near to the button. You can use following words for the position: 'Left', 'Right', 'Top' or 'Bottom'. Use the padding to add space between the icon and text.","deprecated":"false","params":[{"name":"position","type":"text"},{"name":"picture","type":"text"},{"name":"padding","type":"number"},{"name":"width","type":"number"},{"name":"height","type":"number"}]}]},{"type":"com.google.appinventor.components.runtime.VideoPlayer","name":"VideoPlayer","external":"false","version":"8","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"MEDIA","helpString":"A multimedia component capable of playing videos. When the application is run, the VideoPlayer will be displayed as a rectangle on-screen. If the user touches the rectangle, controls will appear to play/pause, skip ahead, and skip backward within the video. The application can also control behavior by calling the
Start,Pause, andSeekTomethods.Video files should be in 3GPP (.3gp) or MPEG-4 (.mp4) formats. For more details about legal formats, see Android Supported Media Formats.
App Inventor for Android only permits video files under 1 MB and limits the total size of an application to 5 MB, not all of which is available for media (video, audio, and sound) files. If your media files are too large, you may get errors when packaging or installing your application, in which case you should reduce the number of media files or their sizes. Most video editing software, such as Windows Movie Maker and Apple iMovie, can help you decrease the size of videos by shortening them or re-encoding the video into a more compact format.
You can also set the media source to a URL that points to a streaming video, but the URL must point to the video file itself, not to a program that plays the video.","helpUrl":"","showOnPalette":"true","nonVisible":"false","iconName":"","androidMinSdk":19,"properties":[{"name":"ShowControls","editorType":"boolean","defaultValue":"True","propertyType":"common","editorArgs":[]},{"name":"Source","editorType":"video_asset","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"Visible","editorType":"visibility","defaultValue":"True","propertyType":"common","editorArgs":[]},{"name":"Volume","editorType":"non_negative_float","defaultValue":"50","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"Column","description":"","type":"number","rw":"invisible","deprecated":"false"},{"name":"CurrentPosition","description":"Returns the current position of the source file that is playing.","type":"number","rw":"read-only","deprecated":"false"},{"name":"FullScreen","description":"","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"Height","description":"","type":"number","rw":"read-write","deprecated":"false"},{"name":"HeightPercent","description":"","type":"number","rw":"write-only","deprecated":"false"},{"name":"IsPlaying","description":"Reports whether the media is playing.","type":"boolean","rw":"read-only","deprecated":"false"},{"name":"Row","description":"","type":"number","rw":"invisible","deprecated":"false"},{"name":"ShowControls","description":"If enabled the user will see the control buttons.","type":"boolean","rw":"write-only","deprecated":"false"},{"name":"Source","description":"The \"path\" to the video. Usually, this will be the name of the video file, which should be added in the Designer.","type":"text","rw":"write-only","deprecated":"false"},{"name":"Visible","description":"Specifies whether the component should be visible on the screen. Value is true if the component is showing and false if hidden.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"Volume","description":"Sets the volume to a number between 0 and 100. Values less than 0 will be treated as 0, and values greater than 100 will be treated as 100.","type":"number","rw":"read-write","deprecated":"false"},{"name":"Width","description":"","type":"number","rw":"read-write","deprecated":"false"},{"name":"WidthPercent","description":"","type":"number","rw":"write-only","deprecated":"false"}],"events":[{"name":"Completed","description":"Indicates that the video has reached the end","deprecated":"false","params":[]},{"name":"VideoPlayerError","description":"The VideoPlayerError event is no longer used. Please use the Screen.ErrorOccurred event instead.","deprecated":"false","params":[{"name":"message","type":"text"}]}],"methods":[{"name":"GetDuration","description":"Returns duration of the video in milliseconds.","deprecated":"false","params":[],"returnType":"number"},{"name":"Pause","description":"Pauses playback of the video. Playback can be resumed at the same location by calling the
You can use the WebViewer.WebViewString property to communicate between your app and Javascript code running in the Webviewer page. In the app, you get and set WebViewString. In the WebViewer, you include Javascript that references the window.Makeroid object, using the methoods getWebViewString() and setWebViewString(text). For example, if the WebViewer opens to a page that contains the Javascript commandStartmethod.","deprecated":"false","params":[]},{"name":"SeekTo","description":"Seeks to the requested time (specified in milliseconds) in the video. If the video is paused, the frame shown will not be updated by the seek. The player can jump only to key frames in the video, so seeking to times that differ by short intervals may not actually move to different frames.","deprecated":"false","params":[{"name":"ms","type":"number"}]},{"name":"Start","description":"Starts playback of the video.","deprecated":"false","params":[]},{"name":"Stop","description":"Resets to start of video and pauses it if video was playing.","deprecated":"false","params":[]}]},{"type":"com.google.appinventor.components.runtime.Wallpaper","name":"Wallpaper","external":"false","version":"2","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"UTILITIES","helpString":"Component for Wallpaper","helpUrl":"","showOnPalette":"true","nonVisible":"true","iconName":"images/wallpaper.png","androidMinSdk":19,"properties":[{"name":"SaveWallpaperAs","editorType":"string","defaultValue":"wallpaperPicture.png","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"DesiredMinimumHeight","description":"Returns the desired minimum height for the wallpaper.","type":"number","rw":"read-only","deprecated":"false"},{"name":"DesiredMinimumWidth","description":"Returns the desired minimum width for the wallpaper.","type":"number","rw":"read-only","deprecated":"false"},{"name":"IsSetWallpaperAllowed","description":"Returns whether the calling package is allowed to set the wallpaper for the calling user. This block works only on devices with Android 7+.","type":"boolean","rw":"read-only","deprecated":"false"},{"name":"IsWallpaperSupported","description":"Returns whether wallpapers are supported for the calling user. This block works only on devices with Android 6+.","type":"boolean","rw":"read-only","deprecated":"false"},{"name":"SaveWallpaperAs","description":"After the user clicked on \"Get Wallpaper\" this will be the name for the wallpaper picture.","type":"text","rw":"write-only","deprecated":"false"}],"events":[{"name":"GotWallpaper","description":"Event to detect that the component got the current system wallpaper.","deprecated":"false","params":[{"name":"picture","type":"text"}]},{"name":"WallpaperChanged","description":"Event to detect that the user has changed the wallpaper. This event will be invoked by the \"Set Wallpaper\" function.","deprecated":"false","params":[{"name":"success","type":"boolean"}]},{"name":"WallpaperCleared","description":"Event to detect that the user has cleared/deleted the wallpaper.","deprecated":"false","params":[]}],"methods":[{"name":"Clear","description":"Remove any currently set system wallpaper, reverting to the system's built-in wallpaper.","deprecated":"false","params":[]},{"name":"ClearWallpaper","description":"Reset all wallpaper to the factory default. This block works only on devices with Android 9+.","deprecated":"false","params":[]},{"name":"GetWallpaper","description":"Retrieve the current system wallpaper; if no wallpaper is set, the system built-in static wallpaper is returned.","deprecated":"false","params":[]},{"name":"SetLockScreenWallpaper","description":"Change the current lock screen wallpaper. This block works only on devices with Android 7+.","deprecated":"false","params":[{"name":"image","type":"text"}]},{"name":"SetWallpaper","description":"Change the current system wallpaper.","deprecated":"false","params":[{"name":"image","type":"text"}]}]},{"type":"com.google.appinventor.components.runtime.Web","name":"Web","external":"false","version":"5","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"CONNECTIVITY","helpString":"Non-visible component that provides functions for HTTP GET, POST, PUT, and DELETE requests.","helpUrl":"","showOnPalette":"true","nonVisible":"true","iconName":"images/web.png","androidMinSdk":19,"properties":[{"name":"AllowCookies","editorType":"boolean","defaultValue":"false","propertyType":"common","editorArgs":[]},{"name":"ResponseFileName","editorType":"string","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"SaveResponse","editorType":"boolean","defaultValue":"false","propertyType":"common","editorArgs":[]},{"name":"Url","editorType":"string","defaultValue":"","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"AllowCookies","description":"Whether the cookies from a response should be saved and used in subsequent requests. Cookies are only supported on Android version 2.3 or greater.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"RequestHeaders","description":"The request headers, as a list of two-element sublists. The first element of each sublist represents the request header field name. The second element of each sublist represents the request header field values, either a single value or a list containing multiple values.","type":"list","rw":"read-write","deprecated":"false"},{"name":"ResponseFileName","description":"The name of the file where the response should be saved. If SaveResponse is true and ResponseFileName is empty, then a new file name will be generated.","type":"text","rw":"read-write","deprecated":"false"},{"name":"SaveResponse","description":"Whether the response should be saved in a file.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"Url","description":"The URL for the web request.","type":"text","rw":"read-write","deprecated":"false"}],"events":[{"name":"GotFile","description":"Event indicating that a request has finished.","deprecated":"false","params":[{"name":"url","type":"text"},{"name":"responseCode","type":"number"},{"name":"responseType","type":"text"},{"name":"fileName","type":"text"}]},{"name":"GotText","description":"Event indicating that a request has finished.","deprecated":"false","params":[{"name":"url","type":"text"},{"name":"responseCode","type":"number"},{"name":"responseType","type":"text"},{"name":"responseContent","type":"text"}]}],"methods":[{"name":"BuildRequestData","description":"Converts a list of two-element sublists, representing name and value pairs, to a\n string formatted as application/x-www-form-urlencoded media type, suitable to pass to\n PostText.","deprecated":"false","params":[{"name":"list","type":"list"}],"returnType":"text"},{"name":"ClearCookies","description":"Clears all cookies for this Web component.","deprecated":"false","params":[]},{"name":"Delete","description":"Performs an HTTP DELETE request using the Url property and retrieves the\n response.
\n If the SaveResponse property is true, the response will be saved in a file\n and the GotFile event will be triggered. The ResponseFileName property\n can be used to specify the name of the file.
\n If the SaveResponse property is false, the GotText event will be\n triggered.","deprecated":"false","params":[]},{"name":"Get","description":"Performs an HTTP GET request using the Url property and retrieves the\n response.
\n If the SaveResponse property is true, the response will be saved in a file\n and the GotFile event will be triggered. The ResponseFileName property\n can be used to specify the name of the file.
\n If the SaveResponse property is false, the GotText event will be\n triggered.","deprecated":"false","params":[]},{"name":"HtmlTextDecode","description":"Decodes the given HTML text value. HTML character entities such as &, <, >, ', and " are changed to &, <, >, ', and ". Entities such as &#xhhhh, and &#nnnn are changed to the appropriate characters.","deprecated":"false","params":[{"name":"htmlText","type":"text"}],"returnType":"text"},{"name":"JsonTextDecode","description":"Decodes the given JSON encoded value to produce a corresponding AppInventor value.\n A JSON list [x, y, z] decodes to a list (x y z), A JSON object with name A and value B,\n (denoted as A:B enclosed in curly braces) decodes to a list\n ((A B)), that is, a list containing the two-element list (A B).","deprecated":"false","params":[{"name":"jsonText","type":"text"}],"returnType":"any"},{"name":"PostFile","description":"Performs an HTTP POST request using the Url property and data from the specified file.
If the SaveResponse property is true, the response will be saved in a file and the GotFile event will be triggered. The ResponseFileName property can be used to specify the name of the file.
If the SaveResponse property is false, the GotText event will be triggered.","deprecated":"false","params":[{"name":"path","type":"text"}]},{"name":"PostText","description":"Performs an HTTP POST request using the Url property and the specified text.
The characters of the text are encoded using UTF-8 encoding.
If the SaveResponse property is true, the response will be saved in a file and the GotFile event will be triggered. The responseFileName property can be used to specify the name of the file.
If the SaveResponse property is false, the GotText event will be triggered.","deprecated":"false","params":[{"name":"text","type":"text"}]},{"name":"PostTextWithEncoding","description":"Performs an HTTP POST request using the Url property and the specified text.
The characters of the text are encoded using the given encoding.
If the SaveResponse property is true, the response will be saved in a file and the GotFile event will be triggered. The ResponseFileName property can be used to specify the name of the file.
If the SaveResponse property is false, the GotText event will be triggered.","deprecated":"false","params":[{"name":"text","type":"text"},{"name":"encoding","type":"text"}]},{"name":"PutFile","description":"Performs an HTTP PUT request using the Url property and data from the specified file.
If the SaveResponse property is true, the response will be saved in a file and the GotFile event will be triggered. The ResponseFileName property can be used to specify the name of the file.
If the SaveResponse property is false, the GotText event will be triggered.","deprecated":"false","params":[{"name":"path","type":"text"}]},{"name":"PutText","description":"Performs an HTTP PUT request using the Url property and the specified text.
The characters of the text are encoded using UTF-8 encoding.
If the SaveResponse property is true, the response will be saved in a file and the GotFile event will be triggered. The responseFileName property can be used to specify the name of the file.
If the SaveResponse property is false, the GotText event will be triggered.","deprecated":"false","params":[{"name":"text","type":"text"}]},{"name":"PutTextWithEncoding","description":"Performs an HTTP PUT request using the Url property and the specified text.
The characters of the text are encoded using the given encoding.
If the SaveResponse property is true, the response will be saved in a file and the GotFile event will be triggered. The ResponseFileName property can be used to specify the name of the file.
If the SaveResponse property is false, the GotText event will be triggered.","deprecated":"false","params":[{"name":"text","type":"text"},{"name":"encoding","type":"text"}]},{"name":"UriDecode","description":"Decodes the encoded text value.","deprecated":"false","params":[{"name":"text","type":"text"}],"returnType":"text"},{"name":"UriEncode","description":"Encodes the given text value so that it can be used in a URL.","deprecated":"false","params":[{"name":"text","type":"text"}],"returnType":"text"},{"name":"XMLTextDecode","description":"Decodes the given XML string to produce a list structure. See the App Inventor documentation on \"Other topics, notes, and details\" for information.","deprecated":"false","params":[{"name":"XmlText","type":"text"}],"returnType":"any"}]},{"type":"com.google.appinventor.components.runtime.WebViewer","name":"WebViewer","external":"false","version":"13","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"VIEWS","helpString":"Component for viewing Web pages. The Home URL can be specified in the Designer or in the Blocks Editor. The view can be set to follow links when they are tapped, and users can fill in Web forms. Warning: This is not a full browser. For example, pressing the phone's hardware Back key will exit the app, rather than move back in the browser history.
document.write(\"The answer is\" + window.Makeroid.getWebViewString());
and if you set WebView.WebVewString to \"hello\", then the web page will show
The answer is hello.
And if the Web page contains Javascript that executes the command
window.Makeroid.setWebViewString(\"hello from Javascript\"),
then the value of the WebViewString property will be
hello from Javascript.","helpUrl":"","showOnPalette":"true","nonVisible":"false","iconName":"","androidMinSdk":19,"properties":[{"name":"DesktopMode","editorType":"boolean","defaultValue":"false","propertyType":"advanced","editorArgs":[]},{"name":"EnableJavaScript","editorType":"boolean","defaultValue":"True","propertyType":"common","editorArgs":[]},{"name":"FollowLinks","editorType":"boolean","defaultValue":"True","propertyType":"advanced","editorArgs":[]},{"name":"HomeUrl","editorType":"string","defaultValue":"","propertyType":"common","editorArgs":[]},{"name":"IgnoreSslErrors","editorType":"boolean","defaultValue":"False","propertyType":"advanced","editorArgs":[]},{"name":"LoadImages","editorType":"boolean","defaultValue":"True","propertyType":"advanced","editorArgs":[]},{"name":"PromptforPermission","editorType":"boolean","defaultValue":"True","propertyType":"advanced","editorArgs":[]},{"name":"Scrollbar","editorType":"boolean","defaultValue":"True","propertyType":"common","editorArgs":[]},{"name":"UseExternalBrowser","editorType":"boolean","defaultValue":"False","propertyType":"advanced","editorArgs":[]},{"name":"UserAgent","editorType":"string","defaultValue":"","propertyType":"advanced","editorArgs":[]},{"name":"UsesLocation","editorType":"boolean","defaultValue":"False","propertyType":"advanced","editorArgs":[]},{"name":"Visible","editorType":"visibility","defaultValue":"True","propertyType":"common","editorArgs":[]},{"name":"ZoomDisplay","editorType":"boolean","defaultValue":"True","propertyType":"common","editorArgs":[]},{"name":"ZoomEnabled","editorType":"boolean","defaultValue":"True","propertyType":"common","editorArgs":[]},{"name":"ZoomPercent","editorType":"integer","defaultValue":"100","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"Column","description":"","type":"number","rw":"invisible","deprecated":"false"},{"name":"CurrentPageTitle","description":"Title of the page currently viewed","type":"text","rw":"read-only","deprecated":"false"},{"name":"CurrentUrl","description":"URL of the page currently viewed. This could be different from the Home URL if new pages were visited by following links.","type":"text","rw":"read-only","deprecated":"false"},{"name":"DesktopMode","description":"Get/Set Desktop mode by altering the user agent string.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"EnableJavaScript","description":"Enable/Disable JavaScript. Enabled by default","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"FollowLinks","description":"Determines whether to follow links when they are tapped in the WebViewer. If you follow links, you can use GoBack and GoForward to navigate the browser history. ","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"Height","description":"","type":"number","rw":"read-write","deprecated":"false"},{"name":"HeightPercent","description":"","type":"number","rw":"write-only","deprecated":"false"},{"name":"HomeUrl","description":"URL of the page the WebViewer should initially open to. Setting this will load the page.","type":"text","rw":"read-write","deprecated":"false"},{"name":"IgnoreSslErrors","description":"Determine whether or not to ignore SSL errors. Set to true to ignore errors. Use this to accept self signed certificates from websites.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"LoadImages","description":"Whether or not to automatically load images","type":"boolean","rw":"read-only","deprecated":"false"},{"name":"PromptforPermission","description":"If True, then prompt the user of the WebView to give permission to access the geolocation API. If False, then assume permission is granted.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"Row","description":"","type":"number","rw":"invisible","deprecated":"false"},{"name":"Scrollbar","description":"Whether to display a scrollbar","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"UseExternalBrowser","description":"Open a link in the webviewer page using the external browser. If true the page will be loaded in the external browser and not in the webviewer itself.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"UserAgent","description":"Get User Agent","type":"text","rw":"read-write","deprecated":"false"},{"name":"UsesLocation","description":"Whether or not to give the application permission to use the Javascript geolocation API. This property is available only in the designer.","type":"boolean","rw":"invisible","deprecated":"false"},{"name":"Visible","description":"Specifies whether the component should be visible on the screen. Value is true if the component is showing and false if hidden.","type":"boolean","rw":"read-write","deprecated":"false"},{"name":"WebViewString","description":"Gets the WebView's String, which is viewable through Javascript in the WebView as the window.AppInventor object","type":"text","rw":"read-write","deprecated":"false"},{"name":"Width","description":"","type":"number","rw":"read-write","deprecated":"false"},{"name":"WidthPercent","description":"","type":"number","rw":"write-only","deprecated":"false"},{"name":"ZoomDisplay","description":"Show or Hide the zoom display.","type":"boolean","rw":"read-only","deprecated":"false"},{"name":"ZoomEnabled","description":"Enable or Disable pinch zooming. This effects both pinch zooming and the zoom controls.","type":"boolean","rw":"read-only","deprecated":"false"},{"name":"ZoomPercent","description":"The zoom of the page in percent %","type":"number","rw":"read-only","deprecated":"false"}],"events":[{"name":"AfterJSEvaluated","description":"Get the result of the evaluated JS","deprecated":"false","params":[{"name":"result","type":"text"}]},{"name":"CookiesRemoved","description":"This event return true when the cookies have been successfully removed. If the cookies was successfully cleared then the next run returns false as status, if in this time no new cookies was set.","deprecated":"false","params":[{"name":"success","type":"boolean"}]},{"name":"OnConsoleMessage","description":"Get webpage console output","deprecated":"false","params":[{"name":"message","type":"text"},{"name":"lineNumber","type":"number"},{"name":"sourceId","type":"text"}]},{"name":"OnDownloadStart","description":"Event for listening download links.","deprecated":"false","params":[{"name":"url","type":"text"},{"name":"contentDisposition","type":"text"},{"name":"mimetype","type":"text"},{"name":"contentLength","type":"number"}]},{"name":"PageLoaded","description":"Triggers when page finished loading","deprecated":"false","params":[]},{"name":"ProgressChanged","description":"Event to detect that the loading progress has changed.","deprecated":"false","params":[{"name":"progress","type":"number"}]},{"name":"WebViewStringChange","description":"When the JavaScript calls AppInventor.setWebViewString this event is run.","deprecated":"false","params":[]}],"methods":[{"name":"CanGoBack","description":"Returns true if the WebViewer can go back in the history list.","deprecated":"false","params":[],"returnType":"boolean"},{"name":"CanGoBackOrForward","description":"Returns true if the WebViewer can go back or forward the number of steps in the history list.","deprecated":"false","params":[{"name":"steps","type":"number"}],"returnType":"boolean"},{"name":"CanGoForward","description":"Returns true if the WebViewer can go forward in the history list.","deprecated":"false","params":[],"returnType":"boolean"},{"name":"ClearCaches","description":"Clear WebView caches.","deprecated":"false","params":[]},{"name":"ClearCookies","description":"Start to clear the WebView cookies.","deprecated":"false","params":[]},{"name":"ClearLocations","description":"Clear stored location permissions.","deprecated":"false","params":[]},{"name":"EvaluateJS","description":"Evaluate JS in the context of the current page","deprecated":"false","params":[{"name":"script","type":"text"}]},{"name":"GoBack","description":"Go back to the previous page in the history list. Does nothing if there is no previous page.","deprecated":"false","params":[]},{"name":"GoBackOrForward","description":"Go forward or backward a number of steps away from the current page. Steps is negative if backward and positive if forward.","deprecated":"false","params":[{"name":"steps","type":"number"}]},{"name":"GoForward","description":"Go forward to the next page in the history list. Does nothing if there is no next page.","deprecated":"false","params":[]},{"name":"GoHome","description":"Loads the home URL page. This happens automatically when the home URL is changed.","deprecated":"false","params":[]},{"name":"GoToUrl","description":"Load the page at the given URL.","deprecated":"false","params":[{"name":"url","type":"text"}]},{"name":"LoadHtml","description":"Load HTML content using Base64-encoded data URI scheme","deprecated":"false","params":[{"name":"html","type":"text"}]},{"name":"Reload","description":"Reloads the current page","deprecated":"false","params":[]},{"name":"StopLoading","description":"Stops the current load.","deprecated":"false","params":[]}]},{"type":"com.google.appinventor.components.runtime.WiFiAdmin","name":"WiFiAdmin","external":"false","version":"2","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"CONNECTIVITY","helpString":"Control the WiFi of the Device","helpUrl":"https://docs.kodular.io/components/connectivity/wifi/","showOnPalette":"true","nonVisible":"true","iconName":"images/wifi.png","androidMinSdk":19,"properties":[],"blockProperties":[],"events":[],"methods":[{"name":"BSSID","description":"Return the basic service set identifier (BSSID) of the current access point","deprecated":"false","params":[],"returnType":"text"},{"name":"Disable","description":"Disable the Wi-Fi","deprecated":"false","params":[]},{"name":"Enable","description":"Enable the Wi-Fi","deprecated":"false","params":[]},{"name":"Is5GHzSupported","description":"Return whether this adapter supports 5 GHz band","deprecated":"false","params":[],"returnType":"boolean"},{"name":"IsEnabled","description":"Return whether Wi-Fi is enabled or disabled","deprecated":"false","params":[],"returnType":"boolean"},{"name":"IsWiFiDirectSupported","description":"Return whether this adapter supports Wi-Fi Direct","deprecated":"false","params":[],"returnType":"boolean"},{"name":"LinkSpeed","description":"Returns the current link speed in Mbps","deprecated":"false","params":[],"returnType":"number"},{"name":"LocalIP","description":"Return the current Local IP","deprecated":"false","params":[],"returnType":"text"},{"name":"MacAddress","description":"Returns the wlan mac address.","deprecated":"false","params":[],"returnType":"text"},{"name":"SSID","description":"Returns the service set identifier (SSID) of the current 802.11 network","deprecated":"false","params":[],"returnType":"text"},{"name":"SignalStrength","description":"Returns the received signal strength indicator of the current 802.11 network, in dBm","deprecated":"false","params":[],"returnType":"number"},{"name":"Toggle","description":"Toggle the Wi-Fi","deprecated":"false","params":[]}]},{"type":"com.google.appinventor.components.runtime.YandexTranslate","name":"YandexTranslate","external":"false","version":"2","dateBuilt":"2019-09-21T21:15:23+0530","categoryString":"MEDIA","helpString":"Use this component to translate words and sentences between different languages. This component needs Internet access, as it will request translations to the Yandex.Translate service. Specify the source and target language in the form source-target using two letter language codes. So\"en-es\" will translate from English to Spanish while \"es-ru\" will translate from Spanish to Russian. If you leave out the source language, the service will attempt to detect the source language. So providing just \"es\" will attempt to detect the source language and translate it to Spanish. This component is powered by the Yandex translation service. See http://api.yandex.com/translate/ for more information, including the list of available languages and the meanings of the language codes and status codes. Note: Translation happens asynchronously in the background. When the translation is complete, the \"GotTranslation\" event is triggered.","helpUrl":"","showOnPalette":"true","nonVisible":"true","iconName":"images/yandex.png","androidMinSdk":19,"properties":[{"name":"ApiKey","editorType":"string","defaultValue":"","propertyType":"common","editorArgs":[]}],"blockProperties":[{"name":"ApiKey","description":"","type":"text","rw":"write-only","deprecated":"false"}],"events":[{"name":"GotTranslation","description":"Event triggered when the Yandex.Translate service returns the translated text. This event also provides a response code for error handling. If the responseCode is not 200, then something went wrong with the call, and the translation will not be available.","deprecated":"false","params":[{"name":"responseCode","type":"text"},{"name":"translation","type":"text"}]}],"methods":[{"name":"RequestTranslation","description":"By providing a target language to translate to (for instance, 'es' for Spanish, 'en' for English, or 'ru' for Russian), and a word or sentence to translate, this method will request a translation to the Yandex.Translate service.\nOnce the text is translated by the external service, the event GotTranslation will be executed.\nNote: Yandex.Translate will attempt to detect the source language. You can also specify prepending it to the language translation. I.e., es-ru will specify Spanish to Russian translation.","deprecated":"false","params":[{"name":"languageToTranslateTo","type":"text"},{"name":"textToTranslate","type":"text"}]}]}] diff --git a/build/unchive/summary_writer.js b/build/unchive/summary_writer.js deleted file mode 100644 index c78d1a9..0000000 --- a/build/unchive/summary_writer.js +++ /dev/null @@ -1 +0,0 @@ -import{SummaryNode,AssetNode,HeaderNode,ScreenNode,ChainedNode}from"../views/nodes/node.js";import{View}from"../views/view.js";import{Label,Dialog,AssetFormatter,Downloader}from"../views/widgets.js";export class SummaryWriter{static async generateSummmaryNodesForProject(e,t){this.header=new HeaderNode("Download summary","save_alt"),this.header.addStyleName("unchive-summary-node__header"),t.addNode(this.header),this.header.addClickListener(t=>{SummaryHTMLWriter.writeProjectSummary(e)}),t.addNodeAsync(SummaryNode.promiseNode("Stats",this.generateStats(e))),t.addNodeAsync(SummaryNode.promiseNode("Most used components",this.generateMostUsed(e))),t.addNodeAsync(SummaryNode.promiseNode("% of blocks by screen",this.generateCodeShare(e).getHTML())),t.addNodeAsync(SummaryNode.promiseNode("Assets by type",this.generateAssetTypeShare(e).getHTML())),t.addNodeAsync(SummaryNode.promiseNode("% of built-in components",this.generateNativeShare(e).getHTML())),t.addNodeAsync(SummaryNode.promiseNode("Block usage by type",this.getBlockTypeShare(e).getHTML()))}static generateStats(e){let t=new View("DIV");t.addView(new SummaryItem("Number of screens",e.screens.length)),t.addView(new SummaryItem("Number of extensions",e.extensions.length));let s=0;for(let t of e.screens)s+=Array.from((new DOMParser).parseFromString(t.blocks,"text/xml").getElementsByTagName("block")).length;t.addView(new SummaryItem("Total number of blocks",s));let r=0;for(var a of e.assets)r+=a.size;return t.addView(new SummaryItem("Number of assets",e.assets.length)),t.addView(new SummaryItem("Total size of assets",AssetFormatter.formatSize(r))),t.domElement.innerHTML}static generateMostUsed(e){let t=new View("DIV"),s=[];function r(e){var t=s.find(t=>t[0]==e.type);t?t[1]++:s.push([e.type,1]);for(let t of e.children)r(t)}for(let t of e.screens)r(t.form);s=s.sort((e,t)=>t[1]-e[1]);for(var a=0;a<8;a++)t.addView(new SummaryItem(Messages[s[a][0][0].toLowerCase()+s[a][0].slice(1)+"ComponentPallette"]||s[a][0],s[a][1]));return t.domElement.innerHTML}static generateCodeShare(e){let t=[["Screen","Percentage"]];for(let s of e.screens)t.push([s.name,Array.from((new DOMParser).parseFromString(s.blocks,"text/xml").getElementsByTagName("block")).length]);return new SummaryChart(t)}static generateAssetTypeShare(e){let t=[["Asset type","Percentage"]];for(let r of e.assets){var s=t.find(e=>e[0]==r.type.toLowerCase());s?s[1]++:t.push([r.type.toLowerCase(),1])}return new SummaryChart(t)}static generateNativeShare(e){let t=["Built-in",0],s=["Extensions",0];function r(e,t,s){for(var a of("EXTENSION"==e.origin?t[1]++:s[1]++,e.children))r(a,t,s)}for(let a of e.screens)r(a.form,s,t);return new SummaryChart([["Type","Percentage"],t,s])}static getBlockTypeShare(e){let t=0,s=0,r=0,a=0,o=0;for(let n of e.screens){var i=(new DOMParser).parseFromString(n.blocks,"text/xml");t+=Array.from(i.querySelectorAll('block[type="component_event"]')).length,s+=Array.from(i.querySelectorAll('block[type="component_method"]')).length,r+=Array.from(i.querySelectorAll('block[type="component_set_get"]')).length,a+=Array.from(i.querySelectorAll('block[type="procedures_defnoreturn"], block[type="procedures_defreturn"]')).length,o+=Array.from(i.querySelectorAll('block[type="global_declaration"]')).length}return new SummaryChart([["Type","Percentage"],["Events",t],["Methods",s],["Properties",r],["Variables",o],["Procedures",a]],[Blockly.COLOUR_EVENT,Blockly.COLOUR_METHOD,Blockly.COLOUR_SET,"rgb(244, 81, 30)","#AAA"])}}class SummaryItem extends Label{constructor(e,t){super(`${e} ${t}`,!0),this.addStyleName("summary-item")}}class SummaryChart extends View{constructor(e,t){super("DIV"),e=google.visualization.arrayToDataTable(e),this.options={legend:{position:"right",textStyle:{color:"black"}},pieSliceTextStyle:{color:"#000",background:"#FFF"},pieHole:.5,width:260,chartArea:{left:0,top:20,width:"100%",height:"100%"},enableInteractivity:!1},t&&(this.options.colors=t),this.chart=new google.visualization.PieChart(this.domElement),this.chart.draw(e,this.options)}getHTML(){return this.domElement.outerHTML}getChartHTML(){var e=this.domElement.getElementsByTagName("svg")[0];return e.setAttribute("xmlns","http://www.w3.org/2000/svg"),e.outerHTML}}class SummaryHTMLWriter{static writeProjectSummary(e){var t=new Dialog("Generating summary...","This may take a while");setTimeout(()=>{t.open()},1),setTimeout(()=>{var s=[],r=[];s.push(""),s.push(`Project Summary for ${e.name} `),s.push(""),s.push(''),s.push(`"),this.writeTOContents(s,e),this.writeStats(s,e),this.writeInsights(s,r,e),this.writeScreens(s,r,e).then(()=>{e.extensions.length&&this.writeExtensions(s,e),this.writeStyles(s,r),s.push(""),r.push([new Blob([s.join("")],{type:"image/svg+xml"}),`${e.name}.html`]),this.zipAllBlobs(r),t.close()})},20)}static getDateTime(){var e=new Date;return e.getDate()+"/"+(e.getMonth()+1)+"/"+e.getFullYear()+" @ "+e.getHours()+":"+e.getMinutes()}static writeTOContents(e,t){e.push("${e.name} - Project Summary
`),s.push(''),s.push(`Summary generated on ${this.getDateTime()}`),s.push("
Table of Contents
"),e.push(""),e.push('
")}static writeStats(e,t){e.push(''),e.push("- Project stats
'),e.push('- Insights
'),e.push("- Screens
");for(let s of t.screens)e.push(`
"),t.extensions.length&&e.push('- ${s.name}
`);e.push("- Extensions summary
'),e.push("Project stats
"),e.push(SummaryWriter.generateStats(t).replace(//g,"/li>")),e.push("
Most used components
"),e.push(SummaryWriter.generateMostUsed(t).replace(//g,"/li>"))}static writeInsights(e,t,s){e.push(''),e.push("
Insights
"),t.push([new Blob([SummaryWriter.generateCodeShare(s).getChartHTML()],{type:"image/svg+xml"}),"code_share.svg"]),t.push([new Blob([SummaryWriter.generateAssetTypeShare(s).getChartHTML()],{type:"image/svg+xml"}),"asset_type_share.svg"]),t.push([new Blob([SummaryWriter.generateNativeShare(s).getChartHTML()],{type:"image/svg+xml"}),"native_share.svg"]),t.push([new Blob([SummaryWriter.getBlockTypeShare(s).getChartHTML()],{type:"image/svg+xml"}),"block_type_share.svg"]),e.push(''),e.push('"),e.push('"),e.push(''),e.push("
Percentage of blocks by screen
"),e.push("'),e.push("
Types of assets by frequency
'),e.push('")}static async writeScreens(e,t,s){var r=0;for(let l of RootPanel.primaryNodeList.nodes)if(l instanceof ScreenNode){e.push(``),e.push(`"),e.push(''),e.push("
Percentage of built-in components vs extensions used
"),e.push("'),e.push("
Percentage of blocks by type
${l.caption}
`),e.push("Components
"),e.push(""),this.writeComponent(e,s.screens.find(e=>e.name==l.caption).form),e.push("
"),e.push("Blocks
"),l.open(),l.chainNodeList.nodes[1].open();var a=0;for(let s of l.chainNodeList.nodes[1].chainNodeList.nodes){s.initializeWorkspace(),e.push(``);var o=s.domElement.children[1].children[0].innerHTML.replace(/ /g," "),i=[];i.push(``),i.push(""),o=o.substring(0,o.indexOf(""))+i.join("")+"";var n=new Blob([o],{type:"image/svg+xml"});t.push([await this.svgToPngBlob(n),`block_${r}_${a}.png`]),e.push(''),a++}r++}RootPanel.primaryNodeList.nodes.slice(-1)[0].open()}static svgToPngBlob(e){return new Promise((t,s)=>{var r=URL.createObjectURL(e);const a=document.createElement("img");a.style.position="absolute",a.style.top="-9999px",document.body.appendChild(a),a.onload=function(){const e=document.createElement("canvas");e.width=a.clientWidth,e.height=a.clientHeight,e.getContext("2d").drawImage(a,0,0),e.toBlob(function(e){t(e),document.body.removeChild(a)},"image/png")},a.src=r})}static writeComponent(e,t){e.push(`
${t.name} (${t.type}) `);for(let s of t.children)e.push(""),this.writeComponent(e,s),e.push("
")}static writeExtensions(e,t){e.push(''),e.push("Extensions summary
");for(let s of t.extensions)e.push(`${s.name} `)}static writeStyles(e,t){e.push(''),e.push(' + + +
- ${s.descriptorJSON.helpString}