150a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby/*
250a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby * Copyright (C) 2011 The Android Open Source Project
350a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby *
450a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby * Licensed under the Apache License, Version 2.0 (the "License");
550a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby * you may not use this file except in compliance with the License.
650a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby * You may obtain a copy of the License at
750a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby *
850a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby *      http://www.apache.org/licenses/LICENSE-2.0
950a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby *
1050a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby * Unless required by applicable law or agreed to in writing, software
1150a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby * distributed under the License is distributed on an "AS IS" BASIS,
1250a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1350a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby * See the License for the specific language governing permissions and
1450a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby * limitations under the License.
1550a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby */
1650a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby
1750a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hambypackage com.android.cellbroadcastreceiver;
1850a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby
1900b87064abfb9d254fbbf72110643d2e626365e6Jake Hambyimport android.content.BroadcastReceiver;
2050a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hambyimport android.content.Context;
2150a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hambyimport android.content.Intent;
2200b87064abfb9d254fbbf72110643d2e626365e6Jake Hambyimport android.content.IntentFilter;
2350a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hambyimport android.os.Bundle;
2447ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hambyimport android.telephony.CellBroadcastMessage;
2550a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby
2650a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby/**
2750a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby * Custom alert dialog with optional flashing warning icon.
2850a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby * Alert audio and text-to-speech handled by {@link CellBroadcastAlertAudio}.
2900b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby * Keyguard handling based on {@code AlarmAlert} class from DeskClock app.
3050a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby */
3100b87064abfb9d254fbbf72110643d2e626365e6Jake Hambypublic class CellBroadcastAlertDialog extends CellBroadcastAlertFullScreen {
3250a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby
3300b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby    private BroadcastReceiver mScreenOffReceiver;
3450a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby
3500b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby    private class ScreenOffReceiver extends BroadcastReceiver {
3650a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby        @Override
3700b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby        public void onReceive(Context context, Intent intent) {
3800b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby            handleScreenOff();
3950a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby        }
4050a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby    }
4150a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby
4250a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby    @Override
4300b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby    protected void onCreate(Bundle icicle) {
4400b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby        super.onCreate(icicle);
4500b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby
4600b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby        // Listen for the screen turning off so that when the screen comes back
4700b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby        // on, the user does not need to unlock the phone to dismiss the alert.
4857273ebfa13f96bf5aba9902b70e2b179fec9e4cJake Hamby        if (CellBroadcastConfigService.isEmergencyAlertMessage(getLatestMessage())) {
4900b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby            mScreenOffReceiver = new ScreenOffReceiver();
5000b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby            registerReceiver(mScreenOffReceiver,
5100b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby                    new IntentFilter(Intent.ACTION_SCREEN_OFF));
5250a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby        }
5350a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby    }
5450a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby
5550a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby    @Override
5600b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby    public void onDestroy() {
5700b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby        super.onDestroy();
5800b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby        if (mScreenOffReceiver != null) {
5900b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby            unregisterReceiver(mScreenOffReceiver);
6050a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby        }
6150a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby    }
6250a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby
6350a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby    @Override
6400b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby    public void onBackPressed() {
6500b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby        // stop animating warning icon, stop playing alert sound, mark broadcast as read
6600b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby        dismiss();
6750a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby    }
6850a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby
6950a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby    @Override
7000b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby    protected int getLayoutResId() {
7100b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby        return R.layout.cell_broadcast_alert;
7200b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby    }
7300b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby
7400b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby    private void handleScreenOff() {
7500b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby        // Launch the full screen activity but do not turn the screen on.
7600b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby        Intent i = new Intent(this, CellBroadcastAlertFullScreen.class);
7757273ebfa13f96bf5aba9902b70e2b179fec9e4cJake Hamby        i.putParcelableArrayListExtra(CellBroadcastMessage.SMS_CB_MESSAGE_EXTRA, mMessageList);
7857273ebfa13f96bf5aba9902b70e2b179fec9e4cJake Hamby        i.putExtra(SCREEN_OFF_EXTRA, true);
7900b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby        startActivity(i);
8000b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby        finish();
8150a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby    }
8250a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby}
83