CellBroadcastHandler.java revision d2feaf918ab0c1173d4ada182532e48d0c0d3f77
10d4bcdf379842af4b6304809156971e926f374f0Jake Hamby/*
20d4bcdf379842af4b6304809156971e926f374f0Jake Hamby * Copyright (C) 2013 The Android Open Source Project
30d4bcdf379842af4b6304809156971e926f374f0Jake Hamby *
40d4bcdf379842af4b6304809156971e926f374f0Jake Hamby * Licensed under the Apache License, Version 2.0 (the "License");
50d4bcdf379842af4b6304809156971e926f374f0Jake Hamby * you may not use this file except in compliance with the License.
60d4bcdf379842af4b6304809156971e926f374f0Jake Hamby * You may obtain a copy of the License at
70d4bcdf379842af4b6304809156971e926f374f0Jake Hamby *
80d4bcdf379842af4b6304809156971e926f374f0Jake Hamby *      http://www.apache.org/licenses/LICENSE-2.0
90d4bcdf379842af4b6304809156971e926f374f0Jake Hamby *
100d4bcdf379842af4b6304809156971e926f374f0Jake Hamby * Unless required by applicable law or agreed to in writing, software
110d4bcdf379842af4b6304809156971e926f374f0Jake Hamby * distributed under the License is distributed on an "AS IS" BASIS,
120d4bcdf379842af4b6304809156971e926f374f0Jake Hamby * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
130d4bcdf379842af4b6304809156971e926f374f0Jake Hamby * See the License for the specific language governing permissions and
140d4bcdf379842af4b6304809156971e926f374f0Jake Hamby * limitations under the License.
150d4bcdf379842af4b6304809156971e926f374f0Jake Hamby */
160d4bcdf379842af4b6304809156971e926f374f0Jake Hamby
170d4bcdf379842af4b6304809156971e926f374f0Jake Hambypackage com.android.internal.telephony;
180d4bcdf379842af4b6304809156971e926f374f0Jake Hamby
190d4bcdf379842af4b6304809156971e926f374f0Jake Hambyimport android.Manifest;
200d4bcdf379842af4b6304809156971e926f374f0Jake Hambyimport android.app.Activity;
210d4bcdf379842af4b6304809156971e926f374f0Jake Hambyimport android.app.AppOpsManager;
220d4bcdf379842af4b6304809156971e926f374f0Jake Hambyimport android.content.Context;
230d4bcdf379842af4b6304809156971e926f374f0Jake Hambyimport android.content.Intent;
240d4bcdf379842af4b6304809156971e926f374f0Jake Hambyimport android.os.Message;
250d4bcdf379842af4b6304809156971e926f374f0Jake Hambyimport android.provider.Telephony;
260d4bcdf379842af4b6304809156971e926f374f0Jake Hambyimport android.telephony.SmsCbMessage;
270d4bcdf379842af4b6304809156971e926f374f0Jake Hamby
280d4bcdf379842af4b6304809156971e926f374f0Jake Hamby/**
290d4bcdf379842af4b6304809156971e926f374f0Jake Hamby * Dispatch new Cell Broadcasts to receivers. Acquires a private wakelock until the broadcast
300d4bcdf379842af4b6304809156971e926f374f0Jake Hamby * completes and our result receiver is called.
310d4bcdf379842af4b6304809156971e926f374f0Jake Hamby */
320d4bcdf379842af4b6304809156971e926f374f0Jake Hambypublic class CellBroadcastHandler extends WakeLockStateMachine {
330d4bcdf379842af4b6304809156971e926f374f0Jake Hamby
340d4bcdf379842af4b6304809156971e926f374f0Jake Hamby    private CellBroadcastHandler(Context context) {
35d2feaf918ab0c1173d4ada182532e48d0c0d3f77Wink Saville        this("CellBroadcastHandler", context, null);
360d4bcdf379842af4b6304809156971e926f374f0Jake Hamby    }
370d4bcdf379842af4b6304809156971e926f374f0Jake Hamby
38d2feaf918ab0c1173d4ada182532e48d0c0d3f77Wink Saville    protected CellBroadcastHandler(String debugTag, Context context, PhoneBase phone) {
39d2feaf918ab0c1173d4ada182532e48d0c0d3f77Wink Saville        super(debugTag, context, phone);
400d4bcdf379842af4b6304809156971e926f374f0Jake Hamby    }
410d4bcdf379842af4b6304809156971e926f374f0Jake Hamby
420d4bcdf379842af4b6304809156971e926f374f0Jake Hamby    /**
430d4bcdf379842af4b6304809156971e926f374f0Jake Hamby     * Create a new CellBroadcastHandler.
440d4bcdf379842af4b6304809156971e926f374f0Jake Hamby     * @param context the context to use for dispatching Intents
450d4bcdf379842af4b6304809156971e926f374f0Jake Hamby     * @return the new handler
460d4bcdf379842af4b6304809156971e926f374f0Jake Hamby     */
470d4bcdf379842af4b6304809156971e926f374f0Jake Hamby    public static CellBroadcastHandler makeCellBroadcastHandler(Context context) {
480d4bcdf379842af4b6304809156971e926f374f0Jake Hamby        CellBroadcastHandler handler = new CellBroadcastHandler(context);
490d4bcdf379842af4b6304809156971e926f374f0Jake Hamby        handler.start();
500d4bcdf379842af4b6304809156971e926f374f0Jake Hamby        return handler;
510d4bcdf379842af4b6304809156971e926f374f0Jake Hamby    }
520d4bcdf379842af4b6304809156971e926f374f0Jake Hamby
530d4bcdf379842af4b6304809156971e926f374f0Jake Hamby    /**
540d4bcdf379842af4b6304809156971e926f374f0Jake Hamby     * Handle Cell Broadcast messages from {@code CdmaInboundSmsHandler}.
550d4bcdf379842af4b6304809156971e926f374f0Jake Hamby     * 3GPP-format Cell Broadcast messages sent from radio are handled in the subclass.
560d4bcdf379842af4b6304809156971e926f374f0Jake Hamby     *
570d4bcdf379842af4b6304809156971e926f374f0Jake Hamby     * @param message the message to process
580d4bcdf379842af4b6304809156971e926f374f0Jake Hamby     * @return true if an ordered broadcast was sent; false on failure
590d4bcdf379842af4b6304809156971e926f374f0Jake Hamby     */
600d4bcdf379842af4b6304809156971e926f374f0Jake Hamby    @Override
610d4bcdf379842af4b6304809156971e926f374f0Jake Hamby    protected boolean handleSmsMessage(Message message) {
620d4bcdf379842af4b6304809156971e926f374f0Jake Hamby        if (message.obj instanceof SmsCbMessage) {
630d4bcdf379842af4b6304809156971e926f374f0Jake Hamby            handleBroadcastSms((SmsCbMessage) message.obj);
640d4bcdf379842af4b6304809156971e926f374f0Jake Hamby            return true;
650d4bcdf379842af4b6304809156971e926f374f0Jake Hamby        } else {
660d4bcdf379842af4b6304809156971e926f374f0Jake Hamby            loge("handleMessage got object of type: " + message.obj.getClass().getName());
670d4bcdf379842af4b6304809156971e926f374f0Jake Hamby            return false;
680d4bcdf379842af4b6304809156971e926f374f0Jake Hamby        }
690d4bcdf379842af4b6304809156971e926f374f0Jake Hamby    }
700d4bcdf379842af4b6304809156971e926f374f0Jake Hamby
710d4bcdf379842af4b6304809156971e926f374f0Jake Hamby    /**
720d4bcdf379842af4b6304809156971e926f374f0Jake Hamby     * Dispatch a Cell Broadcast message to listeners.
730d4bcdf379842af4b6304809156971e926f374f0Jake Hamby     * @param message the Cell Broadcast to broadcast
740d4bcdf379842af4b6304809156971e926f374f0Jake Hamby     */
750d4bcdf379842af4b6304809156971e926f374f0Jake Hamby    protected void handleBroadcastSms(SmsCbMessage message) {
760d4bcdf379842af4b6304809156971e926f374f0Jake Hamby        String receiverPermission;
770d4bcdf379842af4b6304809156971e926f374f0Jake Hamby        int appOp;
780d4bcdf379842af4b6304809156971e926f374f0Jake Hamby        Intent intent;
790d4bcdf379842af4b6304809156971e926f374f0Jake Hamby        if (message.isEmergencyMessage()) {
800d4bcdf379842af4b6304809156971e926f374f0Jake Hamby            log("Dispatching emergency SMS CB");
810d4bcdf379842af4b6304809156971e926f374f0Jake Hamby            intent = new Intent(Telephony.Sms.Intents.SMS_EMERGENCY_CB_RECEIVED_ACTION);
820d4bcdf379842af4b6304809156971e926f374f0Jake Hamby            receiverPermission = Manifest.permission.RECEIVE_EMERGENCY_BROADCAST;
830d4bcdf379842af4b6304809156971e926f374f0Jake Hamby            appOp = AppOpsManager.OP_RECEIVE_EMERGECY_SMS;
840d4bcdf379842af4b6304809156971e926f374f0Jake Hamby        } else {
850d4bcdf379842af4b6304809156971e926f374f0Jake Hamby            log("Dispatching SMS CB");
860d4bcdf379842af4b6304809156971e926f374f0Jake Hamby            intent = new Intent(Telephony.Sms.Intents.SMS_CB_RECEIVED_ACTION);
870d4bcdf379842af4b6304809156971e926f374f0Jake Hamby            receiverPermission = Manifest.permission.RECEIVE_SMS;
880d4bcdf379842af4b6304809156971e926f374f0Jake Hamby            appOp = AppOpsManager.OP_RECEIVE_SMS;
890d4bcdf379842af4b6304809156971e926f374f0Jake Hamby        }
900d4bcdf379842af4b6304809156971e926f374f0Jake Hamby        intent.putExtra("message", message);
910d4bcdf379842af4b6304809156971e926f374f0Jake Hamby        mContext.sendOrderedBroadcast(intent, receiverPermission, appOp, mReceiver,
920d4bcdf379842af4b6304809156971e926f374f0Jake Hamby                getHandler(), Activity.RESULT_OK, null, null);
930d4bcdf379842af4b6304809156971e926f374f0Jake Hamby    }
940d4bcdf379842af4b6304809156971e926f374f0Jake Hamby}
95