Skip to content

Instantly share code, notes, and snippets.

@h2o64
Last active October 20, 2016 17:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save h2o64/96dcafb03520abc9382c549b13ea1895 to your computer and use it in GitHub Desktop.
Save h2o64/96dcafb03520abc9382c549b13ea1895 to your computer and use it in GitHub Desktop.
0001-gemini-Kang-Oppo-ConfigPanel-for-SwapKey.patch
From 87afc01976846cea6135cdf55ffbc11cb380604f Mon Sep 17 00:00:00 2001
From: Louis Popi <theh2o64@gmail.com>
Date: Thu, 20 Oct 2016 19:38:27 +0200
Subject: [PATCH] gemini: Kang Oppo ConfigPanel for SwapKey
Change-Id: Ia66fd3fed7cc1687862ab1d35578b525a422f0bb
---
configpanel/Android.mk | 28 ++++++
configpanel/AndroidManifest.xml | 60 +++++++++++
configpanel/res/drawable-xhdpi/locator_icon.png | Bin 0 -> 2303 bytes
configpanel/res/drawable-xxhdpi/locator_icon.png | Bin 0 -> 1254 bytes
.../drawable/ic_settings_additional_buttons.xml | 27 +++++
.../res/mipmap-xhdpi/ic_launcher_settings.png | Bin 0 -> 8605 bytes
.../res/mipmap-xxhdpi/ic_launcher_settings.png | Bin 0 -> 14731 bytes
.../res/mipmap-xxxhdpi/ic_launcher_settings.png | Bin 0 -> 21728 bytes
configpanel/res/values/colors.xml | 22 ++++
configpanel/res/values/dimens.xml | 20 ++++
configpanel/res/values/strings.xml | 22 ++++
configpanel/res/values/styles.xml | 29 ++++++
configpanel/res/xml/button_panel.xml | 24 +++++
.../settings/device/ButtonSettings.java | 31 ++++++
.../ConfigPanelSearchIndexablesProvider.java | 87 ++++++++++++++++
.../com/cyanogenmod/settings/device/Startup.java | 112 +++++++++++++++++++++
.../settings/device/utils/Constants.java | 59 +++++++++++
.../device/utils/NodePreferenceActivity.java | 107 ++++++++++++++++++++
device.mk | 4 +
19 files changed, 632 insertions(+)
create mode 100644 configpanel/Android.mk
create mode 100644 configpanel/AndroidManifest.xml
create mode 100644 configpanel/res/drawable-xhdpi/locator_icon.png
create mode 100644 configpanel/res/drawable-xxhdpi/locator_icon.png
create mode 100644 configpanel/res/drawable/ic_settings_additional_buttons.xml
create mode 100644 configpanel/res/mipmap-xhdpi/ic_launcher_settings.png
create mode 100644 configpanel/res/mipmap-xxhdpi/ic_launcher_settings.png
create mode 100644 configpanel/res/mipmap-xxxhdpi/ic_launcher_settings.png
create mode 100644 configpanel/res/values/colors.xml
create mode 100644 configpanel/res/values/dimens.xml
create mode 100644 configpanel/res/values/strings.xml
create mode 100644 configpanel/res/values/styles.xml
create mode 100644 configpanel/res/xml/button_panel.xml
create mode 100644 configpanel/src/com/cyanogenmod/settings/device/ButtonSettings.java
create mode 100644 configpanel/src/com/cyanogenmod/settings/device/ConfigPanelSearchIndexablesProvider.java
create mode 100644 configpanel/src/com/cyanogenmod/settings/device/Startup.java
create mode 100644 configpanel/src/com/cyanogenmod/settings/device/utils/Constants.java
create mode 100644 configpanel/src/com/cyanogenmod/settings/device/utils/NodePreferenceActivity.java
diff --git a/configpanel/Android.mk b/configpanel/Android.mk
new file mode 100644
index 0000000..1e3f6f2
--- /dev/null
+++ b/configpanel/Android.mk
@@ -0,0 +1,28 @@
+#
+# 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.
+#
+
+LOCAL_PATH := $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES := $(call all-java-files-under, src)
+LOCAL_CERTIFICATE := platform
+LOCAL_PRIVILEGED_MODULE := true
+LOCAL_PACKAGE_NAME := ConfigPanel
+
+LOCAL_STATIC_JAVA_LIBRARIES := \
+ org.cyanogenmod.platform.internal
+
+include $(BUILD_PACKAGE)
diff --git a/configpanel/AndroidManifest.xml b/configpanel/AndroidManifest.xml
new file mode 100644
index 0000000..072ce66
--- /dev/null
+++ b/configpanel/AndroidManifest.xml
@@ -0,0 +1,60 @@
+<?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.
+-->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ android:sharedUserId="android.uid.system"
+ package="com.cyanogenmod.settings.device"
+ android:versionCode="5"
+ android:versionName="2.3" >
+
+ <uses-permission android:name="android.permission.INJECT_EVENTS"/>
+ <uses-permission android:name="cyanogenmod.permission.HARDWARE_ABSTRACTION_ACCESS" />
+
+ <uses-sdk
+ android:minSdkVersion="23" />
+
+ <application
+ android:icon="@mipmap/ic_launcher_settings"
+ android:label="@*cyanogenmod.platform:string/device_settings_app_name"
+ android:theme="@style/Theme.Main">
+
+ <provider
+ android:name=".ConfigPanelSearchIndexablesProvider"
+ android:authorities="com.cyanogenmod.settings.device"
+ android:multiprocess="false"
+ android:grantUriPermissions="true"
+ android:permission="android.permission.READ_SEARCH_INDEXABLES"
+ android:exported="true">
+ <intent-filter>
+ <action android:name="android.content.action.SEARCH_INDEXABLES_PROVIDER" />
+ </intent-filter>
+ </provider>
+
+ <activity
+ android:name=".ButtonSettings"
+ android:label="@string/button_panel_title">
+ <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.device" />
+ </activity>
+
+</manifest>
diff --git a/configpanel/res/drawable-xhdpi/locator_icon.png b/configpanel/res/drawable-xhdpi/locator_icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..74d3428f1d14364f8edd050ea15b3f61bf714538
GIT binary patch
literal 2303
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
E0?tGcbN~PV
literal 0
HcmV?d00001
diff --git a/configpanel/res/drawable-xxhdpi/locator_icon.png b/configpanel/res/drawable-xxhdpi/locator_icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..9f33e54d87d8a8582775865ba72ef1d82e21b9f1
GIT binary patch
literal 1254
zcmV<C1R48@P)<h;3K|Lk000e1NJLTq003YB003YJ1^@s6;+S_h0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU$h)G02RCwC#oPlwrAP|OmslX1-4$i9}
zqysxROL$ko*@1HvkPf^K$W`D=1tt}ktH9IAW-c*+pe~4SzZoVoi4oX;*#$)yBM5>Z
z2!bF8f*=TjAP9mW2!bGvOW*g&P|BfXf$A1RNw3-PUH?iIpbbU;pX(6<I^OjkX#=#Q
zp0r_XQ+af+m%X0cV_Q-~JDLz75xc{=!t199kL@}4^PG=j{L-ScUSqH#2L*GA6LLq#
z4itt<eh=lx>2!LsydNKaq)=464COMG;hrxxLJU8C4#ni{<NfYz?zcD37Y5JjY+^oy
zt_tF^D=oCarXCL0oAN?(6yr-%XCOgV7U98#ZZ6EdTNlJF!b~T`jNwI(k2KA4ChLQ^
zM3|Xf6f=ps>-|#cjHy|xc%QAg8lSrwfAmC$_}+lg3aBfaj2;d-qnuf9OhXelw5^L`
ziVE?wb2NTo;q?-(OBS{(SFCtdl!pJ;k?l!<+GV&}EQF-aGgqv9#gaL{At$uE$Oi^5
zkqeS^yQSeZVMQ(wLAZ<@-=U|~#MZ>o^DA4A0<V-%ss-&nFAzbOtJ07Hl(rAnW~O(=
zihAXW(a_m?He9cw-dp084xR0mBr_N-s|2tRA$M>%z9;Wb9fmJoShw6l01M|xEJJP`
zLV(UDej0=-R@D6=k#3Znt-^~Tl%_t7Z`BBx{;7njR@T3%05gf1E3R!7i$v~w1mu(H
znXsI`t)4$)2%x&JA*Y?8A64)L8N|h6+7QEQKfXboEs_A~Zjvlgl9n6YdrE@b?m9*R
zS}ae(^iUYl-jeJM){>uner-6uCVbet<G`!Od&QsfXapGeuK3-rhz78#t+z3Sp9U*V
zYu-C>gg$%<p)rksOc8!CcNJhv1s^n_b>9MLyb(M0V?39C^da<(Cu2Ob__!#3m&PDK
zX4#oNdAqFuUt-Atn0Q(GYjRc^s{j||``@xixe4e^Tf)~o-afnl8_&~qqe;ZLuRq2d
zFbeRb`I|%*;UxwEo-mUaY-RtZ841Z&B4|eKW2^#vMaU_4ng!lgBBVY>09MTZw67Df
zE`hO=S#w_=ivSJgOA|$X)z%{TdKl-^AO&)r#a1F{c1g&X1js{lz_8=G*}#F~`f5^R
zh}1*9neCn>&HpE%+U_F^2~Txrns?H|;(yDi!_T{p1l{5Rp4>Qor>67%oW+P{D%W_d
zUw1r0rnz4Ap-IbP#V`uWfR0c&OdR6elw}c9y$|cR5BwYxw`8$1^A%0D^Y*3e2pG11
z2Nl7PsQXyoFDzN9b|K=dVXC^{kFgOSoOw;mGv^mcc4RCL@<@?GPJNhDQIJH~`~WA*
z1DfPj82_D7Y>o{RYo@CZ=f$3mOPg{EEW((4$Ij1r`}ij6VJLqXyc3?DvIX9oK^fn`
zam)LTCwASlYX!nX)%!>G*LY~_Ot_Gq4A05phOmTma#l@-cMnYk7_M7k^z)uW%_*i3
z1xfYo(ZzH>=$M@Uve#`f;|C!Za$|xZ2!bF8f*=TjAP9mW2!bF8g8dU<00Bx#h*7=5
Q8~^|S07*qoM6N<$f;W*zYXATM
literal 0
HcmV?d00001
diff --git a/configpanel/res/drawable/ic_settings_additional_buttons.xml b/configpanel/res/drawable/ic_settings_additional_buttons.xml
new file mode 100644
index 0000000..044fc23
--- /dev/null
+++ b/configpanel/res/drawable/ic_settings_additional_buttons.xml
@@ -0,0 +1,27 @@
+<?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.
+-->
+<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="M17,1L7,1C5.9,1,5,1.9,5,3v2h2v4H5v12c0,1.1,0.9,2,2,2h10c1.1,0,2-0.9,2-2V3C19,1.9,18.1,1,17,1z
+M11,21H7v-2h4V21z M17,21 h-4v-2h4V21z" />
+</vector>
diff --git a/configpanel/res/mipmap-xhdpi/ic_launcher_settings.png b/configpanel/res/mipmap-xhdpi/ic_launcher_settings.png
new file mode 100644
index 0000000000000000000000000000000000000000..fa8c81357547c6e93f26b1880f9841350b1c542a
GIT binary patch
literal 8605
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
literal 0
HcmV?d00001
diff --git a/configpanel/res/mipmap-xxhdpi/ic_launcher_settings.png b/configpanel/res/mipmap-xxhdpi/ic_launcher_settings.png
new file mode 100644
index 0000000000000000000000000000000000000000..3fa69e9d6d2776c886bf1a3ed947ae3b2249fb54
GIT binary patch
literal 14731
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
IW)$*&0NdE!Q~&?~
literal 0
HcmV?d00001
diff --git a/configpanel/res/mipmap-xxxhdpi/ic_launcher_settings.png b/configpanel/res/mipmap-xxxhdpi/ic_launcher_settings.png
new file mode 100644
index 0000000000000000000000000000000000000000..72946b7dc2672ba195091388c0cd50664b1b5a87
GIT binary patch
literal 21728
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%0DeI^Fp$}kaNB#|B2~R}?jS8#ktPzHS78d-
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
Hu0mjfL+t^w
literal 0
HcmV?d00001
diff --git a/configpanel/res/values/colors.xml b/configpanel/res/values/colors.xml
new file mode 100644
index 0000000..2a95ee2
--- /dev/null
+++ b/configpanel/res/values/colors.xml
@@ -0,0 +1,22 @@
+<?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>
+ <!-- Palette colors referenced by top-level themes. -->
+ <color name="theme_primary">#ff263238</color>
+ <color name="theme_primary_dark">#ff21272b</color>
+ <color name="theme_accent">#ff009688</color>
+</resources>
diff --git a/configpanel/res/values/dimens.xml b/configpanel/res/values/dimens.xml
new file mode 100644
index 0000000..62f1899
--- /dev/null
+++ b/configpanel/res/values/dimens.xml
@@ -0,0 +1,20 @@
+<?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>
+ <!-- ActionBar contentInsetStart -->
+ <dimen name="actionbar_subsettings_contentInsetStart">72dp</dimen>
+</resources>
diff --git a/configpanel/res/values/strings.xml b/configpanel/res/values/strings.xml
new file mode 100644
index 0000000..45c9fe5
--- /dev/null
+++ b/configpanel/res/values/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2013-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 xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Button settings -->
+ <string name="button_panel_title">Additional buttons</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/configpanel/res/values/styles.xml b/configpanel/res/values/styles.xml
new file mode 100644
index 0000000..710f4b5
--- /dev/null
+++ b/configpanel/res/values/styles.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2014-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>
+ <style name="Theme.Main" parent="@android:style/Theme.Material.Light.DarkActionBar">
+ <item name="android:colorPrimary">@color/theme_primary</item>
+ <item name="android:colorPrimaryDark">@color/theme_primary_dark</item>
+ <item name="android:colorAccent">@color/theme_accent</item>
+ <!-- Redefine the ActionBar style for contentInsetStart -->
+ <item name="android:actionBarStyle">@style/Theme.ActionBar.SubSettings</item>
+ </style>
+
+ <style name="Theme.ActionBar.SubSettings" parent="@android:style/Widget.Material.Light.ActionBar.Solid">
+ <item name="android:contentInsetStart">@dimen/actionbar_subsettings_contentInsetStart</item>
+ </style>
+</resources>
diff --git a/configpanel/res/xml/button_panel.xml b/configpanel/res/xml/button_panel.xml
new file mode 100644
index 0000000..01904a5
--- /dev/null
+++ b/configpanel/res/xml/button_panel.xml
@@ -0,0 +1,24 @@
+<?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">
+
+ <SwitchPreference
+ android:key="button_swap"
+ android:title="@string/button_swap_title"
+ android:summary="@string/button_swap_summary" />
+
+</PreferenceScreen>
diff --git a/configpanel/src/com/cyanogenmod/settings/device/ButtonSettings.java b/configpanel/src/com/cyanogenmod/settings/device/ButtonSettings.java
new file mode 100644
index 0000000..a522a8a
--- /dev/null
+++ b/configpanel/src/com/cyanogenmod/settings/device/ButtonSettings.java
@@ -0,0 +1,31 @@
+/*
+ * 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.cyanogenmod.settings.device;
+
+import android.os.Bundle;
+
+import com.cyanogenmod.settings.device.utils.NodePreferenceActivity;
+
+import org.cyanogenmod.internal.util.ScreenType;
+
+public class ButtonSettings extends NodePreferenceActivity {
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ addPreferencesFromResource(R.xml.button_panel);
+ }
+}
diff --git a/configpanel/src/com/cyanogenmod/settings/device/ConfigPanelSearchIndexablesProvider.java b/configpanel/src/com/cyanogenmod/settings/device/ConfigPanelSearchIndexablesProvider.java
new file mode 100644
index 0000000..13e74f5
--- /dev/null
+++ b/configpanel/src/com/cyanogenmod/settings/device/ConfigPanelSearchIndexablesProvider.java
@@ -0,0 +1,87 @@
+/*
+ * 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.cyanogenmod.settings.device;
+
+
+import android.database.Cursor;
+import android.database.MatrixCursor;
+import android.provider.SearchIndexableResource;
+import android.provider.SearchIndexablesProvider;
+
+import static android.provider.SearchIndexablesContract.COLUMN_INDEX_XML_RES_CLASS_NAME;
+import static android.provider.SearchIndexablesContract.COLUMN_INDEX_XML_RES_ICON_RESID;
+import static android.provider.SearchIndexablesContract.COLUMN_INDEX_XML_RES_INTENT_ACTION;
+import static android.provider.SearchIndexablesContract.COLUMN_INDEX_XML_RES_INTENT_TARGET_CLASS;
+import static android.provider.SearchIndexablesContract.COLUMN_INDEX_XML_RES_INTENT_TARGET_PACKAGE;
+import static android.provider.SearchIndexablesContract.COLUMN_INDEX_XML_RES_RANK;
+import static android.provider.SearchIndexablesContract.COLUMN_INDEX_XML_RES_RESID;
+import static android.provider.SearchIndexablesContract.INDEXABLES_RAW_COLUMNS;
+import static android.provider.SearchIndexablesContract.INDEXABLES_XML_RES_COLUMNS;
+import static android.provider.SearchIndexablesContract.NON_INDEXABLES_KEYS_COLUMNS;
+
+public class ConfigPanelSearchIndexablesProvider extends SearchIndexablesProvider {
+ private static final String TAG = "ConfigPanelSearchIndexablesProvider";
+
+ public static final int SEARCH_IDX_BUTTON_PANEL = 0;
+ public static final int SEARCH_IDX_GESTURE_PANEL = 1;
+ public static final int SEARCH_IDX_OCLICK_PANEL = 2;
+ public static final int SEARCH_IDX_TOUCHSCREEN_PANEL = 3;
+
+ private static SearchIndexableResource[] INDEXABLE_RES = new SearchIndexableResource[]{
+ new SearchIndexableResource(1, R.xml.button_panel,
+ ButtonSettings.class.getName(),
+ R.drawable.ic_settings_additional_buttons),
+ };
+
+ @Override
+ public boolean onCreate() {
+ return true;
+ }
+
+ @Override
+ public Cursor queryXmlResources(String[] projection) {
+ MatrixCursor cursor = new MatrixCursor(INDEXABLES_XML_RES_COLUMNS);
+ if (Startup.hasButtonProcs() /* show button panel */) {
+ cursor.addRow(generateResourceRef(INDEXABLE_RES[SEARCH_IDX_BUTTON_PANEL]));
+ }
+ return cursor;
+ }
+
+ private static Object[] generateResourceRef(SearchIndexableResource sir) {
+ Object[] ref = new Object[7];
+ ref[COLUMN_INDEX_XML_RES_RANK] = sir.rank;
+ ref[COLUMN_INDEX_XML_RES_RESID] = sir.xmlResId;
+ ref[COLUMN_INDEX_XML_RES_CLASS_NAME] = null;
+ ref[COLUMN_INDEX_XML_RES_ICON_RESID] = sir.iconResId;
+ ref[COLUMN_INDEX_XML_RES_INTENT_ACTION] = "com.android.settings.action.EXTRA_SETTINGS";
+ ref[COLUMN_INDEX_XML_RES_INTENT_TARGET_PACKAGE] = "com.cyanogenmod.settings.device";
+ ref[COLUMN_INDEX_XML_RES_INTENT_TARGET_CLASS] = sir.className;
+ return ref;
+ }
+
+ @Override
+ public Cursor queryRawData(String[] projection) {
+ MatrixCursor cursor = new MatrixCursor(INDEXABLES_RAW_COLUMNS);
+ return cursor;
+ }
+
+ @Override
+ public Cursor queryNonIndexableKeys(String[] projection) {
+ MatrixCursor cursor = new MatrixCursor(NON_INDEXABLES_KEYS_COLUMNS);
+ return cursor;
+ }
+}
diff --git a/configpanel/src/com/cyanogenmod/settings/device/Startup.java b/configpanel/src/com/cyanogenmod/settings/device/Startup.java
new file mode 100644
index 0000000..0471722
--- /dev/null
+++ b/configpanel/src/com/cyanogenmod/settings/device/Startup.java
@@ -0,0 +1,112 @@
+/*
+ * 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.cyanogenmod.settings.device;
+
+import android.app.PendingIntent;
+import android.bluetooth.BluetoothAdapter;
+import android.bluetooth.BluetoothManager;
+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.hardware.input.InputManager;
+import android.os.Build;
+import android.os.IBinder;
+import android.os.RemoteException;
+import android.os.ServiceManager;
+import android.os.SystemClock;
+import android.os.UserHandle;
+import android.preference.PreferenceManager;
+import android.service.gesture.IGestureService;
+import android.util.Log;
+import android.view.InputDevice;
+import android.view.InputEvent;
+import android.view.KeyCharacterMap;
+import android.view.KeyEvent;
+
+import java.io.File;
+
+import com.cyanogenmod.settings.device.utils.Constants;
+
+import org.cyanogenmod.internal.util.FileUtils;
+
+public class Startup extends BroadcastReceiver {
+
+ private static final String TAG = Startup.class.getSimpleName();
+
+ @Override
+ public void onReceive(final Context context, final Intent intent) {
+ final String action = intent.getAction();
+ if (cyanogenmod.content.Intent.ACTION_INITIALIZE_CM_HARDWARE.equals(action)) {
+
+ // Disable button settings if needed
+ if (!hasButtonProcs()) {
+ disableComponent(context, ButtonSettings.class.getName());
+ } else {
+ enableComponent(context, ButtonSettings.class.getName());
+
+ // Restore nodes to saved preference values
+ for (String pref : Constants.sButtonPrefKeys) {
+ String value;
+ String node;
+ if (Constants.sStringNodePreferenceMap.containsKey(pref)) {
+ value = Constants.getPreferenceString(context, pref);
+ node = Constants.sStringNodePreferenceMap.get(pref);
+ } else {
+ value = Constants.isPreferenceEnabled(context, pref) ?
+ "1" : "0";
+ node = Constants.sBooleanNodePreferenceMap.get(pref);
+ }
+ if (!FileUtils.writeLine(node, value)) {
+ Log.w(TAG, "Write to node " + node +
+ " failed while restoring saved preference values");
+ }
+ }
+ }
+ }
+
+ private void sendInputEvent(InputEvent event) {
+ InputManager inputManager = InputManager.getInstance();
+ inputManager.injectInputEvent(event,
+ InputManager.INJECT_INPUT_EVENT_MODE_WAIT_FOR_FINISH);
+ }
+
+ static boolean hasButtonProcs() {
+ return new File(Constants.BUTTON_SWAP_NODE).exists();
+ }
+
+ 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/configpanel/src/com/cyanogenmod/settings/device/utils/Constants.java b/configpanel/src/com/cyanogenmod/settings/device/utils/Constants.java
new file mode 100644
index 0000000..4cd909f
--- /dev/null
+++ b/configpanel/src/com/cyanogenmod/settings/device/utils/Constants.java
@@ -0,0 +1,59 @@
+/*
+ * 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.cyanogenmod.settings.device.utils;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.preference.PreferenceManager;
+
+public class Constants {
+
+ // Swap keys
+ public static final String BUTTON_SWAP_KEY = "button_swap";
+
+ // Swap nodes
+ public static final String BUTTON_SWAP_NODE = "/sys/devices/soc/75ba000.i2c/i2c-12/12-0020/input/input1/key_rep";
+
+ // Holds <preference_key> -> <proc_node> mapping
+ public static final Map<String, String> sBooleanNodePreferenceMap = new HashMap<>();
+ public static final Map<String, String> sStringNodePreferenceMap = new HashMap<>();
+
+ // Holds <preference_key> -> <default_values> mapping
+ public static final Map<String, Object> sNodeDefaultMap = new HashMap<>();
+
+ public static final String[] sButtonPrefKeys = {
+ BUTTON_SWAP_KEY,
+ };
+
+ static {
+ sBooleanNodePreferenceMap.put(BUTTON_SWAP_KEY, BUTTON_SWAP_NODE);
+ sNodeDefaultMap.put(BUTTON_SWAP_KEY, false);
+ }
+
+ public static boolean isPreferenceEnabled(Context context, String key) {
+ SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
+ return preferences.getBoolean(key, (Boolean) sNodeDefaultMap.get(key));
+ }
+
+ public static String getPreferenceString(Context context, String key) {
+ SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
+ return preferences.getString(key, (String) sNodeDefaultMap.get(key));
+ }
+}
diff --git a/configpanel/src/com/cyanogenmod/settings/device/utils/NodePreferenceActivity.java b/configpanel/src/com/cyanogenmod/settings/device/utils/NodePreferenceActivity.java
new file mode 100644
index 0000000..739eca6
--- /dev/null
+++ b/configpanel/src/com/cyanogenmod/settings/device/utils/NodePreferenceActivity.java
@@ -0,0 +1,107 @@
+/*
+ * 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.cyanogenmod.settings.device.utils;
+
+import android.os.Bundle;
+import android.preference.Preference;
+import android.preference.Preference.OnPreferenceChangeListener;
+import android.preference.PreferenceActivity;
+import android.preference.ListPreference;
+import android.preference.SwitchPreference;
+import android.text.TextUtils;
+import android.view.MenuItem;
+
+import java.io.File;
+
+import org.cyanogenmod.internal.util.FileUtils;
+import org.cyanogenmod.internal.util.ScreenType;
+
+public class NodePreferenceActivity extends PreferenceActivity
+ implements OnPreferenceChangeListener {
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ getActionBar().setDisplayHomeAsUpEnabled(true);
+ }
+
+ @Override
+ protected void onResume() {
+ super.onResume();
+
+ // If running on a phone, remove padding around the listview
+ if (!ScreenType.isTablet(this)) {
+ getListView().setPadding(0, 0, 0, 0);
+ }
+ }
+
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ String node = Constants.sBooleanNodePreferenceMap.get(preference.getKey());
+ if (!TextUtils.isEmpty(node)) {
+ Boolean value = (Boolean) newValue;
+ FileUtils.writeLine(node, value ? "1" : "0");
+ return true;
+ }
+ node = Constants.sStringNodePreferenceMap.get(preference.getKey());
+ if (!TextUtils.isEmpty(node)) {
+ FileUtils.writeLine(node, (String) newValue);
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public void addPreferencesFromResource(int preferencesResId) {
+ super.addPreferencesFromResource(preferencesResId);
+ // Initialize node preferences
+ for (String pref : Constants.sBooleanNodePreferenceMap.keySet()) {
+ SwitchPreference b = (SwitchPreference) findPreference(pref);
+ if (b == null) continue;
+ b.setOnPreferenceChangeListener(this);
+ String node = Constants.sBooleanNodePreferenceMap.get(pref);
+ if (new File(node).exists()) {
+ String curNodeValue = FileUtils.readOneLine(node);
+ b.setChecked(curNodeValue.equals("1"));
+ } else {
+ b.setEnabled(false);
+ }
+ }
+ for (String pref : Constants.sStringNodePreferenceMap.keySet()) {
+ ListPreference l = (ListPreference) findPreference(pref);
+ if (l == null) continue;
+ l.setOnPreferenceChangeListener(this);
+ String node = Constants.sStringNodePreferenceMap.get(pref);
+ if (new File(node).exists()) {
+ l.setValue(FileUtils.readOneLine(node));
+ } else {
+ l.setEnabled(false);
+ }
+ }
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ switch (item.getItemId()) {
+ // Respond to the action bar's Up/Home button
+ case android.R.id.home:
+ finish();
+ return true;
+ }
+ return super.onOptionsItemSelected(item);
+ }
+}
diff --git a/device.mk b/device.mk
index 6c651f7..8427d33 100644
--- a/device.mk
+++ b/device.mk
@@ -135,6 +135,10 @@ PRODUCT_PACKAGES += \
PRODUCT_PACKAGES += \
libcnefeatureconfig
+# ConfigPanel
+PRODUCT_PACKAGES += \
+ ConfigPanel \
+
# Display
PRODUCT_PACKAGES += \
copybit.msm8996 \
--
2.7.4
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment