├── .gitignore ├── AndroidManifest.xml ├── CHANGELOG.md ├── LICENSE ├── LICENSE.GPL ├── README.md ├── assets └── keymaps │ ├── de_DE │ ├── en_US │ └── template ├── build.xml ├── doc ├── RESOURCES └── hiddescriptors │ ├── AppleWirelessKeyboard │ ├── AppleWirelessMouse │ ├── BarcodeScanner │ ├── LogitechM500Mouse │ ├── LogitechPS3Keyboard │ ├── MicrosoftMouse │ ├── RazerCopperheadMouse │ └── SonyBDRemote ├── drawablesrc ├── app_icon.svg ├── btn_android_back.svg ├── btn_android_home.svg ├── btn_android_menu.svg ├── btn_ps3_circle.svg ├── btn_ps3_ps.svg ├── btn_ps3_select.svg ├── btn_ps3_square.svg ├── btn_ps3_start.svg ├── btn_ps3_triangle.svg ├── btn_ps3_x.svg ├── disconnected.svg ├── menu_paste.svg ├── problem.svg ├── scroll.svg ├── search_bt_device.svg └── tutorial_touch_arrow.svg ├── jni ├── Android.mk ├── bluectrld.c ├── bluectrld.h ├── error.c ├── error.h ├── hiddescriptor.h ├── hidhci.c ├── hidhci.h ├── hidipc.c ├── hidipc.h ├── hidl2cap.c ├── hidl2cap.h ├── hidsdp.c ├── hidsdp.h ├── log.c └── log.h ├── local.properties.example ├── project.properties ├── res ├── anim │ ├── slide_in_left.xml │ ├── slide_in_right.xml │ ├── slide_out_left.xml │ └── slide_out_right.xml ├── drawable-hdpi │ ├── ab_btn_add.png │ ├── ab_btn_keyboard.png │ ├── ab_btn_next_disabled.png │ ├── ab_btn_next_normal.png │ ├── ab_btn_previous_disabled.png │ ├── ab_btn_previous_normal.png │ ├── ab_transparent_dark_holo.9.png │ ├── app_icon.png │ ├── app_icon_small.png │ ├── bottom_bar_dark_holo.9.png │ ├── btn_android_back.png │ ├── btn_android_home.png │ ├── btn_android_menu.png │ ├── btn_ps3_circle.png │ ├── btn_ps3_ps.png │ ├── btn_ps3_select.png │ ├── btn_ps3_square.png │ ├── btn_ps3_start.png │ ├── btn_ps3_triangle.png │ ├── btn_ps3_x.png │ ├── disconnected.png │ ├── ic_ab_back_holo_dark.png │ ├── ic_action_send.png │ ├── list_focused_holo.9.png │ ├── list_pressed_holo_dark.9.png │ ├── menu_about.png │ ├── menu_compose.png │ ├── menu_help.png │ ├── menu_paste.png │ ├── menu_preferences.png │ ├── problem.png │ ├── scroll_base.png │ ├── scroll_horizontal_active.png │ ├── scroll_vertical_active.png │ ├── search_bt_device.png │ ├── textfield_activated_holo_dark.9.png │ ├── textfield_default_holo_dark.9.png │ ├── textfield_disabled_focused_holo_dark.9.png │ ├── textfield_disabled_holo_dark.9.png │ ├── tutorial_touch_arrow_down.png │ ├── tutorial_touch_arrow_down_left.png │ ├── tutorial_touch_arrow_left.png │ ├── tutorial_touch_arrow_right.png │ ├── tutorial_touch_arrow_up.png │ └── tutorial_touch_arrow_up_right.png ├── drawable-mdpi │ ├── ab_btn_add.png │ ├── ab_btn_keyboard.png │ ├── ab_btn_next_disabled.png │ ├── ab_btn_next_normal.png │ ├── ab_btn_previous_disabled.png │ ├── ab_btn_previous_normal.png │ ├── ab_transparent_dark_holo.9.png │ ├── app_icon.png │ ├── app_icon_small.png │ ├── bottom_bar_dark_holo.9.png │ ├── btn_android_back.png │ ├── btn_android_home.png │ ├── btn_android_menu.png │ ├── btn_ps3_circle.png │ ├── btn_ps3_ps.png │ ├── btn_ps3_select.png │ ├── btn_ps3_square.png │ ├── btn_ps3_start.png │ ├── btn_ps3_triangle.png │ ├── btn_ps3_x.png │ ├── disconnected.png │ ├── ic_ab_back_holo_dark.png │ ├── ic_action_send.png │ ├── list_focused_holo.9.png │ ├── list_pressed_holo_dark.9.png │ ├── menu_about.png │ ├── menu_compose.png │ ├── menu_help.png │ ├── menu_paste.png │ ├── menu_preferences.png │ ├── problem.png │ ├── scroll_base.png │ ├── scroll_horizontal_active.png │ ├── scroll_vertical_active.png │ ├── search_bt_device.png │ ├── textfield_activated_holo_dark.9.png │ ├── textfield_default_holo_dark.9.png │ ├── textfield_disabled_focused_holo_dark.9.png │ ├── textfield_disabled_holo_dark.9.png │ ├── tutorial_touch_arrow_down.png │ ├── tutorial_touch_arrow_down_left.png │ ├── tutorial_touch_arrow_left.png │ ├── tutorial_touch_arrow_right.png │ ├── tutorial_touch_arrow_up.png │ └── tutorial_touch_arrow_up_right.png ├── drawable-nodpi │ └── touchpad_background.png ├── drawable-xhdpi │ ├── ab_btn_add.png │ ├── ab_btn_keyboard.png │ ├── ab_btn_next_disabled.png │ ├── ab_btn_next_normal.png │ ├── ab_btn_previous_disabled.png │ ├── ab_btn_previous_normal.png │ ├── ab_transparent_dark_holo.9.png │ ├── app_icon.png │ ├── app_icon_small.png │ ├── bottom_bar_dark_holo.9.png │ ├── btn_android_back.png │ ├── btn_android_home.png │ ├── btn_android_menu.png │ ├── btn_ps3_circle.png │ ├── btn_ps3_ps.png │ ├── btn_ps3_select.png │ ├── btn_ps3_square.png │ ├── btn_ps3_start.png │ ├── btn_ps3_triangle.png │ ├── btn_ps3_x.png │ ├── disconnected.png │ ├── ic_ab_back_holo_dark.png │ ├── ic_action_send.png │ ├── list_focused_holo.9.png │ ├── list_pressed_holo_dark.9.png │ ├── menu_paste.png │ ├── problem.png │ ├── scroll_base.png │ ├── scroll_horizontal_active.png │ ├── scroll_vertical_active.png │ ├── search_bt_device.png │ ├── textfield_activated_holo_dark.9.png │ ├── textfield_default_holo_dark.9.png │ ├── textfield_disabled_focused_holo_dark.9.png │ ├── textfield_disabled_holo_dark.9.png │ ├── tutorial_touch_arrow_down.png │ ├── tutorial_touch_arrow_down_left.png │ ├── tutorial_touch_arrow_left.png │ ├── tutorial_touch_arrow_right.png │ ├── tutorial_touch_arrow_up.png │ └── tutorial_touch_arrow_up_right.png ├── drawable │ ├── ab_btn_next.xml │ ├── ab_btn_previous.xml │ ├── ab_button.xml │ ├── action_bar_home.xml │ ├── btn_touchpad.xml │ ├── btn_touchpad_pressed.xml │ ├── edit_text_holo_dark.xml │ ├── icon_btn_touchpad.xml │ ├── icon_btn_touchpad_pressed.xml │ ├── scroll_all.xml │ ├── scroll_horizontal.xml │ ├── scroll_vertical.xml │ ├── tutorial_1f_scroll.xml │ ├── tutorial_1f_tap.xml │ ├── tutorial_2f_scroll.xml │ ├── tutorial_2f_tap.xml │ ├── tutorial_3f_d.xml │ ├── tutorial_3f_l.xml │ ├── tutorial_3f_lr.xml │ ├── tutorial_3f_tap.xml │ ├── tutorial_3f_u.xml │ ├── tutorial_4f_d.xml │ ├── tutorial_4f_lr.xml │ ├── tutorial_4f_u.xml │ ├── tutorial_4f_ud.xml │ ├── tutorial_drag.xml │ ├── tutorial_edge_b.xml │ ├── tutorial_edge_l.xml │ ├── tutorial_edge_r.xml │ ├── tutorial_edge_t.xml │ ├── tutorial_pinch_zoom.xml │ ├── tutorial_tap.xml │ ├── tutorial_tap_inner_circle.xml │ ├── tutorial_tap_outer_circle.xml │ ├── tutorial_touch_move.xml │ └── tutorial_touch_point.xml ├── layout │ ├── about_dialog.xml │ ├── changelog_dialog.xml │ ├── device_list.xml │ ├── pairing.xml │ ├── touchpad.xml │ └── touchpad_tutorial.xml ├── menu │ ├── device_context.xml │ ├── main.xml │ └── touchpad.xml ├── values-land │ ├── style.xml │ └── style_touchpad.xml ├── values-port │ ├── style_touchpad.xml │ └── style_tutorial.xml ├── values-w600dp-h600dp │ ├── style.xml │ └── style_tutorial.xml ├── values │ ├── colors.xml │ ├── keymaps.xml │ ├── operating_systems.xml │ ├── pref_touchpad_buttons.xml │ ├── pref_touchpad_gesture_mode.xml │ ├── strings.xml │ ├── style.xml │ ├── style_about.xml │ ├── style_changelog.xml │ ├── style_help.xml │ ├── style_pairing.xml │ ├── style_touchpad.xml │ └── style_tutorial.xml └── xml │ └── preferences_device.xml └── src └── org └── ronsdev └── bluectrl ├── ChangelogDialog.java ├── CharKeyReportMap.java ├── DeviceManager.java ├── DevicePreferenceActivity.java ├── DeviceSettings.java ├── HidKeyboard.java ├── HidMouse.java ├── IntArrayList.java ├── KeyEventFuture.java ├── MainActivity.java ├── OnMouseButtonClickListener.java ├── PairedDevice.java ├── PairingActivity.java ├── TouchpadActivity.java ├── TouchpadTutorialActivity.java ├── daemon ├── DaemonActivity.java ├── DaemonCallbackReceiver.java ├── DaemonListActivity.java └── DaemonService.java └── widget ├── ComposeTextLayout.java ├── FloatSliderPreference.java ├── KeyboardInputView.java ├── MouseTouchListener.java ├── OnKeyboardComposingTextListener.java ├── OnScrollModeChangedListener.java ├── OnSendComposeTextListener.java ├── OnTouchpadGestureListener.java ├── SummaryListPreference.java ├── TouchpadView.java └── TouchpadViewGestureListener.java /.gitignore: -------------------------------------------------------------------------------- 1 | assets/bluectrld 2 | assets/CHANGELOG.md 3 | bin/ 4 | gen/ 5 | libs/ 6 | obj/ 7 | ant.properties 8 | local.properties 9 | proguard.cfg 10 | .classpath 11 | .project 12 | .settings 13 | -------------------------------------------------------------------------------- /AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 9 | 10 | 12 | 13 | 15 | 16 | 19 | 20 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 32 | 33 | 35 | 36 | 40 | 41 | 44 | 45 | 47 | 48 | 49 | 50 | 51 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | Version 3.0 2 | ----------- 3 | * New system specific touchpad gestures 4 | * New interactive touchpad tutorial 5 | * New menu item for composing text 6 | * Voice input can be corrected before sending 7 | * New "Scroll sensitivity" setting 8 | * New "Stay awake" setting 9 | * You can long press the keyboard button to change the input method 10 | 11 | 12 | 13 | Version 2.3 14 | ----------- 15 | * Fixed a problem with the SwiftKey Keyboard 16 | * New pinch-to-zoom gesture 17 | 18 | 19 | 20 | Version 2.2 21 | ----------- 22 | * Select and "PS" buttons for PlayStation 3 23 | * Compatibility improvements for the volume buttons 24 | 25 | 26 | 27 | Version 2.1 28 | ----------- 29 | * Fixed PlayStation 3 pairing problem 30 | 31 | 32 | 33 | Version 2.0 34 | ----------- 35 | * Fixed PlayStation 3 support 36 | * New Holo Dark inspired design 37 | * Simplified pairing process 38 | * Improved mouse movement, especially for Mac OS X 39 | * The touchpad can display mouse buttons 40 | * Home, Back and Menu buttons for Android devices 41 | * Extra buttons for PlayStation 3 42 | * It is possible to scroll horizontal 43 | * New option for disabling the fling scroll feature 44 | * New help menu that explains how to control the mouse 45 | * Pasting long text shows a cancelable progress dialog 46 | * Fixed a problem with the MultiLing Keyboard 47 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | This application uses the following licenses: 2 | 3 | * Application Daemon Source Code 4 | 5 | The application daemon source code inside the directory "jni" is 6 | licensed under the GNU General Public License, Version 3. The full 7 | license text can be found in the "LICENSE.GPL" file. 8 | 9 | 10 | * Android Application Source Code 11 | 12 | The Android application source code inside the directory "src" is 13 | licensed under the Apache License, Version 2.0. The full license text 14 | can be found at 15 | 16 | http://www.apache.org/licenses/LICENSE-2.0 17 | 18 | 19 | * Images 20 | 21 | The images inside the directories "drawablesrc" and "res/drawable*" are 22 | licensed under the Creative Commons BY-SA 3.0 License. The full license 23 | text can be found at 24 | 25 | http://creativecommons.org/licenses/by-sa/3.0/ 26 | 27 | The application icon is a modified version of the 28 | "accessories-character-map" icon from the GNOME Project artwork. For 29 | more information look at 30 | 31 | http://www.gnome.org 32 | http://git.gnome.org/browse/gnome-icon-theme 33 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | BlueCtrl 2 | ======== 3 | 4 | **REQUIRES ROOT PERMISSIONS** 5 | **NOT COMPATIBLE WITH ANDROID 4.2** 6 | 7 | BlueCtrl is an open source Bluetooth input device emulator that can control remote devices. This means that you can use the touchscreen and keyboard of your Android device to control other devices which support Bluetooth. 8 | 9 | Because this app is using the Bluetooth input standard, it supports various operating systems without any special server software. It has been successfully tested with the following systems: 10 | 11 | * Android 12 | * iOS 13 | * Linux (Fedora, Ubuntu...) 14 | * Mac OS X 15 | * PlayStation 3 16 | * Windows 17 | 18 | Please note that if you want to use this app with Microsoft Windows, you probably need to disable a conflicting Android service. For more information look at: 19 | 20 | https://github.com/RonsDev/BlueCtrl/wiki/Bluetooth-input-service-conflict 21 | 22 | This app requires root permissions because it needs direct access to the Bluetooth adapter. Another restriction is that it is only compatible with a specific Bluetooth stack that is called BlueZ, which is used on many but not all devices with a Android version smaller 4.2. 23 | 24 | 25 | 26 | Build Requirements 27 | ------------------ 28 | 29 | * Android SDK 30 | * Android NDK 31 | * Apache Ant 32 | 33 | 34 | 35 | Build Preparations 36 | ------------------ 37 | 38 | The build system must know where it can find the Android SDK and NDK. Therefor copy the `local.properties.example` file, name it `local.properties` and adjust the content of the file. 39 | 40 | The next step is to add the required BlueZ library file and the associated header files to the Android NDK. This is necessary because the NDK stable API doesn't include BlueZ. 41 | 42 | The easiest way to get the library file is to extract it from an existing Android device with the following command: 43 | 44 | adb pull /system/lib/libbluetooth.so 45 | 46 | After that put the extracted `libbluetooth.so` file to the following directory inside the Android NDK: 47 | 48 | platforms/android-9/arch-arm/usr/lib 49 | 50 | Now you must get the header files for the bluetooth and cutils includes. You can download them from the following two repositories from the CyanogenMod project: 51 | 52 | https://github.com/CyanogenMod/android_external_bluetooth_bluez 53 | https://github.com/CyanogenMod/android_system_core 54 | 55 | Then copy the directory `lib/bluetooth` from the Android BlueZ code and the directory `include/cutils` from the Android System Core code to the following directory inside the Android NDK: 56 | 57 | platforms/android-9/arch-arm/usr/include/ 58 | 59 | 60 | 61 | Building 62 | -------- 63 | 64 | Open a command-line and navigate to the root of your project directory. Then execute either `ant debug` or `ant release` to create the desired .apk file inside the projects `bin/` directory. If you use the release target, you also have to sign the .apk and then align it with `zipalign`. 65 | -------------------------------------------------------------------------------- /assets/keymaps/en_US: -------------------------------------------------------------------------------- 1 | // ===== No Modifier ===== 2 | ` 0 53 // ` 3 | 1 0 30 // 1 4 | 2 0 31 // 2 5 | 3 0 32 // 3 6 | 4 0 33 // 4 7 | 5 0 34 // 5 8 | 6 0 35 // 6 9 | 7 0 36 // 7 10 | 8 0 37 // 8 11 | 9 0 38 // 9 12 | 0 0 39 // 0 13 | - 0 45 // - 14 | = 0 46 // = 15 | q 0 20 // q 16 | w 0 26 // w 17 | e 0 8 // e 18 | r 0 21 // r 19 | t 0 23 // t 20 | y 0 28 // y 21 | u 0 24 // u 22 | i 0 12 // i 23 | o 0 18 // o 24 | p 0 19 // p 25 | [ 0 47 // [ 26 | ] 0 48 // ] 27 | a 0 4 // a 28 | s 0 22 // s 29 | d 0 7 // d 30 | f 0 9 // f 31 | g 0 10 // g 32 | h 0 11 // h 33 | j 0 13 // j 34 | k 0 14 // k 35 | l 0 15 // l 36 | ; 0 51 // ; 37 | ' 0 52 // ' 38 | \ 0 49 // \ 39 | z 0 29 // z 40 | x 0 27 // x 41 | c 0 6 // c 42 | v 0 25 // v 43 | b 0 5 // b 44 | n 0 17 // n 45 | m 0 16 // m 46 | , 0 54 // , 47 | . 0 55 // . 48 | / 0 56 // / 49 | 50 | // ===== Shift Modifier ===== 51 | ~ 2 53 // ` 52 | ! 2 30 // 1 53 | @ 2 31 // 2 54 | # 2 32 // 3 55 | $ 2 33 // 4 56 | % 2 34 // 5 57 | ^ 2 35 // 6 58 | & 2 36 // 7 59 | * 2 37 // 8 60 | ( 2 38 // 9 61 | ) 2 39 // 0 62 | _ 2 45 // - 63 | + 2 46 // = 64 | Q 2 20 // q 65 | W 2 26 // w 66 | E 2 8 // e 67 | R 2 21 // r 68 | T 2 23 // t 69 | Y 2 28 // y 70 | U 2 24 // u 71 | I 2 12 // i 72 | O 2 18 // o 73 | P 2 19 // p 74 | { 2 47 // [ 75 | } 2 48 // ] 76 | A 2 4 // a 77 | S 2 22 // s 78 | D 2 7 // d 79 | F 2 9 // f 80 | G 2 10 // g 81 | H 2 11 // h 82 | J 2 13 // j 83 | K 2 14 // k 84 | L 2 15 // l 85 | : 2 51 // ; 86 | " 2 52 // ' 87 | | 2 49 // \ 88 | Z 2 29 // z 89 | X 2 27 // x 90 | C 2 6 // c 91 | V 2 25 // v 92 | B 2 5 // b 93 | N 2 17 // n 94 | M 2 16 // m 95 | < 2 54 // , 96 | > 2 55 // . 97 | ? 2 56 // / 98 | -------------------------------------------------------------------------------- /assets/keymaps/template: -------------------------------------------------------------------------------- 1 | // **************************************************************************** 2 | // The Keymap file is used to translate a character into a Keyboard layout 3 | // specific sequence of HID Reports. Each line should start with the character 4 | // and is followed by the representing Report sequence. 5 | // 6 | // This template contains already the Report sequences and only the character 7 | // in the first column must be inserted. To insert the correct character you 8 | // just need to press the key on your Keyboard that corresponds to the key in 9 | // the comment on a standard English Keyboard. Also note that there are 10 | // different blocks where you additionally must hold the right modifier key. 11 | // If a Report sequence doesn't create any character, the line can be removed 12 | // completely. 13 | // **************************************************************************** 14 | 15 | // ===== No Modifier ===== 16 | 0 53 // ` 17 | 0 30 // 1 18 | 0 31 // 2 19 | 0 32 // 3 20 | 0 33 // 4 21 | 0 34 // 5 22 | 0 35 // 6 23 | 0 36 // 7 24 | 0 37 // 8 25 | 0 38 // 9 26 | 0 39 // 0 27 | 0 45 // - 28 | 0 46 // = 29 | 0 20 // q 30 | 0 26 // w 31 | 0 8 // e 32 | 0 21 // r 33 | 0 23 // t 34 | 0 28 // y 35 | 0 24 // u 36 | 0 12 // i 37 | 0 18 // o 38 | 0 19 // p 39 | 0 47 // [ 40 | 0 48 // ] 41 | 0 4 // a 42 | 0 22 // s 43 | 0 7 // d 44 | 0 9 // f 45 | 0 10 // g 46 | 0 11 // h 47 | 0 13 // j 48 | 0 14 // k 49 | 0 15 // l 50 | 0 51 // ; 51 | 0 52 // ' 52 | 0 49 // \ 53 | 0 100 // < 54 | 0 29 // z 55 | 0 27 // x 56 | 0 6 // c 57 | 0 25 // v 58 | 0 5 // b 59 | 0 17 // n 60 | 0 16 // m 61 | 0 54 // , 62 | 0 55 // . 63 | 0 56 // / 64 | 65 | // ===== Shift Modifier ===== 66 | 2 53 // ` 67 | 2 30 // 1 68 | 2 31 // 2 69 | 2 32 // 3 70 | 2 33 // 4 71 | 2 34 // 5 72 | 2 35 // 6 73 | 2 36 // 7 74 | 2 37 // 8 75 | 2 38 // 9 76 | 2 39 // 0 77 | 2 45 // - 78 | 2 46 // = 79 | 2 20 // q 80 | 2 26 // w 81 | 2 8 // e 82 | 2 21 // r 83 | 2 23 // t 84 | 2 28 // y 85 | 2 24 // u 86 | 2 12 // i 87 | 2 18 // o 88 | 2 19 // p 89 | 2 47 // [ 90 | 2 48 // ] 91 | 2 4 // a 92 | 2 22 // s 93 | 2 7 // d 94 | 2 9 // f 95 | 2 10 // g 96 | 2 11 // h 97 | 2 13 // j 98 | 2 14 // k 99 | 2 15 // l 100 | 2 51 // ; 101 | 2 52 // ' 102 | 2 49 // \ 103 | 2 100 // < 104 | 2 29 // z 105 | 2 27 // x 106 | 2 6 // c 107 | 2 25 // v 108 | 2 5 // b 109 | 2 17 // n 110 | 2 16 // m 111 | 2 54 // , 112 | 2 55 // . 113 | 2 56 // / 114 | 115 | // ===== Alt Modifier ===== 116 | 64 53 // ` 117 | 64 30 // 1 118 | 64 31 // 2 119 | 64 32 // 3 120 | 64 33 // 4 121 | 64 34 // 5 122 | 64 35 // 6 123 | 64 36 // 7 124 | 64 37 // 8 125 | 64 38 // 9 126 | 64 39 // 0 127 | 64 45 // - 128 | 64 46 // = 129 | 64 20 // q 130 | 64 26 // w 131 | 64 8 // e 132 | 64 21 // r 133 | 64 23 // t 134 | 64 28 // y 135 | 64 24 // u 136 | 64 12 // i 137 | 64 18 // o 138 | 64 19 // p 139 | 64 47 // [ 140 | 64 48 // ] 141 | 64 4 // a 142 | 64 22 // s 143 | 64 7 // d 144 | 64 9 // f 145 | 64 10 // g 146 | 64 11 // h 147 | 64 13 // j 148 | 64 14 // k 149 | 64 15 // l 150 | 64 51 // ; 151 | 64 52 // ' 152 | 64 49 // \ 153 | 64 100 // < 154 | 64 29 // z 155 | 64 27 // x 156 | 64 6 // c 157 | 64 25 // v 158 | 64 5 // b 159 | 64 17 // n 160 | 64 16 // m 161 | 64 54 // , 162 | 64 55 // . 163 | 64 56 // / 164 | 165 | // ===== Shift+Alt Modifier ===== 166 | 66 53 // ` 167 | 66 30 // 1 168 | 66 31 // 2 169 | 66 32 // 3 170 | 66 33 // 4 171 | 66 34 // 5 172 | 66 35 // 6 173 | 66 36 // 7 174 | 66 37 // 8 175 | 66 38 // 9 176 | 66 39 // 0 177 | 66 45 // - 178 | 66 46 // = 179 | 66 20 // q 180 | 66 26 // w 181 | 66 8 // e 182 | 66 21 // r 183 | 66 23 // t 184 | 66 28 // y 185 | 66 24 // u 186 | 66 12 // i 187 | 66 18 // o 188 | 66 19 // p 189 | 66 47 // [ 190 | 66 48 // ] 191 | 66 4 // a 192 | 66 22 // s 193 | 66 7 // d 194 | 66 9 // f 195 | 66 10 // g 196 | 66 11 // h 197 | 66 13 // j 198 | 66 14 // k 199 | 66 15 // l 200 | 66 51 // ; 201 | 66 52 // ' 202 | 66 49 // \ 203 | 66 100 // < 204 | 66 29 // z 205 | 66 27 // x 206 | 66 6 // c 207 | 66 25 // v 208 | 66 5 // b 209 | 66 17 // n 210 | 66 16 // m 211 | 66 54 // , 212 | 66 55 // . 213 | 66 56 // / 214 | -------------------------------------------------------------------------------- /doc/RESOURCES: -------------------------------------------------------------------------------- 1 | Bluetooth Documentation 2 | ------------------------------------------------------------------------------- 3 | 4 | HID Profile: 5 | https://www.bluetooth.org/docman/handlers/DownloadDoc.ashx?doc_id=7108 6 | 7 | HID Lite: 8 | https://www.bluetooth.org/docman/handlers/DownloadDoc.ashx?doc_id=41207 9 | 10 | Device Identification Profile Specification: 11 | https://www.bluetooth.org/docman/handlers/DownloadDoc.ashx?doc_id=75536 12 | 13 | 14 | 15 | USB Documentation 16 | ------------------------------------------------------------------------------- 17 | 18 | Device Class Definition for Human Interface Devices (HID): 19 | http://www.usb.org/developers/devclass_docs/HID1_11.pdf 20 | 21 | HID Usage Tables 22 | http://www.usb.org/developers/devclass_docs/Hut1_12v2.pdf 23 | 24 | Language Identifiers: 25 | http://www.usb.org/developers/docs/USB_LANGIDs.pdf 26 | -------------------------------------------------------------------------------- /doc/hiddescriptors/AppleWirelessKeyboard: -------------------------------------------------------------------------------- 1 | 05 01 # Usage Page (Generic Desktop) 2 | 09 06 # Usage (Keyboard) 3 | a1 01 # Collection (Application) 4 | 85 01 # Report ID (1) 5 | 05 07 # Usage Page (Keyboard) 6 | 19 e0 # Usage Minimum (224 = Left Control) 7 | 29 e7 # Usage Maximum (231 = Right GUI) 8 | 15 00 # Logical Minimum (0) 9 | 25 01 # Logical Maximum (1) 10 | 75 01 # Report Size (1) 11 | 95 08 # Report Count (8) 12 | 81 02 # Input (Data, Variable, Absolute) ;Modifier byte 13 | 75 08 # Report Size (8) 14 | 95 01 # Report Count (1) 15 | 81 01 # Input (Constant) ;Reserved byte 16 | 75 01 # Report Size (1) 17 | 95 05 # Report Count (5) 18 | 05 08 # Usage Page (Page# for LEDs) 19 | 19 01 # Usage Minimum (1 = Num Lock) 20 | 29 05 # Usage Maximum (5 = Kana) 21 | 91 02 # Output (Data, Variable, Absolute) ;LED report 22 | 75 03 # Report Size (3) 23 | 95 01 # Report Count (1) 24 | 91 01 # Output (Constant) ;LED report padding 25 | 75 08 # Report Size (8) 26 | 95 06 # Report Count (6) 27 | 15 00 # Logical Minimum (0) 28 | 26 ff 00 # Logical Maximum (255) 29 | 05 07 # Usage Page (Keyboard) 30 | 19 00 # Usage Minimum (0) 31 | 2a ff 00 # Usage Maximum (255) 32 | 81 00 # Input (Data, Array) 33 | c0 # End Collection 34 | 05 0c # Usage Page (Consumer) 35 | 09 01 # Usage (Consumer Control) 36 | a1 01 # Collection (Application) 37 | 85 47 # Report ID (71) 38 | 05 01 # Usage Page (Generic Desktop) 39 | 09 06 # Usage (Keyboard) 40 | a1 02 # Collection (Logical) 41 | 05 06 # Usage Page (Generic Device Controls) 42 | 09 20 # Usage (Battery Strength) 43 | 15 00 # Logical Minimum (0) 44 | 26 ff 00 # Logical Maximum (255) 45 | 75 08 # Report Size (8) 46 | 95 01 # Report Count (1) 47 | 81 02 # Input (Data, Variable, Absolute) 48 | c0 # End Collection 49 | c0 # End Collection 50 | 05 0c # Usage Page (Consumer) 51 | 09 01 # Usage (Consumer Control) 52 | a1 01 # Collection (Application) 53 | 85 11 # Report ID (17) 54 | 15 00 # Logical Minimum (0) 55 | 25 01 # Logical Maximum (1) 56 | 75 01 # Report Size (1) 57 | 95 03 # Report Count (3) 58 | 81 01 # Input (Constant) 59 | 75 01 # Report Size (1) 60 | 95 01 # Report Count (1) 61 | 05 0c # Usage Page (Consumer) 62 | 09 b8 # Usage (Eject) 63 | 81 02 # Input (Data, Variable, Absolute) 64 | 06 ff 00 # Usage Page (Vendor-defined) 65 | 09 03 # Usage (???) 66 | 81 02 # Input (Data, Variable, Absolute) 67 | 75 01 # Report Size (1) 68 | 95 03 # Report Count (3) 69 | 81 01 # Input (Constant) 70 | 05 0c # Usage Page (Consumer) 71 | 85 12 # Report ID (18) 72 | 15 00 # Logical Minimum (0) 73 | 25 01 # Logical Maximum (1) 74 | 75 01 # Report Size (1) 75 | 95 01 # Report Count (1) 76 | 09 cd # Usage (Play/Pause) 77 | 81 02 # Input (Data, Variable, Absolute) 78 | 09 b3 # Usage (Fast Forward) 79 | 81 02 # Input (Data, Variable, Absolute) 80 | 09 b4 # Usage (Rewind) 81 | 81 02 # Input (Data, Variable, Absolute) 82 | 09 b5 # Usage (Scan Next Track) 83 | 81 02 # Input (Data, Variable, Absolute) 84 | 09 b6 # Usage (Scan Previous Track) 85 | 81 02 # Input (Data, Variable, Absolute) 86 | 81 01 # Input (Constant) 87 | 81 01 # Input (Constant) 88 | 81 01 # Input (Constant) 89 | 85 13 # Report ID (19) 90 | 15 00 # Logical Minimum (0) 91 | 25 01 # Logical Maximum (1) 92 | 75 01 # Report Size (1) 93 | 95 01 # Report Count (1) 94 | 06 01 ff # Usage Page (Vendor-defined) 95 | 09 0a # Usage (???) 96 | 81 02 # Input (Data, Variable, Absolute) 97 | 06 01 ff # Usage Page (Vendor-defined) 98 | 09 0c # Usage (???) 99 | 81 22 # Input (Data, Variable, Absolute, No Preferred State) 100 | 75 01 # Report Size (1) 101 | 95 06 # Report Count (6) 102 | 81 01 # Input (Constant) ;Reserved byte 103 | 85 09 # Report ID (9) 104 | 09 0b # Usage (???) 105 | 75 08 # Report Size (8) 106 | 95 01 # Report Count (1) 107 | b1 02 # Feature (Data, Variable, Absolute) 108 | 75 08 # Report Size (8) 109 | 95 02 # Report Count (2) 110 | b1 01 # Feature (Constant) 111 | c0 # End Collection 112 | -------------------------------------------------------------------------------- /doc/hiddescriptors/AppleWirelessMouse: -------------------------------------------------------------------------------- 1 | 05 01 # Usage Page (Generic Desktop) 2 | 09 02 # Usage (Mouse) 3 | a1 01 # Collection (Application) 4 | 85 10 # Report ID (16) 5 | 05 09 # Usage Page (Button) 6 | 19 01 # Usage Minimum (1) 7 | 29 02 # Usage Maximum (2) 8 | 15 00 # Logical Minimum (0) 9 | 25 01 # Logical Maximum (1) 10 | 95 02 # Report Count (2) 11 | 75 01 # Report Size (1) 12 | 81 02 # Input (Data, Variable, Absolute) 13 | 95 01 # Report Count (1) 14 | 75 06 # Report Size (6) 15 | 81 03 # Input (Constant, Variable) 16 | 05 01 # Usage Page (Generic Desktop) 17 | 09 01 # Usage (Pointer) 18 | a1 00 # Collection (Physical) 19 | 16 01 fe # Logical Minimum (-511) 20 | 26 ff 01 # Logical Maximum (511) 21 | 36 c0 fe # Physical Minimum (-320) 22 | 46 40 01 # Physical Maximum (320) 23 | 65 13 # Unit (Inches) 24 | 55 0d # Unit Exponent (-3) 25 | 09 30 # Usage (X) 26 | 09 31 # Usage (Y) 27 | 75 10 # Report Size (16) 28 | 95 02 # Report Count (2) 29 | 81 06 # Input (Data, Variable, Relative) 30 | c0 # End Collection 31 | 05 06 # Usage Page (Generic Device Controls) 32 | 09 20 # Usage (Battery Strength) 33 | 85 47 # Report ID (71) 34 | 15 00 # Logical Minimum (0) 35 | 25 64 # Logical Maximum (100) 36 | 75 08 # Report Size (8) 37 | 95 01 # Report Count (1) 38 | b1 a2 # Feature (Data, Variable, Absolute, No Preferred, Volatile) 39 | 06 02 ff # Usage Page (Vendor-defined) 40 | 09 55 # Usage (???) 41 | 85 55 # Report ID (85) 42 | 15 00 # Logical Minimum (0) 43 | 26 ff 00 # Logical Maximum (255) 44 | 75 08 # Report Size (8) 45 | 95 40 # Report Count (64) 46 | b1 a2 # Feature (Data, Variable, Absolute, No Preferred, Volatile) 47 | c0 # End Collection 48 | -------------------------------------------------------------------------------- /doc/hiddescriptors/BarcodeScanner: -------------------------------------------------------------------------------- 1 | 05 01 # Usage Page (Generic Desktop) 2 | 09 06 # Usage (Keyboard) 3 | a1 01 # Collection (Application) 4 | 05 07 # Usage Page (Keyboard) 5 | 85 01 # Report ID (1) 6 | 19 e0 # Usage Minimum (224 = Left Control) 7 | 29 e7 # Usage Maximum (231 = Right GUI) 8 | 15 00 # Logical Minimum (0) 9 | 25 01 # Logical Maximum (1) 10 | 75 01 # Report Size (1) 11 | 95 08 # Report Count (8) 12 | 81 02 # Input (Data, Variable, Absolute) ;Modifier byte 13 | 95 01 # Report Count (1) 14 | 75 08 # Report Size (8) 15 | 81 01 # Input (Constant) ;Reserved byte 16 | 95 05 # Report Count (5) 17 | 75 01 # Report Size (1) 18 | 05 08 # Usage Page (Page# for LEDs) 19 | 85 01 # Report ID (1) 20 | 19 01 # Usage Minimum (1 = Num Lock) 21 | 29 05 # Usage Maximum (5 = Kana) 22 | 91 02 # Output (Data, Variable, Absolute) ;LED report 23 | 95 01 # Report Count (1) 24 | 75 03 # Report Size (3) 25 | 91 03 # Output (Constant, Variable) ;LED report padding 26 | 95 06 # Report Count (6) 27 | 75 08 # Report Size (8) 28 | 15 00 # Logical Minimum (0) 29 | 25 65 # Logical Maximum (101) 30 | 05 07 # Usage Page (Keyboard) 31 | 19 00 # Usage Minimum (0) 32 | 29 65 # Usage Maximum (101) 33 | 81 00 # Input (Data, Array) 34 | c0 # End Collection 35 | 05 0c # Usage Page (Consumer) 36 | 09 01 # Usage (Consumer Control) 37 | a1 01 # Collection (Application) 38 | 85 02 # Report ID (2) 39 | 05 0c # Usage Page (Consumer) 40 | 15 00 # Logical Minimum (0) 41 | 25 01 # Logical Maximum (1) 42 | 0a 23 02 # Usage (AC Home?) 43 | 0a 8a 01 # Usage (AL Email Reader?) 44 | 0a 21 02 # Usage (AC Search?) 45 | 75 01 # Report Size (1) 46 | 95 03 # Report Count (3) 47 | 81 02 # Input (Data, Variable, Absolute) 48 | 75 01 # Report Size (1) 49 | 95 05 # Report Count (5) 50 | 81 01 # Input (Constant) 51 | 05 08 # Usage Page (Page# for LEDs) 52 | 85 ff # Report ID (255) 53 | 95 01 # Report Count (1) 54 | 75 02 # Report Size (2) 55 | 09 24 # Usage (Reserved) 56 | 09 26 # Usage (Reserved) 57 | 81 02 # Input (Data, Variable, Absolute) 58 | 75 06 # Report Size (6) 59 | 81 01 # Input (Constant) 60 | c0 # End Collection 61 | 05 0c # Usage Page (Consumer) 62 | 09 01 # Usage (Consumer Control) 63 | a1 01 # Collection (Application) 64 | 85 11 # Report ID (17) 65 | 15 00 # Logical Minimum (0) 66 | 25 01 # Logical Maximum (1) 67 | 75 01 # Report Size (1) 68 | 95 03 # Report Count (3) 69 | 81 01 # Input (Constant) 70 | 75 01 # Report Size (1) 71 | 95 01 # Report Count (1) 72 | 05 0c # Usage Page (Consumer) 73 | 09 b8 # Usage (Eject) 74 | 81 02 # Input (Data, Variable, Absolute) 75 | 06 ff 00 # Usage Page (Vendor-defined) 76 | 09 03 # Usage (???) 77 | 81 02 # Input (Data, Variable, Absolute) 78 | 75 01 # Report Size (1) 79 | 95 03 # Report Count (3) 80 | 81 01 # Input (Constant) 81 | 05 0c # Usage Page (Consumer) 82 | 85 12 # Report ID (18) 83 | 15 00 # Logical Minimum (0) 84 | 25 01 # Logical Maximum (1) 85 | 75 01 # Report Size (1) 86 | 95 01 # Report Count (1) 87 | 09 cd # Usage (Play/Pause) 88 | 81 02 # Input (Data, Variable, Absolute) 89 | 09 b3 # Usage (Fast Forward) 90 | 81 02 # Input (Data, Variable, Absolute) 91 | 09 b4 # Usage (Rewind) 92 | 81 02 # Input (Data, Variable, Absolute) 93 | 09 b5 # Usage (Scan Next Track) 94 | 81 02 # Input (Data, Variable, Absolute) 95 | 09 b6 # Usage (Scan Previous Track) 96 | 81 02 # Input (Data, Variable, Absolute) 97 | 81 01 # Input (Constant) 98 | 81 01 # Input (Constant) 99 | 81 01 # Input (Constant) 100 | 85 13 # Report ID (19) 101 | 15 00 # Logical Minimum (0) 102 | 25 01 # Logical Maximum (1) 103 | 75 01 # Report Size (1) 104 | 95 01 # Report Count (1) 105 | 06 01 ff # Usage Page (Vendor-defined) 106 | 09 0a # Usage (???) 107 | 81 02 # Input (Data, Variable, Absolute) 108 | 75 01 # Report Size (1) 109 | 95 07 # Report Count (7) 110 | 81 01 # Input (Constant) 111 | c0 # End Collection 112 | -------------------------------------------------------------------------------- /doc/hiddescriptors/LogitechM500Mouse: -------------------------------------------------------------------------------- 1 | Item(Global): Usage Page, data= [ 0x01 ] 1 2 | Generic Desktop Controls 3 | Item(Local ): Usage, data= [ 0x02 ] 2 4 | Mouse 5 | Item(Main ): Collection, data= [ 0x01 ] 1 6 | Application 7 | Item(Local ): Usage, data= [ 0x01 ] 1 8 | Pointer 9 | Item(Main ): Collection, data= [ 0x00 ] 0 10 | Physical 11 | Item(Global): Usage Page, data= [ 0x09 ] 9 12 | Buttons 13 | Item(Local ): Usage Minimum, data= [ 0x01 ] 1 14 | Button 1 (Primary) 15 | Item(Local ): Usage Maximum, data= [ 0x08 ] 8 16 | (null) 17 | Item(Global): Logical Minimum, data= [ 0x00 ] 0 18 | Item(Global): Logical Maximum, data= [ 0x01 ] 1 19 | Item(Global): Report Count, data= [ 0x08 ] 8 20 | Item(Global): Report Size, data= [ 0x01 ] 1 21 | Item(Main ): Input, data= [ 0x02 ] 2 22 | Data Variable Absolute No_Wrap Linear 23 | Preferred_State No_Null_Position Non_Volatile Bitfield 24 | Item(Global): Report Count, data= [ 0x00 ] 0 25 | Item(Main ): Input, data= [ 0x03 ] 3 26 | Constant Variable Absolute No_Wrap Linear 27 | Preferred_State No_Null_Position Non_Volatile Bitfield 28 | Item(Global): Usage Page, data= [ 0x01 ] 1 29 | Generic Desktop Controls 30 | Item(Local ): Usage, data= [ 0x30 ] 48 31 | Direction-X 32 | Item(Local ): Usage, data= [ 0x31 ] 49 33 | Direction-Y 34 | Item(Global): Logical Minimum, data= [ 0x01 0xf8 ] 63489 35 | Item(Global): Logical Maximum, data= [ 0xff 0x07 ] 2047 36 | Item(Global): Report Size, data= [ 0x0c ] 12 37 | Item(Global): Report Count, data= [ 0x02 ] 2 38 | Item(Main ): Input, data= [ 0x06 ] 6 39 | Data Variable Relative No_Wrap Linear 40 | Preferred_State No_Null_Position Non_Volatile Bitfield 41 | Item(Local ): Usage, data= [ 0x38 ] 56 42 | Wheel 43 | Item(Global): Logical Minimum, data= [ 0x81 ] 129 44 | Item(Global): Logical Maximum, data= [ 0x7f ] 127 45 | Item(Global): Report Size, data= [ 0x08 ] 8 46 | Item(Global): Report Count, data= [ 0x01 ] 1 47 | Item(Main ): Input, data= [ 0x06 ] 6 48 | Data Variable Relative No_Wrap Linear 49 | Preferred_State No_Null_Position Non_Volatile Bitfield 50 | Item(Global): Usage Page, data= [ 0x0c ] 12 51 | Consumer 52 | Item(Local ): Usage, data= [ 0x38 0x02 ] 568 53 | AC Pan 54 | Item(Global): Report Count, data= [ 0x01 ] 1 55 | Item(Main ): Input, data= [ 0x06 ] 6 56 | Data Variable Relative No_Wrap Linear 57 | Preferred_State No_Null_Position Non_Volatile Bitfield 58 | Item(Main ): End Collection, data=none 59 | Item(Main ): End Collection, data=none 60 | -------------------------------------------------------------------------------- /doc/hiddescriptors/RazerCopperheadMouse: -------------------------------------------------------------------------------- 1 | Item(Global): Usage Page, data= [ 0x01 ] 1 2 | Generic Desktop Controls 3 | Item(Local ): Usage, data= [ 0x02 ] 2 4 | Mouse 5 | Item(Main ): Collection, data= [ 0x01 ] 1 6 | Application 7 | Item(Local ): Usage, data= [ 0x01 ] 1 8 | Pointer 9 | Item(Main ): Collection, data= [ 0x00 ] 0 10 | Physical 11 | Item(Global): Usage Page, data= [ 0x09 ] 9 12 | Buttons 13 | Item(Local ): Usage Minimum, data= [ 0x01 ] 1 14 | Button 1 (Primary) 15 | Item(Local ): Usage Maximum, data= [ 0x07 ] 7 16 | (null) 17 | Item(Global): Logical Minimum, data= [ 0x00 ] 0 18 | Item(Global): Logical Maximum, data= [ 0x01 ] 1 19 | Item(Global): Report Count, data= [ 0x08 ] 8 20 | Item(Global): Report Size, data= [ 0x01 ] 1 21 | Item(Main ): Input, data= [ 0x02 ] 2 22 | Data Variable Absolute No_Wrap Linear 23 | Preferred_State No_Null_Position Non_Volatile Bitfield 24 | Item(Global): Usage Page, data= [ 0x00 0xff ] 65280 25 | (null) 26 | Item(Local ): Usage, data= [ 0x40 ] 64 27 | (null) 28 | Item(Global): Report Count, data= [ 0x02 ] 2 29 | Item(Global): Report Size, data= [ 0x08 ] 8 30 | Item(Global): Logical Minimum, data= [ 0x81 ] 129 31 | Item(Global): Logical Maximum, data= [ 0x7f ] 127 32 | Item(Main ): Input, data= [ 0x02 ] 2 33 | Data Variable Absolute No_Wrap Linear 34 | Preferred_State No_Null_Position Non_Volatile Bitfield 35 | Item(Global): Usage Page, data= [ 0x01 ] 1 36 | Generic Desktop Controls 37 | Item(Local ): Usage, data= [ 0x38 ] 56 38 | Wheel 39 | Item(Global): Logical Minimum, data= [ 0x81 ] 129 40 | Item(Global): Logical Maximum, data= [ 0x7f ] 127 41 | Item(Global): Report Size, data= [ 0x08 ] 8 42 | Item(Global): Report Count, data= [ 0x01 ] 1 43 | Item(Main ): Input, data= [ 0x06 ] 6 44 | Data Variable Relative No_Wrap Linear 45 | Preferred_State No_Null_Position Non_Volatile Bitfield 46 | Item(Local ): Usage, data= [ 0x30 ] 48 47 | Direction-X 48 | Item(Local ): Usage, data= [ 0x31 ] 49 49 | Direction-Y 50 | Item(Global): Logical Minimum, data= [ 0x00 0x80 ] 32768 51 | Item(Global): Logical Maximum, data= [ 0xff 0x7f ] 32767 52 | Item(Global): Report Size, data= [ 0x10 ] 16 53 | Item(Global): Report Count, data= [ 0x02 ] 2 54 | Item(Main ): Input, data= [ 0x06 ] 6 55 | Data Variable Relative No_Wrap Linear 56 | Preferred_State No_Null_Position Non_Volatile Bitfield 57 | Item(Main ): End Collection, data=none 58 | Item(Main ): End Collection, data=none 59 | -------------------------------------------------------------------------------- /doc/hiddescriptors/SonyBDRemote: -------------------------------------------------------------------------------- 1 | 05 01 # Usage Page (Generic Desktop) 2 | 09 05 # Usage (Game Pad) 3 | a1 01 # Collection (Application) 4 | 85 01 # Report ID (1) 5 | 15 00 # Logical Minimum (0) 6 | 26 ff 00 # Logical Maximum (255) 7 | 75 08 # Report Size (8) 8 | 95 0b # Report Count (11) 9 | 06 00 ff # Usage Page (Vendor-defined) 10 | 09 01 # Usage (???) 11 | 81 00 # Input (Data, Array) 12 | 85 01 # Report ID (1) 13 | 95 0b # Report Count (11) 14 | 09 01 # Usage (???) 15 | b1 00 # Feature (Data, Array) 16 | 85 02 # Report ID (2) 17 | 95 0b # Report Count (11) 18 | 09 01 # Usage (???) 19 | b1 00 # Feature (Data, Array) 20 | 85 03 # Report ID (3) 21 | 95 0b # Report Count (11) 22 | 09 01 # Usage (???) 23 | b1 00 # Feature (Data, Array) 24 | 85 04 # Report ID (4) 25 | 95 0b # Report Count (11) 26 | 09 01 # Usage (???) 27 | b1 00 # Feature (Data, Array) 28 | 85 05 # Report ID (5) 29 | 95 0b # Report Count (11) 30 | 09 01 # Usage (???) 31 | b1 00 # Feature (Data, Array) 32 | 85 06 # Report ID (6) 33 | 95 0b # Report Count (11) 34 | 09 01 # Usage (???) 35 | b1 00 # Feature (Data, Array) 36 | c0 # End Collection 37 | -------------------------------------------------------------------------------- /drawablesrc/btn_android_back.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 21 | 23 | 43 | 47 | 51 | 55 | 59 | 66 | 67 | 69 | 70 | 72 | image/svg+xml 73 | 75 | 76 | 77 | 78 | 79 | 93 | 99 | 105 | 106 | 107 | -------------------------------------------------------------------------------- /drawablesrc/btn_android_home.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 21 | 23 | 43 | 47 | 51 | 55 | 59 | 62 | 63 | 65 | 66 | 68 | image/svg+xml 69 | 71 | 72 | 73 | 74 | 75 | 89 | 95 | 101 | 102 | 103 | -------------------------------------------------------------------------------- /drawablesrc/btn_ps3_circle.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 21 | 23 | 43 | 47 | 51 | 55 | 59 | 60 | 62 | 63 | 65 | image/svg+xml 66 | 68 | 69 | 70 | 71 | 72 | 86 | 91 | 101 | 102 | 103 | -------------------------------------------------------------------------------- /drawablesrc/btn_ps3_ps.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 21 | 23 | 43 | 47 | 51 | 55 | 59 | 66 | 67 | 69 | 70 | 72 | image/svg+xml 73 | 75 | 76 | 77 | 78 | 79 | 93 | 99 | 105 | 110 | 111 | 112 | -------------------------------------------------------------------------------- /drawablesrc/btn_ps3_select.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 21 | 23 | 43 | 47 | 51 | 55 | 59 | 62 | 63 | 65 | 66 | 68 | image/svg+xml 69 | 71 | 72 | 73 | 74 | 75 | 89 | 95 | SELECT 107 | 114 | 115 | 116 | -------------------------------------------------------------------------------- /drawablesrc/btn_ps3_square.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 21 | 23 | 43 | 47 | 51 | 55 | 59 | 60 | 62 | 63 | 65 | image/svg+xml 66 | 68 | 69 | 70 | 71 | 72 | 86 | 91 | 98 | 99 | 100 | -------------------------------------------------------------------------------- /drawablesrc/btn_ps3_start.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 21 | 23 | 43 | 47 | 51 | 55 | 59 | 62 | 63 | 65 | 66 | 68 | image/svg+xml 69 | 71 | 72 | 73 | 74 | 75 | 89 | 95 | 100 | START 112 | 113 | 114 | -------------------------------------------------------------------------------- /drawablesrc/btn_ps3_triangle.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 21 | 23 | 43 | 47 | 51 | 55 | 59 | 62 | 63 | 65 | 66 | 68 | image/svg+xml 69 | 71 | 72 | 73 | 74 | 75 | 89 | 94 | 112 | 113 | 114 | -------------------------------------------------------------------------------- /drawablesrc/btn_ps3_x.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 21 | 23 | 43 | 47 | 51 | 55 | 59 | 60 | 62 | 63 | 65 | image/svg+xml 66 | 68 | 69 | 70 | 71 | 72 | 86 | 91 | 95 | 96 | 97 | -------------------------------------------------------------------------------- /drawablesrc/disconnected.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 21 | 23 | 43 | 47 | 51 | 55 | 59 | 60 | 62 | 63 | 65 | image/svg+xml 66 | 68 | 69 | 70 | 71 | 72 | 87 | 92 | 97 | 103 | 108 | 114 | 115 | 116 | 117 | -------------------------------------------------------------------------------- /drawablesrc/problem.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 21 | 23 | 43 | 47 | 51 | 55 | 59 | 60 | 62 | 63 | 65 | image/svg+xml 66 | 68 | 69 | 70 | 71 | 72 | 89 | 94 | 98 | 104 | 105 | 106 | 107 | -------------------------------------------------------------------------------- /jni/Android.mk: -------------------------------------------------------------------------------- 1 | LOCAL_PATH := $(call my-dir) 2 | 3 | include $(CLEAR_VARS) 4 | 5 | LOCAL_MODULE := bluectrld 6 | 7 | LOCAL_SRC_FILES := \ 8 | bluectrld.c \ 9 | error.c \ 10 | hidhci.c \ 11 | hidipc.c \ 12 | hidl2cap.c \ 13 | hidsdp.c \ 14 | log.c \ 15 | 16 | LOCAL_LDLIBS := -lbluetooth -llog 17 | 18 | include $(BUILD_EXECUTABLE) 19 | -------------------------------------------------------------------------------- /jni/bluectrld.h: -------------------------------------------------------------------------------- 1 | /* 2 | * BlueCtrl daemon 3 | */ 4 | /* 5 | * Copyright (C) 2012 6 | * 7 | * This program is free software: you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation, either version 3 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License 18 | * along with this program. If not, see . 19 | * 20 | */ 21 | 22 | #ifndef __BLUECTRLD_H 23 | #define __BLUECTRLD_H 24 | 25 | #include 26 | 27 | 28 | /* 29 | * Get the device ID of the Bluetooth adapter which is used by the daemon. 30 | * 31 | * Returns: 32 | * The Bluetooth adapter device ID. 33 | */ 34 | int hidc_get_app_dev_id(); 35 | 36 | /* 37 | * Get the Bluetooth address of the Bluetooth adapter which is used by the 38 | * daemon. 39 | * 40 | * Returns: 41 | * The Bluetooth address. 42 | */ 43 | bdaddr_t *hidc_get_app_dev_bdaddr(); 44 | 45 | 46 | /* 47 | * Shutdown the daemon. 48 | */ 49 | void hidc_shutdown(); 50 | 51 | #endif 52 | -------------------------------------------------------------------------------- /jni/error.c: -------------------------------------------------------------------------------- 1 | /* 2 | * Error constants and helper functions 3 | */ 4 | /* 5 | * Copyright (C) 2012 6 | * 7 | * This program is free software: you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation, either version 3 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License 18 | * along with this program. If not, see . 19 | * 20 | */ 21 | 22 | #include 23 | 24 | #include "error.h" 25 | 26 | 27 | int hidc_convert_errno(int en) 28 | { 29 | switch (en) { 30 | case EACCES: 31 | return HIDC_EC_ACCES; 32 | case EPERM: 33 | return HIDC_EC_PERM; 34 | case ENODEV: 35 | return HIDC_EC_NODEV; 36 | case ENOTCONN: 37 | return HIDC_EC_NOTCONN; 38 | case ENOENT: 39 | return HIDC_EC_NOENT; 40 | case EADDRINUSE: 41 | return HIDC_EC_ADDRINUSE; 42 | case EHOSTDOWN: 43 | return HIDC_EC_HOSTDOWN; 44 | case ECONNREFUSED: 45 | return HIDC_EC_CONNREFUSED; 46 | case ETIMEDOUT: 47 | return HIDC_EC_TIMEDOUT; 48 | case EALREADY: 49 | return HIDC_EC_ALREADY; 50 | case EBADE: 51 | return HIDC_EC_BADE; 52 | case ECONNRESET: 53 | return HIDC_EC_CONNRESET; 54 | default: 55 | return HIDC_EC_UNKNOWN; 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /jni/error.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Error constants and helper functions 3 | */ 4 | /* 5 | * Copyright (C) 2012 6 | * 7 | * This program is free software: you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation, either version 3 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License 18 | * along with this program. If not, see . 19 | * 20 | */ 21 | 22 | #ifndef __ERROR_H 23 | #define __ERROR_H 24 | 25 | /* Error Codes */ 26 | enum { 27 | HIDC_EC_UNKNOWN = -10, /* Unknown error */ 28 | HIDC_EC_INVBDADDR = -20, /* Invalid Bluetooth address */ 29 | 30 | HIDC_EC_ACCES = -51, /* Permission denied */ 31 | HIDC_EC_PERM = -52, /* Operation not permitted */ 32 | HIDC_EC_NODEV = -53, /* No such device */ 33 | HIDC_EC_NOTCONN = -54, /* The socket is not connected */ 34 | HIDC_EC_NOENT = -55, /* No such file or directory */ 35 | HIDC_EC_ADDRINUSE = -56, /* Address already in use */ 36 | HIDC_EC_HOSTDOWN = -57, /* Host is down */ 37 | HIDC_EC_CONNREFUSED = -58, /* Connection refused */ 38 | HIDC_EC_TIMEDOUT = -59, /* Connection timed out */ 39 | HIDC_EC_ALREADY = -60, /* Connection already in progress */ 40 | HIDC_EC_BADE = -61, /* Invalid exchange */ 41 | HIDC_EC_CONNRESET = -62, /* Connection reset by peer */ 42 | }; 43 | 44 | 45 | /* 46 | * Convert an errno.h error number into a project specific error code. 47 | * 48 | * Parameters: 49 | * en: error number defined in errno.h. 50 | * 51 | * Returns: 52 | * A project specific error code. 53 | */ 54 | int hidc_convert_errno(int en); 55 | 56 | #endif 57 | -------------------------------------------------------------------------------- /jni/hidhci.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Host/Controller Interface (HCI) functions 3 | */ 4 | /* 5 | * Copyright (C) 2012 6 | * 7 | * This program is free software: you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation, either version 3 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License 18 | * along with this program. If not, see . 19 | * 20 | */ 21 | 22 | #ifndef __HIDHCI_H 23 | #define __HIDHCI_H 24 | 25 | #include 26 | 27 | 28 | /* 29 | * Get the Bluetooth address for the given device ID. 30 | * 31 | * Parameters: 32 | * device_id: The Bluetooth device ID. 33 | * device_bdaddr: The result. 34 | * 35 | * Returns: 36 | * 0 on success or a negative error code (defined in error.h) on failure. 37 | */ 38 | int hidc_get_device_bdaddr(int device_id, bdaddr_t *device_bdaddr); 39 | 40 | 41 | /* 42 | * Activate or deactivate the visibility of the Bluetooth adapter. If it is 43 | * visible it can be seen by other Bluetooth devices so they can pair. 44 | * 45 | * Parameters: 46 | * is_discoverable: 1=activate; 0=deactivate 47 | * 48 | * Returns: 49 | * 0 on success or a negative error code (defined in error.h) on failure. 50 | */ 51 | int hidc_set_discoverable(int is_discoverable); 52 | 53 | /* 54 | * Deactivate the visibility of the Bluetooth adapter if it was activated 55 | * with the hidc_set_discoverable function. 56 | * 57 | * Returns: 58 | * 0 on success or a negative error code (defined in error.h) on failure. 59 | */ 60 | int hidc_reset_discoverable(); 61 | 62 | 63 | /* 64 | * Return the original Bluetooth adapter Device Class if it was changed or 65 | * 0 if unchanged. 66 | * 67 | * Returns: 68 | * The original Device Class or 0 if unchanged. 69 | */ 70 | int hidc_get_org_device_class(); 71 | 72 | /* 73 | * Change the Bluetooth adapter Device Class to a HID Device Class. 74 | * 75 | * The Device Class is used by hosts to filter for specific devices. It is not 76 | * as important as the SDP record. According to the documentation a HID Device 77 | * Class isn't required, but some Bluetooth stacks won't accept the HID 78 | * if it is not defined. 79 | * 80 | * The Device Class will be changed to "Peripheral, Keyboard" which seems to 81 | * have the best compatibility (iOS requires it); although the Device Class 82 | * "Peripheral, Combo Keyboard/Pointing device" would be more correct. 83 | * 84 | * Returns: 85 | * 0 on success or a negative error code (defined in error.h) on failure. 86 | */ 87 | int hidc_set_hid_device_class(); 88 | 89 | /* 90 | * Restore the original Device Class of the Bluetooth adapter. 91 | * 92 | * Returns: 93 | * 0 on success or a negative error code (defined in error.h) on failure. 94 | */ 95 | int hidc_reset_device_class(); 96 | 97 | /* 98 | * Wait until the Service part of the Bluetooth adapter Class is empty. 99 | * 100 | * Parameters: 101 | * timeout: Maximum wait time in seconds. 102 | */ 103 | void hidc_wait_for_empty_service_class(int timeout); 104 | 105 | #endif 106 | -------------------------------------------------------------------------------- /jni/hidsdp.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Service Discovery Protocol (SDP) registration of Human Interface 3 | * Devices (HID) 4 | */ 5 | /* 6 | * Copyright (C) 2012 7 | * 8 | * This program is free software: you can redistribute it and/or modify 9 | * it under the terms of the GNU General Public License as published by 10 | * the Free Software Foundation, either version 3 of the License, or 11 | * (at your option) any later version. 12 | * 13 | * This program is distributed in the hope that it will be useful, 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | * GNU General Public License for more details. 17 | * 18 | * You should have received a copy of the GNU General Public License 19 | * along with this program. If not, see . 20 | * 21 | */ 22 | 23 | #ifndef __HIDSDP_H 24 | #define __HIDSDP_H 25 | 26 | /* 27 | * Minor Device Classes 28 | */ 29 | #define HIDC_MDC_KEYBOARD 0x40 30 | #define HIDC_MDC_POINTER 0x80 31 | #define HIDC_MDC_COMBO_KEY_POINT 0xc0 32 | 33 | 34 | /* 35 | * Register the HID Service Record. The Service Record describes the 36 | * capabilities and properties of the HID. 37 | * 38 | * Returns: 39 | * 0 on success or a negative error code (defined in error.h) on failure. 40 | */ 41 | int hidc_sdp_register(); 42 | 43 | /* 44 | * Unregister the HID Service Record. 45 | * 46 | * Returns: 47 | * 0 on success or a negative error code (defined in error.h) on failure. 48 | */ 49 | int hidc_sdp_unregister(); 50 | 51 | 52 | /* 53 | * Deactivate all Service Records except for the HID Service Record. 54 | * 55 | * Returns: 56 | * 0 on success or a negative error code (defined in error.h) on failure. 57 | */ 58 | int hidc_deactivate_other_services(); 59 | 60 | /* 61 | * Reactivate all previously deactivated Service Records. 62 | * 63 | * Returns: 64 | * 0 on success or a negative error code (defined in error.h) on failure. 65 | */ 66 | int hidc_reactivate_other_services(); 67 | 68 | #endif 69 | -------------------------------------------------------------------------------- /jni/log.c: -------------------------------------------------------------------------------- 1 | /* 2 | * Log functions 3 | */ 4 | /* 5 | * Copyright (C) 2012 6 | * 7 | * This program is free software: you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation, either version 3 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License 18 | * along with this program. If not, see . 19 | * 20 | */ 21 | 22 | #include 23 | #include 24 | #include 25 | #include 26 | 27 | #ifdef __ANDROID__ 28 | #include 29 | #else 30 | #include 31 | #endif 32 | 33 | #include "log.h" 34 | 35 | 36 | static int is_debug_active = 0; 37 | 38 | #ifdef __ANDROID__ 39 | static char *log_tag = ""; 40 | #endif 41 | 42 | 43 | void log_init(const char *ident, int detach, int debug) 44 | { 45 | #ifdef __ANDROID__ 46 | log_tag = (char *)ident; 47 | #else 48 | int option = LOG_NDELAY | LOG_PID; 49 | if (!detach) 50 | option |= LOG_PERROR; 51 | 52 | openlog(ident, option, LOG_DAEMON); 53 | #endif 54 | 55 | is_debug_active = debug; 56 | } 57 | 58 | int log_is_debug_active() 59 | { 60 | return is_debug_active; 61 | } 62 | 63 | void log_d(const char *format, ...) 64 | { 65 | if (is_debug_active) { 66 | va_list ap; 67 | 68 | va_start(ap, format); 69 | 70 | #ifdef __ANDROID__ 71 | __android_log_vprint(ANDROID_LOG_DEBUG, log_tag, format, ap); 72 | #else 73 | vsyslog(LOG_DEBUG, format, ap); 74 | #endif 75 | 76 | va_end(ap); 77 | } 78 | } 79 | 80 | void log_i(const char *format, ...) 81 | { 82 | va_list ap; 83 | 84 | va_start(ap, format); 85 | 86 | #ifdef __ANDROID__ 87 | __android_log_vprint(ANDROID_LOG_INFO, log_tag, format, ap); 88 | #else 89 | vsyslog(LOG_INFO, format, ap); 90 | #endif 91 | 92 | va_end(ap); 93 | } 94 | 95 | void log_e(const char *format, ...) 96 | { 97 | va_list ap; 98 | 99 | va_start(ap, format); 100 | 101 | #ifdef __ANDROID__ 102 | __android_log_vprint(ANDROID_LOG_ERROR, log_tag, format, ap); 103 | #else 104 | vsyslog(LOG_ERR, format, ap); 105 | #endif 106 | 107 | va_end(ap); 108 | } 109 | 110 | void log_ec(int errorcode, const char *format, ...) 111 | { 112 | size_t msg_size; 113 | char *msg; 114 | char *ec_msg; 115 | 116 | va_list ap; 117 | 118 | va_start(ap, format); 119 | 120 | if (errorcode == 0) { 121 | #ifdef __ANDROID__ 122 | __android_log_vprint(ANDROID_LOG_ERROR, log_tag, format, ap); 123 | #else 124 | vsyslog(LOG_ERR, format, ap); 125 | #endif 126 | } 127 | else { 128 | ec_msg = strerror(errorcode); 129 | 130 | msg_size = strlen(format) + strlen(ec_msg) + 20; 131 | msg = malloc(msg_size); 132 | if (!msg) { 133 | log_e("Can't log error code message: malloc error"); 134 | return; 135 | } 136 | 137 | snprintf(msg, msg_size, "%s: (%d) %s", 138 | format, errorcode, ec_msg); 139 | 140 | #ifdef __ANDROID__ 141 | __android_log_vprint(ANDROID_LOG_ERROR, log_tag, msg, ap); 142 | #else 143 | vsyslog(LOG_ERR, msg, ap); 144 | #endif 145 | 146 | free(msg); 147 | } 148 | 149 | va_end(ap); 150 | } 151 | -------------------------------------------------------------------------------- /jni/log.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Log functions 3 | */ 4 | /* 5 | * Copyright (C) 2012 6 | * 7 | * This program is free software: you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation, either version 3 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License 18 | * along with this program. If not, see . 19 | * 20 | */ 21 | 22 | #ifndef __LOG_H 23 | #define __LOG_H 24 | 25 | /* 26 | * This function should be called before any other log function. 27 | * 28 | * Parameters: 29 | * ident: The program identifier. 30 | * detach: True if the daemon is running in the background. 31 | * detach: True to activate the debug log. 32 | */ 33 | void log_init(const char *ident, int detach, int debug); 34 | 35 | 36 | /* 37 | * Get the current debug log state. 38 | * 39 | * Returns: 40 | * True if the debug log is active; False if not. 41 | */ 42 | int log_is_debug_active(); 43 | 44 | /* 45 | * Log a message with the Debug level. 46 | * 47 | * Parameters: 48 | * format: A format string. 49 | * ...: The format string values. 50 | */ 51 | void log_d(const char *format, ...); 52 | 53 | /* 54 | * Log a message with the Info level. 55 | * 56 | * Parameters: 57 | * format: A format string. 58 | * ...: The format string values. 59 | */ 60 | void log_i(const char *format, ...); 61 | 62 | /* 63 | * Log a message with the Error level. 64 | * 65 | * Parameters: 66 | * format: A format string. 67 | * ...: The format string values. 68 | */ 69 | void log_e(const char *format, ...); 70 | 71 | /* 72 | * Log an error code and a message with the Error level. 73 | * 74 | * Parameters: 75 | * errorcode: A project specific error code. 76 | * format: A format string. 77 | * ...: The format string values. 78 | */ 79 | void log_ec(int errorcode, const char *format, ...); 80 | 81 | #endif 82 | -------------------------------------------------------------------------------- /local.properties.example: -------------------------------------------------------------------------------- 1 | sdk.dir=/path/to/android/sdk 2 | ndk.dir=/path/to/android/ndk 3 | -------------------------------------------------------------------------------- /project.properties: -------------------------------------------------------------------------------- 1 | # This file is automatically generated by Android Tools. 2 | # Do not modify this file -- YOUR CHANGES WILL BE ERASED! 3 | # 4 | # This file must be checked in Version Control Systems. 5 | # 6 | # To customize properties used by the Ant build system use, 7 | # "ant.properties", and override values to adapt the script to your 8 | # project structure. 9 | 10 | # Project target. 11 | target=android-10 12 | -------------------------------------------------------------------------------- /res/anim/slide_in_left.xml: -------------------------------------------------------------------------------- 1 | 2 | 20 | 21 | 22 | 24 | 26 | 27 | -------------------------------------------------------------------------------- /res/anim/slide_in_right.xml: -------------------------------------------------------------------------------- 1 | 2 | 20 | 21 | 22 | 24 | 26 | 27 | -------------------------------------------------------------------------------- /res/anim/slide_out_left.xml: -------------------------------------------------------------------------------- 1 | 2 | 20 | 21 | 22 | 24 | 26 | 27 | -------------------------------------------------------------------------------- /res/anim/slide_out_right.xml: -------------------------------------------------------------------------------- 1 | 2 | 20 | 21 | 22 | 24 | 26 | 27 | -------------------------------------------------------------------------------- /res/drawable-hdpi/ab_btn_add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/ab_btn_add.png -------------------------------------------------------------------------------- /res/drawable-hdpi/ab_btn_keyboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/ab_btn_keyboard.png -------------------------------------------------------------------------------- /res/drawable-hdpi/ab_btn_next_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/ab_btn_next_disabled.png -------------------------------------------------------------------------------- /res/drawable-hdpi/ab_btn_next_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/ab_btn_next_normal.png -------------------------------------------------------------------------------- /res/drawable-hdpi/ab_btn_previous_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/ab_btn_previous_disabled.png -------------------------------------------------------------------------------- /res/drawable-hdpi/ab_btn_previous_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/ab_btn_previous_normal.png -------------------------------------------------------------------------------- /res/drawable-hdpi/ab_transparent_dark_holo.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/ab_transparent_dark_holo.9.png -------------------------------------------------------------------------------- /res/drawable-hdpi/app_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/app_icon.png -------------------------------------------------------------------------------- /res/drawable-hdpi/app_icon_small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/app_icon_small.png -------------------------------------------------------------------------------- /res/drawable-hdpi/bottom_bar_dark_holo.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/bottom_bar_dark_holo.9.png -------------------------------------------------------------------------------- /res/drawable-hdpi/btn_android_back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/btn_android_back.png -------------------------------------------------------------------------------- /res/drawable-hdpi/btn_android_home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/btn_android_home.png -------------------------------------------------------------------------------- /res/drawable-hdpi/btn_android_menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/btn_android_menu.png -------------------------------------------------------------------------------- /res/drawable-hdpi/btn_ps3_circle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/btn_ps3_circle.png -------------------------------------------------------------------------------- /res/drawable-hdpi/btn_ps3_ps.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/btn_ps3_ps.png -------------------------------------------------------------------------------- /res/drawable-hdpi/btn_ps3_select.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/btn_ps3_select.png -------------------------------------------------------------------------------- /res/drawable-hdpi/btn_ps3_square.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/btn_ps3_square.png -------------------------------------------------------------------------------- /res/drawable-hdpi/btn_ps3_start.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/btn_ps3_start.png -------------------------------------------------------------------------------- /res/drawable-hdpi/btn_ps3_triangle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/btn_ps3_triangle.png -------------------------------------------------------------------------------- /res/drawable-hdpi/btn_ps3_x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/btn_ps3_x.png -------------------------------------------------------------------------------- /res/drawable-hdpi/disconnected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/disconnected.png -------------------------------------------------------------------------------- /res/drawable-hdpi/ic_ab_back_holo_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/ic_ab_back_holo_dark.png -------------------------------------------------------------------------------- /res/drawable-hdpi/ic_action_send.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/ic_action_send.png -------------------------------------------------------------------------------- /res/drawable-hdpi/list_focused_holo.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/list_focused_holo.9.png -------------------------------------------------------------------------------- /res/drawable-hdpi/list_pressed_holo_dark.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/list_pressed_holo_dark.9.png -------------------------------------------------------------------------------- /res/drawable-hdpi/menu_about.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/menu_about.png -------------------------------------------------------------------------------- /res/drawable-hdpi/menu_compose.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/menu_compose.png -------------------------------------------------------------------------------- /res/drawable-hdpi/menu_help.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/menu_help.png -------------------------------------------------------------------------------- /res/drawable-hdpi/menu_paste.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/menu_paste.png -------------------------------------------------------------------------------- /res/drawable-hdpi/menu_preferences.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/menu_preferences.png -------------------------------------------------------------------------------- /res/drawable-hdpi/problem.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/problem.png -------------------------------------------------------------------------------- /res/drawable-hdpi/scroll_base.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/scroll_base.png -------------------------------------------------------------------------------- /res/drawable-hdpi/scroll_horizontal_active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/scroll_horizontal_active.png -------------------------------------------------------------------------------- /res/drawable-hdpi/scroll_vertical_active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/scroll_vertical_active.png -------------------------------------------------------------------------------- /res/drawable-hdpi/search_bt_device.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/search_bt_device.png -------------------------------------------------------------------------------- /res/drawable-hdpi/textfield_activated_holo_dark.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/textfield_activated_holo_dark.9.png -------------------------------------------------------------------------------- /res/drawable-hdpi/textfield_default_holo_dark.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/textfield_default_holo_dark.9.png -------------------------------------------------------------------------------- /res/drawable-hdpi/textfield_disabled_focused_holo_dark.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/textfield_disabled_focused_holo_dark.9.png -------------------------------------------------------------------------------- /res/drawable-hdpi/textfield_disabled_holo_dark.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/textfield_disabled_holo_dark.9.png -------------------------------------------------------------------------------- /res/drawable-hdpi/tutorial_touch_arrow_down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/tutorial_touch_arrow_down.png -------------------------------------------------------------------------------- /res/drawable-hdpi/tutorial_touch_arrow_down_left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/tutorial_touch_arrow_down_left.png -------------------------------------------------------------------------------- /res/drawable-hdpi/tutorial_touch_arrow_left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/tutorial_touch_arrow_left.png -------------------------------------------------------------------------------- /res/drawable-hdpi/tutorial_touch_arrow_right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/tutorial_touch_arrow_right.png -------------------------------------------------------------------------------- /res/drawable-hdpi/tutorial_touch_arrow_up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/tutorial_touch_arrow_up.png -------------------------------------------------------------------------------- /res/drawable-hdpi/tutorial_touch_arrow_up_right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/tutorial_touch_arrow_up_right.png -------------------------------------------------------------------------------- /res/drawable-mdpi/ab_btn_add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/ab_btn_add.png -------------------------------------------------------------------------------- /res/drawable-mdpi/ab_btn_keyboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/ab_btn_keyboard.png -------------------------------------------------------------------------------- /res/drawable-mdpi/ab_btn_next_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/ab_btn_next_disabled.png -------------------------------------------------------------------------------- /res/drawable-mdpi/ab_btn_next_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/ab_btn_next_normal.png -------------------------------------------------------------------------------- /res/drawable-mdpi/ab_btn_previous_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/ab_btn_previous_disabled.png -------------------------------------------------------------------------------- /res/drawable-mdpi/ab_btn_previous_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/ab_btn_previous_normal.png -------------------------------------------------------------------------------- /res/drawable-mdpi/ab_transparent_dark_holo.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/ab_transparent_dark_holo.9.png -------------------------------------------------------------------------------- /res/drawable-mdpi/app_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/app_icon.png -------------------------------------------------------------------------------- /res/drawable-mdpi/app_icon_small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/app_icon_small.png -------------------------------------------------------------------------------- /res/drawable-mdpi/bottom_bar_dark_holo.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/bottom_bar_dark_holo.9.png -------------------------------------------------------------------------------- /res/drawable-mdpi/btn_android_back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/btn_android_back.png -------------------------------------------------------------------------------- /res/drawable-mdpi/btn_android_home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/btn_android_home.png -------------------------------------------------------------------------------- /res/drawable-mdpi/btn_android_menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/btn_android_menu.png -------------------------------------------------------------------------------- /res/drawable-mdpi/btn_ps3_circle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/btn_ps3_circle.png -------------------------------------------------------------------------------- /res/drawable-mdpi/btn_ps3_ps.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/btn_ps3_ps.png -------------------------------------------------------------------------------- /res/drawable-mdpi/btn_ps3_select.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/btn_ps3_select.png -------------------------------------------------------------------------------- /res/drawable-mdpi/btn_ps3_square.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/btn_ps3_square.png -------------------------------------------------------------------------------- /res/drawable-mdpi/btn_ps3_start.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/btn_ps3_start.png -------------------------------------------------------------------------------- /res/drawable-mdpi/btn_ps3_triangle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/btn_ps3_triangle.png -------------------------------------------------------------------------------- /res/drawable-mdpi/btn_ps3_x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/btn_ps3_x.png -------------------------------------------------------------------------------- /res/drawable-mdpi/disconnected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/disconnected.png -------------------------------------------------------------------------------- /res/drawable-mdpi/ic_ab_back_holo_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/ic_ab_back_holo_dark.png -------------------------------------------------------------------------------- /res/drawable-mdpi/ic_action_send.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/ic_action_send.png -------------------------------------------------------------------------------- /res/drawable-mdpi/list_focused_holo.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/list_focused_holo.9.png -------------------------------------------------------------------------------- /res/drawable-mdpi/list_pressed_holo_dark.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/list_pressed_holo_dark.9.png -------------------------------------------------------------------------------- /res/drawable-mdpi/menu_about.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/menu_about.png -------------------------------------------------------------------------------- /res/drawable-mdpi/menu_compose.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/menu_compose.png -------------------------------------------------------------------------------- /res/drawable-mdpi/menu_help.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/menu_help.png -------------------------------------------------------------------------------- /res/drawable-mdpi/menu_paste.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/menu_paste.png -------------------------------------------------------------------------------- /res/drawable-mdpi/menu_preferences.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/menu_preferences.png -------------------------------------------------------------------------------- /res/drawable-mdpi/problem.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/problem.png -------------------------------------------------------------------------------- /res/drawable-mdpi/scroll_base.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/scroll_base.png -------------------------------------------------------------------------------- /res/drawable-mdpi/scroll_horizontal_active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/scroll_horizontal_active.png -------------------------------------------------------------------------------- /res/drawable-mdpi/scroll_vertical_active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/scroll_vertical_active.png -------------------------------------------------------------------------------- /res/drawable-mdpi/search_bt_device.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/search_bt_device.png -------------------------------------------------------------------------------- /res/drawable-mdpi/textfield_activated_holo_dark.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/textfield_activated_holo_dark.9.png -------------------------------------------------------------------------------- /res/drawable-mdpi/textfield_default_holo_dark.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/textfield_default_holo_dark.9.png -------------------------------------------------------------------------------- /res/drawable-mdpi/textfield_disabled_focused_holo_dark.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/textfield_disabled_focused_holo_dark.9.png -------------------------------------------------------------------------------- /res/drawable-mdpi/textfield_disabled_holo_dark.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/textfield_disabled_holo_dark.9.png -------------------------------------------------------------------------------- /res/drawable-mdpi/tutorial_touch_arrow_down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/tutorial_touch_arrow_down.png -------------------------------------------------------------------------------- /res/drawable-mdpi/tutorial_touch_arrow_down_left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/tutorial_touch_arrow_down_left.png -------------------------------------------------------------------------------- /res/drawable-mdpi/tutorial_touch_arrow_left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/tutorial_touch_arrow_left.png -------------------------------------------------------------------------------- /res/drawable-mdpi/tutorial_touch_arrow_right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/tutorial_touch_arrow_right.png -------------------------------------------------------------------------------- /res/drawable-mdpi/tutorial_touch_arrow_up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/tutorial_touch_arrow_up.png -------------------------------------------------------------------------------- /res/drawable-mdpi/tutorial_touch_arrow_up_right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/tutorial_touch_arrow_up_right.png -------------------------------------------------------------------------------- /res/drawable-nodpi/touchpad_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-nodpi/touchpad_background.png -------------------------------------------------------------------------------- /res/drawable-xhdpi/ab_btn_add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/ab_btn_add.png -------------------------------------------------------------------------------- /res/drawable-xhdpi/ab_btn_keyboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/ab_btn_keyboard.png -------------------------------------------------------------------------------- /res/drawable-xhdpi/ab_btn_next_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/ab_btn_next_disabled.png -------------------------------------------------------------------------------- /res/drawable-xhdpi/ab_btn_next_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/ab_btn_next_normal.png -------------------------------------------------------------------------------- /res/drawable-xhdpi/ab_btn_previous_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/ab_btn_previous_disabled.png -------------------------------------------------------------------------------- /res/drawable-xhdpi/ab_btn_previous_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/ab_btn_previous_normal.png -------------------------------------------------------------------------------- /res/drawable-xhdpi/ab_transparent_dark_holo.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/ab_transparent_dark_holo.9.png -------------------------------------------------------------------------------- /res/drawable-xhdpi/app_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/app_icon.png -------------------------------------------------------------------------------- /res/drawable-xhdpi/app_icon_small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/app_icon_small.png -------------------------------------------------------------------------------- /res/drawable-xhdpi/bottom_bar_dark_holo.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/bottom_bar_dark_holo.9.png -------------------------------------------------------------------------------- /res/drawable-xhdpi/btn_android_back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/btn_android_back.png -------------------------------------------------------------------------------- /res/drawable-xhdpi/btn_android_home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/btn_android_home.png -------------------------------------------------------------------------------- /res/drawable-xhdpi/btn_android_menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/btn_android_menu.png -------------------------------------------------------------------------------- /res/drawable-xhdpi/btn_ps3_circle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/btn_ps3_circle.png -------------------------------------------------------------------------------- /res/drawable-xhdpi/btn_ps3_ps.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/btn_ps3_ps.png -------------------------------------------------------------------------------- /res/drawable-xhdpi/btn_ps3_select.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/btn_ps3_select.png -------------------------------------------------------------------------------- /res/drawable-xhdpi/btn_ps3_square.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/btn_ps3_square.png -------------------------------------------------------------------------------- /res/drawable-xhdpi/btn_ps3_start.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/btn_ps3_start.png -------------------------------------------------------------------------------- /res/drawable-xhdpi/btn_ps3_triangle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/btn_ps3_triangle.png -------------------------------------------------------------------------------- /res/drawable-xhdpi/btn_ps3_x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/btn_ps3_x.png -------------------------------------------------------------------------------- /res/drawable-xhdpi/disconnected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/disconnected.png -------------------------------------------------------------------------------- /res/drawable-xhdpi/ic_ab_back_holo_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/ic_ab_back_holo_dark.png -------------------------------------------------------------------------------- /res/drawable-xhdpi/ic_action_send.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/ic_action_send.png -------------------------------------------------------------------------------- /res/drawable-xhdpi/list_focused_holo.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/list_focused_holo.9.png -------------------------------------------------------------------------------- /res/drawable-xhdpi/list_pressed_holo_dark.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/list_pressed_holo_dark.9.png -------------------------------------------------------------------------------- /res/drawable-xhdpi/menu_paste.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/menu_paste.png -------------------------------------------------------------------------------- /res/drawable-xhdpi/problem.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/problem.png -------------------------------------------------------------------------------- /res/drawable-xhdpi/scroll_base.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/scroll_base.png -------------------------------------------------------------------------------- /res/drawable-xhdpi/scroll_horizontal_active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/scroll_horizontal_active.png -------------------------------------------------------------------------------- /res/drawable-xhdpi/scroll_vertical_active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/scroll_vertical_active.png -------------------------------------------------------------------------------- /res/drawable-xhdpi/search_bt_device.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/search_bt_device.png -------------------------------------------------------------------------------- /res/drawable-xhdpi/textfield_activated_holo_dark.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/textfield_activated_holo_dark.9.png -------------------------------------------------------------------------------- /res/drawable-xhdpi/textfield_default_holo_dark.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/textfield_default_holo_dark.9.png -------------------------------------------------------------------------------- /res/drawable-xhdpi/textfield_disabled_focused_holo_dark.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/textfield_disabled_focused_holo_dark.9.png -------------------------------------------------------------------------------- /res/drawable-xhdpi/textfield_disabled_holo_dark.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/textfield_disabled_holo_dark.9.png -------------------------------------------------------------------------------- /res/drawable-xhdpi/tutorial_touch_arrow_down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/tutorial_touch_arrow_down.png -------------------------------------------------------------------------------- /res/drawable-xhdpi/tutorial_touch_arrow_down_left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/tutorial_touch_arrow_down_left.png -------------------------------------------------------------------------------- /res/drawable-xhdpi/tutorial_touch_arrow_left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/tutorial_touch_arrow_left.png -------------------------------------------------------------------------------- /res/drawable-xhdpi/tutorial_touch_arrow_right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/tutorial_touch_arrow_right.png -------------------------------------------------------------------------------- /res/drawable-xhdpi/tutorial_touch_arrow_up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/tutorial_touch_arrow_up.png -------------------------------------------------------------------------------- /res/drawable-xhdpi/tutorial_touch_arrow_up_right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/tutorial_touch_arrow_up_right.png -------------------------------------------------------------------------------- /res/drawable/ab_btn_next.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /res/drawable/ab_btn_previous.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /res/drawable/ab_button.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 7 | 8 | -------------------------------------------------------------------------------- /res/drawable/action_bar_home.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 10 | 11 | -------------------------------------------------------------------------------- /res/drawable/btn_touchpad.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /res/drawable/btn_touchpad_pressed.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | -------------------------------------------------------------------------------- /res/drawable/edit_text_holo_dark.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 9 | 12 | 14 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /res/drawable/icon_btn_touchpad.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /res/drawable/icon_btn_touchpad_pressed.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 8 | 10 | -------------------------------------------------------------------------------- /res/drawable/scroll_all.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /res/drawable/scroll_horizontal.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/drawable/scroll_vertical.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/drawable/tutorial_1f_scroll.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | 14 | 19 | -------------------------------------------------------------------------------- /res/drawable/tutorial_1f_tap.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /res/drawable/tutorial_2f_scroll.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 13 | 14 | 19 | 24 | 25 | 30 | 31 | 36 | 41 | 42 | 47 | -------------------------------------------------------------------------------- /res/drawable/tutorial_2f_tap.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 13 | -------------------------------------------------------------------------------- /res/drawable/tutorial_3f_d.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 13 | 18 | 19 | 24 | 29 | 34 | -------------------------------------------------------------------------------- /res/drawable/tutorial_3f_l.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 13 | 18 | 19 | 24 | -------------------------------------------------------------------------------- /res/drawable/tutorial_3f_lr.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 13 | 18 | 19 | 24 | 25 | 30 | -------------------------------------------------------------------------------- /res/drawable/tutorial_3f_tap.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 13 | 18 | -------------------------------------------------------------------------------- /res/drawable/tutorial_3f_u.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 13 | 18 | 19 | 24 | 29 | 34 | -------------------------------------------------------------------------------- /res/drawable/tutorial_4f_d.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 13 | 18 | 23 | 24 | 29 | 34 | 39 | 44 | -------------------------------------------------------------------------------- /res/drawable/tutorial_4f_lr.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 13 | 18 | 23 | 24 | 29 | 30 | 35 | -------------------------------------------------------------------------------- /res/drawable/tutorial_4f_u.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 13 | 18 | 23 | 24 | 29 | 34 | 39 | 44 | -------------------------------------------------------------------------------- /res/drawable/tutorial_4f_ud.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 13 | 18 | 23 | 24 | 29 | 34 | 39 | 44 | 45 | 50 | 55 | 60 | 65 | -------------------------------------------------------------------------------- /res/drawable/tutorial_drag.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | 14 | 19 | 24 | 29 | -------------------------------------------------------------------------------- /res/drawable/tutorial_edge_b.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | 14 | -------------------------------------------------------------------------------- /res/drawable/tutorial_edge_l.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | 14 | -------------------------------------------------------------------------------- /res/drawable/tutorial_edge_r.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | 14 | -------------------------------------------------------------------------------- /res/drawable/tutorial_edge_t.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | 14 | -------------------------------------------------------------------------------- /res/drawable/tutorial_pinch_zoom.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 13 | 14 | 19 | 24 | -------------------------------------------------------------------------------- /res/drawable/tutorial_tap.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | -------------------------------------------------------------------------------- /res/drawable/tutorial_tap_inner_circle.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | -------------------------------------------------------------------------------- /res/drawable/tutorial_tap_outer_circle.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | -------------------------------------------------------------------------------- /res/drawable/tutorial_touch_move.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | 14 | 19 | 24 | 29 | -------------------------------------------------------------------------------- /res/drawable/tutorial_touch_point.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | -------------------------------------------------------------------------------- /res/layout/about_dialog.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 9 | 12 | 13 | 14 | 16 | 18 | 19 | 20 | 21 | 23 | 24 | 27 | 28 | 30 | 33 | 34 | 35 | 37 | 40 | 41 | 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /res/layout/changelog_dialog.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 7 | -------------------------------------------------------------------------------- /res/layout/device_list.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 11 | 13 | 17 | 18 | 19 | 23 | 24 | 28 | 29 | -------------------------------------------------------------------------------- /res/layout/pairing.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 13 | 15 | 16 | 17 | 22 | 23 | 24 | 26 | 27 | 28 | 29 | 31 | 34 | 35 | 37 | 39 | 40 | 41 | 42 | 43 | 45 | 46 | 47 | 49 | 50 | 51 | 52 | 53 | 55 | 58 | 59 | 61 | 62 | 63 | 64 | 65 | 66 | -------------------------------------------------------------------------------- /res/menu/device_context.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 7 | 9 | 10 | -------------------------------------------------------------------------------- /res/menu/main.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | -------------------------------------------------------------------------------- /res/menu/touchpad.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 9 | 12 | 15 | 16 | -------------------------------------------------------------------------------- /res/values-land/style.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 12 | 18 | 25 | 32 | 35 | 38 | -------------------------------------------------------------------------------- /res/values-land/style_touchpad.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 11 | 17 | -------------------------------------------------------------------------------- /res/values-port/style_touchpad.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 10 | 16 | -------------------------------------------------------------------------------- /res/values-port/style_tutorial.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 9 | 12 | 15 | 18 | 21 | 24 | 25 | 34 | 37 | 38 | 45 | 52 | 59 | 60 | 68 | -------------------------------------------------------------------------------- /res/values-w600dp-h600dp/style.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 12 | 18 | 25 | 32 | 35 | 38 | -------------------------------------------------------------------------------- /res/values-w600dp-h600dp/style_tutorial.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 9 | 12 | 15 | 18 | 21 | 24 | 25 | 34 | 37 | 40 | 43 | 44 | 50 | 57 | 64 | 71 | 72 | 79 | -------------------------------------------------------------------------------- /res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #a0a6b3 4 | #7533b5e5 5 | #7533b5e5 6 | #3033b5e5 7 | #f3f3f3 8 | #b20099cc 9 | #b20099cc 10 | #4c33b5e5 11 | -------------------------------------------------------------------------------- /res/values/keymaps.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | de_DE 5 | en_US 6 | 7 | 8 | Deutsch 9 | English 10 | 11 | -------------------------------------------------------------------------------- /res/values/operating_systems.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | android 5 | ios 6 | linux 7 | osx 8 | playstation3 9 | windows 10 | 11 | 12 | 13 | @string/os_android 14 | @string/os_ios 15 | @string/os_linux 16 | @string/os_osx 17 | @string/os_playstation3 18 | @string/os_windows 19 | @string/os_undefined 20 | 21 | -------------------------------------------------------------------------------- /res/values/pref_touchpad_buttons.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | show 5 | show_portrait 6 | hide 7 | 8 | 9 | @string/pref_touchpad_buttons_show 10 | @string/pref_touchpad_buttons_show_portrait 11 | @string/pref_touchpad_buttons_hide 12 | 13 | -------------------------------------------------------------------------------- /res/values/pref_touchpad_gesture_mode.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | android 6 | gnome_shell 7 | osx 8 | playstation3 9 | ubuntu_unity 10 | windows7 11 | windows8 12 | 13 | 14 | @string/pref_touchpad_gesture_mode_default 15 | @string/pref_touchpad_gesture_mode_android 16 | @string/pref_touchpad_gesture_mode_gnome_shell 17 | @string/pref_touchpad_gesture_mode_osx 18 | @string/pref_touchpad_gesture_mode_playstation3 19 | @string/pref_touchpad_gesture_mode_ubuntu_unity 20 | @string/pref_touchpad_gesture_mode_windows7 21 | @string/pref_touchpad_gesture_mode_windows8 22 | 23 | 24 | 25 | 26 | gnome_shell 27 | ubuntu_unity 28 | 29 | 30 | @string/pref_touchpad_gesture_mode_default 31 | @string/pref_touchpad_gesture_mode_gnome_shell 32 | @string/pref_touchpad_gesture_mode_ubuntu_unity 33 | 34 | 35 | 36 | windows7 37 | windows8 38 | 39 | 40 | @string/pref_touchpad_gesture_mode_windows7 41 | @string/pref_touchpad_gesture_mode_windows8 42 | 43 | -------------------------------------------------------------------------------- /res/values/style_about.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 12 | 18 | 23 | 28 | 35 | 39 | 45 | 47 | 55 | 56 | -------------------------------------------------------------------------------- /res/values/style_changelog.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 13 | -------------------------------------------------------------------------------- /res/values/style_help.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 10 | 17 | 22 | 26 | -------------------------------------------------------------------------------- /res/values/style_pairing.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 11 | -------------------------------------------------------------------------------- /res/values/style_touchpad.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 9 | 13 | 19 | 24 | 36 | 42 | 47 | 52 | 59 | 65 | -------------------------------------------------------------------------------- /res/xml/preferences_device.xml: -------------------------------------------------------------------------------- 1 | 3 | 10 | 16 | 23 | 30 | 36 | 39 | 42 | 45 | 46 | -------------------------------------------------------------------------------- /src/org/ronsdev/bluectrl/ChangelogDialog.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2012 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package org.ronsdev.bluectrl; 18 | 19 | import android.app.Activity; 20 | import android.app.AlertDialog; 21 | import android.app.Dialog; 22 | import android.content.Context; 23 | import android.content.DialogInterface; 24 | import android.text.Html; 25 | import android.view.LayoutInflater; 26 | import android.view.View; 27 | import android.view.ViewGroup; 28 | import android.widget.TextView; 29 | 30 | import java.io.BufferedReader; 31 | import java.io.IOException; 32 | import java.io.InputStream; 33 | import java.io.InputStreamReader; 34 | 35 | /** 36 | * Dialog that shows the app changelog. 37 | */ 38 | public class ChangelogDialog { 39 | 40 | private static final String CHANGELOG_ASSETS_FILE = "CHANGELOG.md"; 41 | 42 | private static final String HEADER_LINE_REGEX = "^--*$"; 43 | 44 | 45 | private static CharSequence getHtmlText(Context context) { 46 | StringBuilder result = new StringBuilder(); 47 | 48 | InputStream inputStream = null; 49 | InputStreamReader inputReader = null; 50 | BufferedReader reader = null; 51 | try { 52 | inputStream = context.getAssets().open(CHANGELOG_ASSETS_FILE); 53 | try { 54 | inputReader = new InputStreamReader(inputStream); 55 | reader = new BufferedReader(inputReader); 56 | 57 | String currentLine = reader.readLine(); 58 | String nextLine = reader.readLine(); 59 | while (nextLine != null) { 60 | result.append(parseLine(currentLine, nextLine)).append('\n'); 61 | 62 | currentLine = nextLine; 63 | nextLine = reader.readLine(); 64 | } 65 | result.append(parseLine(currentLine, null)); 66 | } finally { 67 | if (reader != null) { 68 | reader.close(); 69 | } 70 | if (inputReader != null) { 71 | inputReader.close(); 72 | } 73 | inputStream.close(); 74 | } 75 | } catch (IOException e) { 76 | e.printStackTrace(); 77 | } 78 | 79 | return Html.fromHtml(result.toString()); 80 | } 81 | 82 | private static String parseLine(String currentLine, String nextLine) { 83 | if ((nextLine != null) && nextLine.matches(HEADER_LINE_REGEX)) { 84 | return String.format("

