summaryrefslogtreecommitdiffstats
path: root/src/com/cyanogenmod/samsungservicemode/ExecuteReceiver.java
blob: f9b16ec048f7c9a9bf2ba248d3180f5872a367fd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
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 OemCommands mOemCommands;
    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();
        mOemCommands = OemCommands.getInstance(context);

        // Send requests
        sendRequest(mOemCommands.getEnterServiceModeData(modeType, subType, OemCommands.OEM_SM_ACTION));

        for (char chr : data.toCharArray()) {
            sendRequest(mOemCommands.getPressKeyData(chr, OemCommands.OEM_SM_ACTION));
        }

        sendRequest(mOemCommands.getEndServiceModeData(modeType));
    }

    private void sendRequest(byte[] data) {
        mPhone.invokeOemRilRequestRaw(data, mHandler.obtainMessage());
    }

}