Privacy Policy
AppRotate - Per-App Screen Rotation
In short: AppRotate has no account or login, and your per-app screen orientation settings and rules are stored on your device. The app shows ads through Google AdMob (no ads are shown while Remove Ads is active; see section 4 for when it becomes active) and sends usage events and crash reports to Google through Firebase Analytics and Firebase Crashlytics. The names and package names of the apps you configure are not sent. Instead, usage events include the app type assigned by Android (for example, game, video, or social) and the screen orientation you chose, and every time the Accessibility Service detects that an app has come to the foreground and applies its orientation, this information is sent to Firebase Analytics.
1. Information We Collect and Process
The information AppRotate handles is as follows.
- Orientation settings and rules — stored on your device: The app stores the following in a database on your device.
- Per-app orientation settings: for each app you configure, its package name and app name, whether the setting is on, the screen orientation (Auto-rotate, Portrait, Landscape, Landscape (auto-flip), Reverse landscape, or Reverse portrait), the time a per-app pause ends, and the times the setting was created and last changed
- Condition rules: for rules you create for an app or a category, their time range (start and end time), screen orientation, whether the rule is on, the rule order, and the times it was created and last changed
- Category rules: for each app type (games, video, social, and so on), whether the rule is on, the screen orientation, and the time it was last changed
- Custom categories: the name you entered, whether it is on, the screen orientation, the package names of its apps, and the times it was created and last changed
- Apps excluded from categories: the package name of each app you took out of category handling, the time you did so, and the time the exclusion ends (including no end time)
- App settings and operating records — stored on your device: The time a global pause ends; your theme and language; whether on-screen notices are shown and their position; whether you finished the first-run guide (onboarding); whether Remove Ads is active (true/false); whether Remove Ads has ever been active on this device (true/false); records for the welcome offer (the time you first opened the app on this device, and whether you dismissed the welcome offer card on the home screen); records used to decide when to ask for a review (the number of times an orientation was applied, counted only up to 10; the time you first opened the home screen; the time a review was last requested); records used to decide when to send a service-off notification (whether the service has ever connected, the time it last connected, the time a notification was last sent, and whether notification permission has been requested); and whether each one-time usage event has already been sent. These are stored in the app's storage on your device.
- Installed app information — read on your device: So you can choose which apps to configure, the app loads the package name, name, and icon of the apps shown on your home screen (launcher) from your device and displays them. For category rules and for the app type value in usage events, the app also reads the app type Android assigns to each app (
ApplicationInfo.category) on your device. The loaded list is not stored or sent, and the app type is sent only as the app_category value of the usage events below; only apps you turn on or whose settings you change, apps you put in a custom category, apps you exclude from a category, and apps imported from a backup file are saved to the orientation settings and rules above.
- Android version and screen size — checked on your device: Orientations are not applied on large screens running Android 16 or later (tablets, unfolded foldables, and other screens whose shorter side is 600dp or more), so before applying an orientation the app reads your device's Android version and the size of the screen's shorter side to decide whether it can be applied. These values are not stored or sent; only the fact that an orientation could not be applied is sent, as a
rotation_unsupported event (no additional values).
- Usage events — sent to Firebase Analytics: The app sends the following events to Firebase Analytics. App names and package names are not included in any event. The "app type" below (
app_category) is the value assigned by Android (one of game, audio, video, image, social, news, maps, productivity, accessibility, undefined, other, or unknown).
screen_view: when you open a screen — the screen name (home, app list, orientation editor, rule editor, settings, theme/language selection, category rules, category settings, category app list, custom category editor, Remove Ads, onboarding)
onboarding_page_view, onboarding_skipped, onboarding_completed: when you view a page of the first-run guide, when you end it with "Later", and when you finish it (including with "Later") — the page number and whether the Accessibility Service is on
a11y_disclosure_shown, a11y_disclosure_result: when the accessibility disclosure dialog is shown and when you agree or decline — where it was opened (home, settings, onboarding) and your response
enable_service_clicked: when you agree to the accessibility disclosure on the home screen or in onboarding and go to the accessibility settings (no additional values)
a11y_settings_abandoned: when you agreed to the disclosure and went to the settings but came back within 5 minutes without turning the service on (no additional values)
a11y_enabled: once, when the Accessibility Service connects for the first time (no additional values)
service_connected: when the Accessibility Service connects — the number of apps whose orientation setting is on
a11y_lost: when the Accessibility Service is unbound or destroyed, or when a service-off notification is sent — the reason (unbound, destroyed, detected off)
managed_app_added (and first_app_added the first time): when you turn on an app in the app list or first save a new app's setting on the orientation editor screen — that app's app type and where it happened
managed_app_removed: when you turn off an app in the app list or delete an app on the home screen — that app's app type and where it happened
rotation_mode_changed: when an orientation you changed on the orientation editor screen is saved — that app's app type and the new screen orientation
schedule_set: when you save a new condition rule (a time range) on the rule editor screen — what the rule belongs to (an app, an app-type category, or a custom category). The times are not sent
category_rule_changed: when you turn a category rule on or off or save a new value — the app type, whether it is on, and the screen orientation
custom_category_saved: when you create or edit and save a custom category (a group of apps you pick yourself), or turn it on or off or save a new orientation for it — the number of apps in it, whether it is on, and the screen orientation. The category name and the names and package names of its apps are not sent
custom_category_deleted: when you delete a custom category (no additional values)
category_app_excluded, category_app_included: when you uncheck or re-check an app on the category app list screen and it is saved — the category kind (app-type category or custom category). Which app and which category are not sent
rotation_applied (and first_rotation_applied the first time): when the Accessibility Service applies a screen orientation (for example, when it detects a foreground app switch, when a pause ends, when the service connects, or when you unlock the device) — that app's app type, the applied screen orientation, and where the value came from (per-app setting, category rule, or custom category)
rotation_released: when an applied orientation is released — what triggered it (leaving to the home screen or another screen where orientations are not applied, switching to another app, a pause, a global pause, the screen turning off, the service stopping). Which app it is is not sent
rotation_unsupported: when an orientation could not be applied because the device is a large screen running Android 16 or later (no additional values)
pause_set, pause_resumed: when you pause or resume per-app rotation — the scope (global or app), where it happened (home, on-screen notice, Quick Settings tile), and the pause length in minutes (-1 for indefinite)
overlay_action: when, on an on-screen notice, you tap the pause button, choose or cancel an item in the pause length list, open the menu, or in the menu change the orientation or choose to open settings, turn this app off, or exclude it from its category — the action type. Which app it is and the values you changed are not sent
ad_shown: when an app open ad is shown — the ad format and what triggered it
paywall_shown: when you open the Remove Ads screen — a value for where it was opened (recorded as settings wherever you open it from)
purchase_initiated, purchase_completed, purchase_failed, purchase_restored: when you start, complete, or fail a Remove Ads purchase, or try to restore purchases — the product ID (remove_ads_lifetime, or remove_ads_lifetime_welcome for the welcome offer product) and a failure reason code or whether the restore succeeded. Order numbers, amounts, payment methods, and purchase tokens are not sent.
backup_exported, backup_imported: when you export settings to a file or import and merge them from a file — the number of per-app settings exported or imported. The number of rules and file names, locations, and contents are not sent.
review_prompted: when the app requests the Google Play review dialog (no additional values)
- User properties: the number of apps whose orientation setting is on (
managed_app_count), whether the Accessibility Service has been turned on (a11y_enabled), and whether a Remove Ads purchase was completed on this device (premium, recorded only when a purchase completes)
For the information Firebase Analytics collects automatically alongside these events, see section 4.
- Crash reports — sent to Firebase Crashlytics: When the app crashes, error details, device diagnostic information, and a commit hash identifying the app build (
git_hash) are sent. See section 4.
- Advertising data — collected by Google AdMob: To serve ads, the AdMob SDK may collect and use device identifiers such as the advertising ID, your IP address, and ad interaction data. In regions that require consent, such as the European Economic Area (EEA) and the UK, Google's User Messaging Platform (UMP) asks for your consent and stores your choice on your device. See section 4.
- Purchase information — handled by Google Play: Remove Ads purchases are handled by the Google Play billing system. The app does not receive or store payment methods such as card numbers, or billing addresses. The product prices it receives from Google Play are used only to show them on screen and to calculate the welcome offer discount and decide whether to show the offer; they are not stored or sent. The only values about purchases stored on your device are whether Remove Ads is active (true/false) and whether it has ever been active on this device (true/false). See section 4.
- Backup files — saved where you choose: When you export from the settings screen, the app creates a backup file (JSON) in a location you pick yourself with the system file picker. The file contains an app identifier (
approtate), the file format version, the export time, per-app settings (package name, app name, whether the setting is on, and screen orientation), per-app condition rules (package name, time range start and end time, screen orientation, whether the rule is on, and rule order), category rules (app type, whether the rule is on, and screen orientation), custom categories (the name you entered, whether it is on, screen orientation, and the package names of its apps), the package names of apps you excluded from categories with no end time, and category condition rules (the app type or custom category name they belong to, time range start and end time, screen orientation, whether the rule is on, and rule order). It does not contain pause states (global and per-app pauses, and apps taken out of category handling for a set time), the times settings were created or changed, app settings and operating records such as theme and language, or account or device identifiers. The app does not send this file anywhere, and when you import, it reads only the file you pick, once.
- Information the app does not ask for: The app does not ask you to enter a name, email address, or phone number, and does not request permissions to access your contacts, photos, storage, precise location, camera, microphone, or Bluetooth devices.
2. Accessibility Service
AppRotate uses the Android Accessibility Service for its core feature: switching to the screen orientation you set for an app when that app comes to the foreground, and letting the screen return to its normal orientation when you leave it.
- Events it receives: The service subscribes to one event type only: window state change events (
TYPE_WINDOW_STATE_CHANGED). Separately from accessibility events, while the service is connected it also receives Android's screen-off and device-unlocked broadcasts.
- What it reads: It reads the package name and window class name from each event, and the package name of the currently active window, to determine which app is in the foreground. The service configuration declares window content retrieval (
canRetrieveWindowContent), but the only value the app's code reads from the active window is the package name; it does not read text shown on the screen or anything you type.
- What it does: When an app you configured and turned on (or an app with no per-app setting that falls under a category rule you turned on) comes to the foreground, the service shows an invisible window (a zero-size accessibility overlay that does not receive touches) that changes the screen orientation to your setting. When you leave that app, it removes this window so the device returns to its normal orientation. It does not change system settings such as the device's auto-rotate setting, and it does not store any value in order to restore things later. If condition rules exist, it uses the value of the rule that matches the device time when you enter the app. When the screen turns off, it releases the applied orientation, and when you unlock the device it checks the foreground app again and applies its orientation. Orientations are not applied on large screens running Android 16 or later (such as tablets and unfolded foldables).
- On-screen notices: When it applies an orientation, it briefly shows a notice on the screen. This notice is not an Android notification but a window the Accessibility Service draws over the screen (an accessibility overlay). The notice shows the app name and the applied orientation, and it has a pause button and a menu button, whether the orientation was applied by a per-app setting, a category rule, or a custom category. Tapping the pause button shows a list of pause lengths, and for the length you choose (including no end time) the orientation is not applied to that app only (for an app handled by a category, only that app is taken out of category handling for that time). The menu has change orientation, pause, open settings, turn this app off (apps handled by a per-app setting) or exclude from the category (apps handled by a category), and close. When an orientation could not be applied because of a large screen, a one-line notice with no buttons is shown; no notice is shown when an orientation is released. In the settings screen under "On-screen notices", you can choose to show them or not.
- What is sent: Each time an orientation is applied, that app's app type, the applied screen orientation, and where the value came from are sent to Firebase Analytics as a
rotation_applied event. In addition, the Accessibility Service sends rotation_released (what triggered the release), rotation_unsupported, service_connected (the number of apps turned on), a11y_lost, and, when you use the buttons or menu on an on-screen notice, overlay_action and pause_set events (see section 1). App names and package names are not sent. No rotation_applied event is sent when you switch to an app that has neither its own setting to apply nor a category rule turned on, an app whose own setting you have turned off, or an app you have paused.
- On-device storage: The app's code does not store a history of foreground app switches on your device. The values the Accessibility Service writes to your device on its own are the clearing of a global pause when its period ends, the orientation-applied count used for review requests, the service connection record (whether it has ever connected and the time it last connected), and whether each one-time usage event has already been sent. In addition, when you use the buttons or menu on an on-screen notice, it writes what you did: the time a pause ends (to the app's own setting for an app handled by a per-app setting, or, together with the package name, to the apps excluded from categories for an app handled by a category), an orientation changed in the menu (saved to the per-app setting or the per-app condition rule applied at the time; for an app handled by a category, a new per-app setting is created with that app's package name and app name), turning the per-app setting off, and excluding the app from its category (for an app-type category the package name is added to the apps excluded from categories; for a custom category the app is removed from its apps). However, events sent to Firebase are temporarily kept on your device by the Firebase SDK until they are sent.
- No actions on your behalf: The service does not tap, scroll, or type for you. It does not declare the gesture capability (
canPerformGestures).
- Your control: The Accessibility Service works only after you turn it on yourself in Android Settings. Before taking you to the accessibility settings screen, the app shows a disclosure dialog and asks for your consent. If you turn the service on within 5 minutes after agreeing, you are brought back to the app automatically. You can turn the service off at any time in Android Settings, and you can pause per-app rotation from the home screen or the Quick Settings tile.
3. Permissions
- Accessibility Service (BIND_ACCESSIBILITY_SERVICE): Detects the foreground app and changes the screen orientation automatically (see section 2).
- Installed app queries: To show the list of apps you can set an orientation for, the app declares that it queries apps shown on your home screen (launcher). Libraries bundled with the app also declare some query entries automatically (the ad SDK: apps that handle web links, phone calls, text messages, and adding calendar events; the Google Play Billing Library: the Google Play Store app). The app does not request the permission to query all apps (
QUERY_ALL_PACKAGES).
- Notifications (POST_NOTIFICATIONS, Android 13 and later): If the Accessibility Service is turned off, or is on but not connected, the app sends an "AppRotate is off" notification. Using WorkManager, the app checks the service state about every 6 hours (whether the service is connected and whether this app is turned on in Android's accessibility settings). The check itself happens on your device, and an
a11y_lost event is sent when the notification is sent. It notifies you once each time the service goes off, does not notify again while it stays off, and notifies once more if the service reconnects and then goes off again. Tapping the notification opens the app's home screen. The permission is requested on the home screen while the Accessibility Service is running, or when you come back after turning the service on from the settings screen; it is asked only once across the app and not asked again if you deny it. The app does not send persistent notifications. It sends one kind of promotional notification: a reminder that the welcome offer is ending. When you open the app's screens, it uses WorkManager to schedule one reminder for about 24 hours before the welcome offer period ends (7 days from the time you first opened the app on this device; see section 4). The reminder is not sent if, at that time, Remove Ads is active, a lookup found that this Google account already owns a Remove Ads product, the ownership lookup has not finished, the offer period has ended, the price of the welcome offer product could not be received from Google Play, that price is not lower than the regular product's price, or notification permission is not granted. It is sent on a notification channel separate from the service-off notification ("Offers"), and tapping it opens the app's Remove Ads screen (the app does not go there while the first-run guide is in progress). The app does not ask for notification permission separately for this reminder.
- Internet (INTERNET) and network state (ACCESS_NETWORK_STATE): Used to check ad consent and load ads, to send Firebase Analytics and Crashlytics data, and to open this privacy policy page from the settings screen.
- Advertising ID (AD_ID) and ad services permissions (ACCESS_ADSERVICES_AD_ID, ACCESS_ADSERVICES_ATTRIBUTION, ACCESS_ADSERVICES_TOPICS): Declared by the Google AdMob SDK and Firebase Analytics for ad serving and measurement.
- Google Play billing (com.android.vending.BILLING): Declared by the Google Play Billing Library and used to buy Remove Ads and to confirm and restore the purchase.
- WAKE_LOCK and install referrer access (BIND_GET_INSTALL_REFERRER_SERVICE): Declared by Firebase Analytics and WorkManager. The install referrer is Google Play information about how the app was installed.
- FOREGROUND_SERVICE and DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION: Declared automatically by Android libraries bundled with the app (WorkManager, AndroidX). The app does not run a foreground service, and the latter is a permission private to this app that prevents other apps from calling receivers used only inside the app.
- Quick Settings tile: You can add a "Per-app rotation" tile to Quick Settings in the notification shade. Tapping the tile switches per-app rotation between paused and resumed, and opens the app instead when the Accessibility Service is not running (long-pressing the tile also opens the app). The tile does not request any permission (it is protected by BIND_QUICK_SETTINGS_TILE so that only the system can connect to it).
- Permissions the app does not use: The app does not use the display-over-other-apps permission (SYSTEM_ALERT_WINDOW) or the modify-system-settings permission (WRITE_SETTINGS). It changes the screen orientation only through the window shown by the Accessibility Service (see section 2), and it does not change system settings such as the device's auto-rotate setting.
4. Third-Party Services
AppRotate uses the following third-party services.
- Google AdMob and User Messaging Platform: Shows a banner ad at the bottom of the home screen and an app open ad when you open or return to the app (no app open ad is shown when you come into the app from the accessibility settings, battery optimization settings, the file picker, a service-off notification, the Quick Settings tile, "open settings" in the on-screen notice menu, or a welcome offer reminder). No app open ad is shown before you finish the first-run guide (onboarding); app open ads start from the next time you leave and come back to the app after finishing it (the request that loads an ad in advance may still be made during the guide). Ads are set to play muted. When you open the app's screens, the app first uses the UMP SDK to check whether consent is required in your region and shows a consent form if needed. It initializes the AdMob SDK and requests ads in advance only when ads can be requested, so AdMob SDK initialization and ad requests do not occur when the app process runs only because of the Accessibility Service, the Quick Settings tile, the service state check, or the welcome offer reminder task. Your consent choice is stored on your device by the UMP SDK, and in regions that require consent, such as the EEA and the UK, you can change it under "Privacy options" on the app's settings screen (it is reset if you clear the app's data or reinstall the app, and is checked again the next time you open the app). To serve and measure ads and prevent fraud, AdMob may collect and use device identifiers such as the advertising ID and app set ID, your IP address and the approximate location derived from it, and ad interaction and diagnostic data; this information is processed by Google. The app does not set any option in its ad requests to limit personalized ads, so whether ads are personalized depends on your consent choice (in applicable regions) and your Google ad settings. While Remove Ads is active, banner and app open ads are not requested or shown (for when a purchase becomes active, see "Welcome offer and when Remove Ads is active" below). However, the consent check and AdMob SDK initialization when you open the app's screens still take place while Remove Ads is active. See the Google Privacy Policy and AdMob's data disclosure.
- Google Play billing: The purchase this policy calls "Remove Ads" is the product shown in the app under the name "AppRotate Pro" (a one-time purchase, product ID
remove_ads_lifetime). Besides not showing ads, it lifts the free usage limits. While Remove Ads is not active, you can create new condition rules only up to 2 in total (per-app and per-category rules combined) and new custom categories only up to 1, and you cannot turn on a category rule (per app type) that is off or export or import a settings backup. Condition rules and custom categories you already created, and category rules that are already on, keep working regardless of the limits and can be edited or deleted. Buying and paying is handled by Google Play, and payment information is processed by Google under Google's policies. Using the Google Play Store app on your device, the app looks up the product price and whether this Google account owns the purchase when the app process starts (including when it starts because the Accessibility Service connects), and looks up the product price when you open the Remove Ads screen, and when the payment sheet could not be opened from that screen, only if it has not been received yet (it also looks up ownership at that point if no ownership lookup has finished yet). It looks up whether this Google account owns the purchase again when you tap Restore purchase, when you return to the app's screens, and when you tap the buy button and Google Play reports that the product is already owned. If the app has already found that the account owns the product, tapping the buy button looks up ownership right away without opening the payment sheet. It also looks up ownership when the welcome offer reminder task (section 3) runs; that task also looks up the product price if it has not been received yet. When a purchase completes, the app sends the purchase information back to Google Play to acknowledge it but does not store the purchase token; it stores only whether Remove Ads is active (true/false) and whether it has ever been active on this device (true/false) on your device.
- Welcome offer and when Remove Ads is active:
- Welcome offer: for 7 days from the time you first opened the app on this device, the app shows a separate product that sells the same thing (Remove Ads and the lifting of the free usage limits) at a discounted price (a one-time purchase, product ID
remove_ads_lifetime_welcome) on the home screen, the settings screen, and the Remove Ads screen. It is not shown if Remove Ads is active, if a lookup found that this Google account already owns a Remove Ads product, if the ownership lookup has not finished yet, if the price of the welcome offer product could not be received from Google Play, or if that price is not lower than the regular product's price. The price and discount percentage are shown and calculated from the two product prices received from Google Play, and the remaining time is calculated on your device from the first-open time stored on your device and the device clock. The welcome offer card on the home screen is shown only while the Accessibility Service is running, and is not shown again once you dismiss it. One reminder is sent about 24 hours before the period ends (see section 3).
- When Remove Ads becomes active: when you complete a purchase, when you tap Restore purchase on the Remove Ads screen, or when you tap the buy button with an account that already owns the product. It makes no difference which of the two products is owned. The ownership lookups the app runs on its own (when the app process starts, when you return to the app's screens, when you open the Remove Ads screen or the payment sheet could not be opened from it, and in the welcome offer reminder task) activate Remove Ads only if there is a new purchase that has not been acknowledged yet or Remove Ads has been active on this device before. So on a device where you reinstalled the app or cleared the app's data, a purchase that has already been acknowledged is not activated again automatically; tapping Restore purchase activates it again. If the account has been found to own the product, tapping the buy button also activates it again without a payment (for the case where app settings are restored from a Google backup, see section 6). If any lookup succeeds and finds no owned purchase, Remove Ads is deactivated; if a lookup fails, the current state is kept.
- Google Play In-App Review: Once a screen orientation has been applied 10 or more times, at least 3 days have passed since you first opened the home screen, and at least 60 days have passed since the last request, the app requests the Google Play review dialog on the home screen. Google Play decides whether to actually show the dialog and handles any review you write; the app cannot tell whether you wrote a review or see its rating or content.
- Firebase Analytics (Google Analytics for Firebase): Collects the usage events and user properties listed in section 1. Events sent by the Accessibility Service and the service state check may be sent even if you have not opened the app's screens. Separately, the Firebase Analytics SDK automatically collects information such as an app instance ID, device model, OS version, app version, language, and approximate region estimated from your IP address (such as country or city), along with events such as first open, session start, engagement time, and in-app purchases. The app does not apply the setting that turns off advertising ID collection, so the advertising ID may also be collected. Events are processed in connection with the app instance ID (and the advertising ID, if collected), so they are not anonymous. See the Google Privacy Policy.
- Firebase Crashlytics: In release builds, when the app crashes, it sends the error stack trace, diagnostic information such as device model, OS version, and app version, and an installation identifier, together with a commit hash identifying the build (
git_hash). Because the app also uses Firebase Analytics, crash reports may include recent Analytics events logged before the crash (including the usage events in section 1). Firebase Sessions, included with Crashlytics, may also send app session information. See the Google Privacy Policy.
- GitHub Pages: When you tap "Privacy Policy" in the settings screen, an in-app web view loads this page from feelpass.github.io. Standard web request information, such as your IP address, is sent to GitHub's servers.
- You can reset or delete your advertising ID (or opt out of personalized ads) in Android Settings > Google > Ads. Menu names may differ by device and Android version.
5. How Information Is Used
- Settings and records stored on your device: Used for automatic screen orientation switching based on per-app settings, condition rules, and category rules; pausing; on-screen notices; applying your theme and language; applying Remove Ads; limiting how often ads and review requests appear; service-off notifications; and calculating and showing the welcome offer period and sending its ending reminder.
- Firebase Analytics events: Used to understand how features are used, which screen orientations are used for what types of apps, and where people stop during the first-run guide, accessibility setup, and purchase, in order to improve the app.
- Crashlytics reports: Used to find the causes of errors and improve app stability.
- AdMob: Used to show ads so the app can be offered for free.
- Google Play billing and In-App Review: Used to process and confirm Remove Ads purchases and to let you leave a review for the app if you want to.
6. Data Retention and Deletion
- Deleting settings: Turning an app off in the app list keeps its setting on your device in the off state; deleting an app on the home screen removes that app's orientation setting and its condition rules from your device. Condition rules can also be deleted individually on the orientation editor screen, and turning a category rule off keeps it on your device in the off state with its value.
- Uninstalling: Uninstalling the app deletes the orientation settings, rules, and app settings stored on your device. If you only clear the app's data, your ad consent choice is reset. Remove Ads is not activated again automatically; it is activated again when you tap Restore purchase on the Remove Ads screen, or tap the buy button with an account found to own the product (no payment is made) (the same applies if you uninstall and reinstall the app, although this can differ as described under "Android Auto Backup" below if app data is restored from a Google backup when you reinstall; see section 4 for the detailed conditions). The welcome offer period is also calculated anew from the next time you open the app.
- Backup files: Exported backup files stay where you saved them and are not deleted when you uninstall the app. Delete them yourself if you no longer need them. If you choose a location provided by another service, such as a cloud drive, the file is kept under that service's policies.
- Android Auto Backup: The app allows Android Auto Backup and does not set rules limiting what is backed up. So if Google backup is turned on for your device, your orientation settings, rules, and app settings may be included in your Google Account backup and restored to a new device or to a device where you uninstalled and reinstalled the app. App settings include the Remove Ads records and the welcome offer records (section 1), so on a device where app settings were restored from a backup, Remove Ads may be activated again by the Google Play ownership lookup without tapping Restore purchase, and the welcome offer period may continue from the earlier first-open time. You can manage backups from the Google backup menu in Android Settings.
- Refunds: If a Remove Ads purchase is refunded or canceled, Remove Ads is deactivated at the next Google Play lookup: ads are shown again and the free usage limits in section 4 apply again (you cannot create new condition rules or custom categories beyond the limits, turn on a category rule that is off, or export or import a settings backup). Your orientation settings, rules, and other data on your device are not deleted, and rules and categories you already created and category rules that are already on keep working.
- Information sent to Google: Information sent to AdMob, Firebase Analytics, Firebase Crashlytics, and Google Play is retained by Google under each service's policies. Uninstalling the app does not delete information that has already been sent.
- Stopping transmission: The app has no in-app setting to turn off Firebase Analytics or Crashlytics. Turning off the Accessibility Service stops automatic orientation switching, and the events the Accessibility Service sends (section 2) are no longer generated. Even with the Accessibility Service turned off, events from using the app's screens and ad requests still occur when you use the app. AdMob SDK initialization and ad requests occur only when you open the app's screens, but when the app process starts, the Google Play purchase lookup and the service state check run, and an
a11y_lost event is sent when that check sends a service-off notification.
- For questions about information that has been sent, or to request its deletion, please contact us using the address below.
7. Children's Privacy
AppRotate is not directed at children under 13 and does not knowingly collect personal information from children.
8. Changes to This Policy
We may update this policy as needed. Any changes will be posted on this page.
9. Contact
If you have any questions about this privacy policy, contact us at philleeran@gmail.com.
Effective date: October 5, 2026