diff options
| author | Ali B <abittin@gmail.com> | 2019-10-08 19:59:27 +0300 |
|---|---|---|
| committer | Ali B <abittin@gmail.com> | 2019-10-13 17:32:06 +0200 |
| commit | 04f00bd95987a5bd3ff65eb8b3f728b62b5ec9fd (patch) | |
| tree | 56e20b8dc193adbfca7d073a334d62aa94b88bae | |
| parent | 2c3904173ba3ed2cb1138deb0e09722260e42be7 (diff) | |
Revert "oppo-common: remove DeviceHandler for now"
This reverts commit fabbf44def282c67da14a4c7417aa54485e79b51.
Change-Id: I7396e22a2bedc90062e66e69589032a156d3b423
62 files changed, 3056 insertions, 3 deletions
diff --git a/DeviceHandler/Android.mk b/DeviceHandler/Android.mk new file mode 100644 index 0000000..9ddab8d --- /dev/null +++ b/DeviceHandler/Android.mk @@ -0,0 +1,31 @@ +# +# Copyright (C) 2014 SlimRoms Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +LOCAL_PATH := $(call my-dir) +include $(CLEAR_VARS) + +LOCAL_SRC_FILES := $(call all-java-files-under, src) +LOCAL_CERTIFICATE := platform +LOCAL_PACKAGE_NAME := DeviceHandler +LOCAL_PRIVATE_PLATFORM_APIS := true +LOCAL_PROGUARD_FLAG_FILES := proguard.flags +LOCAL_DEX_PREOPT := false + +LOCAL_STATIC_ANDROID_LIBRARIES := \ + androidx.core_core \ + androidx.preference_preference + +include $(BUILD_PACKAGE) diff --git a/DeviceHandler/AndroidManifest.xml b/DeviceHandler/AndroidManifest.xml new file mode 100644 index 0000000..22e3a06 --- /dev/null +++ b/DeviceHandler/AndroidManifest.xml @@ -0,0 +1,63 @@ +<?xml version="1.0" encoding="utf-8"?> +<manifest xmlns:android="http://schemas.android.com/apk/res/android" + android:sharedUserId="android.uid.system" + package="com.slim.device" + android:versionCode="1" + android:versionName="1" > + + <uses-permission android:name="android.permission.INJECT_EVENTS"/> + <uses-permission android:name="android.permission.VIBRATE" /> + <uses-permission android:name="android.permission.CAMERA" /> + + <uses-sdk + android:minSdkVersion="18" + android:targetSdkVersion="19" /> + + <application + android:icon="@android:drawable/sym_def_app_icon" + android:label="DeviceHandler" + > + + <!-- stub to ensure its loaded - DO NOT REMOVE --> + <activity android:name=".KeyHandler" /> + + <activity + android:name=".settings.ScreenOffGestureSettings" + android:label="@string/screen_off_gesture_title" + android:theme="@style/DeviceHandlerTheme"> + <intent-filter> + <action android:name="com.android.settings.action.IA_SETTINGS" /> + </intent-filter> + <meta-data + android:name="com.android.settings.category" + android:value="com.android.settings.category.ia.gestures" /> + <meta-data android:name="com.android.settings.summary" + android:resource="@string/screen_off_gesture_summary"/> + </activity> + + <activity + android:name=".settings.SliderSettings" + android:theme="@style/DeviceHandlerTheme" + android:label="@string/notification_slider"> + <intent-filter> + <action android:name="com.android.settings.action.EXTRA_SETTINGS" /> + </intent-filter> + <meta-data + android:name="com.android.settings.icon" + android:resource="@drawable/ic_settings_additional_buttons" /> + <meta-data + android:name="com.android.settings.category" + android:value="com.android.settings.category.ia.system" /> + <meta-data android:name="com.android.settings.summary" + android:resource="@string/notification_slider_summary"/> + </activity> + + <receiver android:name=".BootReceiver" > + <intent-filter> + <action android:name="android.intent.action.BOOT_COMPLETED" /> + </intent-filter> + </receiver> + + </application> + +</manifest> diff --git a/DeviceHandler/proguard.flags b/DeviceHandler/proguard.flags new file mode 100644 index 0000000..8c6271d --- /dev/null +++ b/DeviceHandler/proguard.flags @@ -0,0 +1,21 @@ +-keep public class com.slim.device.KeyHandler + +# Keep keyhandler constructor +-keep public class * implements com.android.internal.os.DeviceKeyHandler { + public <init>(android.content.Context); +} + +-keepclassmembers public class com.slim.device.KeyHandler { + *; +} + +# Keep classes that may be inflated from XML. +-keepclasseswithmembers class * { + public <init>(android.content.Context, android.util.AttributeSet); +} +-keepclasseswithmembers class * { + public <init>(android.content.Context, android.util.AttributeSet, int); +} +-keepclasseswithmembers class * { + public <init>(android.content.Context, android.util.AttributeSet, int, int); +} diff --git a/DeviceHandler/res/drawable-hdpi/app_icon.png b/DeviceHandler/res/drawable-hdpi/app_icon.png Binary files differnew file mode 100644 index 0000000..5a23db4 --- /dev/null +++ b/DeviceHandler/res/drawable-hdpi/app_icon.png diff --git a/DeviceHandler/res/drawable-mdpi/app_icon.png b/DeviceHandler/res/drawable-mdpi/app_icon.png Binary files differnew file mode 100644 index 0000000..5f56b99 --- /dev/null +++ b/DeviceHandler/res/drawable-mdpi/app_icon.png diff --git a/DeviceHandler/res/drawable-xhdpi/app_icon.png b/DeviceHandler/res/drawable-xhdpi/app_icon.png Binary files differnew file mode 100644 index 0000000..896f8f3 --- /dev/null +++ b/DeviceHandler/res/drawable-xhdpi/app_icon.png diff --git a/DeviceHandler/res/drawable-xxhdpi/app_icon.png b/DeviceHandler/res/drawable-xxhdpi/app_icon.png Binary files differnew file mode 100644 index 0000000..5beb259 --- /dev/null +++ b/DeviceHandler/res/drawable-xxhdpi/app_icon.png diff --git a/DeviceHandler/res/drawable/ic_settings_additional_buttons.xml b/DeviceHandler/res/drawable/ic_settings_additional_buttons.xml new file mode 100644 index 0000000..baa2c3c --- /dev/null +++ b/DeviceHandler/res/drawable/ic_settings_additional_buttons.xml @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + Copyright (C) 2016 The SlimRoms Project + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24dp" + android:height="24dp" + android:viewportWidth="24" + android:viewportHeight="24"> + + <path + android:fillColor="@android:color/white" + android:pathData="M6.65625,7 A5,5,0,0,0,2,12 A5,5,0,0,0,7,17 L7.34375,17 L10.0313,17 L10.2188,17 +L19.875,17 C19.9098,17,19.9344,17.0031,19.9688,17 +C21.2447,16.8867,22.25,14.6884,22.25,12 L22.25,11.8125 +C22.2044,9.19289,21.2139,7.13663,19.9688,7.03125 +C19.9667,7.03108,19.9708,7.00016,19.9688,7 L19.875,7 L10.0625,7 L10.0313,7 L7,7 +A5,5,0,0,0,6.96875,7 A5,5,0,0,0,6.65625,7 Z M6.6875,9 A3,3,0,0,1,7,9 +A3,3,0,0,1,10,12 A3,3,0,0,1,7,15 A3,3,0,0,1,4,12 A3,3,0,0,1,6.6875,9 Z" /> +</vector> diff --git a/DeviceHandler/res/drawable/ic_settings_gestures.xml b/DeviceHandler/res/drawable/ic_settings_gestures.xml new file mode 100644 index 0000000..95cdede --- /dev/null +++ b/DeviceHandler/res/drawable/ic_settings_gestures.xml @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + Copyright (c) 2015 The CyanogenMod Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24dp" + android:height="24dp" + android:viewportWidth="24" + android:viewportHeight="24"> + + <path + android:fillColor="@android:color/white" + android:pathData="M4.7,6.9c0.7-0.7,1.4-1.4,1.7-1.2c0.5,0.2,0,1-0.3,1.5c-0.2,0.4-2.8,3.9-2.8,6.3c0,1.3,0.5,2.3,1.3,3 +c0.7,0.6,1.7,0.7,2.6,0.5c1.1-0.3,1.9-1.4,3-2.8c1.2-1.5,2.8-3.4,4-3.4c1.6,0,1.6,1,1.7,1.8c-3.7,0.6-5.3,3.7-5.3,5.4 +s1.4,3.1,3.2,3.1c1.6,0,4.3-1.3,4.6-6.1H21v-2.5h-2.4c-0.1-1.7-1.1-4.2-4-4.2c-2.2,0-4.1,1.9-4.9,2.8c-0.6,0.7-2,2.5-2.3,2.7 +c-0.2,0.3-0.7,0.8-1.1,0.8c-0.4,0-0.7-0.8-0.4-1.9c0.3-1.1,1.4-2.9,1.8-3.5C8.5,8,9.1,7.2,9.1,5.9C9.1,3.7,7.4,3,6.6,3 +C5.3,3,4.1,4,3.9,4.3C3.5,4.6,3.2,4.9,3,5.2L4.7,6.9z +M13.9,18.6c-0.3,0-0.7-0.3-0.7-0.7c0-0.6,0.7-2.2,2.8-2.8 +C15.8,17.8,14.6,18.6,13.9,18.6z" /> +</vector> diff --git a/DeviceHandler/res/drawable/ic_settings_reset.xml b/DeviceHandler/res/drawable/ic_settings_reset.xml new file mode 100644 index 0000000..7ab508f --- /dev/null +++ b/DeviceHandler/res/drawable/ic_settings_reset.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="utf-8"?> +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24dp" + android:height="24dp" + android:viewportWidth="24.0" + android:viewportHeight="24.0" + android:tint="?android:attr/colorControlNormal"> + <path + android:pathData="M14 12c0-1.1-.9-2-2-2s-2 .9-2 2 .9 2 2 2 2-.9 2-2zm-2-9c-4.97 0-9 4.03-9 9H0l4 4 4-4H5c0-3.87 3.13-7 7-7s7 3.13 7 7-3.13 7-7 7c-1.51 0-2.91-.49-4.06-1.3l-1.42 1.44C8.04 20.3 9.94 21 12 21c4.97 0 9-4.03 9-9s-4.03-9-9-9z" + android:fillColor="#ffffff"/> +</vector> diff --git a/DeviceHandler/res/values-af/strings.xml b/DeviceHandler/res/values-af/strings.xml new file mode 100644 index 0000000..25bda57 --- /dev/null +++ b/DeviceHandler/res/values-af/strings.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="utf-8"?> +<!--Generated by crowdin.com--> +<!-- Copyright (C) 2014 SlimRoms Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> +</resources> diff --git a/DeviceHandler/res/values-ar/strings.xml b/DeviceHandler/res/values-ar/strings.xml new file mode 100644 index 0000000..cbc5bb3 --- /dev/null +++ b/DeviceHandler/res/values-ar/strings.xml @@ -0,0 +1,53 @@ +<?xml version="1.0" encoding="utf-8"?> +<!--Generated by crowdin.com--> +<!-- Copyright (C) 2014 SlimRoms Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="dlg_ok">حسناً</string> + <string name="cancel">إلغاء</string> + <string name="reset">إعادة تعيين</string> + <string name="reset_message">إستعادة كافة المدخلات للإفتراضي؟</string> + <string name="screen_off_gesture_title">إيماءات الشاشة المقفلة</string> + <string name="screen_off_gesture_summary">أدارة مختلف إيماءات الجهاز المحددة</string> + <string name="group_applications">التطبيقات</string> + <string name="select_custom_app_title">حدد تطبيق مخصص</string> + <string name="enable_gestures_title">تمكين الإيماءات</string> + <string name="enable_gestures_summary">تمكين إيماءات الشاشة المقفلة</string> + <string name="gestures_title">الإيماءات</string> + <string name="gesture_arrow_down_title">سهم للاسفل</string> + <string name="gesture_arrow_left_title">سهم لليسار</string> + <string name="gesture_arrow_right_title">سهم لليمين</string> + <string name="gesture_arrow_up_title">سهم للأعلى</string> + <string name="gesture_circle_title">دائرة</string> + <string name="gesture_double_swipe_title">مرر إصبعين لأسفل</string> + <string name="gesture_double_tap_title">ضغط مزدوج</string> + <string name="notification_slider">ممرر الإشعارات</string> + <string name="notification_slider_summary">تهيئة مواضع الممرر</string> + <string name="action">إجراء</string> + <string name="top_position">الموضع العلوي</string> + <string name="middle_position">الموضع الأوسط</string> + <string name="bottom_position">الموضع السفلي</string> + <string name="total_silence">صمت تام</string> + <string name="alarms_only">التنبيهات فقط</string> + <string name="priority_only">الأولوية فقط</string> + <string name="none">جميع الإشعارات</string> + <string name="silent">كتم</string> + <string name="vibrate">إهتزاز</string> + <string name="ring">رنين</string> + <string name="notification_slider_haptic_feedback_title">رد الفعل الإهتزازي</string> + <string name="notification_slider_haptic_feedback_summary">إهتزاز عند إستخدام شريط التمرير</string> + <string name="button_swap_title">تبديل الأزرار</string> + <string name="button_swap_summary">تبديل ترتيب أزرار الحديثة و الرجوع</string> +</resources> diff --git a/DeviceHandler/res/values-ca/strings.xml b/DeviceHandler/res/values-ca/strings.xml new file mode 100644 index 0000000..25bda57 --- /dev/null +++ b/DeviceHandler/res/values-ca/strings.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="utf-8"?> +<!--Generated by crowdin.com--> +<!-- Copyright (C) 2014 SlimRoms Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> +</resources> diff --git a/DeviceHandler/res/values-cs/strings.xml b/DeviceHandler/res/values-cs/strings.xml new file mode 100644 index 0000000..0e7abe8 --- /dev/null +++ b/DeviceHandler/res/values-cs/strings.xml @@ -0,0 +1,53 @@ +<?xml version="1.0" encoding="utf-8"?> +<!--Generated by crowdin.com--> +<!-- Copyright (C) 2014 SlimRoms Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="dlg_ok">OK</string> + <string name="cancel">Zrušit</string> + <string name="reset">Obnovit</string> + <string name="reset_message">Obnovit všechny položky na výchozí?</string> + <string name="screen_off_gesture_title">Gesta při vypnuté obrazovce</string> + <string name="screen_off_gesture_summary">Správa různých gest specifických pro zařízení</string> + <string name="group_applications">Aplikace</string> + <string name="select_custom_app_title">Vybrat vlastní aplikaci</string> + <string name="enable_gestures_title">Povolit gesta</string> + <string name="enable_gestures_summary">Povolit gesta při vypnuté obrazovce</string> + <string name="gestures_title">Gesta</string> + <string name="gesture_arrow_down_title">Šipka dolů</string> + <string name="gesture_arrow_left_title">Šipka doleva</string> + <string name="gesture_arrow_right_title">Šipka doprava</string> + <string name="gesture_arrow_up_title">Šipka nahoru</string> + <string name="gesture_circle_title">Kruh</string> + <string name="gesture_double_swipe_title">Potáhnutí dvěma prsty dolů</string> + <string name="gesture_double_tap_title">Dvojí poklepání</string> + <string name="notification_slider">Posuvník oznámení</string> + <string name="notification_slider_summary">Nastavení pozice posuvníku</string> + <string name="action">Akce</string> + <string name="top_position">Pozice nahoře</string> + <string name="middle_position">Pozice uprostřed</string> + <string name="bottom_position">Pozice dole</string> + <string name="total_silence">Absolutní ticho</string> + <string name="alarms_only">Pouze budíky</string> + <string name="priority_only">Pouze prioritní</string> + <string name="none">Všechna oznámení</string> + <string name="silent">Ztlumení</string> + <string name="vibrate">Vibrace</string> + <string name="ring">Vyzvánění</string> + <string name="notification_slider_haptic_feedback_title">Hmatová odezva</string> + <string name="notification_slider_haptic_feedback_summary">Vibrovat při použití posuvníku</string> + <string name="button_swap_title">Prohodit tlačítka</string> + <string name="button_swap_summary">Prohodit pořadí tlačítek „Nedávné“ a „Zpět“</string> +</resources> diff --git a/DeviceHandler/res/values-da/strings.xml b/DeviceHandler/res/values-da/strings.xml new file mode 100644 index 0000000..25bda57 --- /dev/null +++ b/DeviceHandler/res/values-da/strings.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="utf-8"?> +<!--Generated by crowdin.com--> +<!-- Copyright (C) 2014 SlimRoms Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> +</resources> diff --git a/DeviceHandler/res/values-de/strings.xml b/DeviceHandler/res/values-de/strings.xml new file mode 100644 index 0000000..40f5134 --- /dev/null +++ b/DeviceHandler/res/values-de/strings.xml @@ -0,0 +1,53 @@ +<?xml version="1.0" encoding="utf-8"?> +<!--Generated by crowdin.com--> +<!-- Copyright (C) 2014 SlimRoms Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="dlg_ok">OK</string> + <string name="cancel">Abbrechen</string> + <string name="reset">Zurücksetzen</string> + <string name="reset_message">Alle Einträge auf die Standardwerte zurücksetzen?</string> + <string name="screen_off_gesture_title">Gesten bei ausgeschaltetem Bildschirm</string> + <string name="screen_off_gesture_summary">Verwalten Sie verschiedene Gerätespezifische Gesten</string> + <string name="group_applications">Anwendungen</string> + <string name="select_custom_app_title">Eigene Anwendung wählen</string> + <string name="enable_gestures_title">Gesten aktivieren</string> + <string name="enable_gestures_summary">Gesten bei ausgeschaltetem Bildschirm aktivieren</string> + <string name="gestures_title">Gesten</string> + <string name="gesture_arrow_down_title">Pfeil nach unten</string> + <string name="gesture_arrow_left_title">Pfeil nach links</string> + <string name="gesture_arrow_right_title">Pfeil nach rechts</string> + <string name="gesture_arrow_up_title">Pfeil nach oben</string> + <string name="gesture_circle_title">Kreis</string> + <string name="gesture_double_swipe_title">Mit zwei Fingern nach unten wischen</string> + <string name="gesture_double_tap_title">Doppelt Tippen</string> + <string name="notification_slider">Schieberegler für Benachrichtigungen</string> + <string name="notification_slider_summary">Positionen des Schiebereglers konfigurieren</string> + <string name="action">Aktion</string> + <string name="top_position">Position: oben</string> + <string name="middle_position">Position: Mitte</string> + <string name="bottom_position">Position: unten</string> + <string name="total_silence">Lautlos</string> + <string name="alarms_only">Nur Alarme</string> + <string name="priority_only">Nur wichtige Unterbrechungen</string> + <string name="none">Alle Benachrichtigungen</string> + <string name="silent">Stumm</string> + <string name="vibrate">Vibrieren</string> + <string name="ring">Klingeln</string> + <string name="notification_slider_haptic_feedback_title">Vibration</string> + <string name="notification_slider_haptic_feedback_summary">Vibrieren bei Änderung des Schiebereglers</string> + <string name="button_swap_title">Tasten tauschen</string> + <string name="button_swap_summary">Anordnung der Tasten für Anwendungsverlauf und Zurück tauschen</string> +</resources> diff --git a/DeviceHandler/res/values-el/strings.xml b/DeviceHandler/res/values-el/strings.xml new file mode 100644 index 0000000..25bda57 --- /dev/null +++ b/DeviceHandler/res/values-el/strings.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="utf-8"?> +<!--Generated by crowdin.com--> +<!-- Copyright (C) 2014 SlimRoms Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> +</resources> diff --git a/DeviceHandler/res/values-en-rUS/strings.xml b/DeviceHandler/res/values-en-rUS/strings.xml new file mode 100644 index 0000000..b254603 --- /dev/null +++ b/DeviceHandler/res/values-en-rUS/strings.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="utf-8"?> +<!--Generated by crowdin.com--> +<!-- Copyright (C) 2014 SlimRoms Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- General strings --> + <!-- Notification slider --> +</resources> diff --git a/DeviceHandler/res/values-es/strings.xml b/DeviceHandler/res/values-es/strings.xml new file mode 100644 index 0000000..daa521e --- /dev/null +++ b/DeviceHandler/res/values-es/strings.xml @@ -0,0 +1,53 @@ +<?xml version="1.0" encoding="utf-8"?> +<!--Generated by crowdin.com--> +<!-- Copyright (C) 2014 SlimRoms Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="dlg_ok">Aceptar</string> + <string name="cancel">Cancelar</string> + <string name="reset">Restablecer</string> + <string name="reset_message">¿Restablecer a valores predeterminados?</string> + <string name="screen_off_gesture_title">Gestos con pantalla apagada</string> + <string name="screen_off_gesture_summary">Configurar gestos específicos del dispositivo</string> + <string name="group_applications">Aplicaciones</string> + <string name="select_custom_app_title">Elegir aplicación personalizada</string> + <string name="enable_gestures_title">Habilitar gestos</string> + <string name="enable_gestures_summary">Activar gestos con pantalla apagada</string> + <string name="gestures_title">Gestos</string> + <string name="gesture_arrow_down_title">Flecha hacia abajo</string> + <string name="gesture_arrow_left_title">Flecha hacia la izquierda</string> + <string name="gesture_arrow_right_title">Flecha hacia la derecha</string> + <string name="gesture_arrow_up_title">Flecha hacia arriba</string> + <string name="gesture_circle_title">Círculo</string> + <string name="gesture_double_swipe_title">Dos dedos deslizando hacia abajo</string> + <string name="gesture_double_tap_title">Doble toque</string> + <string name="notification_slider">Panel de notificaciones</string> + <string name="notification_slider_summary">Configurar las posiciones del interruptor</string> + <string name="action">Acción</string> + <string name="top_position">Posición superior</string> + <string name="middle_position">Posición central</string> + <string name="bottom_position">Posición inferior</string> + <string name="total_silence">Silencio total</string> + <string name="alarms_only">Solo alarmas</string> + <string name="priority_only">Solo prioritarias</string> + <string name="none">Todas las notificaciones</string> + <string name="silent">Silencio</string> + <string name="vibrate">Vibrar</string> + <string name="ring">Sonar</string> + <string name="notification_slider_haptic_feedback_title">Respuesta háptica</string> + <string name="notification_slider_haptic_feedback_summary">Vibrar al usar el deslizador</string> + <string name="button_swap_title">Intercambiar botones</string> + <string name="button_swap_summary">Cambiar el orden de los botones «recientes» y «atrás»</string> +</resources> diff --git a/DeviceHandler/res/values-fa/strings.xml b/DeviceHandler/res/values-fa/strings.xml new file mode 100644 index 0000000..25bda57 --- /dev/null +++ b/DeviceHandler/res/values-fa/strings.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="utf-8"?> +<!--Generated by crowdin.com--> +<!-- Copyright (C) 2014 SlimRoms Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> +</resources> diff --git a/DeviceHandler/res/values-fi/strings.xml b/DeviceHandler/res/values-fi/strings.xml new file mode 100644 index 0000000..25bda57 --- /dev/null +++ b/DeviceHandler/res/values-fi/strings.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="utf-8"?> +<!--Generated by crowdin.com--> +<!-- Copyright (C) 2014 SlimRoms Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> +</resources> diff --git a/DeviceHandler/res/values-fr/strings.xml b/DeviceHandler/res/values-fr/strings.xml new file mode 100644 index 0000000..25bda57 --- /dev/null +++ b/DeviceHandler/res/values-fr/strings.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="utf-8"?> +<!--Generated by crowdin.com--> +<!-- Copyright (C) 2014 SlimRoms Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> +</resources> diff --git a/DeviceHandler/res/values-hr/strings.xml b/DeviceHandler/res/values-hr/strings.xml new file mode 100644 index 0000000..25bda57 --- /dev/null +++ b/DeviceHandler/res/values-hr/strings.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="utf-8"?> +<!--Generated by crowdin.com--> +<!-- Copyright (C) 2014 SlimRoms Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> +</resources> diff --git a/DeviceHandler/res/values-hu/strings.xml b/DeviceHandler/res/values-hu/strings.xml new file mode 100644 index 0000000..e737f78 --- /dev/null +++ b/DeviceHandler/res/values-hu/strings.xml @@ -0,0 +1,53 @@ +<?xml version="1.0" encoding="utf-8"?> +<!--Generated by crowdin.com--> +<!-- Copyright (C) 2014 SlimRoms Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="dlg_ok">OK</string> + <string name="cancel">Mégse</string> + <string name="reset">Visszaállítás</string> + <string name="reset_message">Visszaállítja az összes beállítást alapértelmezettre?</string> + <string name="screen_off_gesture_title">Képernyő-kikapcsolási vezérlőmozdulatok</string> + <string name="screen_off_gesture_summary">A különböző készülékfüggő vezérlőmozdulatok kezelése</string> + <string name="group_applications">Alkalmazások</string> + <string name="select_custom_app_title">Egyéni alkalmazás választása</string> + <string name="enable_gestures_title">A gesztusvezérlés engedélyezése</string> + <string name="enable_gestures_summary">A képernyő-kikapcsolási gesztusvezérlés engedélyezése</string> + <string name="gestures_title">Mozdulatvezérlés</string> + <string name="gesture_arrow_down_title">Nyíl lefelé</string> + <string name="gesture_arrow_left_title">Nyíl balra</string> + <string name="gesture_arrow_right_title">Nyíl jobbra</string> + <string name="gesture_arrow_up_title">Nyíl felfelé</string> + <string name="gesture_circle_title">Kör</string> + <string name="gesture_double_swipe_title">Kétujjas lefelé csúsztatás</string> + <string name="gesture_double_tap_title">Dupla érintés</string> + <string name="notification_slider">Értesítési csúszka</string> + <string name="notification_slider_summary">Állítsa be a csúszka pozícióját</string> + <string name="action">Művelet</string> + <string name="top_position">Felső pozíció</string> + <string name="middle_position">Középső pozíció</string> + <string name="bottom_position">Alsó pozíció</string> + <string name="total_silence">Teljes némítás</string> + <string name="alarms_only">Csak az ébresztések</string> + <string name="priority_only">Csak a fontosak</string> + <string name="none">Az összes értesítés</string> + <string name="silent">Némítás</string> + <string name="vibrate">Rezgés</string> + <string name="ring">Csengés</string> + <string name="notification_slider_haptic_feedback_title">Érintési visszajelzés</string> + <string name="notification_slider_haptic_feedback_summary">A csúsztatás visszajelzése rezgéssel</string> + <string name="button_swap_title">Gombfelcserélő</string> + <string name="button_swap_summary">Felcseréli az Előzmények és a Visszagomb sorrendjét</string> +</resources> diff --git a/DeviceHandler/res/values-in/strings.xml b/DeviceHandler/res/values-in/strings.xml new file mode 100644 index 0000000..14acda6 --- /dev/null +++ b/DeviceHandler/res/values-in/strings.xml @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="utf-8"?> +<!--Generated by crowdin.com--> +<!-- Copyright (C) 2014 SlimRoms Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="dlg_ok">OKE</string> + <string name="cancel">Batal</string> + <string name="reset">Setel ulang</string> + <string name="reset_message">Setel ulang semua entri ke standar?</string> + <string name="group_applications">Aplikasi</string> + <string name="select_custom_app_title">Pilih aplikasi khusus</string> + <string name="gesture_arrow_down_title">Panah ke bawah</string> + <string name="gesture_arrow_left_title">Panah ke kiri</string> + <string name="gesture_arrow_right_title">Panah ke kanan</string> + <string name="gesture_arrow_up_title">Panah ke atas</string> + <string name="gesture_double_tap_title">Tekan dua kali</string> + <string name="notification_slider">Penggeser pemberitahuan</string> + <string name="action">Tindakan</string> + <string name="top_position">Posisi atas</string> + <string name="middle_position">Posisi tengah</string> + <string name="bottom_position">Posisi bawah</string> + <string name="total_silence">Keheningan total</string> + <string name="alarms_only">Hanya alarm</string> + <string name="priority_only">Hanya prioritas</string> + <string name="none">Semua pemberitahuan</string> + <string name="silent">Diam</string> + <string name="vibrate">Getar</string> + <string name="ring">Dering</string> + <string name="button_swap_title">Tukar tombol</string> + <string name="button_swap_summary">Tukar urutan tombol recent dan kembali</string> +</resources> diff --git a/DeviceHandler/res/values-it/strings.xml b/DeviceHandler/res/values-it/strings.xml new file mode 100644 index 0000000..25bda57 --- /dev/null +++ b/DeviceHandler/res/values-it/strings.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="utf-8"?> +<!--Generated by crowdin.com--> +<!-- Copyright (C) 2014 SlimRoms Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> +</resources> diff --git a/DeviceHandler/res/values-iw/strings.xml b/DeviceHandler/res/values-iw/strings.xml new file mode 100644 index 0000000..25bda57 --- /dev/null +++ b/DeviceHandler/res/values-iw/strings.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="utf-8"?> +<!--Generated by crowdin.com--> +<!-- Copyright (C) 2014 SlimRoms Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> +</resources> diff --git a/DeviceHandler/res/values-ja/strings.xml b/DeviceHandler/res/values-ja/strings.xml new file mode 100644 index 0000000..25bda57 --- /dev/null +++ b/DeviceHandler/res/values-ja/strings.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="utf-8"?> +<!--Generated by crowdin.com--> +<!-- Copyright (C) 2014 SlimRoms Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> +</resources> diff --git a/DeviceHandler/res/values-ko/strings.xml b/DeviceHandler/res/values-ko/strings.xml new file mode 100644 index 0000000..25bda57 --- /dev/null +++ b/DeviceHandler/res/values-ko/strings.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="utf-8"?> +<!--Generated by crowdin.com--> +<!-- Copyright (C) 2014 SlimRoms Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> +</resources> diff --git a/DeviceHandler/res/values-nl/strings.xml b/DeviceHandler/res/values-nl/strings.xml new file mode 100644 index 0000000..d8c3d55 --- /dev/null +++ b/DeviceHandler/res/values-nl/strings.xml @@ -0,0 +1,53 @@ +<?xml version="1.0" encoding="utf-8"?> +<!--Generated by crowdin.com--> +<!-- Copyright (C) 2014 SlimRoms Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="dlg_ok">OK</string> + <string name="cancel">Annuleren</string> + <string name="reset">Herstellen</string> + <string name="reset_message">Alles terugzetten naar standaardwaarden?</string> + <string name="screen_off_gesture_title">Scherm-uit gebaren</string> + <string name="screen_off_gesture_summary">Beheren van diverse apparaatspecifieke gebaren</string> + <string name="group_applications">Apps</string> + <string name="select_custom_app_title">Selecteer aangepaste app</string> + <string name="enable_gestures_title">Gebaren inschakelen</string> + <string name="enable_gestures_summary">Scherm-uit gebaren inschakelen</string> + <string name="gestures_title">Gebaren</string> + <string name="gesture_arrow_down_title">Pijl omlaag</string> + <string name="gesture_arrow_left_title">Pijl links</string> + <string name="gesture_arrow_right_title">Pijl rechts</string> + <string name="gesture_arrow_up_title">Pijl boven</string> + <string name="gesture_circle_title">Cirkel</string> + <string name="gesture_double_swipe_title">Met 2 vingers naar beneden vegen</string> + <string name="gesture_double_tap_title">Dubbel tikken</string> + <string name="notification_slider">Schuifregelaar voor notificaties</string> + <string name="notification_slider_summary">Positie van de schuifregelaar instellen</string> + <string name="action">Actie</string> + <string name="top_position">Bovenste positie</string> + <string name="middle_position">Middelste positie</string> + <string name="bottom_position">Onderste positie</string> + <string name="total_silence">Totale stilte</string> + <string name="alarms_only">Alleen alarmen</string> + <string name="priority_only">Alleen prioriteit</string> + <string name="none">Alle notificaties</string> + <string name="silent">Dempen</string> + <string name="vibrate">Trillen</string> + <string name="ring">Beltoon</string> + <string name="notification_slider_haptic_feedback_title">Haptische feedback</string> + <string name="notification_slider_haptic_feedback_summary">Trillen bij gebruik van de slider</string> + <string name="button_swap_title">Knoppen verwisselen</string> + <string name="button_swap_summary">Recente apps- en Terugknop omwisselen</string> +</resources> diff --git a/DeviceHandler/res/values-no-rNO/strings.xml b/DeviceHandler/res/values-no-rNO/strings.xml new file mode 100644 index 0000000..b254603 --- /dev/null +++ b/DeviceHandler/res/values-no-rNO/strings.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="utf-8"?> +<!--Generated by crowdin.com--> +<!-- Copyright (C) 2014 SlimRoms Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- General strings --> + <!-- Notification slider --> +</resources> diff --git a/DeviceHandler/res/values-pl/strings.xml b/DeviceHandler/res/values-pl/strings.xml new file mode 100644 index 0000000..868e331 --- /dev/null +++ b/DeviceHandler/res/values-pl/strings.xml @@ -0,0 +1,53 @@ +<?xml version="1.0" encoding="utf-8"?> +<!--Generated by crowdin.com--> +<!-- Copyright (C) 2014 SlimRoms Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="dlg_ok">OK</string> + <string name="cancel">Anuluj</string> + <string name="reset">Reset</string> + <string name="reset_message">Przywrócić wszystkie wpisy do domyślnych?</string> + <string name="screen_off_gesture_title">Gesty na wyłączonym ekranie</string> + <string name="screen_off_gesture_summary">Zarządzaj różnymi specyficznymi gestami danego urządzenia</string> + <string name="group_applications">Aplikacje</string> + <string name="select_custom_app_title">Wybierz własną aplikację</string> + <string name="enable_gestures_title">Włącz gesty</string> + <string name="enable_gestures_summary">Włącz gesty na wyłączonym ekranie</string> + <string name="gestures_title">Gesty</string> + <string name="gesture_arrow_down_title">Strzałka w dół</string> + <string name="gesture_arrow_left_title">Strzałka w lewo</string> + <string name="gesture_arrow_right_title">Strzałka w prawo</string> + <string name="gesture_arrow_up_title">Strzałka w górę</string> + <string name="gesture_circle_title">Okrąg</string> + <string name="gesture_double_swipe_title">Przesunięcie dwoma palcami w dół</string> + <string name="gesture_double_tap_title">Podwójne naciśnięcie</string> + <string name="notification_slider">Panel powiadomień</string> + <string name="notification_slider_summary">Konfiguruj pozycję slidera</string> + <string name="action">Akcja</string> + <string name="top_position">Górna pozycja</string> + <string name="middle_position">Środkowa pozycja</string> + <string name="bottom_position">Dolna pozycja</string> + <string name="total_silence">Całkowite wyciszenie</string> + <string name="alarms_only">Tylko alarmy</string> + <string name="priority_only">Tylko priorytetowe</string> + <string name="none">Wszystkie powiadomienia</string> + <string name="silent">Wyciszenie</string> + <string name="vibrate">Wibracje</string> + <string name="ring">Dzwonek</string> + <string name="notification_slider_haptic_feedback_title">Wibracja przy dotyku</string> + <string name="notification_slider_haptic_feedback_summary">Wibracje przy użyciu suwaka</string> + <string name="button_swap_title">Zamień przyciski</string> + <string name="button_swap_summary">Zamień miejscami przyciski ostatnio uruchomionych aplikacji i powrotu</string> +</resources> diff --git a/DeviceHandler/res/values-pt-rBR/strings.xml b/DeviceHandler/res/values-pt-rBR/strings.xml new file mode 100644 index 0000000..25f62b2 --- /dev/null +++ b/DeviceHandler/res/values-pt-rBR/strings.xml @@ -0,0 +1,53 @@ +<?xml version="1.0" encoding="utf-8"?> +<!--Generated by crowdin.com--> +<!-- Copyright (C) 2014 SlimRoms Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="dlg_ok">OK</string> + <string name="cancel">Cancelar</string> + <string name="reset">Redefinir</string> + <string name="reset_message">Redefinir todas as entradas para o padrão?</string> + <string name="screen_off_gesture_title">Gestos com a tela desligada</string> + <string name="screen_off_gesture_summary">Gerenciar vários gestos específicos do dispositivo</string> + <string name="group_applications">Aplicativos</string> + <string name="select_custom_app_title">Selecione um aplicativo personalizado</string> + <string name="enable_gestures_title">Ativar gestos</string> + <string name="enable_gestures_summary">Ativar gestos com a tela desligada</string> + <string name="gestures_title">Gestos</string> + <string name="gesture_arrow_down_title">Seta para baixo</string> + <string name="gesture_arrow_left_title">Seta para a esquerda</string> + <string name="gesture_arrow_right_title">Seta para a direita</string> + <string name="gesture_arrow_up_title">Seta para cima</string> + <string name="gesture_circle_title">Círculo</string> + <string name="gesture_double_swipe_title">Deslizar para baixo com dois dedos</string> + <string name="gesture_double_tap_title">Toque duplo</string> + <string name="notification_slider">Controle deslizante de notificação</string> + <string name="notification_slider_summary">Configurar posições do controle deslizante</string> + <string name="action">Ação</string> + <string name="top_position">Posição superior</string> + <string name="middle_position">No meio</string> + <string name="bottom_position">Posição inferior</string> + <string name="total_silence">Silêncio total</string> + <string name="alarms_only">Apenas alarmes</string> + <string name="priority_only">Somente prioridade</string> + <string name="none">Todas as notificações</string> + <string name="silent">Mudo</string> + <string name="vibrate">Vibrar</string> + <string name="ring">Toque</string> + <string name="notification_slider_haptic_feedback_title">Vibrar ao tocar</string> + <string name="notification_slider_haptic_feedback_summary">Vibrar no uso do controle deslizante</string> + <string name="button_swap_title">Inverter botões</string> + <string name="button_swap_summary">Inverter a ordem dos botões recentes e voltar</string> +</resources> diff --git a/DeviceHandler/res/values-pt-rPT/strings.xml b/DeviceHandler/res/values-pt-rPT/strings.xml new file mode 100644 index 0000000..a916002 --- /dev/null +++ b/DeviceHandler/res/values-pt-rPT/strings.xml @@ -0,0 +1,50 @@ +<?xml version="1.0" encoding="utf-8"?> +<!--Generated by crowdin.com--> +<!-- Copyright (C) 2014 SlimRoms Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="dlg_ok">OK</string> + <string name="cancel">Cancelar</string> + <string name="reset">Restaurar</string> + <string name="reset_message">Redefinir todas as entradas para o padrão?</string> + <string name="screen_off_gesture_title">Gestos do ecrã apagado</string> + <string name="screen_off_gesture_summary">Gerenciar vários gestos de específicas de dispositivo</string> + <string name="group_applications">Aplicações</string> + <string name="select_custom_app_title">Selecione a aplicação personalizada</string> + <string name="enable_gestures_title">Ativar gestos</string> + <string name="enable_gestures_summary">Habilitar tela de gestos</string> + <string name="gestures_title">Gestos</string> + <string name="gesture_arrow_down_title">Seta para baixo</string> + <string name="gesture_arrow_left_title">Seta para a esquerda</string> + <string name="gesture_arrow_right_title">Seta direita</string> + <string name="gesture_arrow_up_title">Seta para cima</string> + <string name="gesture_circle_title">Círculo</string> + <string name="gesture_double_swipe_title">Dedos duplos para baixo</string> + <string name="gesture_double_tap_title">Duplo toque</string> + <string name="notification_slider">Botão deslizante de notificações</string> + <string name="notification_slider_summary">Configurar posições controle deslizante</string> + <string name="action">Ação</string> + <string name="top_position">Posição superior</string> + <string name="middle_position">No meio</string> + <string name="bottom_position">Em baixo</string> + <string name="total_silence">Silêncio total</string> + <string name="alarms_only">Apenas alarmes</string> + <string name="priority_only">Somente prioridade</string> + <string name="none">Todas as notificações</string> + <string name="vibrate">Vibrar</string> + <string name="ring">Toque</string> + <string name="button_swap_title">Inverter botões</string> + <string name="button_swap_summary">Inverter a ordem dos botões de Visão geral e Anterior</string> +</resources> diff --git a/DeviceHandler/res/values-ro/strings.xml b/DeviceHandler/res/values-ro/strings.xml new file mode 100644 index 0000000..25bda57 --- /dev/null +++ b/DeviceHandler/res/values-ro/strings.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="utf-8"?> +<!--Generated by crowdin.com--> +<!-- Copyright (C) 2014 SlimRoms Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> +</resources> diff --git a/DeviceHandler/res/values-ru/strings.xml b/DeviceHandler/res/values-ru/strings.xml new file mode 100644 index 0000000..e5d4d00 --- /dev/null +++ b/DeviceHandler/res/values-ru/strings.xml @@ -0,0 +1,53 @@ +<?xml version="1.0" encoding="utf-8"?> +<!--Generated by crowdin.com--> +<!-- Copyright (C) 2014 SlimRoms Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="dlg_ok">ОК</string> + <string name="cancel">Отмена</string> + <string name="reset">Сбросить</string> + <string name="reset_message">Сбросить все записи по умолчанию?</string> + <string name="screen_off_gesture_title">Жесты при выключенном экране</string> + <string name="screen_off_gesture_summary">Управление различными жестами устройства</string> + <string name="group_applications">Приложения</string> + <string name="select_custom_app_title">Выберите пользовательское приложение</string> + <string name="enable_gestures_title">Включить жесты</string> + <string name="enable_gestures_summary">Включить жесты при выключенном экране</string> + <string name="gestures_title">Жесты</string> + <string name="gesture_arrow_down_title">Стрелка вниз</string> + <string name="gesture_arrow_left_title">Стрелка влево</string> + <string name="gesture_arrow_right_title">Стрелка вправо</string> + <string name="gesture_arrow_up_title">Стрелка вверх</string> + <string name="gesture_circle_title">Круг</string> + <string name="gesture_double_swipe_title">Свайп двумя пальцами вниз</string> + <string name="gesture_double_tap_title">Двойное нажатие</string> + <string name="notification_slider">Слайдер уведомлений</string> + <string name="notification_slider_summary">Настроить положения ползунка</string> + <string name="action">Действие</string> + <string name="top_position">Верхнее положение</string> + <string name="middle_position">Среднее положение</string> + <string name="bottom_position">Нижнее положение</string> + <string name="total_silence">Полная тишина</string> + <string name="alarms_only">Только будильник</string> + <string name="priority_only">Только важные</string> + <string name="none">Все уведомления</string> + <string name="silent">Без звука</string> + <string name="vibrate">Вибрация</string> + <string name="ring">Звонок</string> + <string name="notification_slider_haptic_feedback_title">Виброотклик</string> + <string name="notification_slider_haptic_feedback_summary">Вибрация при использовании ползунка</string> + <string name="button_swap_title">Поменять кнопки местами</string> + <string name="button_swap_summary">Поменять местами кнопки «Недавние» и «Назад»</string> +</resources> diff --git a/DeviceHandler/res/values-sk/strings.xml b/DeviceHandler/res/values-sk/strings.xml new file mode 100644 index 0000000..25bda57 --- /dev/null +++ b/DeviceHandler/res/values-sk/strings.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="utf-8"?> +<!--Generated by crowdin.com--> +<!-- Copyright (C) 2014 SlimRoms Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> +</resources> diff --git a/DeviceHandler/res/values-sr/strings.xml b/DeviceHandler/res/values-sr/strings.xml new file mode 100644 index 0000000..25bda57 --- /dev/null +++ b/DeviceHandler/res/values-sr/strings.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="utf-8"?> +<!--Generated by crowdin.com--> +<!-- Copyright (C) 2014 SlimRoms Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> +</resources> diff --git a/DeviceHandler/res/values-sv/strings.xml b/DeviceHandler/res/values-sv/strings.xml new file mode 100644 index 0000000..25bda57 --- /dev/null +++ b/DeviceHandler/res/values-sv/strings.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="utf-8"?> +<!--Generated by crowdin.com--> +<!-- Copyright (C) 2014 SlimRoms Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> +</resources> diff --git a/DeviceHandler/res/values-tr/strings.xml b/DeviceHandler/res/values-tr/strings.xml new file mode 100644 index 0000000..32d02a8 --- /dev/null +++ b/DeviceHandler/res/values-tr/strings.xml @@ -0,0 +1,53 @@ +<?xml version="1.0" encoding="utf-8"?> +<!--Generated by crowdin.com--> +<!-- Copyright (C) 2014 SlimRoms Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="dlg_ok">Tamam</string> + <string name="cancel">İptal</string> + <string name="reset">Sıfırla</string> + <string name="reset_message">Tüm girişler varsayılana sıfırlansın mı?</string> + <string name="screen_off_gesture_title">Kapalı ekran hareketleri</string> + <string name="screen_off_gesture_summary">Cihaza özel çeşitli hareketleri yönetin</string> + <string name="group_applications">Uygulamalar</string> + <string name="select_custom_app_title">Özel uygulama seç</string> + <string name="enable_gestures_title">Hareketleri etkinleştir</string> + <string name="enable_gestures_summary">Kapalı ekran hareketlerini etkinleştir</string> + <string name="gestures_title">Hareketler</string> + <string name="gesture_arrow_down_title">Aşağı ok</string> + <string name="gesture_arrow_left_title">Sol ok</string> + <string name="gesture_arrow_right_title">Sağ ok</string> + <string name="gesture_arrow_up_title">Yukarı ok</string> + <string name="gesture_circle_title">Daire</string> + <string name="gesture_double_swipe_title">İki parmağınızı aşağı kaydır</string> + <string name="gesture_double_tap_title">Çift dokunma</string> + <string name="notification_slider">Bildirim kaydırıcısı</string> + <string name="notification_slider_summary">Kaydırıcı konumlarını yapılandır</string> + <string name="action">Eylem</string> + <string name="top_position">Üst konum</string> + <string name="middle_position">Orta konum</string> + <string name="bottom_position">Alt konum</string> + <string name="total_silence">Tam sessizlik</string> + <string name="alarms_only">Sadece alarm</string> + <string name="priority_only">Sadece öncelik</string> + <string name="none">Tüm bildirimler</string> + <string name="silent">Sessiz</string> + <string name="vibrate">Titreşim</string> + <string name="ring">Zil sesi</string> + <string name="notification_slider_haptic_feedback_title">Dokunumsal geri bildirim</string> + <string name="notification_slider_haptic_feedback_summary">Kaydırma kullanımında titret</string> + <string name="button_swap_title">Tuşları değiştir</string> + <string name="button_swap_summary">Son uygulamalar ve geri tuşlarının yerini değiştir</string> +</resources> diff --git a/DeviceHandler/res/values-uk/strings.xml b/DeviceHandler/res/values-uk/strings.xml new file mode 100644 index 0000000..25bda57 --- /dev/null +++ b/DeviceHandler/res/values-uk/strings.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="utf-8"?> +<!--Generated by crowdin.com--> +<!-- Copyright (C) 2014 SlimRoms Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> +</resources> diff --git a/DeviceHandler/res/values-vi/strings.xml b/DeviceHandler/res/values-vi/strings.xml new file mode 100644 index 0000000..25bda57 --- /dev/null +++ b/DeviceHandler/res/values-vi/strings.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="utf-8"?> +<!--Generated by crowdin.com--> +<!-- Copyright (C) 2014 SlimRoms Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> +</resources> diff --git a/DeviceHandler/res/values-zh-rCN/strings.xml b/DeviceHandler/res/values-zh-rCN/strings.xml new file mode 100644 index 0000000..b9f88fe --- /dev/null +++ b/DeviceHandler/res/values-zh-rCN/strings.xml @@ -0,0 +1,53 @@ +<?xml version="1.0" encoding="utf-8"?> +<!--Generated by crowdin.com--> +<!-- Copyright (C) 2014 SlimRoms Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="dlg_ok">确定</string> + <string name="cancel">取消</string> + <string name="reset">重置</string> + <string name="reset_message">是否将所有条目重置为默认值?</string> + <string name="screen_off_gesture_title">息屏手势</string> + <string name="screen_off_gesture_summary">管理各种用于设备的手势</string> + <string name="group_applications">应用程序</string> + <string name="select_custom_app_title">选择自定义应用程序</string> + <string name="enable_gestures_title">启用手势</string> + <string name="enable_gestures_summary">启用屏幕关闭手势</string> + <string name="gestures_title">手势</string> + <string name="gesture_arrow_down_title">向下箭头</string> + <string name="gesture_arrow_left_title">向左箭头</string> + <string name="gesture_arrow_right_title">向右箭头</string> + <string name="gesture_arrow_up_title">向上箭头</string> + <string name="gesture_circle_title">环形</string> + <string name="gesture_double_swipe_title">双指向下滑动</string> + <string name="gesture_double_tap_title">双击</string> + <string name="notification_slider">三段式开关</string> + <string name="notification_slider_summary">配置滑块位置</string> + <string name="action">操作</string> + <string name="top_position">顶部位置</string> + <string name="middle_position">中间位置</string> + <string name="bottom_position">底部位置</string> + <string name="total_silence">完全阻止</string> + <string name="alarms_only">仅限闹铃</string> + <string name="priority_only">仅限优先</string> + <string name="none">所有通知</string> + <string name="silent">静音</string> + <string name="vibrate">振动</string> + <string name="ring">响铃</string> + <string name="notification_slider_haptic_feedback_title">触觉反馈</string> + <string name="notification_slider_haptic_feedback_summary">滑块使用时振动</string> + <string name="button_swap_title">交换按钮</string> + <string name="button_swap_summary">交换最近使用与后退按钮的顺序</string> +</resources> diff --git a/DeviceHandler/res/values-zh-rTW/strings.xml b/DeviceHandler/res/values-zh-rTW/strings.xml new file mode 100644 index 0000000..25bda57 --- /dev/null +++ b/DeviceHandler/res/values-zh-rTW/strings.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="utf-8"?> +<!--Generated by crowdin.com--> +<!-- Copyright (C) 2014 SlimRoms Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> +</resources> diff --git a/DeviceHandler/res/values/arrays.xml b/DeviceHandler/res/values/arrays.xml new file mode 100644 index 0000000..82bde98 --- /dev/null +++ b/DeviceHandler/res/values/arrays.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + Copyright (C) 2016 The CyanogenMod Project + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<resources> + + <string-array name="notification_slider_action_entries" translatable="false"> + <item>@string/total_silence</item> + <item>@string/alarms_only</item> + <item>@string/priority_only</item> + <item>@string/none</item> + <item>@string/silent</item> + <item>@string/vibrate</item> + <item>@string/ring</item> + </string-array> + + <string-array name="notification_slider_action_entry_values" translatable="false"> + <item>600</item> + <item>601</item> + <item>602</item> + <item>603</item> + <item>620</item> + <item>604</item> + <item>605</item> + </string-array> + +</resources> diff --git a/DeviceHandler/res/values/strings.xml b/DeviceHandler/res/values/strings.xml new file mode 100644 index 0000000..f2c910b --- /dev/null +++ b/DeviceHandler/res/values/strings.xml @@ -0,0 +1,63 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2014 SlimRoms Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + + <!-- General strings --> + <string name="dlg_ok">OK</string> + <string name="cancel">Cancel</string> + <string name="reset">Reset</string> + <string name="reset_message">Reset all entries to default?</string> + + <string name="screen_off_gesture_title">Screen off gestures</string> + <string name="screen_off_gesture_summary">Manage various device specific gestures</string> + <string name="group_applications">Applications</string> + <string name="select_custom_app_title">Select custom application</string> + + + <string name="enable_gestures_title">Enable gestures</string> + <string name="enable_gestures_summary">Enable screen off gestures</string> + <string name="gestures_title">Gestures</string> + <string name="gesture_arrow_down_title">Arrow down</string> + <string name="gesture_arrow_left_title">Arrow left</string> + <string name="gesture_arrow_right_title">Arrow right</string> + <string name="gesture_arrow_up_title">Arrow up</string> + <string name="gesture_circle_title">Circle</string> + <string name="gesture_double_swipe_title">Double finger swipe down</string> + <string name="gesture_double_tap_title">Double tap</string> + + <!-- Notification slider --> + <string name="notification_slider">Notification slider</string> + <string name="notification_slider_summary">Configure slider positions</string> + <string name="action">Action</string> + + <string name="top_position">Top position</string> + <string name="middle_position">Middle position</string> + <string name="bottom_position">Bottom position</string> + <string name="total_silence">Total silence</string> + <string name="alarms_only">Alarms only</string> + <string name="priority_only">Priority only</string> + <string name="none">All notifications</string> + <string name="silent">Mute</string> + <string name="vibrate">Vibrate</string> + <string name="ring">Ring</string> + + <string name="notification_slider_haptic_feedback_title">Haptic feedback</string> + <string name="notification_slider_haptic_feedback_summary">Vibrate on slider usage</string> + + <string name="button_swap_title">Swap buttons</string> + <string name="button_swap_summary">Swap the order of recents and back buttons</string> + +</resources> diff --git a/DeviceHandler/res/values/themes.xml b/DeviceHandler/res/values/themes.xml new file mode 100644 index 0000000..364c9f3 --- /dev/null +++ b/DeviceHandler/res/values/themes.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2012-2013 The CyanogenMod Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<resources xmlns:android="http://schemas.android.com/apk/res/android"> + <style name="DeviceHandlerTheme" parent="@android:style/Theme.DeviceDefault.Settings" /> +</resources> + diff --git a/DeviceHandler/res/xml/screen_off_gesture.xml b/DeviceHandler/res/xml/screen_off_gesture.xml new file mode 100644 index 0000000..0b453c1 --- /dev/null +++ b/DeviceHandler/res/xml/screen_off_gesture.xml @@ -0,0 +1,68 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2014 Slimroms Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<PreferenceScreen + xmlns:android="http://schemas.android.com/apk/res/android"> + + <SwitchPreference + android:key="enable_gestures" + android:title="@string/enable_gestures_title" + android:persistent="false" + android:summary="@string/enable_gestures_summary" /> + + <PreferenceCategory + android:key="gestures" + android:title="@string/gestures_title" > + + <Preference + android:key="gesture_arrow_down" + android:title="@string/gesture_arrow_down_title" + android:persistent="false" + android:dependency="enable_gestures" /> + + <Preference + android:key="gesture_arrow_left" + android:title="@string/gesture_arrow_left_title" + android:persistent="false" + android:dependency="enable_gestures" /> + + <Preference + android:key="gesture_arrow_right" + android:title="@string/gesture_arrow_right_title" + android:persistent="false" + android:dependency="enable_gestures" /> + + <Preference + android:key="gesture_arrow_up" + android:title="@string/gesture_arrow_up_title" + android:persistent="false" + android:dependency="enable_gestures" /> + + <Preference + android:key="gesture_circle" + android:title="@string/gesture_circle_title" + android:persistent="false" + android:dependency="enable_gestures" /> + + <Preference + android:key="gesture_double_swipe" + android:title="@string/gesture_double_swipe_title" + android:persistent="false" + android:dependency="enable_gestures" /> + + </PreferenceCategory> + +</PreferenceScreen> diff --git a/DeviceHandler/res/xml/slider_panel.xml b/DeviceHandler/res/xml/slider_panel.xml new file mode 100644 index 0000000..59dd945 --- /dev/null +++ b/DeviceHandler/res/xml/slider_panel.xml @@ -0,0 +1,54 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + Copyright (C) 2016 The CyanogenMod Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> + + <PreferenceCategory + android:title="@string/notification_slider"> + + <com.aicp.device.preference.SystemSettingListPreference + android:key="device_oppo_common_notification_slider_up1" + android:dialogTitle="@string/action" + android:title="@string/top_position" + android:entries="@array/notification_slider_action_entries" + android:entryValues="@array/notification_slider_action_entry_values" + android:defaultValue="601" /> + + <com.aicp.device.preference.SystemSettingListPreference + android:key="device_oppo_common_notification_slider_middle1" + android:dialogTitle="@string/action" + android:title="@string/middle_position" + android:entries="@array/notification_slider_action_entries" + android:entryValues="@array/notification_slider_action_entry_values" + android:defaultValue="602" /> + + <com.aicp.device.preference.SystemSettingListPreference + android:key="device_oppo_common_notification_slider_bottom1" + android:dialogTitle="@string/action" + android:title="@string/bottom_position" + android:entries="@array/notification_slider_action_entries" + android:entryValues="@array/notification_slider_action_entry_values" + android:defaultValue="603" /> + + <com.aicp.device.preference.SystemSettingSwitchPreference + android:key="device_oppo_common_notification_slider_haptic_feedback" + android:title="@string/notification_slider_haptic_feedback_title" + android:summary="@string/notification_slider_haptic_feedback_summary" + android:defaultValue="true" /> + + </PreferenceCategory> + +</PreferenceScreen> diff --git a/DeviceHandler/src/com/aicp/device/preference/ListPreference.java b/DeviceHandler/src/com/aicp/device/preference/ListPreference.java new file mode 100644 index 0000000..3c113ab --- /dev/null +++ b/DeviceHandler/src/com/aicp/device/preference/ListPreference.java @@ -0,0 +1,55 @@ +/* + * Copyright (C) 2017-2018 Android Ice Cold Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.aicp.device.preference; + +import android.content.Context; +import android.text.TextUtils; +import android.util.AttributeSet; + +public class ListPreference extends android.preference.ListPreference { + private boolean mAutoSummary = false; + + public ListPreference(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + } + + public ListPreference(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public ListPreference(Context context) { + super(context); + } + + @Override + public void setValue(String value) { + super.setValue(value); + if (mAutoSummary || TextUtils.isEmpty(getSummary())) { + setSummary(getEntry(), true); + } + } + + @Override + public void setSummary(CharSequence summary) { + setSummary(summary, false); + } + + private void setSummary(CharSequence summary, boolean autoSummary) { + mAutoSummary = autoSummary; + super.setSummary(summary); + } +} diff --git a/DeviceHandler/src/com/aicp/device/preference/SystemSettingListPreference.java b/DeviceHandler/src/com/aicp/device/preference/SystemSettingListPreference.java new file mode 100644 index 0000000..fd8a67a --- /dev/null +++ b/DeviceHandler/src/com/aicp/device/preference/SystemSettingListPreference.java @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2017-2018 Android Ice Cold Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.aicp.device.preference; + +import android.content.Context; +import android.text.TextUtils; +import android.util.AttributeSet; + +public class SystemSettingListPreference extends ListPreference { + + public SystemSettingListPreference(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + setPreferenceDataStore(new SystemSettingsStore(context.getContentResolver())); + } + + public SystemSettingListPreference(Context context, AttributeSet attrs) { + super(context, attrs); + setPreferenceDataStore(new SystemSettingsStore(context.getContentResolver())); + } + + public SystemSettingListPreference(Context context) { + super(context); + setPreferenceDataStore(new SystemSettingsStore(context.getContentResolver())); + } + + @Override + protected void onSetInitialValue(boolean restoreValue, Object defaultValue) { + // This is what default ListPreference implementation is doing without respecting + // real default value: + //setValue(restoreValue ? getPersistedString(mValue) : (String) defaultValue); + // Instead, we better do + setValue(restoreValue ? getPersistedString((String) defaultValue) : (String) defaultValue); + } + +} diff --git a/DeviceHandler/src/com/aicp/device/preference/SystemSettingSwitchPreference.java b/DeviceHandler/src/com/aicp/device/preference/SystemSettingSwitchPreference.java new file mode 100644 index 0000000..fc55fd0 --- /dev/null +++ b/DeviceHandler/src/com/aicp/device/preference/SystemSettingSwitchPreference.java @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2017 Android Ice Cold Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.aicp.device.preference; + +import android.content.Context; +import android.preference.SwitchPreference; +import android.util.AttributeSet; + +public class SystemSettingSwitchPreference extends SwitchPreference { + + public SystemSettingSwitchPreference(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + setPreferenceDataStore(new SystemSettingsStore(context.getContentResolver())); + } + + public SystemSettingSwitchPreference(Context context, AttributeSet attrs) { + super(context, attrs); + setPreferenceDataStore(new SystemSettingsStore(context.getContentResolver())); + } + + public SystemSettingSwitchPreference(Context context) { + super(context); + setPreferenceDataStore(new SystemSettingsStore(context.getContentResolver())); + } + + @Override + protected void onSetInitialValue(boolean restoreValue, Object defaultValue) { + // This is what default TwoStatePreference implementation is doing without respecting + // real default value: + //setChecked(restoreValue ? getPersistedBoolean(mChecked) + // : (Boolean) defaultValue); + // Instead, we better do + setChecked(restoreValue ? getPersistedBoolean((Boolean) defaultValue) + : (Boolean) defaultValue); + } +} diff --git a/DeviceHandler/src/com/aicp/device/preference/SystemSettingsStore.java b/DeviceHandler/src/com/aicp/device/preference/SystemSettingsStore.java new file mode 100644 index 0000000..77aa8f5 --- /dev/null +++ b/DeviceHandler/src/com/aicp/device/preference/SystemSettingsStore.java @@ -0,0 +1,72 @@ +/* + * Copyright (C) 2017 Android Ice Cold Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.aicp.device.preference; + +import android.content.ContentResolver; +import android.preference.PreferenceDataStore; +import android.provider.Settings; + +public class SystemSettingsStore implements PreferenceDataStore { + + private ContentResolver mContentResolver; + + public SystemSettingsStore(ContentResolver contentResolver) { + mContentResolver = contentResolver; + } + + public boolean getBoolean(String key, boolean defValue) { + return getInt(key, defValue ? 1 : 0) != 0; + } + + public float getFloat(String key, float defValue) { + return Settings.System.getFloat(mContentResolver, key, defValue); + } + + public int getInt(String key, int defValue) { + return Settings.System.getInt(mContentResolver, key, defValue); + } + + public long getLong(String key, long defValue) { + return Settings.System.getLong(mContentResolver, key, defValue); + } + + public String getString(String key, String defValue) { + String result = Settings.System.getString(mContentResolver, key); + return result == null ? defValue : result; + } + + public void putBoolean(String key, boolean value) { + putInt(key, value ? 1 : 0); + } + + public void putFloat(String key, float value) { + Settings.System.putFloat(mContentResolver, key, value); + } + + public void putInt(String key, int value) { + Settings.System.putInt(mContentResolver, key, value); + } + + public void putLong(String key, long value) { + Settings.System.putLong(mContentResolver, key, value); + } + + public void putString(String key, String value) { + Settings.System.putString(mContentResolver, key, value); + } + +} diff --git a/DeviceHandler/src/com/slim/device/BootReceiver.java b/DeviceHandler/src/com/slim/device/BootReceiver.java new file mode 100644 index 0000000..0821251 --- /dev/null +++ b/DeviceHandler/src/com/slim/device/BootReceiver.java @@ -0,0 +1,99 @@ +/* + * Copyright (C) 2014 SlimRoms Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.slim.device; + +import android.app.Activity; +import android.content.BroadcastReceiver; +import android.content.ComponentName; +import android.content.Context; +import android.content.Intent; +import android.content.SharedPreferences; +import android.content.pm.PackageManager; +import android.preference.PreferenceManager; + +import com.slim.device.KernelControl; +import com.slim.device.settings.ScreenOffGesture; +import com.slim.device.settings.SliderSettings; +import com.slim.device.util.FileUtils; + +import static com.slim.device.KeyHandler.SLIDER_TOP; +import static com.slim.device.KeyHandler.SLIDER_MIDDLE; +import static com.slim.device.KeyHandler.SLIDER_BOTTOM; + +import java.io.File; + + +public class BootReceiver extends BroadcastReceiver { + @Override + public void onReceive(final Context context, final Intent intent) { + if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) { + enableComponent(context, ScreenOffGesture.class.getName()); + SharedPreferences screenOffGestureSharedPreferences = context.getSharedPreferences( + ScreenOffGesture.GESTURE_SETTINGS, Activity.MODE_PRIVATE); + KernelControl.enableGestures( + screenOffGestureSharedPreferences.getBoolean( + ScreenOffGesture.PREF_GESTURE_ENABLE, true)); + } + + // Disable slider settings if needed + if (!KernelControl.hasSlider()) { + disableComponent(context, SliderSettings.class.getName()); + } else { + enableComponent(context, SliderSettings.class.getName()); + + // Set keycodes as expected by our keyhandler for kernels + // that control keycodes using these files + /* EDIT: don't, can lead to wrong value sent after boot + String sliderTop = "" + SLIDER_TOP; + String sliderMiddle = "" + SLIDER_MIDDLE; + String sliderBottom = "" + SLIDER_BOTTOM; + + FileUtils.writeLine(KernelControl.KEYCODE_SLIDER_TOP, sliderTop); + FileUtils.writeLine(KernelControl.KEYCODE_SLIDER_MIDDLE, sliderMiddle); + FileUtils.writeLine(KernelControl.KEYCODE_SLIDER_BOTTOM, sliderBottom); + */ + } + } + + private String getPreferenceString(Context context, String key, String defaultValue) { + SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context); + return preferences.getString(key, defaultValue); + } + + private boolean getPreferenceBoolean(Context context, String key, boolean defaultValue) { + SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context); + return preferences.getBoolean(key, defaultValue); + } + + private void disableComponent(Context context, String component) { + ComponentName name = new ComponentName(context, component); + PackageManager pm = context.getPackageManager(); + pm.setComponentEnabledSetting(name, + PackageManager.COMPONENT_ENABLED_STATE_DISABLED, + PackageManager.DONT_KILL_APP); + } + + private void enableComponent(Context context, String component) { + ComponentName name = new ComponentName(context, component); + PackageManager pm = context.getPackageManager(); + if (pm.getComponentEnabledSetting(name) + == PackageManager.COMPONENT_ENABLED_STATE_DISABLED) { + pm.setComponentEnabledSetting(name, + PackageManager.COMPONENT_ENABLED_STATE_ENABLED, + PackageManager.DONT_KILL_APP); + } + } +} diff --git a/DeviceHandler/src/com/slim/device/KernelControl.java b/DeviceHandler/src/com/slim/device/KernelControl.java new file mode 100644 index 0000000..376bbca --- /dev/null +++ b/DeviceHandler/src/com/slim/device/KernelControl.java @@ -0,0 +1,86 @@ +/* + * Copyright (C) 2014 SlimRoms Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.slim.device; + +import com.slim.device.util.FileUtils; + +import java.io.File; + +/* + * Very ugly class which enables or disables for now + * all gesture controls on kernel level. + * We need to do it this way for now to do not break 3rd party kernel. + * Kernel should have a better per gesture control but as long + * this is not changed by the manufacture we would break gesture control on every + * 3rd party kernel. Hence we do it this way for now. + */ + +public final class KernelControl { + + private static String GESTURE_PATH = "/proc/touchpanel/"; + private static String GESTURE_CAMERA = GESTURE_PATH + "letter_o_enable"; + private static String GESTURE_FLASHLIGHT = GESTURE_PATH + "up_arrow_enable"; + private static String GESTURE_MEDIA = GESTURE_PATH + "double_swipe_enable"; + private static String GESTURE_MEDIA_PREVIOUS = GESTURE_PATH + "right_arrow_enable"; + private static String GESTURE_MEDIA_NEXT = GESTURE_PATH + "left_arrow_enable"; + private static String GESTURE_SILENT_VIB_SOUND = GESTURE_PATH + "down_arrow_enable"; + + // Notification slider + public static final String KEYCODE_SLIDER_TOP = "/proc/tri-state-key/keyCode_top"; + public static final String KEYCODE_SLIDER_MIDDLE = "/proc/tri-state-key/keyCode_middle"; + public static final String KEYCODE_SLIDER_BOTTOM = "/proc/tri-state-key/keyCode_bottom"; + + private static String[] GESTURE_CONTROL_NODES = { + GESTURE_CAMERA, + GESTURE_FLASHLIGHT , + GESTURE_MEDIA, + GESTURE_MEDIA_PREVIOUS, + GESTURE_MEDIA_NEXT, + GESTURE_SILENT_VIB_SOUND + }; + + private KernelControl() { + // this class is not supposed to be instantiated + } + + /** + * Enable or disable gesture control. + */ + public static void enableGestures(boolean enable) { + for (int i = 0; i < GESTURE_CONTROL_NODES.length; i++) { + if (new File(GESTURE_CONTROL_NODES[i]).exists()) { + FileUtils.writeLine(GESTURE_CONTROL_NODES[i], enable ? "1" : "0"); + } + } + } + + /** + * Do we have touch control at all? + */ + public static boolean hasTouchscreenGestures() { + return new File(GESTURE_CAMERA).exists() + && new File(GESTURE_FLASHLIGHT).exists() + && new File(GESTURE_MEDIA).exists(); + } + + public static boolean hasSlider() { + return new File(KEYCODE_SLIDER_TOP).exists() && + new File(KEYCODE_SLIDER_MIDDLE).exists() && + new File(KEYCODE_SLIDER_BOTTOM).exists(); + } + +} diff --git a/DeviceHandler/src/com/slim/device/KeyHandler.java b/DeviceHandler/src/com/slim/device/KeyHandler.java new file mode 100644 index 0000000..dca57b8 --- /dev/null +++ b/DeviceHandler/src/com/slim/device/KeyHandler.java @@ -0,0 +1,388 @@ +/* + * Copyright (C) 2014 Slimroms + * Copyright (C) 2019 Android Ice Cold Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.slim.device; + +import android.app.Activity; +import android.app.NotificationManager; +import android.content.ContentResolver; +import android.content.Context; +import android.content.pm.PackageManager.NameNotFoundException; +import android.content.SharedPreferences; +import android.database.ContentObserver; +import android.hardware.Sensor; +import android.hardware.SensorEvent; +import android.hardware.SensorEventListener; +import android.hardware.SensorManager; +import android.media.AudioManager; +import android.os.Handler; +import android.os.Message; +import android.os.PowerManager; +import android.os.PowerManager.WakeLock; +import android.os.SystemProperties; +import android.os.UserHandle; +import android.os.Vibrator; +import android.provider.Settings; +import android.util.Log; +import android.view.KeyEvent; + +import android.service.notification.ZenModeConfig; + +import com.slim.device.settings.ScreenOffGesture; + +import com.android.internal.os.DeviceKeyHandler; +import com.android.internal.util.ArrayUtils; +import com.android.internal.util.gzosp.ActionConstants; +import com.android.internal.util.gzosp.Action; + +import java.util.HashSet; + +public class KeyHandler implements DeviceKeyHandler { + + private static final String TAG = KeyHandler.class.getSimpleName(); + private static final int GESTURE_REQUEST = 1; + + public static final String SETTING_NOTIF_SLIDER_UP = + "device_oppo_common_notification_slider_up1"; + public static final String SETTING_NOTIF_SLIDER_MIDDLE = + "device_oppo_common_notification_slider_middle1"; + public static final String SETTING_NOTIF_SLIDER_BOTTOM = + "device_oppo_common_notification_slider_bottom1"; + public static final String SETTING_NOTIF_SLIDER_HAPTIC_FEEDBACK = + "device_oppo_common_notification_slider_haptic_feedback"; + + // Supported scancodes + private static final int GESTURE_CIRCLE_SCANCODE = 250; + private static final int GESTURE_SWIPE_DOWN_SCANCODE = 251; + private static final int GESTURE_V_SCANCODE = 252; + private static final int GESTURE_LTR_SCANCODE = 253; + private static final int GESTURE_GTR_SCANCODE = 254; + private static final int GESTURE_V_UP_SCANCODE = 255; + // Slider + private static final int MODE_TOTAL_SILENCE = 600; + private static final int MODE_ALARMS_ONLY = 601; + private static final int MODE_PRIORITY_ONLY = 602; + private static final int MODE_NONE = 603; + private static final int MODE_VIBRATE = 604; + private static final int MODE_RING = 605; + // AICP additions: arbitrary value which hopefully doesn't conflict with upstream anytime soon + private static final int MODE_SILENT = 620; + + // Keycodes from kernel found in drivers/input/misc/tri_state_key.c + public static final int SLIDER_TOP = 601; + public static final int SLIDER_MIDDLE = 602; + public static final int SLIDER_BOTTOM = 603; + + private static final int[] sSupportedGestures = new int[]{ + GESTURE_CIRCLE_SCANCODE, + GESTURE_SWIPE_DOWN_SCANCODE, + GESTURE_V_SCANCODE, + GESTURE_V_UP_SCANCODE, + GESTURE_LTR_SCANCODE, + GESTURE_GTR_SCANCODE, + MODE_TOTAL_SILENCE, + MODE_ALARMS_ONLY, + MODE_PRIORITY_ONLY, + MODE_NONE, + MODE_VIBRATE, + MODE_RING, + MODE_SILENT, + }; + + private static final HashSet<Integer> sSupportedSliderModes = new HashSet<>(); + static { + sSupportedSliderModes.add(SLIDER_TOP); + sSupportedSliderModes.add(SLIDER_MIDDLE); + sSupportedSliderModes.add(SLIDER_BOTTOM); + } + + private final Context mContext; + private final AudioManager mAudioManager; + private final PowerManager mPowerManager; + private final NotificationManager mNotificationManager; + private Context mGestureContext = null; + private EventHandler mEventHandler; + private SensorManager mSensorManager; + private Sensor mProximitySensor; + private Vibrator mVibrator; + WakeLock mProximityWakeLock; + + private int mSliderUpAction; + private int mSliderMiddleAction; + private int mSliderBottomAction; + + public KeyHandler(Context context) { + mContext = context; + mEventHandler = new EventHandler(); + mPowerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE); + mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); + mNotificationManager + = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); + mSensorManager = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE); + mProximitySensor = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY); + mProximityWakeLock = mPowerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, + "ProximityWakeLock"); + + try { + mGestureContext = mContext.createPackageContext( + "com.slim.device", Context.CONTEXT_IGNORE_SECURITY); + } catch (NameNotFoundException e) { + } + + new SettingsObserver(new Handler()).observe(); + } + + private class EventHandler extends Handler { + @Override + public void handleMessage(Message msg) { + int scanCode; + if (msg.obj instanceof KeyEvent) { + KeyEvent event = (KeyEvent) msg.obj; + scanCode = event.getScanCode(); + } else if (msg.obj instanceof Integer) { + scanCode = (Integer) msg.obj; + } else { + return; + } + String action = null; + switch(scanCode) { + case GESTURE_CIRCLE_SCANCODE: + action = getGestureSharedPreferences() + .getString(ScreenOffGesture.PREF_GESTURE_CIRCLE, + ActionConstants.ACTION_CAMERA); + doHapticFeedback(); + break; + case GESTURE_SWIPE_DOWN_SCANCODE: + action = getGestureSharedPreferences() + .getString(ScreenOffGesture.PREF_GESTURE_DOUBLE_SWIPE, + ActionConstants.ACTION_MEDIA_PLAY_PAUSE); + doHapticFeedback(); + break; + case GESTURE_V_SCANCODE: + action = getGestureSharedPreferences() + .getString(ScreenOffGesture.PREF_GESTURE_ARROW_DOWN, + ActionConstants.ACTION_VIB_SILENT); + doHapticFeedback(); + break; + case GESTURE_V_UP_SCANCODE: + action = getGestureSharedPreferences() + .getString(ScreenOffGesture.PREF_GESTURE_ARROW_UP, + ActionConstants.ACTION_TORCH); + doHapticFeedback(); + break; + case GESTURE_LTR_SCANCODE: + action = getGestureSharedPreferences() + .getString(ScreenOffGesture.PREF_GESTURE_ARROW_LEFT, + ActionConstants.ACTION_MEDIA_PREVIOUS); + doHapticFeedback(); + break; + case GESTURE_GTR_SCANCODE: + action = getGestureSharedPreferences() + .getString(ScreenOffGesture.PREF_GESTURE_ARROW_RIGHT, + ActionConstants.ACTION_MEDIA_NEXT); + doHapticFeedback(); + break; + case MODE_TOTAL_SILENCE: + setZenMode(Settings.Global.ZEN_MODE_NO_INTERRUPTIONS); + break; + case MODE_ALARMS_ONLY: + setZenMode(Settings.Global.ZEN_MODE_ALARMS); + break; + case MODE_PRIORITY_ONLY: + setRingerModeInternal(AudioManager.RINGER_MODE_NORMAL); + setZenMode(Settings.Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS); + break; + case MODE_NONE: + setZenMode(Settings.Global.ZEN_MODE_OFF); + setRingerModeInternal(AudioManager.RINGER_MODE_NORMAL); + break; + case MODE_VIBRATE: + setRingerModeInternal(AudioManager.RINGER_MODE_VIBRATE); + break; + case MODE_RING: + setRingerModeInternal(AudioManager.RINGER_MODE_NORMAL); + break; + case MODE_SILENT: + setRingerModeInternal(AudioManager.RINGER_MODE_SILENT); + break; + } + + if (action == null || action != null && action.equals(ActionConstants.ACTION_NULL)) { + return; + } + if (action.equals(ActionConstants.ACTION_CAMERA) + || !action.startsWith("**")) { + Action.processAction(mContext, ActionConstants.ACTION_WAKE_DEVICE, false); + } + Action.processAction(mContext, action, false); + } + } + + private void setZenMode(int mode) { + mNotificationManager.setZenMode(mode, null, TAG); + if (mVibrator != null) { + mVibrator.vibrate(50); + } + } + + private void setRingerModeInternal(int mode) { + mAudioManager.setRingerModeInternal(mode); + if (mVibrator != null) { + mVibrator.vibrate(50); + } + } + + private void doHapticFeedback() { + if (mVibrator == null) { + return; + } + mVibrator.vibrate(50); + } + + private SharedPreferences getGestureSharedPreferences() { + return mGestureContext.getSharedPreferences( + ScreenOffGesture.GESTURE_SETTINGS, + Context.MODE_PRIVATE | Context.MODE_MULTI_PROCESS); + } + + public KeyEvent handleKeyEvent(KeyEvent event) { + int scanCode = event.getScanCode(); + boolean isSliderModeSupported = sSupportedSliderModes.contains(scanCode); + if (isSliderModeSupported) { + // Remap slider actions + if (scanCode == SLIDER_TOP) { + scanCode = mSliderUpAction; + } else if (scanCode == SLIDER_MIDDLE) { + scanCode = mSliderMiddleAction; + } else if (scanCode == SLIDER_BOTTOM) { + scanCode = mSliderBottomAction; + } + } + boolean isKeySupported = ArrayUtils.contains(sSupportedGestures, scanCode); + if (!isKeySupported) { + return event; + } + if (event.getAction() != KeyEvent.ACTION_UP) { + return null; + } + + // In case we're too fast: possibly loose contact in hw button? + // -> discard previous, apply last update + mEventHandler.removeMessages(GESTURE_REQUEST); + + Message msg; + if (scanCode != event.getScanCode()) { + // Overwritten action + msg = getMessageForScanCode(scanCode); + } else { + msg = getMessageForKeyEvent(event); + } + if (scanCode < MODE_TOTAL_SILENCE && mProximitySensor != null) { + mEventHandler.sendMessageDelayed(msg, 200); + processEvent(event); + } else { + mEventHandler.sendMessage(msg); + } + return null; + } + + private Message getMessageForKeyEvent(KeyEvent keyEvent) { + Message msg = mEventHandler.obtainMessage(GESTURE_REQUEST); + msg.obj = keyEvent; + return msg; + } + + private Message getMessageForScanCode(int scanCode) { + Message msg = mEventHandler.obtainMessage(GESTURE_REQUEST); + msg.obj = new Integer(scanCode); + return msg; + } + + private void processEvent(final KeyEvent keyEvent) { + mProximityWakeLock.acquire(); + mSensorManager.registerListener(new SensorEventListener() { + + @Override + public void onSensorChanged(SensorEvent event) { + mProximityWakeLock.release(); + mSensorManager.unregisterListener(this); + if (!mEventHandler.hasMessages(GESTURE_REQUEST)) { + // The sensor took to long, ignoring. + return; + } + mEventHandler.removeMessages(GESTURE_REQUEST); + if (event.values[0] == mProximitySensor.getMaximumRange()) { + Message msg = getMessageForKeyEvent(keyEvent); + mEventHandler.sendMessage(msg); + } + } + + @Override + public void onAccuracyChanged(Sensor sensor, int accuracy) {} + + }, mProximitySensor, SensorManager.SENSOR_DELAY_FASTEST); + } + + private class SettingsObserver extends ContentObserver { + SettingsObserver(Handler handler) { + super(handler); + } + + void observe() { + ContentResolver resolver = mContext.getContentResolver(); + + resolver.registerContentObserver(Settings.System.getUriFor(SETTING_NOTIF_SLIDER_UP), + false, this, UserHandle.USER_ALL); + resolver.registerContentObserver( + Settings.System.getUriFor(SETTING_NOTIF_SLIDER_MIDDLE), false, this, + UserHandle.USER_ALL); + resolver.registerContentObserver( + Settings.System.getUriFor(SETTING_NOTIF_SLIDER_BOTTOM), false, this, + UserHandle.USER_ALL); + resolver.registerContentObserver( + Settings.System.getUriFor(SETTING_NOTIF_SLIDER_HAPTIC_FEEDBACK), false, this, + UserHandle.USER_ALL); + + update(); + } + + @Override + public void onChange(boolean selfChange) { + update(); + } + + void update() { + mSliderUpAction = Settings.System.getInt(mContext.getContentResolver(), + SETTING_NOTIF_SLIDER_UP, 601); + mSliderMiddleAction = Settings.System.getInt(mContext.getContentResolver(), + SETTING_NOTIF_SLIDER_MIDDLE, 602); + mSliderBottomAction = Settings.System.getInt(mContext.getContentResolver(), + SETTING_NOTIF_SLIDER_BOTTOM, 603); + + + if (Settings.System.getInt(mContext.getContentResolver(), + SETTING_NOTIF_SLIDER_HAPTIC_FEEDBACK, 1) != 0) { + mVibrator = (Vibrator) mContext.getSystemService(Context.VIBRATOR_SERVICE); + if (mVibrator == null || !mVibrator.hasVibrator()) { + mVibrator = null; + } + } else { + mVibrator = null; + } + } + } + +} diff --git a/DeviceHandler/src/com/slim/device/settings/ScreenOffGesture.java b/DeviceHandler/src/com/slim/device/settings/ScreenOffGesture.java new file mode 100644 index 0000000..7846792 --- /dev/null +++ b/DeviceHandler/src/com/slim/device/settings/ScreenOffGesture.java @@ -0,0 +1,377 @@ +/* + * Copyright (C) 2014 Slimroms + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.slim.device.settings; + +import android.app.Activity; +import android.app.AlertDialog; +import android.app.Dialog; +import android.app.DialogFragment; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.content.res.Resources; +import android.content.SharedPreferences; +import android.graphics.Bitmap; +import android.os.Bundle; +import androidx.preference.Preference; +import androidx.preference.Preference.OnPreferenceChangeListener; +import androidx.preference.Preference.OnPreferenceClickListener; +import androidx.preference.PreferenceFragment; +import androidx.preference.PreferenceScreen; +import androidx.preference.SwitchPreference; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; + +import com.android.internal.util.gzosp.AppHelper; +import com.android.internal.util.gzosp.ActionConstants; +import com.android.internal.util.gzosp.DeviceUtils; +import com.android.internal.util.gzosp.DeviceUtils.FilteredDeviceFeaturesArray; + +import com.slim.device.KernelControl; +import com.slim.device.R; +import com.slim.device.util.ShortcutPickerHelper; + +public class ScreenOffGesture extends PreferenceFragment implements + Preference.OnPreferenceChangeListener, Preference.OnPreferenceClickListener, + ShortcutPickerHelper.OnPickListener { + + private static final String SETTINGS_METADATA_NAME = "com.android.settings"; + + public static final String GESTURE_SETTINGS = "screen_off_gesture_settings"; + + public static final String PREF_GESTURE_ENABLE = "enable_gestures"; + public static final String PREF_GESTURE_CIRCLE = "gesture_circle"; + public static final String PREF_GESTURE_DOUBLE_SWIPE = "gesture_double_swipe"; + public static final String PREF_GESTURE_ARROW_UP = "gesture_arrow_up"; + public static final String PREF_GESTURE_ARROW_DOWN = "gesture_arrow_down"; + public static final String PREF_GESTURE_ARROW_LEFT = "gesture_arrow_left"; + public static final String PREF_GESTURE_ARROW_RIGHT = "gesture_arrow_right"; + + private static final int DLG_SHOW_ACTION_DIALOG = 0; + private static final int DLG_RESET_TO_DEFAULT = 1; + + private static final int MENU_RESET = Menu.FIRST; + + private Preference mGestureCircle; + private Preference mGestureDoubleSwipe; + private Preference mGestureArrowUp; + private Preference mGestureArrowDown; + private Preference mGestureArrowLeft; + private Preference mGestureArrowRight; + private SwitchPreference mEnableGestures; + + private boolean mCheckPreferences; + private SharedPreferences mScreenOffGestureSharedPreferences; + + private ShortcutPickerHelper mPicker; + private String mPendingSettingsKey; + private static FilteredDeviceFeaturesArray sFinalActionDialogArray; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + mPicker = new ShortcutPickerHelper(getActivity(), this); + + mScreenOffGestureSharedPreferences = getActivity().getSharedPreferences( + GESTURE_SETTINGS, Activity.MODE_PRIVATE); + + // Before we start filter out unsupported options on the + // ListPreference values and entries + PackageManager pm = getActivity().getPackageManager(); + Resources settingsResources = null; + try { + settingsResources = pm.getResourcesForApplication(SETTINGS_METADATA_NAME); + } catch (Exception e) { + return; + } + sFinalActionDialogArray = new FilteredDeviceFeaturesArray(); + sFinalActionDialogArray = DeviceUtils.filterUnsupportedDeviceFeatures(getActivity(), + settingsResources.getStringArray( + settingsResources.getIdentifier(SETTINGS_METADATA_NAME + + ":array/shortcut_action_screen_off_values", null, null)), + settingsResources.getStringArray( + settingsResources.getIdentifier(SETTINGS_METADATA_NAME + + ":array/shortcut_action_screen_off_entries", null, null))); + + // Attach final settings screen. + reloadSettings(); + + setHasOptionsMenu(true); + } + + private PreferenceScreen reloadSettings() { + mCheckPreferences = false; + PreferenceScreen prefs = getPreferenceScreen(); + if (prefs != null) { + prefs.removeAll(); + } + + // Load the preferences from an XML resource + addPreferencesFromResource(R.xml.screen_off_gesture); + prefs = getPreferenceScreen(); + + mEnableGestures = (SwitchPreference) prefs.findPreference(PREF_GESTURE_ENABLE); + + mGestureCircle = (Preference) prefs.findPreference(PREF_GESTURE_CIRCLE); + mGestureDoubleSwipe = (Preference) prefs.findPreference(PREF_GESTURE_DOUBLE_SWIPE); + mGestureArrowUp = (Preference) prefs.findPreference(PREF_GESTURE_ARROW_UP); + mGestureArrowDown = (Preference) prefs.findPreference(PREF_GESTURE_ARROW_DOWN); + mGestureArrowLeft = (Preference) prefs.findPreference(PREF_GESTURE_ARROW_LEFT); + mGestureArrowRight = (Preference) prefs.findPreference(PREF_GESTURE_ARROW_RIGHT); + + setupOrUpdatePreference(mGestureCircle, mScreenOffGestureSharedPreferences + .getString(PREF_GESTURE_CIRCLE, ActionConstants.ACTION_CAMERA)); + setupOrUpdatePreference(mGestureDoubleSwipe, mScreenOffGestureSharedPreferences + .getString(PREF_GESTURE_DOUBLE_SWIPE, ActionConstants.ACTION_MEDIA_PLAY_PAUSE)); + setupOrUpdatePreference(mGestureArrowUp, mScreenOffGestureSharedPreferences + .getString(PREF_GESTURE_ARROW_UP, ActionConstants.ACTION_TORCH)); + setupOrUpdatePreference(mGestureArrowDown, mScreenOffGestureSharedPreferences + .getString(PREF_GESTURE_ARROW_DOWN, ActionConstants.ACTION_VIB_SILENT)); + setupOrUpdatePreference(mGestureArrowLeft, mScreenOffGestureSharedPreferences + .getString(PREF_GESTURE_ARROW_LEFT, ActionConstants.ACTION_MEDIA_PREVIOUS)); + setupOrUpdatePreference(mGestureArrowRight, mScreenOffGestureSharedPreferences + .getString(PREF_GESTURE_ARROW_RIGHT, ActionConstants.ACTION_MEDIA_NEXT)); + + boolean enableGestures = + mScreenOffGestureSharedPreferences.getBoolean(PREF_GESTURE_ENABLE, true); + mEnableGestures.setChecked(enableGestures); + mEnableGestures.setOnPreferenceChangeListener(this); + + mCheckPreferences = true; + return prefs; + } + + private void setupOrUpdatePreference(Preference preference, String action) { + if (preference == null || action == null) { + return; + } + + if (action.startsWith("**")) { + preference.setSummary(getDescription(action)); + } else { + preference.setSummary(AppHelper.getFriendlyNameForUri( + getActivity(), getActivity().getPackageManager(), action)); + } + preference.setOnPreferenceClickListener(this); + } + + private String getDescription(String action) { + if (sFinalActionDialogArray == null || action == null) { + return null; + } + int i = 0; + for (String actionValue : sFinalActionDialogArray.values) { + if (action.equals(actionValue)) { + return sFinalActionDialogArray.entries[i]; + } + i++; + } + return null; + } + + @Override + public boolean onPreferenceClick(Preference preference) { + String settingsKey = null; + int dialogTitle = 0; + if (preference == mGestureCircle) { + settingsKey = PREF_GESTURE_CIRCLE; + dialogTitle = R.string.gesture_circle_title; + } else if (preference == mGestureDoubleSwipe) { + settingsKey = PREF_GESTURE_DOUBLE_SWIPE; + dialogTitle = R.string.gesture_double_swipe_title; + } else if (preference == mGestureArrowUp) { + settingsKey = PREF_GESTURE_ARROW_UP; + dialogTitle = R.string.gesture_arrow_up_title; + } else if (preference == mGestureArrowDown) { + settingsKey = PREF_GESTURE_ARROW_DOWN; + dialogTitle = R.string.gesture_arrow_down_title; + } else if (preference == mGestureArrowLeft) { + settingsKey = PREF_GESTURE_ARROW_LEFT; + dialogTitle = R.string.gesture_arrow_left_title; + } else if (preference == mGestureArrowRight) { + settingsKey = PREF_GESTURE_ARROW_RIGHT; + dialogTitle = R.string.gesture_arrow_right_title; + } + if (settingsKey != null) { + showDialogInner(DLG_SHOW_ACTION_DIALOG, settingsKey, dialogTitle); + return true; + } + return false; + } + + @Override + public boolean onPreferenceChange(Preference preference, Object newValue) { + if (!mCheckPreferences) { + return false; + } + if (preference == mEnableGestures) { + mScreenOffGestureSharedPreferences.edit() + .putBoolean(PREF_GESTURE_ENABLE, (Boolean) newValue).commit(); + KernelControl.enableGestures((Boolean) newValue); + return true; + } + return false; + } + + // Reset all entries to default. + private void resetToDefault() { + SharedPreferences.Editor editor = mScreenOffGestureSharedPreferences.edit(); + mScreenOffGestureSharedPreferences.edit() + .putBoolean(PREF_GESTURE_ENABLE, true).commit(); + editor.putString(PREF_GESTURE_CIRCLE, + ActionConstants.ACTION_CAMERA).commit(); + editor.putString(PREF_GESTURE_DOUBLE_SWIPE, + ActionConstants.ACTION_MEDIA_PLAY_PAUSE).commit(); + editor.putString(PREF_GESTURE_ARROW_UP, + ActionConstants.ACTION_TORCH).commit(); + editor.putString(PREF_GESTURE_ARROW_DOWN, + ActionConstants.ACTION_VIB_SILENT).commit(); + editor.putString(PREF_GESTURE_ARROW_LEFT, + ActionConstants.ACTION_MEDIA_PREVIOUS).commit(); + editor.putString(PREF_GESTURE_ARROW_RIGHT, + ActionConstants.ACTION_MEDIA_NEXT).commit(); + editor.commit(); + KernelControl.enableGestures(true); + reloadSettings(); + } + + @Override + public void onResume() { + super.onResume(); + } + + @Override + public void shortcutPicked(String action, + String description, Bitmap bmp, boolean isApplication) { + if (mPendingSettingsKey == null || action == null) { + return; + } + mScreenOffGestureSharedPreferences.edit().putString(mPendingSettingsKey, action).commit(); + reloadSettings(); + mPendingSettingsKey = null; + } + + public void onActivityResult(int requestCode, int resultCode, Intent data) { + if (resultCode == Activity.RESULT_OK) { + if (requestCode == ShortcutPickerHelper.REQUEST_PICK_SHORTCUT + || requestCode == ShortcutPickerHelper.REQUEST_PICK_APPLICATION + || requestCode == ShortcutPickerHelper.REQUEST_CREATE_SHORTCUT) { + mPicker.onActivityResult(requestCode, resultCode, data); + + } + } else { + mPendingSettingsKey = null; + } + super.onActivityResult(requestCode, resultCode, data); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case MENU_RESET: + showDialogInner(DLG_RESET_TO_DEFAULT, null, 0); + break; + } + return super.onOptionsItemSelected(item); + } + + @Override + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + menu.add(0, MENU_RESET, 0, R.string.reset) + .setIcon(R.drawable.ic_settings_reset) + .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); + } + + private void showDialogInner(int id, String settingsKey, int dialogTitle) { + DialogFragment newFragment = + MyAlertDialogFragment.newInstance(id, settingsKey, dialogTitle); + newFragment.setTargetFragment(this, 0); + newFragment.show(getFragmentManager(), "dialog " + id); + } + + public static class MyAlertDialogFragment extends DialogFragment { + + public static MyAlertDialogFragment newInstance( + int id, String settingsKey, int dialogTitle) { + MyAlertDialogFragment frag = new MyAlertDialogFragment(); + Bundle args = new Bundle(); + args.putInt("id", id); + args.putString("settingsKey", settingsKey); + args.putInt("dialogTitle", dialogTitle); + frag.setArguments(args); + return frag; + } + + ScreenOffGesture getOwner() { + return (ScreenOffGesture) getTargetFragment(); + } + + @Override + public Dialog onCreateDialog(Bundle savedInstanceState) { + int id = getArguments().getInt("id"); + final String settingsKey = getArguments().getString("settingsKey"); + int dialogTitle = getArguments().getInt("dialogTitle"); + switch (id) { + case DLG_SHOW_ACTION_DIALOG: + if (sFinalActionDialogArray == null) { + return null; + } + return new AlertDialog.Builder(getActivity()) + .setTitle(dialogTitle) + .setNegativeButton(R.string.cancel, null) + .setItems(getOwner().sFinalActionDialogArray.entries, + new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int item) { + if (getOwner().sFinalActionDialogArray.values[item] + .equals(ActionConstants.ACTION_APP)) { + if (getOwner().mPicker != null) { + getOwner().mPendingSettingsKey = settingsKey; + getOwner().mPicker.pickShortcut(getOwner().getId()); + } + } else { + getOwner().mScreenOffGestureSharedPreferences.edit() + .putString(settingsKey, + getOwner().sFinalActionDialogArray.values[item]).commit(); + getOwner().reloadSettings(); + } + } + }) + .create(); + case DLG_RESET_TO_DEFAULT: + return new AlertDialog.Builder(getActivity()) + .setTitle(R.string.reset) + .setMessage(R.string.reset_message) + .setNegativeButton(R.string.cancel, null) + .setPositiveButton(R.string.dlg_ok, + new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + getOwner().resetToDefault(); + } + }) + .create(); + } + throw new IllegalArgumentException("unknown id " + id); + } + + @Override + public void onCancel(DialogInterface dialog) { + } + } + +} diff --git a/DeviceHandler/src/com/slim/device/settings/ScreenOffGestureSettings.java b/DeviceHandler/src/com/slim/device/settings/ScreenOffGestureSettings.java new file mode 100644 index 0000000..d2276c5 --- /dev/null +++ b/DeviceHandler/src/com/slim/device/settings/ScreenOffGestureSettings.java @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2014 Slimroms + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.slim.device.settings; + +import android.app.Activity; +import android.os.Bundle; +import android.view.MenuItem; + +public class ScreenOffGestureSettings extends Activity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + getFragmentManager().beginTransaction().replace(android.R.id.content, + new ScreenOffGesture()).commit(); + getActionBar().setDisplayHomeAsUpEnabled(true); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case android.R.id.home: + finish(); + return true; + default: + return super.onOptionsItemSelected(item); + } + } +} diff --git a/DeviceHandler/src/com/slim/device/settings/SliderSettings.java b/DeviceHandler/src/com/slim/device/settings/SliderSettings.java new file mode 100644 index 0000000..ec16387 --- /dev/null +++ b/DeviceHandler/src/com/slim/device/settings/SliderSettings.java @@ -0,0 +1,94 @@ +/* + * Copyright (C) 2016 The CyanogenMod Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.slim.device.settings; + +import android.app.ActionBar; +import android.os.Bundle; +import androidx.preference.ListPreference; +import androidx.preference.Preference; +import androidx.preference.Preference.OnPreferenceChangeListener; +import androidx.preference.PreferenceActivity; +import androidx.preference.SwitchPreference; +import android.view.MenuItem; + +import com.slim.device.KernelControl; +import com.slim.device.R; +import com.slim.device.util.FileUtils; + +public class SliderSettings extends PreferenceActivity + implements Preference.OnPreferenceChangeListener { + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + addPreferencesFromResource(R.xml.slider_panel); + + ActionBar actionBar = getActionBar(); + if (actionBar != null) { + actionBar.setDisplayHomeAsUpEnabled(true); + } + } + + private void setSummary(ListPreference preference, String file) { + String keyCode; + if ((keyCode = FileUtils.readOneLine(file)) != null) { + preference.setValue(keyCode); + preference.setSummary(preference.getEntry()); + } + } + + @Override + public boolean onPreferenceChange(Preference preference, Object newValue) { + return false; + /* + final String file; + if (preference == mSliderTop) { + file = KernelControl.KEYCODE_SLIDER_TOP; + } else if (preference == mSliderMiddle) { + file = KernelControl.KEYCODE_SLIDER_MIDDLE; + } else if (preference == mSliderBottom) { + file = KernelControl.KEYCODE_SLIDER_BOTTOM; + } else { + return false; + } + + FileUtils.writeLine(file, (String) newValue); + setSummary((ListPreference) preference, file); + + return true; + */ + } + + @Override + protected void onResume() { + super.onResume(); + + // Remove padding around the listview + getListView().setPadding(0, 0, 0, 0); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case android.R.id.home: + finish(); + return true; + default: + return super.onOptionsItemSelected(item); + } + } +} diff --git a/DeviceHandler/src/com/slim/device/util/FileUtils.java b/DeviceHandler/src/com/slim/device/util/FileUtils.java new file mode 100644 index 0000000..18d2268 --- /dev/null +++ b/DeviceHandler/src/com/slim/device/util/FileUtils.java @@ -0,0 +1,76 @@ +/* + * Copyright (C) 2013 The CyanogenMod Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.slim.device.util; + +import android.util.Log; + +import java.io.BufferedReader; +import java.io.FileOutputStream; +import java.io.FileReader; +import java.io.IOException; + +public final class FileUtils { + private static final String TAG = "FileUtils"; + + private FileUtils() { + // this class is not supposed to be instantiated + } + + /** + * Reads the first line of text from the given file + */ + public static String readOneLine(String fileName) { + String line = null; + BufferedReader reader = null; + + try { + reader = new BufferedReader(new FileReader(fileName), 512); + line = reader.readLine(); + } catch (IOException e) { + Log.e(TAG, "Could not read from file " + fileName, e); + } finally { + try { + if (reader != null) { + reader.close(); + } + } catch (IOException e) { + // ignored, not much we can do anyway + } + } + + return line; + } + + /** + * Writes the given value into the given file + * + * @return true on success, false on failure + */ + public static boolean writeLine(String fileName, String value) { + try { + FileOutputStream fos = new FileOutputStream(fileName); + fos.write(value.getBytes()); + fos.flush(); + fos.close(); + } catch (IOException e) { + Log.e(TAG, "Could not write to file " + fileName, e); + return false; + } + + return true; + } +} diff --git a/DeviceHandler/src/com/slim/device/util/ShortcutPickerHelper.java b/DeviceHandler/src/com/slim/device/util/ShortcutPickerHelper.java new file mode 100644 index 0000000..791e746 --- /dev/null +++ b/DeviceHandler/src/com/slim/device/util/ShortcutPickerHelper.java @@ -0,0 +1,177 @@ +/* + * Copyright (C) 2011 The CyanogenMod Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.slim.device.util; + +import android.app.Activity; +import android.app.Fragment; +import android.content.Intent; +import android.content.Intent.ShortcutIconResource; +import android.content.pm.PackageManager; +import android.content.res.Resources; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.os.Bundle; +import android.os.Parcelable; +import android.util.Log; + +import com.slim.device.R; + +import com.android.internal.util.gzosp.AppHelper; + +import java.util.ArrayList; + +public class ShortcutPickerHelper { + + public static final int REQUEST_PICK_SHORTCUT = 100; + public static final int REQUEST_PICK_APPLICATION = 101; + public static final int REQUEST_CREATE_SHORTCUT = 102; + + private Activity mParent; + private OnPickListener mListener; + private PackageManager mPackageManager; + private int lastFragmentId; + + public interface OnPickListener { + void shortcutPicked(String uri, String friendlyName, Bitmap bmp, boolean isApplication); + } + + public ShortcutPickerHelper(Activity parent, OnPickListener listener) { + mParent = parent; + mPackageManager = mParent.getPackageManager(); + mListener = listener; + } + + public void onActivityResult(int requestCode, int resultCode, Intent data) { + if (resultCode == Activity.RESULT_OK) { + switch (requestCode) { + case REQUEST_PICK_APPLICATION: + completeSetCustomApp(data); + break; + case REQUEST_CREATE_SHORTCUT: + completeSetCustomShortcut(data); + break; + case REQUEST_PICK_SHORTCUT: + processShortcut(data, REQUEST_PICK_APPLICATION, REQUEST_CREATE_SHORTCUT); + break; + } + } + } + + public void pickShortcut(int fragmentId) { + pickShortcut(fragmentId, false); + } + + public void pickShortcut(int fragmentId, boolean fullAppsOnly) { + lastFragmentId = fragmentId; + + if (fullAppsOnly) { + Intent mainIntent = new Intent(Intent.ACTION_MAIN, null); + mainIntent.addCategory(Intent.CATEGORY_LAUNCHER); + + Intent pickIntent = new Intent(Intent.ACTION_PICK_ACTIVITY); + pickIntent.putExtra(Intent.EXTRA_INTENT, mainIntent); + startFragmentOrActivity(pickIntent, REQUEST_PICK_APPLICATION); + } else { + Bundle bundle = new Bundle(); + + ArrayList<String> shortcutNames = new ArrayList<String>(); + shortcutNames.add(mParent.getString(R.string.group_applications)); + bundle.putStringArrayList(Intent.EXTRA_SHORTCUT_NAME, shortcutNames); + + ArrayList<ShortcutIconResource> shortcutIcons = new ArrayList<ShortcutIconResource>(); + shortcutIcons.add(ShortcutIconResource.fromContext(mParent, + android.R.drawable.sym_def_app_icon)); + bundle.putParcelableArrayList(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, shortcutIcons); + + Intent pickIntent = new Intent(Intent.ACTION_PICK_ACTIVITY); + pickIntent.putExtra(Intent.EXTRA_INTENT, new Intent(Intent.ACTION_CREATE_SHORTCUT)); + pickIntent.putExtra(Intent.EXTRA_TITLE, mParent.getText( + R.string.select_custom_app_title)); + pickIntent.putExtras(bundle); + startFragmentOrActivity(pickIntent, REQUEST_PICK_SHORTCUT); + } + } + + private void startFragmentOrActivity(Intent pickIntent, int requestCode) { + if (lastFragmentId == 0) { + mParent.startActivityForResult(pickIntent, requestCode); + } else { + Fragment cFrag = mParent.getFragmentManager().findFragmentById(lastFragmentId); + if (cFrag != null) { + mParent.startActivityFromFragment(cFrag, pickIntent, requestCode); + } + } + } + + private void processShortcut(Intent intent, + int requestCodeApplication, int requestCodeShortcut) { + // Handle case where user selected "Applications" + String applicationName = mParent.getResources().getString(R.string.group_applications); + String shortcutName = intent.getStringExtra(Intent.EXTRA_SHORTCUT_NAME); + + if (applicationName != null && applicationName.equals(shortcutName)) { + Intent mainIntent = new Intent(Intent.ACTION_MAIN, null); + mainIntent.addCategory(Intent.CATEGORY_LAUNCHER); + + Intent pickIntent = new Intent(Intent.ACTION_PICK_ACTIVITY); + pickIntent.putExtra(Intent.EXTRA_INTENT, mainIntent); + startFragmentOrActivity(pickIntent, requestCodeApplication); + } else { + startFragmentOrActivity(intent, requestCodeShortcut); + } + } + + private void completeSetCustomApp(Intent data) { + mListener.shortcutPicked(data.toUri(0), + AppHelper.getFriendlyActivityName(mParent, mPackageManager, data, false), null, true); + } + + private void completeSetCustomShortcut(Intent data) { + Intent intent = data.getParcelableExtra(Intent.EXTRA_SHORTCUT_INTENT); + /* preserve shortcut name, we want to restore it later */ + intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, data.getStringExtra( + Intent.EXTRA_SHORTCUT_NAME)); + String appUri = intent.toUri(0); + appUri = appUri.replaceAll("com.android.contacts.action.QUICK_CONTACT", + "android.intent.action.VIEW"); + + // Check if icon is present + Bitmap bmp = null; + Parcelable extra = data.getParcelableExtra(Intent.EXTRA_SHORTCUT_ICON); + if (extra != null && extra instanceof Bitmap) { + bmp = (Bitmap) extra; + } + // No icon till now check if icon resource is present + if (bmp == null) { + extra = data.getParcelableExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE); + if (extra != null && extra instanceof Intent.ShortcutIconResource) { + try { + Intent.ShortcutIconResource iconResource = (ShortcutIconResource) extra; + Resources resources = + mPackageManager.getResourcesForApplication(iconResource.packageName); + final int id = resources.getIdentifier(iconResource.resourceName, null, null); + bmp = BitmapFactory.decodeResource(resources, id); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + mListener.shortcutPicked(appUri, + AppHelper.getFriendlyShortcutName(mParent, mPackageManager, intent), bmp, false); + } + +} @@ -17,10 +17,11 @@ # overlays DEVICE_PACKAGE_OVERLAYS += $(LOCAL_PATH)/overlay -## DevicHandler -#PRODUCT_PACKAGES += \ -# DeviceHandler +# DevicHandler +PRODUCT_PACKAGES += \ + DeviceHandler # Recovery PRODUCT_PACKAGES += \ librecovery_updater_oppo + |
