From 4c46c66bdd73a583865c138184600299a879a7a0 Mon Sep 17 00:00:00 2001
From: dhacker29 <dhackerdvm@gmail.com>
Date: Sun, 31 May 2015 06:44:41 -0400
Subject: [PATCH] IMSEnabler: Application to toggle the Enhanced 4G LTE Mode setting

Somewhere in the changes made by caf to IMS the AOSP ims.apk is not
reading that Enhanced 4G LTE Mode is enabled at boot, or possibly its
a race condition.  IMS works fine if it is toggled off and back on
after network data is established. So we set up a reciever for network
change events and do the toggle when mobile data is activated.

Change-Id: Ia12e66d69c2d0d41e6b00943c706060e5c8b9a37
---

diff --git a/IMSEnabler/Android.mk b/IMSEnabler/Android.mk
new file mode 100644
index 0000000..f536aea
--- /dev/null
+++ b/IMSEnabler/Android.mk
@@ -0,0 +1,16 @@
+LOCAL_PATH:= $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_TAGS := optional
+
+LOCAL_JAVA_LIBRARIES := ims-common
+
+LOCAL_SRC_FILES := $(call all-java-files-under, src)
+
+LOCAL_PACKAGE_NAME := IMSEnabler
+
+LOCAL_CERTIFICATE := platform
+LOCAL_PRIVILEGED_MODULE := true
+
+include $(BUILD_PACKAGE)
diff --git a/IMSEnabler/AndroidManifest.xml b/IMSEnabler/AndroidManifest.xml
new file mode 100644
index 0000000..b74b39d
--- /dev/null
+++ b/IMSEnabler/AndroidManifest.xml
@@ -0,0 +1,27 @@
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="org.cyanogenmod.imsenabler"
+    android:versionCode="1"
+    android:versionName="1.0" >
+
+    <uses-sdk
+        android:minSdkVersion="21"
+        android:targetSdkVersion="22" />
+
+    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
+    <uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
+    <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />
+    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
+
+    <application
+        android:icon="@drawable/ic_launcher"
+        android:label="@string/app_name">
+        <receiver
+            android:name="org.cyanogenmod.imsenabler.NetworkChangeReceiver"
+            android:label="NetworkChangeReceiver" >
+            <intent-filter>
+                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
+            </intent-filter>
+        </receiver>
+    </application>
+
+</manifest>
diff --git a/IMSEnabler/res/drawable/ic_launcher.png b/IMSEnabler/res/drawable/ic_launcher.png
new file mode 100644
index 0000000..71c6d76
--- /dev/null
+++ b/IMSEnabler/res/drawable/ic_launcher.png
Binary files differ
diff --git a/IMSEnabler/res/values/strings.xml b/IMSEnabler/res/values/strings.xml
new file mode 100644
index 0000000..b9eb8c5
--- /dev/null
+++ b/IMSEnabler/res/values/strings.xml
@@ -0,0 +1,19 @@
+<?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.
+ -->
+
+<resources>
+    <string name="app_name">IMS Enabler</string>
+</resources>
diff --git a/IMSEnabler/src/org/cyanogenmod/imsenabler/NetworkChangeReceiver.java b/IMSEnabler/src/org/cyanogenmod/imsenabler/NetworkChangeReceiver.java
new file mode 100644
index 0000000..f009d8d
--- /dev/null
+++ b/IMSEnabler/src/org/cyanogenmod/imsenabler/NetworkChangeReceiver.java
@@ -0,0 +1,35 @@
+/*
+ * 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.
+ */
+
+package org.cyanogenmod.imsenabler;
+
+import com.android.ims.ImsManager;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+
+public class NetworkChangeReceiver extends BroadcastReceiver {
+
+    @Override
+    public void onReceive(final Context context, final Intent intent) {
+        int conn = NetworkUtil.getConnectivityStatus(context);
+        if (conn == NetworkUtil.TYPE_MOBILE) {
+            ImsManager.setEnhanced4gLteModeSetting(context, false);
+            ImsManager.setEnhanced4gLteModeSetting(context, true);
+        }
+    }
+}
diff --git a/IMSEnabler/src/org/cyanogenmod/imsenabler/NetworkUtil.java b/IMSEnabler/src/org/cyanogenmod/imsenabler/NetworkUtil.java
new file mode 100644
index 0000000..f441d58
--- /dev/null
+++ b/IMSEnabler/src/org/cyanogenmod/imsenabler/NetworkUtil.java
@@ -0,0 +1,39 @@
+/*
+ * 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.
+ */
+
+package org.cyanogenmod.imsenabler;
+
+import android.content.Context;
+import android.net.ConnectivityManager;
+import android.net.NetworkInfo;
+
+public class NetworkUtil {
+
+    public static int TYPE_MOBILE = 1;
+    public static int TYPE_NOT_CONNECTED = 0;
+
+    public static int getConnectivityStatus(Context context) {
+        ConnectivityManager cm = (ConnectivityManager) context
+                .getSystemService(Context.CONNECTIVITY_SERVICE);
+
+        NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
+        if (null != activeNetwork) {
+            if(activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE)
+                return TYPE_MOBILE;
+        }
+        return TYPE_NOT_CONNECTED;
+    }
+}
diff --git a/device.mk b/device.mk
index 4baecdf..bb41291 100644
--- a/device.mk
+++ b/device.mk
@@ -121,6 +121,10 @@
 PRODUCT_PROPERTY_OVERRIDES += \
     ro.sf.lcd_density=560
 
+# Include IMSEnabler
+PRODUCT_PACKAGES += \
+    IMSEnabler
+
 # Rich Communications Service is disabled in 5.1
 PRODUCT_PROPERTY_OVERRIDES += \
     persist.rcs.supported=0
