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