diff --git a/.github/workflows/build-mkdocs.yml b/.github/workflows/build-mkdocs.yml
deleted file mode 100644
index 3c4fd94a2b..0000000000
--- a/.github/workflows/build-mkdocs.yml
+++ /dev/null
@@ -1,24 +0,0 @@
-name: Build mkdocs
-
-on:
- push:
- branches:
- - master
- - main
-permissions:
- contents: write
-jobs:
- deploy:
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v4
- - uses: actions/setup-python@v4
- with:
- python-version: 3.x
- - uses: actions/cache@v3
- with:
- key: ${{ github.ref }}
- path: .cache
- - run: pip install mkdocs-material
- - run: pip install mkdocs-redirects
- - run: mkdocs gh-deploy --force
diff --git a/.gitignore b/.gitignore
index cd4bbcdcff..e0116b2eb1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -89,4 +89,8 @@ Gemfile.lock
app/play-service-account-key.json
app/.env
-.venv/
\ No newline at end of file
+.venv/
+/.idea/appInsightsSettings.xml
+/.idea/AndroidProjectSystem.xml
+/.idea/runConfigurations.xml
+/.idea/studiobot.xml
diff --git a/.gitmodules b/.gitmodules
deleted file mode 100644
index 69e73f5a6a..0000000000
--- a/.gitmodules
+++ /dev/null
@@ -1,3 +0,0 @@
-[submodule "app/src/pro"]
- path = app/src/pro
- url = https://github.com/keymapperorg/KeyMapperPro
diff --git a/.idea/runConfigurations/app.xml b/.idea/runConfigurations/app.xml
index cfc6b96dc5..8119c58726 100644
--- a/.idea/runConfigurations/app.xml
+++ b/.idea/runConfigurations/app.xml
@@ -1,6 +1,5 @@
-
diff --git a/404.html b/404.html
new file mode 100644
index 0000000000..ea6ac257ca
--- /dev/null
+++ b/404.html
@@ -0,0 +1,5 @@
+
+
+Redirecting to https://docs.keymapper.club/
+
+
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 7544087766..080df16191 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,11 +1,19 @@
+## [3.0.0](https://github.com/sds100/KeyMapper/releases/tag/v3.0.0)
+
+_See the changes from previous 3.0 Beta releases._
+
+#### 10 April 2025
+
+- #1635 do not crash if the URL for the HTTP action is malformed
+
## [3.0 Beta 5](https://github.com/sds100/KeyMapper/releases/tag/v3.0.0-beta.5)
+_See the changes from previous 3.0 Beta releases as well._
+
#### 6 April 2025
- #1625 HTTP Request action.
-###
-
## Bug fixes
- #1627 open camera app action does not work when device is locked
diff --git a/README.md b/README.md
index 0166157c6b..854cd7cd51 100644
--- a/README.md
+++ b/README.md
@@ -1,18 +1,10 @@
-**UPDATE**: I miss working on this project and Key Mapper still has so much potential so I am back! đ
->
-> Well, working on this project was a fun ride đą! This project has taught me so much about Android, software development and how to collaborate with an online community. It has been my dream to lead a big FOSS project with people from all over the world so a **huge** thank you goes to everyone that spread the word and helped on GitHub along the way âș.
->
-> ~~Unfortunately, I do not have any more time to work on this project - I'm now studying Computer Science at university and I have landed software-dev side jobs, which has taken up any free-time I did have to code on the side.~~
->
-> A special thank you goes to everyone in the [Team](https://docs.keymapper.club/#our-team) for their long-term
-> commitment to the project and for being so engaged with the community đ đ.
-> The Discord server, website and app store listing will still be up! So don't worry, you can still map your keys to your heart's content. â€
+
+
-Key Mapper is a free and open source Android app that can remap your buttons and fingerprint reader gestures. The aim of this project is to allow anyone to remap their buttons with (almost) infinite flexibility.
@@ -25,11 +17,47 @@ Key Mapper is a free and open source Android app that can remap your buttons and
-
-
+## Unleash your keys!
+
+Make custom macros on your keyboard or gamepad, make on-screen buttons in any app, and unlock new functionality from your volume buttons!
+
+Key Mapper supports a huge variety of buttons and keys:
+
+- ALL your phone buttons (volume AND side key)
+- Game controllers (D-pad, ABXY, and most others)
+- Keyboards
+- Headsets and headphones
+- Fingerprint sensor
+
+Most devices are already supported, with new devices being added over time. Let us know if it's not working for you and we can prioritize your device.
+
+Not currently supported:
+ - Mouse buttons
+ - Joysticks and triggers (LT,RT) on gamepads
+
+Not enough keys? Design your own on-screen button layouts and remap those just like real keys!
+
+## What shortcuts can I make?
-đ Check out the [website](https://docs.keymapper.club) for more information and help! đ
+With over 100 individual actions, the sky is the limit.
+Build complex macros with screen taps and gestures, keyboard inputs, open apps, control media, and even send intents directly to other apps.
+
+
+## How much control do I have?
+
+TRIGGERS: You decide how to trigger a key map. Long press, double press, press as many times as you like! Combine keys on different devices, and even include your on-screen buttons.
+
+ACTIONS: Design specific macros for what you want to do. Combine over 100 actions, and choose the delay between each one. Set repeating actions to automate and speed up slow tasks.
+
+CONSTRAINTS: You choose when key maps should run and when they shouldn't. Only need it in one specific app? Or when media is playing? On your lockscreen? Constrain your key maps for maximum control.
+
+
+## Links
+
+Come say hi in our [Discord community!](http://keymapper.club)
+
+Read the [documentation!](https://docs.keymapper.club/?utm_source=github)
## Translations
@@ -41,11 +69,9 @@ Key Mapper is a free and open source Android app that can remap your buttons and
[](https://crowdin.com/project/key-mapper)
[](https://crowdin.com/project/key-mapper)
-
## Star History
-[](https://star-history.com/#keymapperorg/KeyMapper&Date)
-
-### How do I contribute?
+[](https://www.star-history.com/#keymapperorg/KeyMapper&Date)
+## Contributing
There are many ways to help with this project. đ
-Check out the contributing guide in the [documentation](https://docs.keymapper.club).
+Check out the contributing guide in the [documentation.](https://docs.keymapper.club/contributing/introduction/?utm_source=github)
diff --git a/app/src/main/assets/whats-new.txt b/app/src/main/assets/whats-new.txt
index 8fceb7a8e2..e7303018d8 100644
--- a/app/src/main/assets/whats-new.txt
+++ b/app/src/main/assets/whats-new.txt
@@ -5,6 +5,7 @@ Key Mapper 3.0 is here! đ
đïž Grouping key maps into folders with shared constraints.
đŠ You can now change the flashlight brightness. Tip: use the constraint for when the flashlight is showing to remap your volume buttons to change the brightness.
+
đ Send HTTP requests with a new action.
â€ïž There are also tonnes of improvements to make your key mapping experience more enjoyable.
diff --git a/app/src/main/java/io/github/sds100/keymapper/actions/CreateActionDelegate.kt b/app/src/main/java/io/github/sds100/keymapper/actions/CreateActionDelegate.kt
index 164bfdde95..7d34983a0d 100644
--- a/app/src/main/java/io/github/sds100/keymapper/actions/CreateActionDelegate.kt
+++ b/app/src/main/java/io/github/sds100/keymapper/actions/CreateActionDelegate.kt
@@ -777,7 +777,7 @@ class CreateActionDelegate(
httpRequestBottomSheetState = ActionData.HttpRequest(
description = "",
method = HttpMethod.GET,
- url = "",
+ url = "http://",
body = "",
authorizationHeader = "",
)
diff --git a/app/src/main/java/io/github/sds100/keymapper/actions/HttpRequestBottomSheet.kt b/app/src/main/java/io/github/sds100/keymapper/actions/HttpRequestBottomSheet.kt
index 29413ac385..25725b2a41 100644
--- a/app/src/main/java/io/github/sds100/keymapper/actions/HttpRequestBottomSheet.kt
+++ b/app/src/main/java/io/github/sds100/keymapper/actions/HttpRequestBottomSheet.kt
@@ -43,6 +43,7 @@ import io.github.sds100.keymapper.system.network.HttpMethod
import io.github.sds100.keymapper.util.ui.compose.KeyMapperDropdownMenu
import kotlinx.coroutines.flow.update
import kotlinx.coroutines.launch
+import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
@OptIn(ExperimentalMaterial3Api::class)
@Composable
@@ -106,6 +107,7 @@ private fun HttpRequestBottomSheet(
val descriptionEmptyErrorString =
stringResource(R.string.action_http_request_description_empty_error)
val urlEmptyErrorString = stringResource(R.string.action_http_request_url_empty_error)
+ val malformedUrlErrorString = stringResource(R.string.action_http_request_malformed_url_error)
var descriptionError: String? by rememberSaveable { mutableStateOf(null) }
var urlError: String? by rememberSaveable { mutableStateOf(null) }
@@ -272,6 +274,10 @@ private fun HttpRequestBottomSheet(
urlError = urlEmptyErrorString
}
+ if (state.url.toHttpUrlOrNull() == null) {
+ urlError = malformedUrlErrorString
+ }
+
if (descriptionError == null && urlError == null) {
onDoneClick()
}
diff --git a/app/src/main/java/io/github/sds100/keymapper/home/KeyMapListAppBar.kt b/app/src/main/java/io/github/sds100/keymapper/home/KeyMapListAppBar.kt
index 12555778e4..8ea94d7eee 100644
--- a/app/src/main/java/io/github/sds100/keymapper/home/KeyMapListAppBar.kt
+++ b/app/src/main/java/io/github/sds100/keymapper/home/KeyMapListAppBar.kt
@@ -160,6 +160,7 @@ fun KeyMapListAppBar(
actions = {
AppBarActions(
onHelpClick,
+ onSortClick,
onSettingsClick,
onAboutClick,
onExportClick,
@@ -253,11 +254,13 @@ fun KeyMapListAppBar(
AnimatedVisibility(!state.isEditingGroupName) {
AppBarActions(
onHelpClick,
+ onSortClick,
onSettingsClick,
onAboutClick,
onExportClick,
onImportClick,
showDeleteGroup = true,
+ showSort = true,
onDeleteGroupClick = {
showDeleteGroupDialog = true
},
@@ -529,11 +532,13 @@ private fun SelectingAppBar(
@Composable
private fun AppBarActions(
onHelpClick: () -> Unit,
+ onSortClick: () -> Unit,
onSettingsClick: () -> Unit,
onAboutClick: () -> Unit,
onExportClick: () -> Unit,
onImportClick: () -> Unit,
showDeleteGroup: Boolean = false,
+ showSort: Boolean = false,
onDeleteGroupClick: () -> Unit = {},
) {
var expandedDropdown by rememberSaveable { mutableStateOf(false) }
@@ -555,6 +560,10 @@ private fun AppBarActions(
AppBarDropdownMenu(
expanded = expandedDropdown,
+ onSortClick = {
+ expandedDropdown = false
+ onSortClick()
+ },
onSettingsClick = {
expandedDropdown = false
onSettingsClick()
@@ -573,6 +582,7 @@ private fun AppBarActions(
},
onDismissRequest = { expandedDropdown = false },
showDeleteGroup = showDeleteGroup,
+ showSort = showSort,
onDeleteGroupClick = {
expandedDropdown = false
onDeleteGroupClick()
@@ -810,12 +820,14 @@ private fun selectedTextTransition(
@Composable
private fun AppBarDropdownMenu(
expanded: Boolean,
+ onSortClick: () -> Unit = {},
onSettingsClick: () -> Unit = {},
onAboutClick: () -> Unit = {},
onExportClick: () -> Unit = {},
onImportClick: () -> Unit = {},
onDismissRequest: () -> Unit = {},
showDeleteGroup: Boolean = false,
+ showSort: Boolean = false,
onDeleteGroupClick: () -> Unit = {},
) {
DropdownMenu(
@@ -830,6 +842,14 @@ private fun AppBarDropdownMenu(
)
}
+ if (showSort) {
+ DropdownMenuItem(
+ leadingIcon = { Icon(Icons.AutoMirrored.Rounded.Sort, contentDescription = null) },
+ text = { Text(stringResource(R.string.home_app_bar_sort)) },
+ onClick = onSortClick,
+ )
+ }
+
DropdownMenuItem(
leadingIcon = { Icon(Icons.Rounded.Settings, contentDescription = null) },
text = { Text(stringResource(R.string.home_menu_settings)) },
diff --git a/app/src/main/java/io/github/sds100/keymapper/system/network/AndroidNetworkAdapter.kt b/app/src/main/java/io/github/sds100/keymapper/system/network/AndroidNetworkAdapter.kt
index e44f3e8c5a..ba05d76cfb 100644
--- a/app/src/main/java/io/github/sds100/keymapper/system/network/AndroidNetworkAdapter.kt
+++ b/app/src/main/java/io/github/sds100/keymapper/system/network/AndroidNetworkAdapter.kt
@@ -170,6 +170,8 @@ class AndroidNetworkAdapter(
} catch (e: IOException) {
Timber.e(e)
return Error.UnknownIOError
+ } catch (e: IllegalArgumentException) {
+ return Error.MalformedUrl
}
}
}
diff --git a/app/src/main/java/io/github/sds100/keymapper/util/ErrorUtils.kt b/app/src/main/java/io/github/sds100/keymapper/util/ErrorUtils.kt
index 8c2f446912..4aa7e57171 100644
--- a/app/src/main/java/io/github/sds100/keymapper/util/ErrorUtils.kt
+++ b/app/src/main/java/io/github/sds100/keymapper/util/ErrorUtils.kt
@@ -161,6 +161,7 @@ fun Error.getFullMessage(resourceProvider: ResourceProvider): String = when (thi
Error.PurchasingNotImplemented -> resourceProvider.getString(R.string.purchasing_error_not_implemented)
Error.DpadTriggerImeNotSelected -> resourceProvider.getString(R.string.trigger_error_dpad_ime_not_selected)
Error.InvalidBackup -> resourceProvider.getString(R.string.error_invalid_backup)
+ Error.MalformedUrl -> resourceProvider.getString(R.string.error_malformed_url)
}
val Error.isFixable: Boolean
diff --git a/app/src/main/java/io/github/sds100/keymapper/util/Result.kt b/app/src/main/java/io/github/sds100/keymapper/util/Result.kt
index 485e58aad3..0d904a6685 100644
--- a/app/src/main/java/io/github/sds100/keymapper/util/Result.kt
+++ b/app/src/main/java/io/github/sds100/keymapper/util/Result.kt
@@ -144,6 +144,7 @@ sealed class Error : Result() {
* DPAD triggers require a Key Mapper keyboard to be selected.
*/
data object DpadTriggerImeNotSelected : Error()
+ data object MalformedUrl : Error()
}
inline fun Result.onSuccess(f: (T) -> Unit): Result {
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index ced9f72576..dfd8e9db02 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -299,34 +299,34 @@
https://play.google.com/store/apps/details?id=io.github.sds100.keymapperhttps://github.com/keymapperorg/KeyMapper/blob/master/LICENSE.mdhttps://github.com/keymapperorg/KeyMapper/blob/master/CHANGELOG.md
- https://keymapperorg.github.io/KeyMapper/contributing/#translating
+ https://docs.keymapper.club/contributing/#translating?utm_source=in_apphttps://github.com/keymapperorg/KeyMapper/blob/master/PRIVACY_POLICY.mdhttps://discord.gg/Suj6nyw
- https://keymapperorg.github.io/KeyMapper/redirects/trigger-by-intent
- https://keymapperorg.github.io/KeyMapper/redirects/trigger
- https://keymapperorg.github.io/KeyMapper/redirects/trigger-options
- https://keymapperorg.github.io/KeyMapper/redirects/action
- https://keymapperorg.github.io/KeyMapper/redirects/constraints
- https://keymapperorg.github.io/KeyMapper/redirects/fingerprint-map-options
- https://keymapperorg.github.io/KeyMapper/redirects/quick-start
- https://keymapperorg.github.io/KeyMapper/redirects/faq
- https://keymapperorg.github.io/KeyMapper/redirects/grant-write-secure-settings
+ https://docs.keymapper.club/redirects/trigger-by-intent
+ https://docs.keymapper.club/redirects/trigger
+ https://docs.keymapper.club/redirects/trigger-options
+ https://docs.keymapper.club/redirects/action
+ https://docs.keymapper.club/redirects/constraints
+ https://docs.keymapper.club/redirects/fingerprint-map-options
+ https://docs.keymapper.club/redirects/quick-start
+ https://docs.keymapper.club/redirects/faq
+ https://docs.keymapper.club/redirects/grant-write-secure-settingshttps://dontkillmyapp.com
- https://keymapperorg.github.io/KeyMapper/redirects/keymap-action-options
- https://keymapperorg.github.io/KeyMapper/redirects/trigger-key-options
- https://keymapperorg.github.io/KeyMapper/redirects/android-11-device-id-bug-work-around
- https://keymapperorg.github.io/KeyMapper/redirects/cant-find-accessibility-settings
- https://keymapperorg.github.io/KeyMapper/redirects/shizuku-benefits
- https://keymapperorg.github.io/KeyMapper/redirects/settings
+ https://docs.keymapper.club/redirects/keymap-action-options
+ https://docs.keymapper.club/redirects/trigger-key-options
+ https://docs.keymapper.club/redirects/android-11-device-id-bug-work-around
+ https://docs.keymapper.club/redirects/cant-find-accessibility-settings
+ https://docs.keymapper.club/redirects/shizuku-benefits
+ https://docs.keymapper.club/redirects/settingshttps://developer.android.com/reference/android/content/Intent#setFlags(int)https://github.com/keymapperorg/KeyMapperhttps://play.google.com/store/apps/details?id=io.github.sds100.keymapper
- https://keymapperorg.github.io/KeyMapper
- https://keymapperorg.github.io/KeyMapper/redirects/advanced-triggers
- https://keymapperorg.github.io/KeyMapper/redirects/assistant-trigger
- https://keymapperorg.github.io/KeyMapper/redirects/floating-buttons
- https://keymapperorg.github.io/KeyMapper/redirects/floating-layouts
- https://keymapperorg.github.io/KeyMapper/redirects/floating-button-config
+ https://docs.keymapper.club?utm_source=in_app
+ https://docs.keymapper.club/redirects/advanced-triggers
+ https://docs.keymapper.club/redirects/assistant-trigger
+ https://docs.keymapper.club/redirects/floating-buttons
+ https://docs.keymapper.club/redirects/floating-layouts
+ https://docs.keymapper.club/redirects/floating-button-confighttps://play.google.com/store/apps/details?id=io.github.sds100.keymapper.inputmethod.latinhttps://f-droid.org/en/packages/io.github.sds100.keymapper.inputmethod.latin
@@ -885,6 +885,7 @@
This file has no name!Invalid file. Must be a zip exported from Key Mapper.You must grant Key Mapper permission to see your paired Bluetooth devices.
+ Malformed URL. Did you forget the http://?Denied permission to read fine location!Denied permission to answer and end phone calls!
@@ -1083,6 +1084,7 @@
Can not be empty!URLCan not be empty!
+ Malformed URL. Did you forget the http://?Request body (optional)Authorization header (optional)You must prepend \'Bearer\' if necessary
diff --git a/app/version.properties b/app/version.properties
index f70c27a875..b2195383b2 100644
--- a/app/version.properties
+++ b/app/version.properties
@@ -1,3 +1,3 @@
-VERSION_NAME=3.0.0-beta.5
-VERSION_CODE=94
+VERSION_NAME=3.0.0
+VERSION_CODE=95
VERSION_NUM=0
\ No newline at end of file
diff --git a/docs/CNAME b/docs/CNAME
deleted file mode 100644
index 3cd691cbb8..0000000000
--- a/docs/CNAME
+++ /dev/null
@@ -1 +0,0 @@
-docs.keymapper.club
diff --git a/docs/contributing/codebase.md b/docs/contributing/codebase.md
deleted file mode 100644
index e6d624d947..0000000000
--- a/docs/contributing/codebase.md
+++ /dev/null
@@ -1,35 +0,0 @@
-# Structure
-
-This app follows something inspired from Clean Architecture and package-by-feature.
-
-## Architecture
-
-All data structures that are persisted are passed around as one of two objects:
-
-1. **Non-Entity**. This models the data in a way that makes the code more readable and doing the business logic easier. There are no rules for how these need to be named. They should be named what they are. E.g KeyMap, Action, Constraint.
-
-2. **Entity**. This models how the data should be stored. The class name has an ...Entity suffix. E.g KeyMapEntity. The data is more optimised for storing and the code required to get the data from these models isn't very concise or elegant. The developer took some strange decisions in the first versions of this app. đ
-
-Every screen in the app has a view model and the view model interacts with one or multiple *use cases* (more below). The view model converts data that needs to be shown to the user into something that can populate the user interface. For example, the data values in the Action object isn't very useful to the user so this needs to be converted into strings and images that do mean something to the user. All the view models have a ResourceProvider dependency which is how they get strings, Drawables and colours from the resources without having to use a Context. This isn't a problem for configuration changes (e.g locale change) because the activity is recreated, which means all the resources are re-fetched in the view model.
-
-The use cases contains all the business logic in the app. A *use case* interacts with the adapters and repositories mentioned below. A use case is made for everything that can be done in the app. E.g configuring a key map, displaying a mapping, configuring settings, onboarding the user. Most use cases correspond to something that *the user can do* in the app but some do not because they contain complicated code that is used in multiple use cases. E.g the GetActionErrorUseCase which determines if an action can be performed successfully.
-
-Adapters and repositories contain all interactions with the Android framework (except UI stuff). This is so that tests can be more easily written and executed. Android often changes what apps are allowed to do and how so abstracting these interactions away means the code only needs to be changed in a single place. This means that the only place that a Context object is used is in Services, Activities, Fragments and the adapters.
-
-## Package by feature
-
-Every package contains files related to each other. For example, everything (view models, fragments, use cases) to do with constraints is stored in one package.
-The only package which isn't a feature is the `data` package because it is useful to have some of the things in there together, e.g the migrations.
-The `system` package bundles all the packages which are related to the Android framework because there are so many.
-
-
-
-# Key event detection and input
-
-The diagram below shows how key events are passed around Key Mapper on Android 14+. This change was required because in Android 14 Android restricted the rate at which intents can be broadcast to once per second when an app is backgrounded. This is too slow for repeating key event actions in Key Mapper. Key Mapper still uses broadcast receivers to send key events between the accessibility service and input method on older Android versions to reduce the chance of breaking everyone's key maps. As shown in the diagram this is a bit complicated and potentially over-engineered but it must be two-way and future proof to any further restrictions. Using manifest-defined broadcast receivers, that aren't rate limited isn't an elegant solution because one has to pass messages between these broadcast receivers and the services through some 3rd class. Binder is lower latency than using intents and is synchronous whereas broadcast receivers are asynchronous. Apps are not allowed to bind to accessibility services so a new "relay" service needed to be made to link the accessibility and input method services.
-
-The accessibility service is where triggers are detected by listening to the key events that Android system sends it. Key event and text actions send their key events from the accessibility service to the relay service, which then forwards it to the input method.
-
-The code for input methods to talk to the Key Event relay service can be found in KeyEventRelayServiceWrapper. Key events are listened to from the input method service when Android blocks key events to the accessibility service during phone calls.
-
-
\ No newline at end of file
diff --git a/docs/contributing/introduction.md b/docs/contributing/introduction.md
deleted file mode 100644
index 94944d4637..0000000000
--- a/docs/contributing/introduction.md
+++ /dev/null
@@ -1,163 +0,0 @@
-## Becoming a tester
-
-You can get the apks for the pre-release versions in 2 ways:
-
-1. Join [the Discord server](http://keymapper.club) and download the apks from the #testing-builds channel.
-2. Download the apk from GitHub Actions. This requires a GitHub account.
- You can get alpha builds [here](https://github.com/keymapperorg/KeyMapper/actions/workflows/android.yml) and beta builds [here](https://github.com/keymapperorg/KeyMapper/actions/workflows/android-release.yml).
-
- Click on a 'workflow run' and then scroll down to see the 'artifacts'. If a build was successful then you can find the apk here.
-
-!!! info
- All testing builds have `.ci.X` at the end of the version name where 'X' is a number is incremented every time a new build is made. Builds are made when a new feature or bug fix is implemented.
-
- There are two types of pre-release versions:
-
- - **Alpha**. These have ".alpha" in the version name and are the most unstable. Expect the most crashes and broken features in these builds. BEWARE! Your data in Key Mapper isn't considered compatible between alpha builds so it is possible Key Mapper will crash and refuse to fix itself if you update to a new build that can't understand the data.
- - **Beta**. These builds have some of the latest features and contain a few bugs. You can safely update between versions. These have ".beta.X" in the version name. These are pre-release builds for the the open-testing channel on Google Play and F-droid always has beta builds. When all known bugs are fixed a new build is released to the app stores.
-
-### How can I help?
-- Test and experiment new features. All features and bug-fixes that are being worked on for a release can be found on the Projects page [here](https://github.com/keymapperorg/KeyMapper/projects).
-- If you find any bugs or crashes then report them by following the guide [here](../report-issues.md).
-
-## Contributing code
-
-### Setting up the environment
-
-1. Fork the KeyMapper repository (repo).
-2. Clone the repo to your device. It will clone to a folder called KeyMapper by default.
-3. [Install](https://developer.android.com/studio/install) Android Studio if you don't have it already. It is available for Windows, Linux and macOS.
-4. Open the cloned KeyMapper folder in Android Studio. Install anything Android Studio prompts you to install. E.g the gradle wrapper version used by KeyMapper or older Android SDK versions.
-5. Create a new branch off develop which begins with "feature/" if it is a new feature or "fix/" if it is a bug fix. Then put a brief description of the feature/bug fix.
-6. Make any changes then commit them to your forked repo then make a pull request!
-
-!!! info
- To build the documentation website you need to install [mkdocs-material](https://squidfunk.github.io/mkdocs-material/getting-started/) with Python. Just run `pip install -r requirements.txt` in the root of the project to install it.
- Then run `mkdocs serve` in the project root.
-
-### Build flavors and types
-
-After version 2.7.0 Key Mapper will have 2 build flavours: _free_ and _pro_. The pro flavor includes the closed-source features (e.g assistant trigger) and non-FOSS libraries such as the Google Play Billing library. The free variant stubs out these closed-source features and only uses FOSS libraries.
-
-There are also 4 build types, which have different optimizations and package names.
-
-- **debug** = This is the default debug build type that has no optimizations and builds rapidly. It has a `.debug` package name suffix.
-- **release** = This is the default release build type that includes a lot of optimizations and creates an apk/app bundle suitable for releasing. There is no package name suffix.
-- **debug_release** = This is a debug build type that does not include a package name suffix so that it is possible to test how the production app will look. It is the only way to get the Google Play Billing library functioning because it will break if the package name isn't the same as on the Play store.
-- **ci** = This is used for alpha builds to the community in Discord. It includes optimizations to dramatically shrink the apk size, improve performance, and has obfuscation. It has a `.ci` package name suffix.
-
-### Branches đŽ
-
- - master: Everything in the latest stable release.
- - develop: The most recent changes. The app is potentially unstable but it can be successfully compiled. A new release is branched off of here.
- - feature/*: Any new changes currently being developed. Merges into develop.
- - fix/*: A bug fix. This branch should be merged into a release branch and develop.
-
-### Committing
-
-Format:
-```
-:
-```
-
-Every feature or bug fix commit should have an issue associated with it. This is a cue for the developer to plan what they are doing which improves efficiency. A feature should be split up into multiple tasks and each task should have its own commit. The feature should be developed on a separate branch and then merged into develop.
-
-#### Example
-```
-#100 feat: This a new feature
-```
-
-#### Types
-- feat: a new feature
-- fix: a bug fix
-- docs: changes to documentation
-- style: formatting, missing semi colons, etc; no code change
-- refactor: refactoring production code
-- test: adding tests, refactoring test; no production code change
-- chore: updating build tasks, package manager configs, version name changes, etc; no production code change
-- release: a new release.
-- website: stuff to do with the website.
-
-The README, License, Credits, Changelog and Privacy Policy files should just be changed in the master branch.
-
-### Versioning
-
-This project uses semantic versioning. e.g 1.2.3-alpha.01
-
-- 1st digit: major release. Only incremented when a big enough change happens to the project.
-- 2nd digit: minor releases. Incremented when a new feature or a few are added.
-- 3rd digit: patches. Incrememtend after a hotfix or bug fix.
-
-Additional labels can be used as a suffix. e.g "alpha".
-
-The version code in the develop branch should always be the highest. Therefore, when a new version is released in the release branch, it should be incremented as well.
-
-### Releasing
-
-Fastlane is used to partially automate the releasing process. Follow the [guide](https://docs.fastlane.tools/) on the Fastlane website to set it up.
-
-#### Beta releases
-
-##### Only for the first beta release
-1. Branch off develop into a new release branch (e.g release/2.3.0).
-2. Change the version name and version code in `version.properties` in the release branch.
-3. Change the version name and version code in `version.properties` in the develop branch to be one version ahead of the release branch.
-
-##### For every release
-1. Manually edit CHANGELOG.md **in the develop branch** with *all* changes. Cherry pick this into the release branch.
-2. Open the KeyMapper folder in a terminal and run `fastlane beta`.
-3. Squash and merge the release branch into master. Then delete the release branch.
-
-#### Production releases
-
-1. Check that all translations are merged.
-2. Credit the translators in the About screen in the app and in the index.md on the documentation website.
-3. Manually edit CHANGELOG.md **in the develop branch** with *all* changes. Cherry pick this into the release branch.
-4. Open the KeyMapper folder in a terminal and run `fastlane prod`. This will release the production build to the
- open-testing track on Google Play. Once it is approved by Google Play you must promote the release from open testing
- to the production track in Google Play.
-5. Squash and merge the release branch into master. Then delete the release branch.
-
-### Code Style
-
-Follow Google's Kotlin style guide. [https://developer.android.com/kotlin/style-guide](https://developer.android.com/kotlin/style-guide)
-
-## Translating đ
-
-You can translate this project on the [CrowdIn page](https://crowdin.com/project/key-mapper). Translations will be
-merged into production once they are >80% translated. If your language isn't available on the CrowdIn page then contact
-the developer so we can add it. Our contact details are in the footer of every page on this site.
-
-We really appreciate translators so thank you! đ
-
-## Consistency Standards
-
-### Writing
-
-It is important to use consistent language within the app's code and documentation. Make sure that your submissions comply with these standards. If you have noticed inconsistencies you can alert the developer with [an issue](https://github.com/keymapperorg/KeyMapper/issues/new) or in [the Discord](http://keymapper.club). These standards don't need to be followed in places other than the documentation and source code. Follow this Material Design [guide](https://material.io/design/communication/writing.html).
-
-#### Case
-
-No title case unless it is the title of a webpage, section heading. No title case in the string resources in the source code at all.
-
-Here are words and phrases that have been spelt inconsistently by the developer and everyone should follow these guidelines.
-
-| Terminology | Correct đ | Incorrect đż |
-| --------------- | ------------------------------------------------------------ | ---------------------------------- |
-| The app's name. | **Key Mapper** Use **Keyboard/Button Mapper** when advertising the app as this is how it appears in the app stores. You can use "Key Mapper" in the rest of the advert since this is much shorter. | key mapper, keymapper |
-| A key map | **key map**. KeyMap, keyMap in variable and class names. | keymap, Key Map. key-map. Key-Map. |
-| A trigger | **trigger** | Trigger |
-| An action | **action** | Action |
-| A constraint | **constraint** | Constraint |
-| A key event | **key event** | Key Event, keyevent |
-| A key code | **key code**. In variable and class names it should be keyCode instead of keycode. | keycode, Key Code |
-| A home screen | **home screen** | homescreen, Home Screen |
-| A backup/ to back up | Noun: **backup**. Verb; **back up** | Backup when using the verb. |
-
-### Documentation
-
-#### Headings
-
-If a heading is for a particular feature then it should include the minimum supported Key Mapper version except version 2.0.
-
-E.g "Trigger When Screen is Off (ROOT, 2.1.0+, Android 8.1+)" or "A feature (up to Android 10)".
diff --git a/docs/faq.md b/docs/faq.md
deleted file mode 100644
index e90f7392cb..0000000000
--- a/docs/faq.md
+++ /dev/null
@@ -1,136 +0,0 @@
-This page serves to answer frequently asked questions about Key Mapper, and help solve any problems you may be facing.
-See the [Quick Start Guide](quick-start.md) for more general help with using Key Mapper.
-
-## "Can I remap joysticks/dpad/mouse buttons/mouse motion?"
-
-No. Here is why:
-
-Joysticks are complicated to remap because they are axes, so their inputs are a range depending on how much you press the stick. It would be a lot of work to integrate them into Key Mapper. Currently, the developer cannot implement this feature. See [here](https://github.com/keymapperorg/KeyMapper/blob/master/README.md) for more information.
-
-
-The D-pad is interpreted differently by Android to other keys. That makes it hard to remap. However, the developer has found a way that might be able to remap them. Therefore, you can consider this a planned feature.
-
-Mouse buttons are not possible to remap with an accessibility service. There will never be support for them in this app. If other apps can do it, they do not work the same way Key Mapper does. If you want to remap mouse buttons, do not use Key Mapper.
-
-Remapping the movement of the mouse isn't possible on unrooted Android. The developer doesn't know of a way to do this.
-
-## "Key Mapper keeps randomly stopping/crashing/bugging/freezing"
-
-Please follow the following steps:
-
-- Turn off battery and memory optimisations in your device settings.
-This is especially important for Huawei and Xiaomi devices, and devices with 2GB of RAM or less.
-You can read about how to do this on your particular device at [dontkillmyapp.com](http://dontkillmyapp.com/)
-
-- Reboot your device.
-This is important for everyone to do if you are experiencing an issue with the app stopping. You must try rebooting your device. It works most of the time.
-
-If you have tried BOTH steps and Key Mapper still stops working randomly, consider how you are using the app. If you have low-end hardware, and are playing a game while using repeating key maps, it's probably not a bug. It's probably just too much for your device.
-If you think you are using Key Mapper in a reasonable way and still experience random crashes, ask about it in [the discord server.](http://keymapper.club)
-
-## "How do I change the keyboard?"
-
-There are multiple ways to do this.
-
-- Tap the keyboard button at the bottom of your display when you are typing something. Not all devices have this and some devices have this feature hidden behind a setting somewhere.
-- Tap the notification that allows you to change the keyboard when you are typing something. Not all devices have this.
-- Open Key Mapper and tap "show input method picker" in the menu :material-menu:.
-
-!!! tip
- If you want to switch between one of the Key Mapper keyboards and a normal keyboard when a device, such as a keyboard or game controller, connects/disconnects then Key Mapper can do this for you automatically. Set it up [here](user-guide/settings.md#automatically-change-the-on-screen-keyboard-when-a-device-connectsdisconnects).
-
-## "My keyboard doesn't appear when using the app."
-
-Key Mapper Basic Input Method (the keyboard built-in to the app) has no GUI/buttons. You can install the [Key Mapper GUI Keyboard](https://play.google.com/store/apps/details?id=io.github.sds100.keymapper.inputmethod.latin) to get a proper keyboard that can also perform Key Mapper actions.
-
-## "Why don't my volume buttons work when I press them?"
-Give the app Do Not Disturb access in your device settings. At the top of the homescreen in the Key Mapper app there is a "Fix" button to do this.
-
-## "Why aren't the buttons on my Bluetooth device detected?"
-Many Bluetooth devices (like headphones) aren't supported by Key Mapper out of the box. Bluetooth keyboards work most of the time. If you are willing and able to do some simple debugging, perhaps by installing utility apps or using ADB, [join the Discord server](http://keymapper.club) and we will try our best to get it working for you.
-
-## "Why doesn't the app open in Dex mode?"
-Samsung Dex doesn't allow apps with a 3rd party keyboard to open while in Dex mode. You can still configure key maps while out of Dex mode and your key maps which don't require a Key Mapper keyboard will still work in Dex mode.
-
-If you *really* want to open the app in DeX, you can put DeX in developer mode:
-
-- In Samsung DeX, open Settings -> Samsung DeX -> About Samsung DeX
-- Click/Tap on the "Samsung DeX" title 5 times very fast
-- You will see a pop-up "Turn on developer options?", press OK
-- Restart Samsung DeX for the change to take effect
-
-## "Why doesn't the app uninstall?"
-You have probably enabled the app's device administrator in your device's settings. To uninstall the app, you must turn it off. The location of the device admin settings page varies on devices but on skins close to stock-Android it is under "Security" -> "Device admin apps". If you need help, [ask in the Discord server.](http://keymapper.club)
-
-## "Why can't I remap some of my Joy Con buttons?"
-Not all the Joy Con buttons are visible to accessibility services. There isn't anything the developer can do.
-
-I tested the app on SwitchRoot Android and this is what works...
-
- **Working:**
-
-* ZL (Button L2)
-* L (Button L1)
-* \- (Select)
-* \+ (Start)
-* Left analog stick button (unknown keycode 0)
-* ZR (Button R2)
-* R (Button R1)
-* X (Button X)
-* Y (Button Y)
-* B (Button B)
-* A (Button A)
-* Home (Home)
-* Volume up (Vol up)
-* Volume down (Vol down)
-
-**Not working:**
-
-* Screenshot button
-* All D-Pad buttons (used by OS)
-* Both analog sticks (used by OS)
-* Right analog stick button
-* SR and SL (left joycon)
-* SR and SL (right joycon)
-* Power button
-
-## "Add on-screen buttons to Key Mapper"
-
-On-screen buttons are not a planned feature. In the near future, it will not be possible for apps to do this, even if some apps can right now. There is currently no work being done on adding on-screen buttons.
-
-Google is removing the ability for apps to draw overlays over other apps. This is called the "system alert window" feature in the developer world. Android Go devices already can't do this.
-
-## "A game doesn't detect my key maps"
-
-Unsupported games
-- Fortnite
-
-There is no guarantee that your key maps will work in games. The app isn't designed for it.
-Follow this guide if you are remapping buttons on a game controller to different buttons on a game controller.
-
-- Connect your controller to your device.
-- Create a trigger for whatever button you want to remap.
-- Press "Add Action" and create a "Key Event" action by going to the "Key Event" tab.
-- Choose your keycode AND select your controller as the device in the dropdown menu.
-- Save the keymap and hopefully it will work.
-
-## "How can I 'jump bridge' with Key Mapper? / How can I use Key Mapper for Minecraft PVP?"
-
-This is not an app designed for gaming. Please look elsewhere for help with this, such as YouTube tutorials or ask in [the discord server.](http://keymapper.club) Also note that use of 'jump bridging' or very fast attacks on Minecraft servers where it is not allowed has absolutely nothing to do with the developer and it is not endorsed or encouraged. Again, this is not an app optimised for playing mobile games.
-
-## "Can I use the app on Chromebook?"
-
-Not all features work on Chromebook. The app is not supported on Chromebook.
-Key Mapper can't "tap the screen" for obvious reasons. If you want to play a game on Chromebook using Key Mapper with keyboard controls (especially *Among Us*) then you are unlikely to be able to do so.
-
-That being said, many features should work, such as remapping keyboard buttons.
-
-## "Can I remap on-screen controls to buttons with Key Mapper?"
-
-Technically yes but it would be a horrendous gaming experience. There is an action in Key Mapper to touch the screen but Key Mapper is only allowed to tap/swipe in one place at a time. Therefore, you wouldn't be able to tap forward on an on-screen joystick and shoot at the same time for example. This is how the Android API works and there is nothing I can do to change it.
-
-[Ask for help :fontawesome-brands-discord:](http://keymapper.club){: .md-button .md-button--primary }
-
-## "Can I remap my Bixby button?"
-
-Key Mapper doesn't yet offer a way to remap the Bixby button but if you are rooted you can remap the Bixby button to something that Key Mapper can remap. Follow this [guide](https://forum.xda-developers.com/t/remap-bixby-manually-using-all-in-one-gestures-bind-to-flashlight-root.3660378/) on XDA.
diff --git a/docs/images/advanced-triggers-paywall.png b/docs/images/advanced-triggers-paywall.png
deleted file mode 100644
index dcd1490bad..0000000000
Binary files a/docs/images/advanced-triggers-paywall.png and /dev/null differ
diff --git a/docs/images/android-about-phone.png b/docs/images/android-about-phone.png
deleted file mode 100644
index e47fe711ef..0000000000
Binary files a/docs/images/android-about-phone.png and /dev/null differ
diff --git a/docs/images/android-allow-usb-debugging-dialog.png b/docs/images/android-allow-usb-debugging-dialog.png
deleted file mode 100644
index 77cfb67baf..0000000000
Binary files a/docs/images/android-allow-usb-debugging-dialog.png and /dev/null differ
diff --git a/docs/images/android-developer-options-usb-debugging.png b/docs/images/android-developer-options-usb-debugging.png
deleted file mode 100644
index e004e98bb7..0000000000
Binary files a/docs/images/android-developer-options-usb-debugging.png and /dev/null differ
diff --git a/docs/images/command-prompt-adb-devices-no-devices.png b/docs/images/command-prompt-adb-devices-no-devices.png
deleted file mode 100644
index 1187670ea5..0000000000
Binary files a/docs/images/command-prompt-adb-devices-no-devices.png and /dev/null differ
diff --git a/docs/images/command-prompt-adb-devices-offline.png b/docs/images/command-prompt-adb-devices-offline.png
deleted file mode 100644
index 576b15ad86..0000000000
Binary files a/docs/images/command-prompt-adb-devices-offline.png and /dev/null differ
diff --git a/docs/images/command-prompt-adb-devices-success.png b/docs/images/command-prompt-adb-devices-success.png
deleted file mode 100644
index 88656f0fea..0000000000
Binary files a/docs/images/command-prompt-adb-devices-success.png and /dev/null differ
diff --git a/docs/images/command-prompt-adb-devices-unauthorized.png b/docs/images/command-prompt-adb-devices-unauthorized.png
deleted file mode 100644
index e18321263f..0000000000
Binary files a/docs/images/command-prompt-adb-devices-unauthorized.png and /dev/null differ
diff --git a/docs/images/config-keymap-actions-no-error.png b/docs/images/config-keymap-actions-no-error.png
deleted file mode 100644
index 711052f868..0000000000
Binary files a/docs/images/config-keymap-actions-no-error.png and /dev/null differ
diff --git a/docs/images/config-keymap-actions-tab.png b/docs/images/config-keymap-actions-tab.png
deleted file mode 100644
index 346fff07b6..0000000000
Binary files a/docs/images/config-keymap-actions-tab.png and /dev/null differ
diff --git a/docs/images/config-keymap-choose-ime.png b/docs/images/config-keymap-choose-ime.png
deleted file mode 100644
index 4791686dfc..0000000000
Binary files a/docs/images/config-keymap-choose-ime.png and /dev/null differ
diff --git a/docs/images/config-keymap-empty.png b/docs/images/config-keymap-empty.png
deleted file mode 100644
index fadcb0b831..0000000000
Binary files a/docs/images/config-keymap-empty.png and /dev/null differ
diff --git a/docs/images/config-keymap-keycode-action-choose-ime-error.png b/docs/images/config-keymap-keycode-action-choose-ime-error.png
deleted file mode 100644
index 2e7bfd3574..0000000000
Binary files a/docs/images/config-keymap-keycode-action-choose-ime-error.png and /dev/null differ
diff --git a/docs/images/config-keymap-keycode-action-enable-ime-error.png b/docs/images/config-keymap-keycode-action-enable-ime-error.png
deleted file mode 100644
index 30fed1571f..0000000000
Binary files a/docs/images/config-keymap-keycode-action-enable-ime-error.png and /dev/null differ
diff --git a/docs/images/config-keymap-trigger-dnd-error.png b/docs/images/config-keymap-trigger-dnd-error.png
deleted file mode 100644
index ff4bf9ddd3..0000000000
Binary files a/docs/images/config-keymap-trigger-dnd-error.png and /dev/null differ
diff --git a/docs/images/constraint-mode-radio-buttons.png b/docs/images/constraint-mode-radio-buttons.png
deleted file mode 100644
index 24c086d12d..0000000000
Binary files a/docs/images/constraint-mode-radio-buttons.png and /dev/null differ
diff --git a/docs/images/contributing-app-structure.png b/docs/images/contributing-app-structure.png
deleted file mode 100644
index debfa691bc..0000000000
Binary files a/docs/images/contributing-app-structure.png and /dev/null differ
diff --git a/docs/images/favicon.ico b/docs/images/favicon.ico
deleted file mode 100644
index 203a34fadb..0000000000
Binary files a/docs/images/favicon.ico and /dev/null differ
diff --git a/docs/images/hg-action-settings-action-count.png b/docs/images/hg-action-settings-action-count.png
deleted file mode 100644
index 43ee3f5a2a..0000000000
Binary files a/docs/images/hg-action-settings-action-count.png and /dev/null differ
diff --git a/docs/images/hg-action-settings-delay-next-action.png b/docs/images/hg-action-settings-delay-next-action.png
deleted file mode 100644
index 25c663f549..0000000000
Binary files a/docs/images/hg-action-settings-delay-next-action.png and /dev/null differ
diff --git a/docs/images/hg-action-settings-rate.png b/docs/images/hg-action-settings-rate.png
deleted file mode 100644
index 99c471e829..0000000000
Binary files a/docs/images/hg-action-settings-rate.png and /dev/null differ
diff --git a/docs/images/hg-action-settings-repeat.png b/docs/images/hg-action-settings-repeat.png
deleted file mode 100644
index cf66580bf3..0000000000
Binary files a/docs/images/hg-action-settings-repeat.png and /dev/null differ
diff --git a/docs/images/hg-action-settings-toast.png b/docs/images/hg-action-settings-toast.png
deleted file mode 100644
index 8ea1b844bd..0000000000
Binary files a/docs/images/hg-action-settings-toast.png and /dev/null differ
diff --git a/docs/images/hg-action-settings.png b/docs/images/hg-action-settings.png
deleted file mode 100644
index 066e1fdc9b..0000000000
Binary files a/docs/images/hg-action-settings.png and /dev/null differ
diff --git a/docs/images/hg-first-time.png b/docs/images/hg-first-time.png
deleted file mode 100644
index f2dc6c9bac..0000000000
Binary files a/docs/images/hg-first-time.png and /dev/null differ
diff --git a/docs/images/hg-general-settings.png b/docs/images/hg-general-settings.png
deleted file mode 100644
index f86261ddf7..0000000000
Binary files a/docs/images/hg-general-settings.png and /dev/null differ
diff --git a/docs/images/hg-home-empty.png b/docs/images/hg-home-empty.png
deleted file mode 100644
index bdb19725c5..0000000000
Binary files a/docs/images/hg-home-empty.png and /dev/null differ
diff --git a/docs/images/hg-notification.png b/docs/images/hg-notification.png
deleted file mode 100644
index ac21e7f9f4..0000000000
Binary files a/docs/images/hg-notification.png and /dev/null differ
diff --git a/docs/images/hg-settings-battery-optimisation.png b/docs/images/hg-settings-battery-optimisation.png
deleted file mode 100644
index 7b5ebabeac..0000000000
Binary files a/docs/images/hg-settings-battery-optimisation.png and /dev/null differ
diff --git a/docs/images/hg-settings-dnd.png b/docs/images/hg-settings-dnd.png
deleted file mode 100644
index 1c18843e0f..0000000000
Binary files a/docs/images/hg-settings-dnd.png and /dev/null differ
diff --git a/docs/images/hg-settings-services.png b/docs/images/hg-settings-services.png
deleted file mode 100644
index 5ab12da310..0000000000
Binary files a/docs/images/hg-settings-services.png and /dev/null differ
diff --git a/docs/images/hg-toast.png b/docs/images/hg-toast.png
deleted file mode 100644
index 8e6c61c83c..0000000000
Binary files a/docs/images/hg-toast.png and /dev/null differ
diff --git a/docs/images/hg-trigger-from-other-apps.png b/docs/images/hg-trigger-from-other-apps.png
deleted file mode 100644
index 607c386002..0000000000
Binary files a/docs/images/hg-trigger-from-other-apps.png and /dev/null differ
diff --git a/docs/images/hg-trigger-key-options-parallel.png b/docs/images/hg-trigger-key-options-parallel.png
deleted file mode 100644
index ca8015259f..0000000000
Binary files a/docs/images/hg-trigger-key-options-parallel.png and /dev/null differ
diff --git a/docs/images/hg-trigger-key-options-sequence.png b/docs/images/hg-trigger-key-options-sequence.png
deleted file mode 100644
index 2b02587164..0000000000
Binary files a/docs/images/hg-trigger-key-options-sequence.png and /dev/null differ
diff --git a/docs/images/hg-trigger-settings.png b/docs/images/hg-trigger-settings.png
deleted file mode 100644
index 1529e02cd0..0000000000
Binary files a/docs/images/hg-trigger-settings.png and /dev/null differ
diff --git a/docs/images/hg-warn-battery-optimisation.png b/docs/images/hg-warn-battery-optimisation.png
deleted file mode 100644
index 1756193254..0000000000
Binary files a/docs/images/hg-warn-battery-optimisation.png and /dev/null differ
diff --git a/docs/images/hg-warn-service.png b/docs/images/hg-warn-service.png
deleted file mode 100644
index 3860cf7b9b..0000000000
Binary files a/docs/images/hg-warn-service.png and /dev/null differ
diff --git a/docs/images/home-menu-report-bug-button.png b/docs/images/home-menu-report-bug-button.png
deleted file mode 100644
index 9a896c4441..0000000000
Binary files a/docs/images/home-menu-report-bug-button.png and /dev/null differ
diff --git a/docs/images/home-menu.png b/docs/images/home-menu.png
deleted file mode 100644
index 49954ac9e7..0000000000
Binary files a/docs/images/home-menu.png and /dev/null differ
diff --git a/docs/images/home_error_key_mapper_killed.png b/docs/images/home_error_key_mapper_killed.png
deleted file mode 100644
index 2411f17245..0000000000
Binary files a/docs/images/home_error_key_mapper_killed.png and /dev/null differ
diff --git a/docs/images/intent-event-tasker.jpg b/docs/images/intent-event-tasker.jpg
deleted file mode 100644
index 8605401a59..0000000000
Binary files a/docs/images/intent-event-tasker.jpg and /dev/null differ
diff --git a/docs/images/key-event-relay-service.svg b/docs/images/key-event-relay-service.svg
deleted file mode 100644
index b6ce50c070..0000000000
--- a/docs/images/key-event-relay-service.svg
+++ /dev/null
@@ -1,409 +0,0 @@
-
-
-
\ No newline at end of file
diff --git a/docs/images/logo.png b/docs/images/logo.png
deleted file mode 100755
index 6554ca295c..0000000000
Binary files a/docs/images/logo.png and /dev/null differ
diff --git a/docs/images/notification-toggle-keyboard.png b/docs/images/notification-toggle-keyboard.png
deleted file mode 100644
index e4ff9d44fb..0000000000
Binary files a/docs/images/notification-toggle-keyboard.png and /dev/null differ
diff --git a/docs/images/notification-toggle-mappings.png b/docs/images/notification-toggle-mappings.png
deleted file mode 100644
index abd883104b..0000000000
Binary files a/docs/images/notification-toggle-mappings.png and /dev/null differ
diff --git a/docs/images/pause-keymaps-quick-settings.png b/docs/images/pause-keymaps-quick-settings.png
deleted file mode 100644
index 6fc7ef3ac1..0000000000
Binary files a/docs/images/pause-keymaps-quick-settings.png and /dev/null differ
diff --git a/docs/images/settings-enable-ime.png b/docs/images/settings-enable-ime.png
deleted file mode 100644
index 9b078c51de..0000000000
Binary files a/docs/images/settings-enable-ime.png and /dev/null differ
diff --git a/docs/images/settings-logging-screen.png b/docs/images/settings-logging-screen.png
deleted file mode 100644
index 68d721ddb2..0000000000
Binary files a/docs/images/settings-logging-screen.png and /dev/null differ
diff --git a/docs/images/settings-logging-section.png b/docs/images/settings-logging-section.png
deleted file mode 100644
index 18775e3ea3..0000000000
Binary files a/docs/images/settings-logging-section.png and /dev/null differ
diff --git a/docs/images/trigger-page.png b/docs/images/trigger-page.png
deleted file mode 100644
index 54d015454a..0000000000
Binary files a/docs/images/trigger-page.png and /dev/null differ
diff --git a/docs/images/ui-slider-default-light-450px.png b/docs/images/ui-slider-default-light-450px.png
deleted file mode 100644
index 6cbd83807f..0000000000
Binary files a/docs/images/ui-slider-default-light-450px.png and /dev/null differ
diff --git a/docs/images/ui-slider-default-light.png b/docs/images/ui-slider-default-light.png
deleted file mode 100644
index 0f00a38bfd..0000000000
Binary files a/docs/images/ui-slider-default-light.png and /dev/null differ
diff --git a/docs/images/ui-toast.png b/docs/images/ui-toast.png
deleted file mode 100644
index cf47a45623..0000000000
Binary files a/docs/images/ui-toast.png and /dev/null differ
diff --git a/docs/includes/action-options/action-count.md b/docs/includes/action-options/action-count.md
deleted file mode 100644
index 20bf780d0d..0000000000
--- a/docs/includes/action-options/action-count.md
+++ /dev/null
@@ -1,8 +0,0 @@
- How many times
-
-
-!!! info "Key Mapper 2.1.0+"
- On Key Mapper 2.2.0 and 2.1.0 this is called "action count".
-
-This option serves as a multiplier. If this is equal to 5 when your mapping is triggered then your action will be performed 5 times.
-If this is used with the 'repeat' option then this will perform the action this many times every time it repeats.
\ No newline at end of file
diff --git a/docs/includes/action-options/delay-before-next-action.md b/docs/includes/action-options/delay-before-next-action.md
deleted file mode 100644
index 0903d4d7aa..0000000000
--- a/docs/includes/action-options/delay-before-next-action.md
+++ /dev/null
@@ -1,6 +0,0 @@
- Delay before next action (ms)
-
-
-!!! info "Key Mapper 2.2.0+"
-
-This option takes effect if you have multiple actions in your mapping. The slider sets the amount of time between this action and the next.
\ No newline at end of file
diff --git a/docs/includes/action-options/delay-until-repeat.md b/docs/includes/action-options/delay-until-repeat.md
deleted file mode 100644
index 32e646f3be..0000000000
--- a/docs/includes/action-options/delay-until-repeat.md
+++ /dev/null
@@ -1,4 +0,0 @@
- Delay until repeat... (ms)
-
-
-This option sets the amount of time between the first action and the second action (or the first repeat). This is part of the keyboard key behaviour simulation. If you want your repeating action to begin straight away, you can make this 0.
\ No newline at end of file
diff --git a/docs/includes/action-options/hold-down-behaviour.md b/docs/includes/action-options/hold-down-behaviour.md
deleted file mode 100644
index 5394c16760..0000000000
--- a/docs/includes/action-options/hold-down-behaviour.md
+++ /dev/null
@@ -1,8 +0,0 @@
- Hold down until trigger is...
- :radiobox-marked:{: .accent-light } Released :radiobox-marked:{: .accent-light } Pressed again
-
-!!! info "Key Mapper 2.2.0+"
-
-This setting allows you to choose from two behaviours. If 'Released' is selected, holding down your trigger key(s) will translate to holding down the action, for as long as you hold down the trigger key(s).
-
-If you choose 'Pressed again', pressing your trigger key(s) once will be sufficient to start holding down the action. To stop the key map, you will need to press the trigger key(s) a second time.
\ No newline at end of file
diff --git a/docs/includes/action-options/hold-down.md b/docs/includes/action-options/hold-down.md
deleted file mode 100644
index 36ef737e4e..0000000000
--- a/docs/includes/action-options/hold-down.md
+++ /dev/null
@@ -1,5 +0,0 @@
-:material-checkbox-marked:{: .accent-light } Hold down
-
-!!! info "Key Mapper 2.1.0+"
-
-This setting provides the ability to simulate holding down a key or tapping a coordinate (Android 8.0+). With this turned on (and repeat turned off), the default behaviour is that holding down your trigger will translate to holding down the action, for as long as you hold down the trigger.
\ No newline at end of file
diff --git a/docs/includes/action-options/repeat-every.md b/docs/includes/action-options/repeat-every.md
deleted file mode 100644
index 2cd73db7ca..0000000000
--- a/docs/includes/action-options/repeat-every.md
+++ /dev/null
@@ -1,8 +0,0 @@
- Repeat every... (ms)
-
-
-This option sets the time period for your repeating action. If this is set to 200, your action will repeat every 200ms, or in terms of frequency, 5 times per second. Some people prefer to think about this setting as a repeat rate, commonly measured in 'clicks' per second or cps. To calculate the appropriate time period for this option from a desired frequency, use this equation:
-
-```
-Time period (ms) = 1000 / Frequency ('cps')
-```
\ No newline at end of file
diff --git a/docs/includes/action-options/repeat-limit.md b/docs/includes/action-options/repeat-limit.md
deleted file mode 100644
index e1a49a64b7..0000000000
--- a/docs/includes/action-options/repeat-limit.md
+++ /dev/null
@@ -1,6 +0,0 @@
- Repeat limit
-
-
-!!! info "Key Mapper 2.3.0+"
-
-Changing this will change how many times the action will repeat. By default this is set to "no limit".
\ No newline at end of file
diff --git a/docs/includes/action-options/repeat.md b/docs/includes/action-options/repeat.md
deleted file mode 100644
index a105be197f..0000000000
--- a/docs/includes/action-options/repeat.md
+++ /dev/null
@@ -1,3 +0,0 @@
-:material-checkbox-marked:{: .accent-light } Repeat
-
-When this is turned on, Key Mapper will execute your actions repeatedly. This is particularly useful when emulating a keyboard key press, where in most applications holding down the key would result in a repeating output. The default settings in Key Mapper are designed to emulate that behaviour when 'Repeat' is turned on.
\ No newline at end of file
diff --git a/docs/includes/action-options/using-hold-down-and-repeat-together.md b/docs/includes/action-options/using-hold-down-and-repeat-together.md
deleted file mode 100644
index 8a702523fe..0000000000
--- a/docs/includes/action-options/using-hold-down-and-repeat-together.md
+++ /dev/null
@@ -1,8 +0,0 @@
-!!! info "Key Mapper 2.2.0+"
-
-You can use turn on both of these settings to unlock an additional setting. A repeating hold down action behaves like a normal 'Repeat' action in that the action repeats itself with a given frequency. It also behaves like a 'Hold down' action in that each individual action will be held for a certain amount of time in each cycle.
-
- Hold down duration (ms)
-
-
-This allows you to set how long the action is held down for before repeating.
\ No newline at end of file
diff --git a/docs/includes/action-type-list.md b/docs/includes/action-type-list.md
deleted file mode 100644
index f2fe240cb6..0000000000
--- a/docs/includes/action-type-list.md
+++ /dev/null
@@ -1,14 +0,0 @@
-Tab | Description |
-|-|-|
-| [App](../user-guide/actions#app) | Choose an app to open when you press your trigger. |
-| [App shortcut](../user-guide/actions#app-shortcut) | Choose an app operation (such as sharing location, checking local traffic, sending a text message) |
-| [Key code](../user-guide/actions#key-code) | Emulate a keyboard key press (such as an alphanumeric character or multimedia key) |
-| [System](../user-guide/actions#system) | Choose a system operation (such as toggling Bluetooth, opening the home menu, toggling flashlight) |
-| [Key](../user-guide/actions#key) | An alternative way to choose a key press action, by pressing the key that you want to map to. |
-| [Tap screen (2.1.0+)](../user-guide/actions#tap-screen-210) | Emulate a screen tap at a specific location on your screen. |
-| [Key event (2.1.0+)](../user-guide/actions#key-event-210) | Emulate a key press from a specific connected device. |
-| [Text](../user-guide/actions#text) | Emulate typing a string. |
-| [Intent (2.3.0+)](../user-guide/actions#intent-230) | See [this page.](../user-guide/actions/#intent-230) |
-| [Phone call (2.3.0+)](../user-guide/actions#phone-call-230) | Call a telephone number. Network and carrier rates will apply. |
-| [Sound (2.4.0+)](../user-guide/actions#sound-240) | Play a sound |
-| Unsupported actions | A list of actions that your device won't allow you to use. Android frequently changes what users are allowed to do between versions. |
\ No newline at end of file
diff --git a/docs/includes/configuring-constraints.md b/docs/includes/configuring-constraints.md
deleted file mode 100644
index 3621436a9e..0000000000
--- a/docs/includes/configuring-constraints.md
+++ /dev/null
@@ -1,6 +0,0 @@
-
-Constraints allow you to restrict your mappings to only work in some situations.
-
-To add a constraint from the 'Constraints and more' or 'Options' tab, tap 'Add constraint'.
-
-Go [here](/user-guide/constraints) to see how you can configure constraints.
\ No newline at end of file
diff --git a/docs/includes/go-to-settings.md b/docs/includes/go-to-settings.md
deleted file mode 100644
index 0508f69761..0000000000
--- a/docs/includes/go-to-settings.md
+++ /dev/null
@@ -1,2 +0,0 @@
-Open the Key Mapper settings by opening the menu :material-menu: at the bottom of the home screen and then
-tapping Settings.
\ No newline at end of file
diff --git a/docs/includes/requires-key-mapper-keyboard-or-shizuku.md b/docs/includes/requires-key-mapper-keyboard-or-shizuku.md
deleted file mode 100644
index 69c69c981b..0000000000
--- a/docs/includes/requires-key-mapper-keyboard-or-shizuku.md
+++ /dev/null
@@ -1,4 +0,0 @@
-!!! attention
- If you are on Android 11 or newer it is recommended that you install Shizuku. Read more about this [here](shizuku.md).
-
- If you don't want to install Shizuku then you ***must*** be using the Key Mapper GUI Keyboard or the Key Mapper Basic Input Method for this to work. Follow [this guide](../user-guide/key-mapper-keyboard.md) to set it up.
\ No newline at end of file
diff --git a/docs/includes/requires-key-mapper-keyboard.md b/docs/includes/requires-key-mapper-keyboard.md
deleted file mode 100644
index 06b7b48954..0000000000
--- a/docs/includes/requires-key-mapper-keyboard.md
+++ /dev/null
@@ -1,2 +0,0 @@
-!!! attention
- You need to be using the Key Mapper GUI Keyboard or the Key Mapper Basic Input Method for this to work. Follow [this guide](../user-guide/key-mapper-keyboard.md) to set it up.
\ No newline at end of file
diff --git a/docs/includes/screenshot-version.md b/docs/includes/screenshot-version.md
deleted file mode 100644
index 1466db5707..0000000000
--- a/docs/includes/screenshot-version.md
+++ /dev/null
@@ -1,2 +0,0 @@
-!!! info
- This guide is updated to match current stable release UI. [Report inaccuracies.](https://github.com/keymapperorg/KeyMapper/issues/new)
\ No newline at end of file
diff --git a/docs/includes/trigger-options/dont-override-default-action.md b/docs/includes/trigger-options/dont-override-default-action.md
deleted file mode 100644
index df1750ef6d..0000000000
--- a/docs/includes/trigger-options/dont-override-default-action.md
+++ /dev/null
@@ -1,3 +0,0 @@
-:material-checkbox-marked:{: .accent-light } Do not override default action
-
-This is turned off by default. If this is turned on for a key then the key will still do it's normal thing even though it is remapped. E.g a volume down key with this option will still turn the volume down.
\ No newline at end of file
diff --git a/docs/includes/trigger-options/double-press-delay.md b/docs/includes/trigger-options/double-press-delay.md
deleted file mode 100644
index 448c96d423..0000000000
--- a/docs/includes/trigger-options/double-press-delay.md
+++ /dev/null
@@ -1,5 +0,0 @@
-
- Double press timeout (ms)
-
-
-This is only shown if a trigger has at least one key that needs to double pressed. This option will change the maximum amount of time that a button needs to be double pressed so that it is detected as a double press.
\ No newline at end of file
diff --git a/docs/includes/trigger-options/long-press-delay.md b/docs/includes/trigger-options/long-press-delay.md
deleted file mode 100644
index 4ca70ff6b7..0000000000
--- a/docs/includes/trigger-options/long-press-delay.md
+++ /dev/null
@@ -1,5 +0,0 @@
-
- Long press delay (ms)
-
-
-This is only shown if a trigger has at least one key that needs to long pressed. This option will change for how long these keys need to be held down.
\ No newline at end of file
diff --git a/docs/includes/trigger-options/long-press-double-vibration.md b/docs/includes/trigger-options/long-press-double-vibration.md
deleted file mode 100644
index 26ee7a14b9..0000000000
--- a/docs/includes/trigger-options/long-press-double-vibration.md
+++ /dev/null
@@ -1,3 +0,0 @@
-:material-checkbox-marked:{: .accent-light } Vibrate when keys are initially pressed and again when long pressed
-
-This is only shown if the 'at the same time' trigger mode is selected and the trigger needs to be long pressed.
\ No newline at end of file
diff --git a/docs/includes/trigger-options/on-screen-message.md b/docs/includes/trigger-options/on-screen-message.md
deleted file mode 100644
index 7e0c0ceae0..0000000000
--- a/docs/includes/trigger-options/on-screen-message.md
+++ /dev/null
@@ -1,5 +0,0 @@
-:material-checkbox-marked:{: .accent-light } Show an on-screen message
-
-When this is turned on, the following notice will come up at the bottom of the screen when ever you trigger your mapping.
-
-
\ No newline at end of file
diff --git a/docs/includes/trigger-options/sequence-trigger-timeout.md b/docs/includes/trigger-options/sequence-trigger-timeout.md
deleted file mode 100644
index 1da0dc7319..0000000000
--- a/docs/includes/trigger-options/sequence-trigger-timeout.md
+++ /dev/null
@@ -1,5 +0,0 @@
-
- Sequence trigger timeout (ms)
-
-
-This is only shown if you've chosen the 'in sequence' trigger mode. This option will change the time limit for how fast you need to complete the trigger.
\ No newline at end of file
diff --git a/docs/includes/trigger-options/trigger-when-screen-off.md b/docs/includes/trigger-options/trigger-when-screen-off.md
deleted file mode 100644
index 0cb2b46997..0000000000
--- a/docs/includes/trigger-options/trigger-when-screen-off.md
+++ /dev/null
@@ -1,16 +0,0 @@
-:material-checkbox-marked:{: .accent-light } Detect trigger when screen is off. ROOT only.
-
-These are the buttons which can be detected when the screen is off. Let the developer know about any buttons you would
-also like to be supported.
-
-!!! note
- Please send the output of pressing the buttons while running the `adb shell getevent -lq` command so the
- developer knows which key event name they need to add.
-
-* Volume Up
-* Volume Down
-* Headset button
-* Camera focus button
-* Camera button
-* Bixby button - on some ROMs the Bixby button is mapped to the Menu or Assist key code in Android so it will appear as these buttons in the trigger.
-* Search button
\ No newline at end of file
diff --git a/docs/includes/trigger-options/vibrate.md b/docs/includes/trigger-options/vibrate.md
deleted file mode 100644
index 1bf98248ca..0000000000
--- a/docs/includes/trigger-options/vibrate.md
+++ /dev/null
@@ -1,6 +0,0 @@
-:material-checkbox-marked:{: .accent-light } Vibrate
-
- Vibrate duration (ms)
-
-
-Tapping 'Vibrate' will cause your device to vibrate whenever you trigger your mapping. You can change how long your device vibrates with the slider.
\ No newline at end of file
diff --git a/docs/index.md b/docs/index.md
deleted file mode 100644
index 7e1cd59b19..0000000000
--- a/docs/index.md
+++ /dev/null
@@ -1,45 +0,0 @@
-# Welcome to Key Mapper Documentation
-
-[Key Mapper](https://github.com/keymapperorg/KeyMapper) is a free and open source Android app that can map single or multiple buttons to a custom action.
-
-
-
-
-
-
-This wiki aims to provide users with a comprehensive guide to using and setting up Key Mapper for typical implementations. For specific help with more complicated key maps or if this wiki does not answer your questions, you can join the [Key Mapper Discord support server](http://keymapper.club) and ask for help.
-
-[Get help :fontawesome-brands-discord:](http://keymapper.club){: .md-button .md-button--primary }
-[Support the project :fontawesome-solid-heart:](https://ko-fi.com/sethschroeder){: .md-button }
-[Share your key maps :material-hand-heart:](sharing.md){: .md-button .md-button--md-primary-bg-color }
-
-## Translations
-
-[](https://crowdin.com/project/key-mapper)
-[](https://crowdin.com/project/key-mapper)
-[](https://crowdin.com/project/key-mapper)
-[](https://crowdin.com/project/key-mapper)
-[](https://crowdin.com/project/key-mapper)
-[](https://crowdin.com/project/key-mapper)
-[](https://crowdin.com/project/key-mapper)
-
-## Star History
-
-[](https://star-history.com/#keymapperorg/KeyMapper&Date)
-
-## Our team đ§âđ»
-
-### Developers
-
-- [Seth Schroeder (sds100)](https://github.com/sds100): Lead developer who started the project.
-- [Tino W. (pixel-shock)](https://github.com/pixel-shock): Created the actions for swiping and pinching.
-
-### Community moderators/support
-
-- [Jack Ambler (jambl3r)](https://linkedin.com/in/jambl3r)
-
-### Translators
-
-- [HowToWhy (Czech)](https://youtube.com/channel/UCljg1FH1B_ju2D_NfqAYjDw)
-- [Katie Frogs (Polish)](https://github.com/KatieFrogs)
-- [DarĂo B. C. (@bydariogamer) (Spanish)](https://github.com/bydariogamer)
diff --git a/docs/known-issues.md b/docs/known-issues.md
deleted file mode 100644
index f8d8d143d2..0000000000
--- a/docs/known-issues.md
+++ /dev/null
@@ -1,54 +0,0 @@
-## Can not unlock phone because there is no keyboard.
-
-This has happened because you are using the Key Mapper Basic Input Method. This is an input method
-with no on-screen keyboard. You will need to reboot your device into "safe mode". The way to do this
-varies between devices so if these instructions don't work you will have to research how do to this
-for your device online.
-
-For most devices you must...
-
-1. Turn on your device.
-2. Hold down on the power button until the on-screen power menu pops up.
-3. Hold down on the "power off" (or sometimes "restart") button in the power menu.
-4. A popup should say whether you want to boot into safe mode. Do this.
-5. Unlock your device after it has rebooted into safe mode.
-6. Reboot your device into normal mode by pressing power off or restart in the power menu. You do **
- not** need to hold down on the "power off"/"restart" button to boot into safe mode.
-
-## Key Mapper can't tap multiple places at the same time
-
-If you are wanting to use Key Mapper to make buttons tap points on your screen then you need to use the "tap screen"
-action. Due to a restriction in what background apps are allowed to do in Android, it is not possible for Key Mapper to
-tap multiple places on screen at the same time.
-
-## Key Mapper can't open the accessibility settings on some devices.
-
-This is probably happening because your TV doesn't have any accessibility settings. The only way to fix it is to use
-ADB (Android Debug Bridge) on a PC/Mac. Please follow
-this [guide](user-guide/adb-permissions.md#enabling-the-accessibility-service) to grant enable the accessibility
-service.
-
-## External keyboard language is set to English US when using Key Mapper (Android 11 only)
-
-This is a bug in Android 11 and should be fixed in Android 12. There is a setting in Key Mapper
-2.3.0+ that helps you work around this issue. Read
-more [here](https://keymapperorg.github.io/KeyMapper/redirects/android-11-device-id-bug-work-around).
-
-## Key maps for an external device randomly stop working after a reboot
-
-See issue [#783](https://github.com/keymapperorg/KeyMapper/issues/783).
-
-**Problem**: Key Mapper uses the device id (a.k.a descriptor) to ensure triggers from specific
-devices are only detected. The ids for some devices change after every reboot, which breaks this
-filtering. This is not supposed to happen but fortunately it only happens very rarely.
-**Solution**: Set the device for the trigger to "any device" so Key Mapper accepts the trigger from
-any device.
-
-## Volume increases to max/minimum when pressing power and the respective volume button when the device is off
-
-This seems to be a bug with accessibility services on Android Pie+ on some devices. It also happens with the Macrodroid app when you only enable their accessibility service which filters key events. I tested Key Mapper with no code in the onKeyEvent function in the accessibility service and it still happens. These are the devices that I've tested.
-
-- :red-check: Rooted OxygenOS Android 10 OnePlus 6T
-- :red-check: Rooted stock Android 9 Pie custom ROM on the OnePlus 6T
-- :red-check: Non-rooted OxygenOS Android 10 OnePlus 7 Pro
-- :green-cross: Android 10 on the Pixel 2
\ No newline at end of file
diff --git a/docs/overrides/.icons/checkbox-marked.svg b/docs/overrides/.icons/checkbox-marked.svg
deleted file mode 100644
index 6d22afb997..0000000000
--- a/docs/overrides/.icons/checkbox-marked.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/docs/overrides/.icons/devices.svg b/docs/overrides/.icons/devices.svg
deleted file mode 100644
index 45a7ecf23c..0000000000
--- a/docs/overrides/.icons/devices.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
\ No newline at end of file
diff --git a/docs/overrides/.icons/fdroid.svg b/docs/overrides/.icons/fdroid.svg
deleted file mode 100644
index 9da75c2bfd..0000000000
--- a/docs/overrides/.icons/fdroid.svg
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
diff --git a/docs/overrides/.icons/green-check.svg b/docs/overrides/.icons/green-check.svg
deleted file mode 100644
index 7bf90e3298..0000000000
--- a/docs/overrides/.icons/green-check.svg
+++ /dev/null
@@ -1,54 +0,0 @@
-
-
diff --git a/docs/overrides/.icons/green-cross.svg b/docs/overrides/.icons/green-cross.svg
deleted file mode 100644
index b7702c6136..0000000000
--- a/docs/overrides/.icons/green-cross.svg
+++ /dev/null
@@ -1,54 +0,0 @@
-
-
diff --git a/docs/overrides/.icons/kofi.svg b/docs/overrides/.icons/kofi.svg
deleted file mode 100644
index 95e8c6f0cc..0000000000
--- a/docs/overrides/.icons/kofi.svg
+++ /dev/null
@@ -1,95 +0,0 @@
-
-
diff --git a/docs/overrides/.icons/radiobox-marked.svg b/docs/overrides/.icons/radiobox-marked.svg
deleted file mode 100644
index 1f8feb1582..0000000000
--- a/docs/overrides/.icons/radiobox-marked.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/docs/overrides/.icons/red-check.svg b/docs/overrides/.icons/red-check.svg
deleted file mode 100644
index bf900cf5fe..0000000000
--- a/docs/overrides/.icons/red-check.svg
+++ /dev/null
@@ -1,54 +0,0 @@
-
-
diff --git a/docs/overrides/.icons/red-cross.svg b/docs/overrides/.icons/red-cross.svg
deleted file mode 100644
index 79a566af6f..0000000000
--- a/docs/overrides/.icons/red-cross.svg
+++ /dev/null
@@ -1,54 +0,0 @@
-
-
diff --git a/docs/overrides/.icons/select-all.svg b/docs/overrides/.icons/select-all.svg
deleted file mode 100644
index 7b807e9d74..0000000000
--- a/docs/overrides/.icons/select-all.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
\ No newline at end of file
diff --git a/docs/overrides/main.html b/docs/overrides/main.html
deleted file mode 100644
index 94d9808cc7..0000000000
--- a/docs/overrides/main.html
+++ /dev/null
@@ -1 +0,0 @@
-{% extends "base.html" %}
diff --git a/docs/overrides/sharing.html b/docs/overrides/sharing.html
deleted file mode 100644
index 5e970a9e52..0000000000
--- a/docs/overrides/sharing.html
+++ /dev/null
@@ -1,51 +0,0 @@
-{% extends "base.html" %}
-
-{% block content %}
- {{ super() }}
-
-
-
{{ lang.t("meta.comments") }}
-
-
-
-
-{% endblock %}
diff --git a/docs/privacy-policy.md b/docs/privacy-policy.md
deleted file mode 100644
index 8926665dca..0000000000
--- a/docs/privacy-policy.md
+++ /dev/null
@@ -1,48 +0,0 @@
-The developer built the Key Mapper app as a free and Open Source app. This SERVICE is provided by the developer at no cost and is intended for use as is.
-
-This page is used to inform visitors regarding my policies with the collection, use, and disclosure of Personal Information if anyone decided to use my Service.
-
-If you choose to use my Service, then you agree to the collection and use of information in relation to this policy. The Personal Information that I collect is used for providing and improving the Service. I will not use or share your information with anyone except as described in this Privacy Policy. You can enable or disable all data collection from within the app settings.
-
-**Information Collection and Use**
-
-While using our Service, Key Mapper will temporarily record the buttons you are pressing. This information is erased once you have stopped pressing the buttons in question. This information will be temporarily stored on your device and is not collected by me in any way.
-
-#### As of version 1.1.5, the Google Analytics for Firebase library has been removed from the app. The rest of this section only applies to versions older than 1.1.5.
-
-The app does use third party services that may collect information used to identify you.
-
-The type of information collected through the Google Analytics for Firebase default implementation includes:
-
-- Number of users and sessions
-- Session duration
-- Operating systems
-- Device models
-- Geography
-- First launches
-- App opens
-- App updates
-
-Link to privacy policy and information of third party service providers used by the app
-
-* [Privacy Policy](https://firebase.google.com/policies/analytics), [Information](https://firebase.google.com/support/privacy/)
-
-**Log Data**
-
-I want to inform you that whenever you use my Service, in a case of an error in the app I collect data and information (through third party products) on your phone called Log Data. This Log Data may include information such as your device Internet Protocol (âIPâ) address, device name, operating system version, the configuration of the app when utilizing my Service, the time and date of your use of the Service, and other statistics.
-
-**Security**
-
-I value your trust in providing us your Personal Information, thus we are striving to use commercially acceptable means of protecting it. But remember that no method of transmission over the internet, or method of electronic storage is 100% secure and reliable, and I cannot guarantee its absolute security.
-
-**Links to Other Sites**
-
-This Service may contain links to other sites. If you click on a third-party link, you will be directed to that site. Note that these external sites are not operated by me. Therefore, I strongly advise you to review the Privacy Policy of these websites. I have no control over and assume no responsibility for the content, privacy policies, or practices of any third-party sites or services.
-
-**Changes to This Privacy Policy**
-
-I may update our Privacy Policy from time to time. Thus, you are advised to review this page periodically for any changes. I will notify you of any changes by posting the new Privacy Policy on this page. These changes are effective immediately after they are posted on this page.
-
-**Contact Us**
-
-If you have any questions or suggestions about my Privacy Policy, do not hesitate to contact me.
diff --git a/docs/quick-start.md b/docs/quick-start.md
deleted file mode 100644
index 173d073429..0000000000
--- a/docs/quick-start.md
+++ /dev/null
@@ -1,201 +0,0 @@
-This page aims to give users an introduction to the Key Mapper interface and a demonstration on how to perform typical tasks with the app.
-For specific troubleshooting, [consult the FAQ.](faq.md)
-
-
-
---8<-- "screenshot-version.md"
-
-## First time setup
-
-When you open Key Mapper, you will be presented with this screen.
-This screen is referred to as the Key Mapper home screen.
-
-
-
-### Set up the accessibility service
-Tapping the FIX button next to the accessibility service prompt will allow you to grant Key Mapper permission to run its accessibility service. You must do this for the app to work at all.
-
-
-
-You can then tap Key Mapper in your list of available services. There may be many others on this screen and your interface may be slightly different.
-
-!!! attention
- If nothing happens when you tap FIX, or if you can't enable the service, see [this page](user-guide/adb-permissions.md#enabling-the-accessibility-service) or ask for help in the [Discord server.](http://keymapper.club)
-
-
-
-### Disable app-killing
-
-!!! failure "Important"
- If you are using a Huawei or Xiaomi branded device, a device with 2GB of RAM or less, or intend to use the app while playing a mobile game, it is especially important to follow the next step.
-
- Tapping the FIX button next to the battery optimisation prompt will allow you to turn off features of your device that may prevent Key Mapper's essential services from running in the background. This is usually the source of the common 'Key Mapper randomly stops working' issue.
-
-Devices older than Android 6.0 do not have this prompt in Key Mapper. However, I was still able to find the setting in my device settings app. Read more below for details.
-
-
-
-The screen that opens after tapping FIX may vary depending on your device. In my case, to disable optimisation I found the app(s) in the list, tapped them to open their settings, and chose 'Don't optimise' and on the second device, 'Disabled'.
-
-!!! tip
- There is an excellent guide at [dontkillmyapp.com](http://dontkillmyapp.com) that explains how to disable battery and/or memory optimisation for your specific device. If Key Mapper randomly stops working even after you complete these steps, ask for help in [the Discord server.](http://keymapper.club)
-
-## Creating a key map
-
-!!! summary
- A key map is an association between a user input (such as pushing a key or button) and a response from the device (sending information about what key was pressed and for how long).
-
- In Key Mapper, 'user inputs' that are recognised by the app are called 'triggers'. The responses from your device that were due to a trigger being pressed are called 'actions'.
-
- Key Mapper lets you assign actions to triggers that may be different from their default use. A 'volume up' trigger normally increases the volume when pressed, but this app can change that to something else.
-
-This guide deals with 'Key event' triggers. If you want to remap fingerprint gestures, [check out this guide.](user-guide/fingerprint-gestures.md)
-
-### Setting the trigger(s)
-
-To create your first key map, tap the + icon at the bottom of the Key Mapper home screen. You will see the screen below. On larger screens this will look slightly different because multiple tabs will be merged into one tab.
-
-
-
-In either case, the first step is to record a trigger. Tap the red 'Record trigger' button and then press the physical button that you want to change the function of. In this guide I will demonstrate with 'volume down'.
-
-Key Mapper can also create a key map with multiple triggers. If you want to use more than one trigger for one key map, you can press the buttons in the order you will press them to execute the key map. For example, if you wanted to map 'Ctrl' + 'H' to show the device home menu you should press 'Ctrl' and then 'H'.
-
-Key Mapper can also remap fingerprint gestures on many devices. You can learn how to do this [here.](user-guide/fingerprint-gestures.md)
-
-You should see this screen after pressing volume down.
-
-
-
-### Setup the ability to properly remap volume buttons
-
-You only need to do this on Android 6.0+. If you want to remap volume buttons and use them when Do Not Disturb is enabled, you should grant Key Mapper permission to do so. Key Mapper will show the error in the picture above if you need to do this.
-
-Tapping FIX will allow you to grant the permission. Find Key Mapper in the list and tap it in order to choose 'Allowed'.
-
-
-
-### Setting the action(s)
-
-Next, it's time to choose an action. If you have a large screen, you will see the 'Add action' button at the bottom of the screen. Otherwise, tap the 'Actions' tab at the top of the screen and then you will see the 'Add action' button.
-
-
-
-Tap the 'Add action' button at the bottom of this screen. The action selection screen will open. Here you can choose from a long list of actions. There is also a list of all the actions [here](user-guide/actions.md).
-
-For this simple demonstration I will choose KEYCODE_0 from the Keycode tab. This action will emulate pressing the 0 key on a keyboard. Key Mapper will let you know if you need to do any extra steps so that an action can work. In the picture there is an error message in the action telling you to 'enable' a Key Mapper keyboard. Tapping the action will take you to the correct place so that you can fix the error. I will walk through how to set up a key code action since these are the most used.
-
-
-
-!!! tip
- Key Mapper can also create a key map with multiple actions. If you want to add more actions to execute in series you can do so by tapping 'Add action' again and choosing the next action in the chain. You can drag and drop the actions into whatever order you like. In the next section you can specify a delay between those actions if you wish.
-
-### Fixing the action(s)
-
-1. Tap the action to fix the error.
-
-2. If you are creating a key code, key event or text action then you **MUST** read [this](user-guide/key-mapper-keyboard.md) guide
-
-3. In this case tapping the action will take you to the 'Language & Input' settings on your device. On a stock Android 11 Pixel 2 this is what it looks like. You will see a list of all the installed input methods on your device.
-
- 
-
-4. It is important to have read the guide in step 2 to understand what is happening from now on. On my device I installed the Key Mapper GUI Keyboard so I am going to turn this one on. Press back to go back to Key Mapper.
-
-5. There is now a 2nd thing that needs to be fixed as you can see in the picture.
-
- 
-
-6. Tap the action again and the input method picker will show up as shown in the picture. On Android 11+ Key Mapper can fix this error for you without showing the input method picker if you have enabled the accessibility service.
-
- 
-
-7. Since I enabled the Key Mapper GUI Keyboard I will use that input method with Key Mapper.
-
-8. If you followed these steps correctly then Key Mapper will stop showing any error messages underneath the action as shown. This action will now work.
-
- 
-
-## Customising a key map
-
-You may wish to customise your triggers and actions to have specific behaviours. Most people will want to do at least some customisation.
-
-### Trigger settings
-
-Starting with the triggers, tap the 3 dot :material-dots-vertical: menu to the right of the trigger's name to bring up the following menu.
-
-
-
-You can choose from four different settings. Turning on "Do not override default action" will mean that Key Mapper will not replace the normal operation of your trigger, instead it will execute the key map as well as the default operation.
-
-One trigger can have three different click types. Choose from short press, long press and double press. [Read more.](../user-guide/keymaps.md#key-click-type)
-
-### Customising actions
-
-Next, tap the 3 stacked dots :material-dots-vertical: to the right of the action's name to bring up the following menu.
-
-
-
-Here you can customise a lot of the operation of your key map, including timing and multipliers.
-
-___
-
-The following details refer to action timing settings.
-
---8<-- "action-options/delay-before-next-action.md"
-___
-
---8<-- "action-options/action-count.md"
-___
-
-#### Repeating actions
-
---8<-- "action-options/repeat.md"
-___
-
---8<-- "action-options/repeat-every.md"
-___
-
---8<-- "action-options/delay-until-repeat.md"
-___
-
---8<-- "action-options/repeat-behaviour.md"
-
-#### Hold down actions
-
---8<-- "action-options/hold-down.md"
-___
-
---8<-- "action-options/hold-down-behaviour.md"
-
-#### Using 'Hold down' and 'Repeat' together
-
---8<-- "action-options/using-hold-down-and-repeat-together.md"
-
-## Special options
-
-You can see explanations of more options [here](../user-guide/keymaps/#special-options).
-
-## Adding constraints
-
---8<-- "configuring-constraints.md"
-
-## Managing key maps
-
-To save your key map and return to the home screen, tap the save :material-content-save: icon in the bottom right of the screen.
-
-Now your key map should already be working. To pause/unpause all of your key maps, pull down the notification tray and tap the Key Mapper notification to toggle between Paused and Running.
-
- 
-
-On the Key Mapper home screen, tap the 3 bar :fontawesome-solid-bars: menu to open the Key Mapper general settings. You will see the following options.
-
- 
-
-Here you can pause/unpause/enable/disable all of your key maps at once.
-You can also back up and restore key maps here. [Learn more about back up and restore.](user-guide/backup-restore.md)
-
-Tapping 'Show input method picker' allows for switching between a Key Mapper compatible keyboard and any other.
-
-!!! tip
- Key Mapper can also remap fingerprint gestures on many devices. You can learn how to do this [here.](user-guide/fingerprint-gestures.md)
\ No newline at end of file
diff --git a/docs/report-issues.md b/docs/report-issues.md
deleted file mode 100644
index 39056de6be..0000000000
--- a/docs/report-issues.md
+++ /dev/null
@@ -1,14 +0,0 @@
-There is a button in the app that collects all the required information and walks through how to report an issue.
-
-1. Enable "extra logging" in the Key Mapper settings. You can find it at the bottom of the settings page as shown below.
-
- ??? info "Screenshot"
- 
-
-2. Reproduce your issue. You must be able to make the bug happen again because otherwise we can't test that it has been fixed. đ
-
-3. Tap the "report bug" button in the home screen menu as shown below. This will create a bug report zip file and help you send it to the developer.
-
- ??? info "Screenshot"
- 
-
diff --git a/docs/sharing.md b/docs/sharing.md
deleted file mode 100644
index 2ee819543c..0000000000
--- a/docs/sharing.md
+++ /dev/null
@@ -1,49 +0,0 @@
----
-template: sharing.html
----
-
-# Share Your Key Maps
-
-Before posting on GitHub Discussions, please make sure you adhere to these guidelines.
-
-???+ info "Rules"
-
- Don't forget that by using the comment system on this website that you are still using another service, and should
- adhere to it's [guidelines](https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) as well.
-
- ## General Rules
-
- ### Rule #1
- Be polite and respectful. People who work on this app are volunteering their time. đ
-
- ### Rule #2
- You should read the [FAQ](faq.md) and [known issues](known-issues.md) before asking questions, requesting features or
- reporting bugs. Bear in mind that this may update frequently. Messages repeating what is in
- the FAQ wastes everyone's time, so please don't do it.
-
- ### Rule #3
- No overly political discussion or NSFW discussion or imagery is permitted in any of our discussions. If discovered by a moderator you may be permanently banned.
-
- ### Rule #4
- This is an English-only discussion group. We remove messages in other languages simply because we don't have the time to translate or moderate messages in other languages.
-
-## 1. Sign into Giscus
-
-Giscus is a free and open source GitHub Discussions interpreter for integrating GitHub Discussions into a
-website.