%s

", currentLine); 85 | } else if (currentLine.matches(HEADER_LINE_REGEX)) { 86 | return ""; 87 | } else if (currentLine.startsWith("*")) { 88 | return String.format("\u2022%s
", currentLine.substring(1)); 89 | } else { 90 | return String.format("%s
", currentLine); 91 | } 92 | } 93 | 94 | public static Dialog createDialog(Activity activity) { 95 | LayoutInflater inflater = 96 | (LayoutInflater)activity.getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 97 | 98 | View layout = inflater.inflate(R.layout.changelog_dialog, 99 | (ViewGroup)activity.findViewById(R.id.view_changelog)); 100 | 101 | TextView changelogText = (TextView)layout.findViewById(R.id.changelog_text); 102 | changelogText.setText(getHtmlText(activity)); 103 | 104 | return new AlertDialog.Builder(activity) 105 | .setTitle(R.string.changelog) 106 | .setView(layout) 107 | .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { 108 | public void onClick(DialogInterface dialog, int id) { 109 | dialog.cancel(); 110 | } 111 | }) 112 | .create(); 113 | } 114 | } 115 | -------------------------------------------------------------------------------- /src/org/ronsdev/bluectrl/IntArrayList.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2012 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package org.ronsdev.bluectrl; 18 | 19 | import java.util.ArrayList; 20 | import java.util.Collection; 21 | 22 | /** 23 | * Simple ArrayList for Integer values. 24 | */ 25 | public class IntArrayList extends ArrayList { 26 | 27 | private static final long serialVersionUID = 7717710388705440454L; 28 | 29 | 30 | public IntArrayList() { 31 | super(); 32 | } 33 | 34 | public IntArrayList(Collection collection) { 35 | super(collection); 36 | } 37 | 38 | public IntArrayList(int capacity) { 39 | super(capacity); 40 | } 41 | 42 | 43 | public int getValue(int index) { 44 | return (int)get(index); 45 | } 46 | 47 | public int indexOfValue(int value) { 48 | return indexOf((Integer)value); 49 | } 50 | 51 | public boolean containsValue(int value) { 52 | return contains((Integer)value); 53 | } 54 | 55 | public boolean addValue(int value) { 56 | return add((Integer)value); 57 | } 58 | 59 | public boolean removeValue(int value) { 60 | return remove((Integer)value); 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /src/org/ronsdev/bluectrl/OnMouseButtonClickListener.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2012 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package org.ronsdev.bluectrl; 18 | 19 | /** 20 | * Interface definition for a callback to be invoked when a Mouse button is clicked. 21 | */ 22 | public interface OnMouseButtonClickListener { 23 | 24 | /** 25 | * Called when a Mouse button is clicked. 26 | * @param clickType 27 | * Specifies how the button is clicked ('CLICK_TYPE_*' constants in the HidMouse class) 28 | * @param button 29 | * The clicked button 30 | */ 31 | public abstract void onMouseButtonClick(int clickType, int button); 32 | } 33 | -------------------------------------------------------------------------------- /src/org/ronsdev/bluectrl/PairedDevice.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2012 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package org.ronsdev.bluectrl; 18 | 19 | import android.bluetooth.BluetoothDevice; 20 | 21 | import java.util.Comparator; 22 | 23 | /** 24 | * Container class for a paired Bluetooth device. 25 | */ 26 | public class PairedDevice { 27 | 28 | /** Default Comparator for the PairedDevice class. */ 29 | public static Comparator DefaultComparator = new Comparator() { 30 | @Override 31 | public int compare(PairedDevice d1, PairedDevice d2) { 32 | return d1.toString().compareToIgnoreCase(d2.toString()); 33 | } 34 | }; 35 | 36 | 37 | private BluetoothDevice mDevice; 38 | private String mName; 39 | 40 | 41 | public PairedDevice(BluetoothDevice device, String name) { 42 | mDevice = device; 43 | mName = name; 44 | } 45 | 46 | 47 | @Override 48 | public String toString() { 49 | return mName; 50 | } 51 | 52 | public BluetoothDevice getDevice() { 53 | return mDevice; 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /src/org/ronsdev/bluectrl/widget/OnKeyboardComposingTextListener.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2012 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package org.ronsdev.bluectrl.widget; 18 | 19 | /** 20 | * Interface definition for a callback to be invoked when a keyboard is composing a text. 21 | */ 22 | public interface OnKeyboardComposingTextListener { 23 | 24 | /** 25 | * Called when a keyboard is composing a text. 26 | * @param composingText 27 | * The composing text of the keyboard. 28 | */ 29 | public abstract void OnKeyboardComposingText(CharSequence composingText); 30 | } 31 | -------------------------------------------------------------------------------- /src/org/ronsdev/bluectrl/widget/OnScrollModeChangedListener.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2012 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package org.ronsdev.bluectrl.widget; 18 | 19 | /** 20 | * Interface definition for a callback to be invoked when the scroll mode has changed. 21 | */ 22 | public interface OnScrollModeChangedListener { 23 | 24 | /** 25 | * Called when the scroll mode has changed. 26 | * @param newMode 27 | * The new mode ('SCROLL_MODE_*' constants in the {@link TouchpadView} class) 28 | * @param oldMode 29 | * The old mode ('SCROLL_MODE_*' constants in the {@link TouchpadView} class) 30 | */ 31 | public abstract void onScrollModeChanged(int newMode, int oldMode); 32 | } 33 | -------------------------------------------------------------------------------- /src/org/ronsdev/bluectrl/widget/OnSendComposeTextListener.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2012 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package org.ronsdev.bluectrl.widget; 18 | 19 | /** 20 | * Interface definition for a callback to be invoked when a composed text should be sent. 21 | */ 22 | public interface OnSendComposeTextListener { 23 | 24 | /** 25 | * Called when a composed text should be sent. 26 | * @param text 27 | * The composed text that should be sent. 28 | */ 29 | public abstract void OnSendComposeText(CharSequence text); 30 | } 31 | -------------------------------------------------------------------------------- /src/org/ronsdev/bluectrl/widget/OnTouchpadGestureListener.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2012 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package org.ronsdev.bluectrl.widget; 18 | 19 | /** 20 | * Interface definition for a callback to be invoked when a touchpad gesture has been detected. 21 | */ 22 | public interface OnTouchpadGestureListener { 23 | 24 | /** 25 | * Called when a touchpad gesture has been detected. 26 | * @param gesture 27 | * The detected gesture ('GESTURE_*' constants in the {@link TouchpadView} class) 28 | * @param direction 29 | * The direction of the gesture ('GESTURE_DIRECTION_*' constants in the {@link TouchpadView} 30 | * class) 31 | * @return 32 | * Return {@code true} if you have handled the gesture, {@code false} if you haven't 33 | */ 34 | public abstract boolean onTouchpadGesture(int gesture, int direction); 35 | } 36 | -------------------------------------------------------------------------------- /src/org/ronsdev/bluectrl/widget/SummaryListPreference.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2012 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package org.ronsdev.bluectrl.widget; 18 | 19 | import android.content.Context; 20 | import android.preference.ListPreference; 21 | import android.util.AttributeSet; 22 | 23 | /** 24 | * A {@link Preference} that displays a list of entries as a dialog. 25 | * 26 | * This extended version can show the current value in the summary (backported feature of 27 | * Android 4). 28 | */ 29 | public class SummaryListPreference extends ListPreference { 30 | 31 | public SummaryListPreference(Context context, AttributeSet attrs) { 32 | super(context, attrs); 33 | } 34 | 35 | @Override 36 | public CharSequence getSummary() { 37 | final CharSequence summary = super.getSummary(); 38 | final CharSequence entry = getEntry(); 39 | if (summary == null || entry == null) { 40 | return null; 41 | } else { 42 | return String.format(summary.toString(), entry); 43 | } 44 | } 45 | 46 | @Override 47 | public void setValue(String value) 48 | { 49 | super.setValue(value); 50 | notifyChanged(); 51 | } 52 | } --------------------------------------------------------------------------------