From 6bf382ed9317037e883fe06098b79d6ac2f7f6de Mon Sep 17 00:00:00 2001 From: bblietz Date: Wed, 19 Aug 2026 14:48:48 -0700 Subject: [PATCH 1/3] docs: fix typos, doubled words, and grammar defects (Tier 3) - Correct misspellings (photography, quarterly, install, mechanism, contractually, subscription, cancellation, availability, occurring, responsible, encountered, parameters, required) - Remove doubled words (is is, the the, node node, be be, that that, will will, to to, and and, of of, or or, this this) - Fix wrong/missing words (affect vs effect, requires, an Associative array, authority to submit, fewer than, Not all devices, live linear, identifies, occur, valid WAV file, Specifies how) --- docs/DEVELOPER/certification-overview/cert-tests/index.md | 4 ++-- docs/DEVELOPER/core-concepts/downloading-server-content.md | 2 +- docs/DEVELOPER/core-concepts/handling-application-events.md | 2 +- docs/DEVELOPER/dev-tools/ide-support.md | 2 +- docs/DEVELOPER/dev-tools/rale-tutorial.md | 2 +- .../dev-tools/static-analysis-tool/command-line-utility.md | 2 +- docs/DEVELOPER/discovery/continue-watching-cloud.md | 2 +- docs/DEVELOPER/discovery/implementing-deep-linking.md | 4 ++-- docs/DEVELOPER/discovery/search/implementing-search.md | 2 +- docs/DEVELOPER/media-playback/trick-mode/hls-and-dash.md | 2 +- docs/DEVELOPER/publishing/channel-publishing-guide.md | 4 ++-- docs/DEVELOPER/publishing/packaging-channels.md | 2 +- docs/DEVELOPER/release-notes/index.md | 4 ++-- .../DEVELOPER/roku-pay/implementation/push-notifications.md | 4 ++-- docs/DEVELOPER/roku-pay/quickstart/add-ons-integration.md | 2 +- docs/DEVELOPER/roku-pay/quickstart/product-catalog.md | 2 +- docs/FEATURES/analytics/channel-engagement.md | 4 ++-- docs/FEATURES/analytics/channel-health.md | 4 ++-- docs/FEATURES/analytics/index.md | 2 +- docs/FEATURES/analytics/transaction-report.md | 2 +- docs/FEATURES/analytics/viewership-summary.md | 2 +- docs/REFERENCES/brightscript/interfaces/ifdeviceinfo.md | 2 +- docs/REFERENCES/brightscript/interfaces/ifhttpagent.md | 2 +- docs/REFERENCES/brightscript/interfaces/ifsocketasync.md | 2 +- docs/REFERENCES/brightscript/language/error-handling.md | 2 +- .../brightscript/language/global-string-functions.md | 2 +- .../brightscript/language/global-utility-functions.md | 4 ++-- docs/REFERENCES/brightscript/language/program-statements.md | 2 +- docs/REFERENCES/scenegraph/abstract-nodes/arraygrid.md | 4 ++-- .../dynamic-voice-keyboard-nodes/key-definition-file.md | 2 +- docs/REFERENCES/scenegraph/list-and-grid-nodes/targetset.md | 2 +- .../scenegraph/media-playback-nodes/soundeffect.md | 4 ++-- docs/REFERENCES/scenegraph/media-playback-nodes/video.md | 4 ++-- docs/SPECIFICATIONS/media/index.md | 4 ++-- docs/SPECIFICATIONS/search-feed.md | 6 +++--- docs/THE ROKU CHANNEL/live-linear/ovp-linear-ingest-spec.md | 2 +- .../roku-originals/alternative-prod-guidelines.md | 2 +- .../roku-originals/post-alternative-specs.md | 2 +- .../roku-originals/scripted-prod-guidelines.md | 2 +- 39 files changed, 53 insertions(+), 53 deletions(-) diff --git a/docs/DEVELOPER/certification-overview/cert-tests/index.md b/docs/DEVELOPER/certification-overview/cert-tests/index.md index 9734c37a..c850e031 100644 --- a/docs/DEVELOPER/certification-overview/cert-tests/index.md +++ b/docs/DEVELOPER/certification-overview/cert-tests/index.md @@ -76,7 +76,7 @@ The number of ads in the ad break are displayed during the ad break using the st **Tests**: App is meeting the criteria specified in 1.3. -**Expected Result**: App is meeting the contactually-specified terms for ad requests and performance. You can review your contract with [publisheradservices@roku.com](mailto:publisheradservices@roku.com?Subject=New%20application%20Request%20for%20Admittance%20to%20Roku%20Ad%20Revenue%20Share) to ensure the app is meeting the specified terms. +**Expected Result**: App is meeting the contractually-specified terms for ad requests and performance. You can review your contract with [publisheradservices@roku.com](mailto:publisheradservices@roku.com?Subject=New%20application%20Request%20for%20Admittance%20to%20Roku%20Ad%20Revenue%20Share) to ensure the app is meeting the specified terms. **ADS 1.3** Apps selling ads must comply with Roku's ad load, ad frequency, and acceptable ad requirements. See [Roku Advertising Guidelines](http://www.roku.com/adguidelines) for more information. @@ -161,7 +161,7 @@ Apps outside the U.S. Roku Streaming Store that have streamed more than an avera **Tests**: Verify ads in the app cannot be skipped by any mechanism, such as pressing the FF/REW buttons or sending a FF/REW voice command. -**Expected Result**: Ads may not be skipped by pressing the FF/REW buttons, sending a FF/REW voice command, or any other mechansim. +**Expected Result**: Ads may not be skipped by pressing the FF/REW buttons, sending a FF/REW voice command, or any other mechanism. ## **2. Accounts and purchases** diff --git a/docs/DEVELOPER/core-concepts/downloading-server-content.md b/docs/DEVELOPER/core-concepts/downloading-server-content.md index fce67260..7ce68805 100644 --- a/docs/DEVELOPER/core-concepts/downloading-server-content.md +++ b/docs/DEVELOPER/core-concepts/downloading-server-content.md @@ -22,7 +22,7 @@ configuration of the node. For many nodes that require more complex data, a `content` field is provided. This special field is designed to be assigned the value of a -Content node node that you configure to contain the data required for +Content node that you configure to contain the data required for the node. ## Configuring a content node for static content diff --git a/docs/DEVELOPER/core-concepts/handling-application-events.md b/docs/DEVELOPER/core-concepts/handling-application-events.md index bd6c97c7..131be912 100644 --- a/docs/DEVELOPER/core-concepts/handling-application-events.md +++ b/docs/DEVELOPER/core-concepts/handling-application-events.md @@ -101,7 +101,7 @@ c1(): v2 init(): v2 ``` -The `rsg_version` entry in your the manifest file defaults to 1.2. To check and test different SceneGraph versions without refactoring your app, see the guide on [Debugging](doc:debugging) +The `rsg_version` entry in the manifest file defaults to 1.2. To check and test different SceneGraph versions without refactoring your app, see the guide on [Debugging](doc:debugging) > Support for the [“rsg_version=1.0"](doc:channel-manifest) manifest flag is deprecated as of [Roku OS 8](doc:release-notes#roku-os-8). This deprecation means that the 1.0 features continue to work in [Roku OS 8](doc:release-notes#roku-os-8), but will no longer be supported (and thus should not be expected to work) starting with the next major firmware release. All apps must adopt the [current observer callback](doc:handling-application-events) model in successive firmware updates. diff --git a/docs/DEVELOPER/dev-tools/ide-support.md b/docs/DEVELOPER/dev-tools/ide-support.md index 72d45dc7..103f9a80 100644 --- a/docs/DEVELOPER/dev-tools/ide-support.md +++ b/docs/DEVELOPER/dev-tools/ide-support.md @@ -21,7 +21,7 @@ next: ## Key features -Building apps require several items to work together in unison: +Building apps requires several items to work together in unison: * A Roku device * Your app code diff --git a/docs/DEVELOPER/dev-tools/rale-tutorial.md b/docs/DEVELOPER/dev-tools/rale-tutorial.md index 91217c72..ad8d26a8 100644 --- a/docs/DEVELOPER/dev-tools/rale-tutorial.md +++ b/docs/DEVELOPER/dev-tools/rale-tutorial.md @@ -59,7 +59,7 @@ Dragging and resizing the node in the GUI will correspond with your Roku app on ## Release notes -**2.1.7**: RALE version 2.1.7 includes the following new features that that help developers work with designers to implement app layouts: +**2.1.7**: RALE version 2.1.7 includes the following new features that help developers work with designers to implement app layouts: - **Overlays**: Upload a wireframe and then place components on top of a transparent overlay to quickly and accurately match the layout design. - **Guides**: Drag vertical and horizontal guides onto your app to organize components into columns and rows and ensure text, images, and other nodes are aligned on the page per the wireframe. diff --git a/docs/DEVELOPER/dev-tools/static-analysis-tool/command-line-utility.md b/docs/DEVELOPER/dev-tools/static-analysis-tool/command-line-utility.md index 1c75b81e..02f7c48d 100644 --- a/docs/DEVELOPER/dev-tools/static-analysis-tool/command-line-utility.md +++ b/docs/DEVELOPER/dev-tools/static-analysis-tool/command-line-utility.md @@ -24,7 +24,7 @@ This utility supports Windows, Mac and Linux and requires Java to be installed i ## Structure of the utility -The static analysis utility is distributed as a ZIP file. The contents of the ZIP as as follows: +The static analysis utility is distributed as a ZIP file. The contents of the ZIP are as follows: ```brightscript . diff --git a/docs/DEVELOPER/discovery/continue-watching-cloud.md b/docs/DEVELOPER/discovery/continue-watching-cloud.md index f4b64b8f..b01ed539 100644 --- a/docs/DEVELOPER/discovery/continue-watching-cloud.md +++ b/docs/DEVELOPER/discovery/continue-watching-cloud.md @@ -321,7 +321,7 @@ As of Apr 1, 2026, the Continue Watching integration supports 24/7 live linear s * **Events**: A live linear stream requires a single playback event that is sent via a POST request after 60 seconds of playback. Do not make any other API calls to send events. * **ContentId**: The contentId is the ID of the live linear stream itself, not the currently playing program. -* **Deep links**: When your app receives a deep link from Continue Watching, the contentId is is the ID of the live linear stream (not the currently running program), and the mediaType is “liveFeed”. The required playback behavior is to resume with the currently running program in the stream. +* **Deep links**: When your app receives a deep link from Continue Watching, the contentId is the ID of the live linear stream (not the currently running program), and the mediaType is “liveFeed”. The required playback behavior is to resume with the currently running program in the stream. ## Managing user consent diff --git a/docs/DEVELOPER/discovery/implementing-deep-linking.md b/docs/DEVELOPER/discovery/implementing-deep-linking.md index 3ec36c5e..e96449c9 100644 --- a/docs/DEVELOPER/discovery/implementing-deep-linking.md +++ b/docs/DEVELOPER/discovery/implementing-deep-linking.md @@ -336,7 +336,7 @@ sub Main(args) '... if (args.mediaType <> invalid) and (args.contentId <> invalid) '... - 'print deep linking paramaters in args + 'print deep linking parameters in args print "args= "; formatjson(args) 'pretty print AA' 'output ' args= {action: "display", contentid: "myAwesomeShow|Season=1|Episode=1", instant_on_run_mode: "foreground", isexternal: true, lastExitOrTerminationReason: "EXIT_UNKNOWN", mediatype: "series", source: "hs-search", splashTime: "0"} @@ -401,7 +401,7 @@ The one-time TV program identified by the contentId is launched directly into pl You can learn how to implement deep linking in your app by watching the [Deep linking](doc:deep-linking) video lesson in Roku's [SceneGraph: Build a App online video course](doc:rsg). -This lesson details how to program your app to accept and process deep links upon being launched and while it is already running. It lists the different playback experiences requried for the various types of content in the app's feed. +This lesson details how to program your app to accept and process deep links upon being launched and while it is already running. It lists the different playback experiences required for the various types of content in the app's feed. ## Sample app diff --git a/docs/DEVELOPER/discovery/search/implementing-search.md b/docs/DEVELOPER/discovery/search/implementing-search.md index 4e760bba..39e228d8 100644 --- a/docs/DEVELOPER/discovery/search/implementing-search.md +++ b/docs/DEVELOPER/discovery/search/implementing-search.md @@ -243,7 +243,7 @@ Before submitting your search feed for review, you need to test your app's [deep > * The auto-created Search beta apps do count towards the limit of 10 beta apps per developer account. > * A developer account may have a maximum of four auto-created beta apps. > * The auto-created beta apps cannot be deleted (they are automatically removed 120 days after being created). - > * If a user on your team cannot access to the auto-created beta app, manually grant them access via the [User Management page in the Developer Dashboard](https://developer.roku.com/user/access). + > * If a user on your team cannot access the auto-created beta app, manually grant them access via the [User Management page in the Developer Dashboard](https://developer.roku.com/user/access). > > **Keeping the Search beta app synced with the production app** > diff --git a/docs/DEVELOPER/media-playback/trick-mode/hls-and-dash.md b/docs/DEVELOPER/media-playback/trick-mode/hls-and-dash.md index 1de784bf..7c78761b 100644 --- a/docs/DEVELOPER/media-playback/trick-mode/hls-and-dash.md +++ b/docs/DEVELOPER/media-playback/trick-mode/hls-and-dash.md @@ -135,7 +135,7 @@ Attributes: The Time Remaining for an Image Resource is the EXTINF duration minus the Total Elapsed Time of the Image Archive. Tiles are selected from the Grid in a specific Sequence starting top-left, moving left-to-right and top-to-bottom, following the Grid Layout. Each Tile from the Sequence is displayed for DURATION seconds or Time Remaining seconds, whichever is less. If Time Remaining is greater than zero when the Sequence completes, the last Image is displayed until Time Remaining is zero. -> Experimental results suggest that durations of around 10 seconds offer good performance vs. viewer convenience. As a general rule, the duration of each thumbnail should be be as long as the I-Frame, which it represents. +> Experimental results suggest that durations of around 10 seconds offer good performance vs. viewer convenience. As a general rule, the duration of each thumbnail should be as long as the I-Frame, which it represents. ## Standard-thumbnail file creation diff --git a/docs/DEVELOPER/publishing/channel-publishing-guide.md b/docs/DEVELOPER/publishing/channel-publishing-guide.md index 2f590803..d2549a01 100644 --- a/docs/DEVELOPER/publishing/channel-publishing-guide.md +++ b/docs/DEVELOPER/publishing/channel-publishing-guide.md @@ -622,7 +622,7 @@ Once your public app has passed [Static Analysis](doc:static-analysis-tool) an a. Select the **I confirm that** check box to confirm that you have tested your app per Roku App Publishing Checklist and your app complies with the listed agreements. - b. Select the **I certify that** check box to confirm that you have the authority the submit the app, the provided listing information is accurate, and that you have the rights to distribute your app in the selected countries. + b. Select the **I certify that** check box to confirm that you have the authority to submit the app, the provided listing information is accurate, and that you have the rights to distribute your app in the selected countries. c. Click **Submit**. @@ -642,7 +642,7 @@ The following section summarizes when updates to the Streaming Store, Roku Searc After an app is published, it may be tagged with one or more categories. This includes the category selected and any other Roku-applied tags such as "New & Updated" or "Recommended" -An app is typically visible in the selected category after 5 minutes—if the category has less 1,000 apps. Otherwise, the app is not added to the category until it has been streamed by enough customers to move it up the popularity rankings in that category. +An app is typically visible in the selected category after 5 minutes—if the category has fewer than 1,000 apps. Otherwise, the app is not added to the category until it has been streamed by enough customers to move it up the popularity rankings in that category. If the category is changed and the app is re-published, it takes approximately 5 minutes for the app to be switched to the new category. However, the app is only visible in that category if the aforementioned criteria is met. diff --git a/docs/DEVELOPER/publishing/packaging-channels.md b/docs/DEVELOPER/publishing/packaging-channels.md index fae233fb..53bea732 100644 --- a/docs/DEVELOPER/publishing/packaging-channels.md +++ b/docs/DEVELOPER/publishing/packaging-channels.md @@ -23,7 +23,7 @@ When you "sideload" your app to a Roku device during development, you have the o **Generating a signing key.** You create a new signing key with the built-in `genkey` firmware utility that runs on the Roku device (accessible only through a Telnet session to a hardware port). In fact, you'll need to do that at least once before the Development Application (the developer Web page generated by the hardware) makes its Packager link clickable. `genkey` also generates a password that you'll need to keep safely recorded. -**When to keep the same signing key.** Let's say you end up submitting the package you created, and successfully publish it. Roku users start installing your app. If you need to make changes to your app, you simply follow the same packaging process again, this time being careful NOT to generate a new signing key, and submit the updated package. When your users intall the updated package but with the same signing key, it allows their Roku device to keep any existing registry data related to your app. +**When to keep the same signing key.** Let's say you end up submitting the package you created, and successfully publish it. Roku users start installing your app. If you need to make changes to your app, you simply follow the same packaging process again, this time being careful NOT to generate a new signing key, and submit the updated package. When your users install the updated package but with the same signing key, it allows their Roku device to keep any existing registry data related to your app. **When to use a new signing key.** If you are developing multiple apps, you would typically generate a new key for every app. If the key for each app is different, each will have its own registry on the user device. You could, instead, choose to use the same key for multiple apps you develop -- in this case, the registry information for all same-keyed apps is shared on the Roku user's device when they install more than one of your apps. diff --git a/docs/DEVELOPER/release-notes/index.md b/docs/DEVELOPER/release-notes/index.md index 09b4041e..9063c2d7 100644 --- a/docs/DEVELOPER/release-notes/index.md +++ b/docs/DEVELOPER/release-notes/index.md @@ -51,7 +51,7 @@ The [**roTimeSpan** node](doc:rotimespan) now includes [**totalMillisecondsLong( ##### New roAnimatedImage component includes functions for rotating and scaling around an arbitrary point -The interface for the new [**roAnimatedImage** component](doc:roanimatedimage) includes a [**SetPretranslation()** function](doc:ifanimatedimage#setpretranslationx-as-int-y-as-int-as-void) that enables you to rotate and scale images around their center. You can also call [**GetPretranslationX()**](doc:ifanimatedimage#getpretranslationx-as-int) and [**GetPretranslationY()**](doc:ifanimatedimage#getpretranslationy-as-int)** **functions to get the the x and y components of the pretranslation value. +The interface for the new [**roAnimatedImage** component](doc:roanimatedimage) includes a [**SetPretranslation()** function](doc:ifanimatedimage#setpretranslationx-as-int-y-as-int-as-void) that enables you to rotate and scale images around their center. You can also call [**GetPretranslationX()**](doc:ifanimatedimage#getpretranslationx-as-int) and [**GetPretranslationY()**](doc:ifanimatedimage#getpretranslationy-as-int)** **functions to get the x and y components of the pretranslation value. ## Roku OS 15.2 @@ -561,7 +561,7 @@ Below is a list of key developer-facing Roku OS 10.5 updates: #### Roku Pay APIs -- [**ChannelStore subscription recovery**](/docs/references/scenegraph/control-nodes/channelstore.md#getpurchases) (also available in Roku OS 10.0) — Developers can now directly use the ChannelStore API to check whether a subscription is in recovery. When a subscritpion is in recovery, Roku Pay notifies the customer once a day for multiple consecutive days (typically three) to update their method of payment in order to renew the subscription, and it attempts to charge the customer's method of payment to ensure collection of payment and continuation of service. The [**ChannelStore.getAllPurchases**](/docs/references/scenegraph/control-nodes/channelstore.md#getallpurchases) and [**getPurchases**](/docs/references/scenegraph/control-nodes/channelstore.md#getpurchases) commands now return a **status** field and an **inDunning** flag to determine whether a subscription is in the dunning state and therefore should be placed on hold. Previously, developers had to pass the **transactionId** returned by the **getAllPurchases** and **getPurchases** commands into a Roku Pay **validate-transaction** API call to determine whether a subscription was in recovery. +- [**ChannelStore subscription recovery**](/docs/references/scenegraph/control-nodes/channelstore.md#getpurchases) (also available in Roku OS 10.0) — Developers can now directly use the ChannelStore API to check whether a subscription is in recovery. When a subscription is in recovery, Roku Pay notifies the customer once a day for multiple consecutive days (typically three) to update their method of payment in order to renew the subscription, and it attempts to charge the customer's method of payment to ensure collection of payment and continuation of service. The [**ChannelStore.getAllPurchases**](/docs/references/scenegraph/control-nodes/channelstore.md#getallpurchases) and [**getPurchases**](/docs/references/scenegraph/control-nodes/channelstore.md#getpurchases) commands now return a **status** field and an **inDunning** flag to determine whether a subscription is in the dunning state and therefore should be placed on hold. Previously, developers had to pass the **transactionId** returned by the **getAllPurchases** and **getPurchases** commands into a Roku Pay **validate-transaction** API call to determine whether a subscription was in recovery. - [**Instant Signup purchase flag for Roku Pay APIs**](/docs/references/scenegraph/control-nodes/channelstore.md#getpurchases) (also available in Roku OS 10.0) — Developers can now identify whether Roku Pay subscription purchases originated from Instant Signup. The ChannelStore node [**getPurchases**](/docs/references/scenegraph/control-nodes/channelstore.md#getpurchases) and [**getAllPurchases**](/docs/references/scenegraph/control-nodes/channelstore.md#getallpurchases)) commands, [**roChannelStore.getPurchases**](/docs/references/brightscript/interfaces/ifchannelstore.md#getpurchases-as-void) function, [Roku Pay **validate-transaction** web service](/docs/developer/roku-pay/implementation/roku-web-service.md#validate-transaction), and [Roku Pay **Sale** push notification](/docs/developer/roku-pay/implementation/push-notifications.md#sale) all include a new **purchaseChannel** field that is set to "web" and a **purchaseContext** field that is set to "isu" to indicate that a purchase was made via Instant Signup (for on-device purchases, these fields would be set to "device" and "iap", respectively). diff --git a/docs/DEVELOPER/roku-pay/implementation/push-notifications.md b/docs/DEVELOPER/roku-pay/implementation/push-notifications.md index e6643202..61b3b3a8 100644 --- a/docs/DEVELOPER/roku-pay/implementation/push-notifications.md +++ b/docs/DEVELOPER/roku-pay/implementation/push-notifications.md @@ -568,7 +568,7 @@ The publisher action required (if any) depends on the **expirationDate** field: - **Today's date**: Remove the entitlement (the customer actively canceled the subscription and today is the last day of the billing cycle). - **Past date**: Remove entitlement (passive cancellation; the subscription could not be recovered). -#### Active cancelation/deactivation example +#### Active cancellation/deactivation example ```json { @@ -588,7 +588,7 @@ The publisher action required (if any) depends on the **expirationDate** field: } ``` -#### Passive cancelation example +#### Passive cancellation example ```json { diff --git a/docs/DEVELOPER/roku-pay/quickstart/add-ons-integration.md b/docs/DEVELOPER/roku-pay/quickstart/add-ons-integration.md index a82a79f5..2a12a075 100644 --- a/docs/DEVELOPER/roku-pay/quickstart/add-ons-integration.md +++ b/docs/DEVELOPER/roku-pay/quickstart/add-ons-integration.md @@ -1351,7 +1351,7 @@ When an add-on is canceled, its entitlement is removed from the Roku customer ac #### On-device subscription management workflow -The following images demonstrate how the on-device add-on management and cancelation workflow can be used to cancel base subscription products and add-ons: +The following images demonstrate how the on-device add-on management and cancellation workflow can be used to cancel base subscription products and add-ons: ![img - roku600px](https://image.roku.com/ZHZscHItMTc2/managesub.jpg) diff --git a/docs/DEVELOPER/roku-pay/quickstart/product-catalog.md b/docs/DEVELOPER/roku-pay/quickstart/product-catalog.md index 62d4adb3..ede64de0 100644 --- a/docs/DEVELOPER/roku-pay/quickstart/product-catalog.md +++ b/docs/DEVELOPER/roku-pay/quickstart/product-catalog.md @@ -176,7 +176,7 @@ To create a purchase option for a product, follow these steps: - Select the billing period to be used for the subscription product: monthly, quarterly, or annual. Using quartely billing requires [additional API work](doc:add-ons-integration#appendix-a-add-on-api-reference). + Select the billing period to be used for the subscription product: monthly, quarterly, or annual. Using quarterly billing requires [additional API work](doc:add-ons-integration#appendix-a-add-on-api-reference). diff --git a/docs/FEATURES/analytics/channel-engagement.md b/docs/FEATURES/analytics/channel-engagement.md index ebea9527..4f0768fd 100644 --- a/docs/FEATURES/analytics/channel-engagement.md +++ b/docs/FEATURES/analytics/channel-engagement.md @@ -31,8 +31,8 @@ The band of metrics below FILTERS shows the summary statistics based on the time - **New Installs** - total count of new unique accounts during the selected Time Period. - **Uninstalls** - total count of accounts uninstalled during the selected Time Period. - - **Cumulative Installs To-Date** - count of unique accounts that that have installed your app to-date; roughly equivalent to the size of your install base. When users uninstall and re-install an app, this is credited as one net new installation and will increase the Cumulative Installs To-Date. - - **Average Daily Viewers** - average number of daily views similar to DAU "daily active users." Changing Time Grain will not effect this measurement. + - **Cumulative Installs To-Date** - count of unique accounts that have installed your app to-date; roughly equivalent to the size of your install base. When users uninstall and re-install an app, this is credited as one net new installation and will increase the Cumulative Installs To-Date. + - **Average Daily Viewers** - average number of daily views similar to DAU "daily active users." Changing Time Grain will not affect this measurement. - **Average Minutes Per Viewer** - total streaming minutes on the app per number of unique accounts that visited the app. - **Total Hours Streamed** - total hours streamed during the selected Time Period. diff --git a/docs/FEATURES/analytics/channel-health.md b/docs/FEATURES/analytics/channel-health.md index e9555081..bcc704ab 100644 --- a/docs/FEATURES/analytics/channel-health.md +++ b/docs/FEATURES/analytics/channel-health.md @@ -14,7 +14,7 @@ next: You can use the App Health Report to examine the number and type of crashes for your app to understand how the app is performing. This report can be especially helpful around the time of a new release for your app when a spike in errors may indicate the need to either rollback or quickly update your app version to prevent the user experience from degrading substantially. Included in this report is a crash log showing BrightScript errors. -This reports helps you identify products experiencing the most BrightScript crashes. Crashes are measured in total counts as well as normalized for the total number of devices and streaming hours. The higher the count and normalized measurement, the more opportunity for improvement. Counts and normalized measurements should always be interpreted together. A relatively high count alone may be more indicative of the size of the install base, while a high normalized measurement could be indicative of a particularly problematic minority of the install base. +This report helps you identify products experiencing the most BrightScript crashes. Crashes are measured in total counts as well as normalized for the total number of devices and streaming hours. The higher the count and normalized measurement, the more opportunity for improvement. Counts and normalized measurements should always be interpreted together. A relatively high count alone may be more indicative of the size of the install base, while a high normalized measurement could be indicative of a particularly problematic minority of the install base. Analyzing patterns in crashes will help you find ways to improve the user experience. For example, video start times and rebuffering have been shown to be highly predictive of time spent streaming and are strong indicators of the overall user experience in the app. If the dashboard reveals that videos are slower to start on certain devices or that rebuffers or crashes occur more frequently, you might focus your troubleshooting on those devices to improve your overall app stability and user experience. @@ -35,7 +35,7 @@ The band of metrics below FILTERS shows the summary statistics based on what you - **Devices with Channel Crashes** - percentage of unique devices that have streamed in your app which have experienced a BrightScript crash in the selected Time Period; the lower, the better - **Channel Crashes per Streaming Hour** - count of BrightScript crashes normalized for total streaming hours; the lower the better - - **Average Video Start Time (seconds)** - average time required video content to start streaming; the lower, the better + - **Average Video Start Time (seconds)** - average time required for video content to start streaming; the lower, the better - **Average Bitrate (Megabits)** - the average number of bits per second streamed in your app; the higher, the better - **Average Rebuffers per Device** - average number of rebuffers per unique device that has streamed in your app; the fewer, the better - **Buffering Time as % of Total Streaming Time** - effectively the ratio of time spent waiting on content to stream vs. total streaming time; the lower the better diff --git a/docs/FEATURES/analytics/index.md b/docs/FEATURES/analytics/index.md index 7531b788..7d3d8129 100644 --- a/docs/FEATURES/analytics/index.md +++ b/docs/FEATURES/analytics/index.md @@ -167,7 +167,7 @@ You can create a schedule to automatically email a report in a recurring daily, 7. Click **Save** to save the schedule. -8. To create another schedule, click **New** to and repeat steps 3-7 . +8. To create another schedule, click **New** and repeat steps 3-7 . ## Using Streaming Store codes diff --git a/docs/FEATURES/analytics/transaction-report.md b/docs/FEATURES/analytics/transaction-report.md index 0299075c..a76a8412 100644 --- a/docs/FEATURES/analytics/transaction-report.md +++ b/docs/FEATURES/analytics/transaction-report.md @@ -22,7 +22,7 @@ To open the Transaction Report, go to the [Developer Dashboard](https://develope To run a Transaction Report, follow these steps: -1. Specify the time period for the Transaction Report. By default, the report includes data from the previous week (8 days ago for 7 days). To select a different time period, expand **Filters** and then configure the period. You can select a specific date, the last _x_ days, a year, a specific time range, all the dates or or after a specific date, and so on. You can also use filter expressions by selecting **matches (advanced)**. +1. Specify the time period for the Transaction Report. By default, the report includes data from the previous week (8 days ago for 7 days). To select a different time period, expand **Filters** and then configure the period. You can select a specific date, the last _x_ days, a year, a specific time range, all the dates on or after a specific date, and so on. You can also use filter expressions by selecting **matches (advanced)**. Optionally, you can include additional criteria in the query by clicking the add icon and configuring another time period. For example, you can create a query that includes transactions for the first quarters of the last two years. Click the delete icon to remove a time period from the query. diff --git a/docs/FEATURES/analytics/viewership-summary.md b/docs/FEATURES/analytics/viewership-summary.md index cbc86505..e99bfb92 100644 --- a/docs/FEATURES/analytics/viewership-summary.md +++ b/docs/FEATURES/analytics/viewership-summary.md @@ -12,7 +12,7 @@ next: --- -You can the Viewership Summary Report to examine the number of visits, streaming hours and rebuffers per hour for your app. +You can use the Viewership Summary Report to examine the number of visits, streaming hours and rebuffers per hour for your app. ![roku815px - analytics-report-viewership](https://image.roku.com/ZHZscHItMTc2/viewership-summary-report.png "analytics-report-viewership") diff --git a/docs/REFERENCES/brightscript/interfaces/ifdeviceinfo.md b/docs/REFERENCES/brightscript/interfaces/ifdeviceinfo.md index cf147270..f7cb47d3 100644 --- a/docs/REFERENCES/brightscript/interfaces/ifdeviceinfo.md +++ b/docs/REFERENCES/brightscript/interfaces/ifdeviceinfo.md @@ -1194,7 +1194,7 @@ hasDDPlus = audioDecoders.doesexist("DD+") Checks if the device can decode and play the specified audio format. -> Use this method to query the codecs every time before starting playback on content (do not cache and use the results from a previous call). In addition, use the [**roDeviceInfo.audioCodecCapabilityChanged()**](doc:rodeviceinfoevent) event to identify any codec changes that may occur when the audio output destination is switched. This will help your app to perform well with the Roku mobile app and and private listening. +> Use this method to query the codecs every time before starting playback on content (do not cache and use the results from a previous call). In addition, use the [**roDeviceInfo.audioCodecCapabilityChanged()**](doc:rodeviceinfoevent) event to identify any codec changes that may occur when the audio output destination is switched. This will help your app to perform well with the Roku mobile app and private listening. #### Parameters diff --git a/docs/REFERENCES/brightscript/interfaces/ifhttpagent.md b/docs/REFERENCES/brightscript/interfaces/ifhttpagent.md index e575714b..aaca1f1a 100644 --- a/docs/REFERENCES/brightscript/interfaces/ifhttpagent.md +++ b/docs/REFERENCES/brightscript/interfaces/ifhttpagent.md @@ -105,7 +105,7 @@ Initializes the Roku device's built-in client certificate for use in mutual TLS #### Return Value -A flag indicating whether the object sent to to the Roku client certificate was successfully initialized. +A flag indicating whether the object sent to the Roku client certificate was successfully initialized. ### SetCertificatesFile(path as String) as Boolean diff --git a/docs/REFERENCES/brightscript/interfaces/ifsocketasync.md b/docs/REFERENCES/brightscript/interfaces/ifsocketasync.md index 3cc7af43..1ce7f32c 100644 --- a/docs/REFERENCES/brightscript/interfaces/ifsocketasync.md +++ b/docs/REFERENCES/brightscript/interfaces/ifsocketasync.md @@ -95,6 +95,6 @@ Enables roSocketEvent events to be sent via the message port when the underlying Returns a unique identifier that can be compared to the value returned by the [roSocketEvent.getSocketID()](doc:rosocketevent) method to match the underlying socket to receive the event. -#### Return Paramters +#### Return Parameters A unique ID. \ No newline at end of file diff --git a/docs/REFERENCES/brightscript/language/error-handling.md b/docs/REFERENCES/brightscript/language/error-handling.md index cba620f6..cf4e5022 100644 --- a/docs/REFERENCES/brightscript/language/error-handling.md +++ b/docs/REFERENCES/brightscript/language/error-handling.md @@ -144,7 +144,7 @@ m &h0010 roAssociativeArray refcnt=3 count:0 Brightscript Debugger> ``` -A `roAssociativeArray` that describes the exception is also an acceptable argument to `THROW`. Any missing fields will will be set with default values as shown in the table below: +A `roAssociativeArray` that describes the exception is also an acceptable argument to `THROW`. Any missing fields will be set with default values as shown in the table below: | Name | Default | | :-------- | :------------------------------------------------ | diff --git a/docs/REFERENCES/brightscript/language/global-string-functions.md b/docs/REFERENCES/brightscript/language/global-string-functions.md index 684b7979..c6f971d9 100644 --- a/docs/REFERENCES/brightscript/language/global-string-functions.md +++ b/docs/REFERENCES/brightscript/language/global-string-functions.md @@ -187,7 +187,7 @@ Returns the integer value from parsing the string with the specified radix. Radix should be 2 .. 36 or the special value 0 (which automatically -identified hexadecimal or octal numbers based on 0x or 0 prefixes +identifies hexadecimal or octal numbers based on 0x or 0 prefixes respectively). Leading whitespace is ignored then as much of the rest of the string diff --git a/docs/REFERENCES/brightscript/language/global-utility-functions.md b/docs/REFERENCES/brightscript/language/global-utility-functions.md index 32721be9..ac8f374f 100644 --- a/docs/REFERENCES/brightscript/language/global-utility-functions.md +++ b/docs/REFERENCES/brightscript/language/global-utility-functions.md @@ -186,7 +186,7 @@ Return the integer value of the string, or 0 if nothing is parsed. ## RunGarbageCollector() as Object -This function runs the garbage collector on the current thread. It returns and Associative array with some statistics regarding the garbage collection. +This function runs the garbage collector on the current thread. It returns an Associative array with some statistics regarding the garbage collection. See the [Garbage collection](doc:component-architecture) section of this manual for more detail. You don't normally need to call this function. @@ -294,7 +294,7 @@ print FormatJSON(euroStr, &h0001) | **Flag** | **Description** | | :------- | :------------------------------------------------------------------------------------------------ | -| &h0000 | Default: If an unsupported value type is encounted, FormatJSON fails and returns an empty string. | +| &h0000 | Default: If an unsupported value type is encountered, FormatJSON fails and returns an empty string. | | &h0100 | Ignore: Unsupported value types are output as JSON null values. | | &h0200 | Annotate: Unsupported value types are output as a descriptive string. | diff --git a/docs/REFERENCES/brightscript/language/program-statements.md b/docs/REFERENCES/brightscript/language/program-statements.md index 41d05670..90e5b552 100644 --- a/docs/REFERENCES/brightscript/language/program-statements.md +++ b/docs/REFERENCES/brightscript/language/program-statements.md @@ -251,7 +251,7 @@ end try The TRY block of statements is executed. If and only if an error occurs, the CATCH block of statements is executed, and the named variable is assigned the information about the triggering exception. If no error occurs during execution of the TRY block, the CATCH block is skipped. -> It is illegal to put a GOTO label within a TRY block (i.e., between TRY and CATCH). A GOTO label may exist exist between CATCH and END TRY, however. +> It is illegal to put a GOTO label within a TRY block (i.e., between TRY and CATCH). A GOTO label may exist between CATCH and END TRY, however. The variable name specified as the *exception object* in the CATCH clause must refer to a *simple variable*. It cannot be an array element, for example. The following are **not** legal as exception object references in the CATCH clause: diff --git a/docs/REFERENCES/scenegraph/abstract-nodes/arraygrid.md b/docs/REFERENCES/scenegraph/abstract-nodes/arraygrid.md index 09f1900d..7b217197 100644 --- a/docs/REFERENCES/scenegraph/abstract-nodes/arraygrid.md +++ b/docs/REFERENCES/scenegraph/abstract-nodes/arraygrid.md @@ -98,14 +98,14 @@ Each node class extended from the ArrayGrid abstract node class will have custom option string floatingFocus READ_WRITE -Specifies the how the focus indicator moves in a row of grid items in response to the remote direction pad Left and Right key presses. This field is not used for lists. The possible values are:
OptionEffect
floatingFocusCauses the focus indicator to float left or right until it reaches the end of the row, at which point the focus indicator will stay fixed on the first or last item in the row, and the items will scroll left or right if there were items that were not visible.
fixedFocusWrapCauses the row to wrap around when the focus indicator reaches the first or last item in the row, as long as the row contains enough items to fill the row. If the row does not contain enough items to fill the row, the focus indicator will float left and right.
+Specifies how the focus indicator moves in a row of grid items in response to the remote direction pad Left and Right key presses. This field is not used for lists. The possible values are:
OptionEffect
floatingFocusCauses the focus indicator to float left or right until it reaches the end of the row, at which point the focus indicator will stay fixed on the first or last item in the row, and the items will scroll left or right if there were items that were not visible.
fixedFocusWrapCauses the row to wrap around when the focus indicator reaches the first or last item in the row, as long as the row contains enough items to fill the row. If the row does not contain enough items to fill the row, the focus indicator will float left and right.
vertFocusAnimationStyle option string floatingFocus READ_WRITE -Specifies the how the focus indicator moves in a list or a column of grid items in response to the remote direction pad Up and Down key presses. The possible values are:
OptionEffect
floatingFocusCauses the focus indicator to float up or down until it reaches the end of the list or grid column, at which point the focus indicator will stay fixed on the first or last item in the list or grid column, and the items will scroll up or down if there are items that were not visible. Note that when this style is set, section dividers are not rendered.
fixedFocusWrapCauses the column to wrap around when the focus indicator reaches the first or last item in the list or grid column, as long as the list or grid column contains enough items to fill the list or grid column. If the list or grid column does not contain enough items to fill the list or grid column, the focus indicator will float up and down.
fixedFocusCauses the focus to stay fixed on the upper leftmost item. As the user scrolls down, the row containing the previously selected item scrolls up off screen. Scrolling continues until the last row is reached.
+Specifies how the focus indicator moves in a list or a column of grid items in response to the remote direction pad Up and Down key presses. The possible values are:
OptionEffect
floatingFocusCauses the focus indicator to float up or down until it reaches the end of the list or grid column, at which point the focus indicator will stay fixed on the first or last item in the list or grid column, and the items will scroll up or down if there are items that were not visible. Note that when this style is set, section dividers are not rendered.
fixedFocusWrapCauses the column to wrap around when the focus indicator reaches the first or last item in the list or grid column, as long as the list or grid column contains enough items to fill the list or grid column. If the list or grid column does not contain enough items to fill the list or grid column, the focus indicator will float up and down.
fixedFocusCauses the focus to stay fixed on the upper leftmost item. As the user scrolls down, the row containing the previously selected item scrolls up off screen. Scrolling continues until the last row is reached.
drawFocusFeedbackOnTop diff --git a/docs/REFERENCES/scenegraph/dynamic-voice-keyboard-nodes/key-definition-file.md b/docs/REFERENCES/scenegraph/dynamic-voice-keyboard-nodes/key-definition-file.md index ecae3da0..d7e13276 100644 --- a/docs/REFERENCES/scenegraph/dynamic-voice-keyboard-nodes/key-definition-file.md +++ b/docs/REFERENCES/scenegraph/dynamic-voice-keyboard-nodes/key-definition-file.md @@ -161,7 +161,7 @@ Key sizes are computed based on the various width and height properties specifie * For keys with equal width in a Row object, if there are _K_ keys in the Row, the height of each key is computed as follows: `keyWidth = (sectionWidth) / K`. -* To configure keys with varying widths within in a Row, specify the **keyWidth** attribute for those keys. Those keys will use the explicitly specified widths, and the widths of the remaining keys will be computed by equally dividing the remaining **sectionWidth** evenly after subtracting the width of the keys with explicitly specified widths. For example, if there are _K_ keys in a row and Key 1 has its **keyWidth** explicitly specified as 100, Key 1 will have width 100 and the other keys in the Row will be calculated as follows: `keyWidth = (sectionWidth - 100) / (K - 1)`. +* To configure keys with varying widths within a Row, specify the **keyWidth** attribute for those keys. Those keys will use the explicitly specified widths, and the widths of the remaining keys will be computed by equally dividing the remaining **sectionWidth** evenly after subtracting the width of the keys with explicitly specified widths. For example, if there are _K_ keys in a row and Key 1 has its **keyWidth** explicitly specified as 100, Key 1 will have width 100 and the other keys in the Row will be calculated as follows: `keyWidth = (sectionWidth - 100) / (K - 1)`. ## Examples diff --git a/docs/REFERENCES/scenegraph/list-and-grid-nodes/targetset.md b/docs/REFERENCES/scenegraph/list-and-grid-nodes/targetset.md index 0a00f0de..215c33d7 100644 --- a/docs/REFERENCES/scenegraph/list-and-grid-nodes/targetset.md +++ b/docs/REFERENCES/scenegraph/list-and-grid-nodes/targetset.md @@ -42,7 +42,7 @@ The TargetSet node class is used to specify a set of target regions where items integer -1 READ_WRITE -Identifies the index of an element of the targetRects array that will be treated as the region occupied by the focus item. The default of of -1 indicates that the TargetGroup's current focus index will not be changed when the TargetGroup is set to use the TargetSet to define its target regions. +Identifies the index of an element of the targetRects array that will be treated as the region occupied by the focus item. The default of -1 indicates that the TargetGroup's current focus index will not be changed when the TargetGroup is set to use the TargetSet to define its target regions. color diff --git a/docs/REFERENCES/scenegraph/media-playback-nodes/soundeffect.md b/docs/REFERENCES/scenegraph/media-playback-nodes/soundeffect.md index 6ff2cea2..652b3751 100644 --- a/docs/REFERENCES/scenegraph/media-playback-nodes/soundeffect.md +++ b/docs/REFERENCES/scenegraph/media-playback-nodes/soundeffect.md @@ -106,9 +106,9 @@ A sample demonstrating how to use the SoundEffect node can be found here: [Simpl notready -The sound file is not on the device. This is set in response to the control field being set to "play".

For local WAV files included in a package file, it will be occur if the path to the file is not correct, or if the file is not a valid WAV file.

For network-accessed WAV files, this indicates one of these three conditions is true: