summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPawit Pornkitprasan <p.pawit@gmail.com>2011-10-30 15:24:19 +0700
committerPawit Pornkitprasan <p.pawit@gmail.com>2011-10-30 16:13:09 +0700
commitea3595d67907fedd28dd988166c4e5b789866eed (patch)
treeedf0cf2684ac09952e2d20d912cfad673be1f21f
parent7a108b6a8a98b51638e2edae9d028a6478a68008 (diff)
downloadandroid_packages_apps_SamsungServiceMode-ea3595d67907fedd28dd988166c4e5b789866eed.tar.gz
android_packages_apps_SamsungServiceMode-ea3595d67907fedd28dd988166c4e5b789866eed.tar.bz2
android_packages_apps_SamsungServiceMode-ea3595d67907fedd28dd988166c4e5b789866eed.zip
SamsungServiceMode: Add ExecuteReceiver broadcast receiver
This allows other system applications to send commands to service mode programmatically. This will be used for AriesParts' HSPA setting. Patch set 2: White spaces Change-Id: I76632c874b872f0d3f9a1013b7dd548af4b91341
-rw-r--r--AndroidManifest.xml7
-rw-r--r--src/com/cyanogenmod/samsungservicemode/ExecuteReceiver.java52
2 files changed, 59 insertions, 0 deletions
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index f46af4d..3270b0e 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -114,5 +114,12 @@
<data android:scheme="android_secret_code" android:host="2222" />
</intent-filter>
</receiver>
+ <receiver android:name=".ExecuteReceiver"
+ android:process="com.android.phone"
+ android:permission="android.permission.WRITE_SECURE_SETTINGS">
+ <intent-filter>
+ <action android:name="com.cyanogenmod.SamsungServiceMode.EXECUTE" />
+ </intent-filter>
+ </receiver>
</application>
</manifest> \ No newline at end of file
diff --git a/src/com/cyanogenmod/samsungservicemode/ExecuteReceiver.java b/src/com/cyanogenmod/samsungservicemode/ExecuteReceiver.java
new file mode 100644
index 0000000..246bdc7
--- /dev/null
+++ b/src/com/cyanogenmod/samsungservicemode/ExecuteReceiver.java
@@ -0,0 +1,52 @@
+package com.cyanogenmod.samsungservicemode;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Handler;
+import android.util.Log;
+
+import com.android.internal.telephony.Phone;
+import com.android.internal.telephony.PhoneFactory;
+
+public class ExecuteReceiver extends BroadcastReceiver {
+
+ private static final String TAG = "ExecuteReceiver";
+
+ public static final String KEY_MODE_TYPE = "mode_type";
+ public static final String KEY_SUB_TYPE = "sub_type";
+ public static final String KEY_DATA = "data";
+
+ private Phone mPhone;
+ private Handler mHandler = new Handler();
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ // Read intent data
+ int modeType = intent.getIntExtra(KEY_MODE_TYPE, OemCommands.OEM_SM_TYPE_TEST_MANUAL);
+ int subType = intent.getIntExtra(KEY_SUB_TYPE, OemCommands.OEM_SM_TYPE_SUB_ENTER);
+ String data = intent.getStringExtra(KEY_DATA);
+
+ if (data == null) {
+ Log.e(TAG, "Intent extra 'data' must not be null.");
+ return;
+ }
+
+ // Initialize
+ mPhone = PhoneFactory.getDefaultPhone();
+
+ // Send requests
+ sendRequest(OemCommands.getEnterServiceModeData(modeType, subType, OemCommands.OEM_SM_ACTION));
+
+ for (char chr : data.toCharArray()) {
+ sendRequest(OemCommands.getPressKeyData(chr, OemCommands.OEM_SM_ACTION));
+ }
+
+ sendRequest(OemCommands.getEndServiceModeData(modeType));
+ }
+
+ private void sendRequest(byte[] data) {
+ mPhone.invokeOemRilRequestRaw(data, mHandler.obtainMessage());
+ }
+
+}