1a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu/* 2a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu * Copyright (C) 2016 The Android Open Source Project 3a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu * 4a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu * Licensed under the Apache License, Version 2.0 (the "License"); 5a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu * you may not use this file except in compliance with the License. 6a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu * You may obtain a copy of the License at 7a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu * 8a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu * http://www.apache.org/licenses/LICENSE-2.0 9a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu * 10a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu * Unless required by applicable law or agreed to in writing, software 11a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu * distributed under the License is distributed on an "AS IS" BASIS, 12a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu * See the License for the specific language governing permissions and 14a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu * limitations under the License. 15a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu */ 16a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxupackage com.android.carrierdefaultapp; 17a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu 18a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxuimport android.app.Notification; 19009848b03ed049bd9f6f6e8a9fb4e7da414727a0fionaxuimport android.app.NotificationChannel; 20a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxuimport android.app.NotificationManager; 21a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxuimport android.app.PendingIntent; 22d60a9d0e586e95be2f2730a940afdf1ed436c612fionaxuimport android.content.ComponentName; 23a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxuimport android.content.Context; 24a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxuimport android.content.Intent; 25d60a9d0e586e95be2f2730a940afdf1ed436c612fionaxuimport android.content.pm.PackageManager; 26a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxuimport android.content.res.Resources; 275b834a82082c1e7c938d81ade2f28a08d59195a6fionaxuimport android.os.Bundle; 28a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxuimport android.telephony.SubscriptionManager; 29a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxuimport android.telephony.TelephonyManager; 307569cc2e0644c562587a7dd486789a3fe488adb0fionaxuimport android.text.TextUtils; 31a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxuimport android.util.Log; 32a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxuimport com.android.internal.telephony.PhoneConstants; 33a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxuimport com.android.carrierdefaultapp.R; 34a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu/** 35a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu * This util class provides common logic for carrier actions 36a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu */ 37a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxupublic class CarrierActionUtils { 38a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu private static final String TAG = CarrierActionUtils.class.getSimpleName(); 39a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu 40a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu private static final String PORTAL_NOTIFICATION_TAG = "CarrierDefault.Portal.Notification"; 41a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu private static final String NO_DATA_NOTIFICATION_TAG = "CarrierDefault.NoData.Notification"; 42009848b03ed049bd9f6f6e8a9fb4e7da414727a0fionaxu private static final String NOTIFICATION_CHANNEL_ID_MOBILE_DATA_STATUS = "mobile_data_status"; 43a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu private static final int PORTAL_NOTIFICATION_ID = 0; 44a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu private static final int NO_DATA_NOTIFICATION_ID = 1; 45a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu private static boolean ENABLE = true; 46a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu 47a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu // A list of supported carrier action idx 48a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu public static final int CARRIER_ACTION_ENABLE_METERED_APNS = 0; 49a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu public static final int CARRIER_ACTION_DISABLE_METERED_APNS = 1; 50a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu public static final int CARRIER_ACTION_DISABLE_RADIO = 2; 51a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu public static final int CARRIER_ACTION_ENABLE_RADIO = 3; 52a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu public static final int CARRIER_ACTION_SHOW_PORTAL_NOTIFICATION = 4; 53a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu public static final int CARRIER_ACTION_SHOW_NO_DATA_SERVICE_NOTIFICATION = 5; 54a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu public static final int CARRIER_ACTION_CANCEL_ALL_NOTIFICATIONS = 6; 55d60a9d0e586e95be2f2730a940afdf1ed436c612fionaxu public static final int CARRIER_ACTION_ENABLE_DEFAULT_URL_HANDLER = 7; 56d60a9d0e586e95be2f2730a940afdf1ed436c612fionaxu public static final int CARRIER_ACTION_DISABLE_DEFAULT_URL_HANDLER = 8; 57d60a9d0e586e95be2f2730a940afdf1ed436c612fionaxu public static final int CARRIER_ACTION_REGISTER_DEFAULT_NETWORK_AVAIL = 9; 58d60a9d0e586e95be2f2730a940afdf1ed436c612fionaxu public static final int CARRIER_ACTION_DEREGISTER_DEFAULT_NETWORK_AVAIL = 10; 59a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu 60a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu public static void applyCarrierAction(int actionIdx, Intent intent, Context context) { 61a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu switch (actionIdx) { 62a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu case CARRIER_ACTION_ENABLE_METERED_APNS: 63a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu onEnableAllMeteredApns(intent, context); 64a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu break; 65a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu case CARRIER_ACTION_DISABLE_METERED_APNS: 66a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu onDisableAllMeteredApns(intent, context); 67a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu break; 68a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu case CARRIER_ACTION_DISABLE_RADIO: 69a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu onDisableRadio(intent, context); 70a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu break; 71a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu case CARRIER_ACTION_ENABLE_RADIO: 72a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu onEnableRadio(intent, context); 73a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu break; 74a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu case CARRIER_ACTION_SHOW_PORTAL_NOTIFICATION: 75a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu onShowCaptivePortalNotification(intent, context); 76a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu break; 77a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu case CARRIER_ACTION_SHOW_NO_DATA_SERVICE_NOTIFICATION: 78a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu onShowNoDataServiceNotification(context); 79a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu break; 80a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu case CARRIER_ACTION_CANCEL_ALL_NOTIFICATIONS: 81a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu onCancelAllNotifications(context); 82a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu break; 83d60a9d0e586e95be2f2730a940afdf1ed436c612fionaxu case CARRIER_ACTION_ENABLE_DEFAULT_URL_HANDLER: 84d60a9d0e586e95be2f2730a940afdf1ed436c612fionaxu onEnableDefaultURLHandler(context); 85d60a9d0e586e95be2f2730a940afdf1ed436c612fionaxu break; 86d60a9d0e586e95be2f2730a940afdf1ed436c612fionaxu case CARRIER_ACTION_DISABLE_DEFAULT_URL_HANDLER: 87d60a9d0e586e95be2f2730a940afdf1ed436c612fionaxu onDisableDefaultURLHandler(context); 88d60a9d0e586e95be2f2730a940afdf1ed436c612fionaxu break; 89d60a9d0e586e95be2f2730a940afdf1ed436c612fionaxu case CARRIER_ACTION_REGISTER_DEFAULT_NETWORK_AVAIL: 90d60a9d0e586e95be2f2730a940afdf1ed436c612fionaxu onRegisterDefaultNetworkAvail(intent, context); 91d60a9d0e586e95be2f2730a940afdf1ed436c612fionaxu break; 92d60a9d0e586e95be2f2730a940afdf1ed436c612fionaxu case CARRIER_ACTION_DEREGISTER_DEFAULT_NETWORK_AVAIL: 93d60a9d0e586e95be2f2730a940afdf1ed436c612fionaxu onDeregisterDefaultNetworkAvail(intent, context); 94d60a9d0e586e95be2f2730a940afdf1ed436c612fionaxu break; 95a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu default: 96a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu loge("unsupported carrier action index: " + actionIdx); 97a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu } 98a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu } 99a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu 100a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu private static void onDisableAllMeteredApns(Intent intent, Context context) { 101a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu int subId = intent.getIntExtra(PhoneConstants.SUBSCRIPTION_KEY, 102a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu SubscriptionManager.getDefaultVoiceSubscriptionId()); 103a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu logd("onDisableAllMeteredApns subId: " + subId); 104a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu final TelephonyManager telephonyMgr = context.getSystemService(TelephonyManager.class); 105a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu telephonyMgr.carrierActionSetMeteredApnsEnabled(subId, !ENABLE); 106a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu } 107a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu 108a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu private static void onEnableAllMeteredApns(Intent intent, Context context) { 109a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu int subId = intent.getIntExtra(PhoneConstants.SUBSCRIPTION_KEY, 110a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu SubscriptionManager.getDefaultVoiceSubscriptionId()); 111a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu logd("onEnableAllMeteredApns subId: " + subId); 112a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu final TelephonyManager telephonyMgr = context.getSystemService(TelephonyManager.class); 113a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu telephonyMgr.carrierActionSetMeteredApnsEnabled(subId, ENABLE); 114a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu } 115a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu 116d60a9d0e586e95be2f2730a940afdf1ed436c612fionaxu private static void onEnableDefaultURLHandler(Context context) { 117d60a9d0e586e95be2f2730a940afdf1ed436c612fionaxu logd("onEnableDefaultURLHandler"); 118d60a9d0e586e95be2f2730a940afdf1ed436c612fionaxu final PackageManager pm = context.getPackageManager(); 119d60a9d0e586e95be2f2730a940afdf1ed436c612fionaxu pm.setComponentEnabledSetting( 120d60a9d0e586e95be2f2730a940afdf1ed436c612fionaxu new ComponentName(context, CaptivePortalLoginActivity.getAlias(context)), 121d60a9d0e586e95be2f2730a940afdf1ed436c612fionaxu PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP); 122d60a9d0e586e95be2f2730a940afdf1ed436c612fionaxu } 123d60a9d0e586e95be2f2730a940afdf1ed436c612fionaxu 124d60a9d0e586e95be2f2730a940afdf1ed436c612fionaxu private static void onDisableDefaultURLHandler(Context context) { 125d60a9d0e586e95be2f2730a940afdf1ed436c612fionaxu logd("onDisableDefaultURLHandler"); 126d60a9d0e586e95be2f2730a940afdf1ed436c612fionaxu final PackageManager pm = context.getPackageManager(); 127d60a9d0e586e95be2f2730a940afdf1ed436c612fionaxu pm.setComponentEnabledSetting( 128d60a9d0e586e95be2f2730a940afdf1ed436c612fionaxu new ComponentName(context, CaptivePortalLoginActivity.getAlias(context)), 129d60a9d0e586e95be2f2730a940afdf1ed436c612fionaxu PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP); 130d60a9d0e586e95be2f2730a940afdf1ed436c612fionaxu } 131d60a9d0e586e95be2f2730a940afdf1ed436c612fionaxu 132d60a9d0e586e95be2f2730a940afdf1ed436c612fionaxu private static void onRegisterDefaultNetworkAvail(Intent intent, Context context) { 133d60a9d0e586e95be2f2730a940afdf1ed436c612fionaxu int subId = intent.getIntExtra(PhoneConstants.SUBSCRIPTION_KEY, 134d60a9d0e586e95be2f2730a940afdf1ed436c612fionaxu SubscriptionManager.getDefaultVoiceSubscriptionId()); 135d60a9d0e586e95be2f2730a940afdf1ed436c612fionaxu logd("onRegisterDefaultNetworkAvail subId: " + subId); 136d60a9d0e586e95be2f2730a940afdf1ed436c612fionaxu final TelephonyManager telephonyMgr = context.getSystemService(TelephonyManager.class); 137d60a9d0e586e95be2f2730a940afdf1ed436c612fionaxu telephonyMgr.carrierActionReportDefaultNetworkStatus(subId, true); 138d60a9d0e586e95be2f2730a940afdf1ed436c612fionaxu } 139d60a9d0e586e95be2f2730a940afdf1ed436c612fionaxu 140d60a9d0e586e95be2f2730a940afdf1ed436c612fionaxu private static void onDeregisterDefaultNetworkAvail(Intent intent, Context context) { 141d60a9d0e586e95be2f2730a940afdf1ed436c612fionaxu int subId = intent.getIntExtra(PhoneConstants.SUBSCRIPTION_KEY, 142d60a9d0e586e95be2f2730a940afdf1ed436c612fionaxu SubscriptionManager.getDefaultVoiceSubscriptionId()); 143d60a9d0e586e95be2f2730a940afdf1ed436c612fionaxu logd("onDeregisterDefaultNetworkAvail subId: " + subId); 144d60a9d0e586e95be2f2730a940afdf1ed436c612fionaxu final TelephonyManager telephonyMgr = context.getSystemService(TelephonyManager.class); 145d60a9d0e586e95be2f2730a940afdf1ed436c612fionaxu telephonyMgr.carrierActionReportDefaultNetworkStatus(subId, false); 146d60a9d0e586e95be2f2730a940afdf1ed436c612fionaxu } 147d60a9d0e586e95be2f2730a940afdf1ed436c612fionaxu 148a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu private static void onDisableRadio(Intent intent, Context context) { 149a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu int subId = intent.getIntExtra(PhoneConstants.SUBSCRIPTION_KEY, 150a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu SubscriptionManager.getDefaultVoiceSubscriptionId()); 151a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu logd("onDisableRadio subId: " + subId); 152a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu final TelephonyManager telephonyMgr = context.getSystemService(TelephonyManager.class); 153a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu telephonyMgr.carrierActionSetRadioEnabled(subId, !ENABLE); 154a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu } 155a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu 156a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu private static void onEnableRadio(Intent intent, Context context) { 157a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu int subId = intent.getIntExtra(PhoneConstants.SUBSCRIPTION_KEY, 158a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu SubscriptionManager.getDefaultVoiceSubscriptionId()); 159a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu logd("onEnableRadio subId: " + subId); 160a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu final TelephonyManager telephonyMgr = context.getSystemService(TelephonyManager.class); 161a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu telephonyMgr.carrierActionSetRadioEnabled(subId, ENABLE); 162a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu } 163a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu 164a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu private static void onShowCaptivePortalNotification(Intent intent, Context context) { 165a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu logd("onShowCaptivePortalNotification"); 166da578042ae2560d2753bda5869adde7597a7ddf0fionaxu Intent portalIntent = new Intent(context, CaptivePortalLoginActivity.class); 167a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu portalIntent.putExtras(intent); 168da578042ae2560d2753bda5869adde7597a7ddf0fionaxu portalIntent.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT 169da578042ae2560d2753bda5869adde7597a7ddf0fionaxu | Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); 170a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, portalIntent, 171a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu PendingIntent.FLAG_UPDATE_CURRENT); 172a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu Notification notification = getNotification(context, R.string.portal_notification_id, 173a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu R.string.portal_notification_detail, pendingIntent); 174a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu try { 17592d759d56a3eedfbbda36da10d0fed44f57dc58ffionaxu context.getSystemService(NotificationManager.class) 17692d759d56a3eedfbbda36da10d0fed44f57dc58ffionaxu .notify(PORTAL_NOTIFICATION_TAG, PORTAL_NOTIFICATION_ID, notification); 177a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu } catch (NullPointerException npe) { 178a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu loge("setNotificationVisible: " + npe); 179a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu } 180a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu } 181a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu 182a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu private static void onShowNoDataServiceNotification(Context context) { 183a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu logd("onShowNoDataServiceNotification"); 184a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu Notification notification = getNotification(context, R.string.no_data_notification_id, 185a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu R.string.no_data_notification_detail, null); 186a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu try { 18792d759d56a3eedfbbda36da10d0fed44f57dc58ffionaxu context.getSystemService(NotificationManager.class) 18892d759d56a3eedfbbda36da10d0fed44f57dc58ffionaxu .notify(NO_DATA_NOTIFICATION_TAG, NO_DATA_NOTIFICATION_ID, notification); 189a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu } catch (NullPointerException npe) { 190a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu loge("setNotificationVisible: " + npe); 191a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu } 192a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu } 193a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu 194a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu private static void onCancelAllNotifications(Context context) { 195a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu logd("onCancelAllNotifications"); 19692d759d56a3eedfbbda36da10d0fed44f57dc58ffionaxu context.getSystemService(NotificationManager.class).cancelAll(); 197a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu } 198a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu 199a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu private static Notification getNotification(Context context, int titleId, int textId, 200a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu PendingIntent pendingIntent) { 2015b834a82082c1e7c938d81ade2f28a08d59195a6fionaxu final TelephonyManager telephonyMgr = context.getSystemService(TelephonyManager.class); 2025b834a82082c1e7c938d81ade2f28a08d59195a6fionaxu final Resources resources = context.getResources(); 2037569cc2e0644c562587a7dd486789a3fe488adb0fionaxu String spn = telephonyMgr.getSimOperatorName(); 2047569cc2e0644c562587a7dd486789a3fe488adb0fionaxu if (TextUtils.isEmpty(spn)) { 2057569cc2e0644c562587a7dd486789a3fe488adb0fionaxu // There is no consistent way to get the current carrier name as MNOs didn't 2067569cc2e0644c562587a7dd486789a3fe488adb0fionaxu // bother to set EF_SPN. in the long term, we should display a generic wording if 2077569cc2e0644c562587a7dd486789a3fe488adb0fionaxu // spn from subscription is not set. 2087569cc2e0644c562587a7dd486789a3fe488adb0fionaxu spn = telephonyMgr.getNetworkOperatorName(); 2097569cc2e0644c562587a7dd486789a3fe488adb0fionaxu } 2105b834a82082c1e7c938d81ade2f28a08d59195a6fionaxu final Bundle extras = Bundle.forPair(Notification.EXTRA_SUBSTITUTE_APP_NAME, 2115b834a82082c1e7c938d81ade2f28a08d59195a6fionaxu resources.getString(R.string.android_system_label)); 21292d759d56a3eedfbbda36da10d0fed44f57dc58ffionaxu createNotificationChannels(context); 213a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu Notification.Builder builder = new Notification.Builder(context) 214a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu .setContentTitle(resources.getString(titleId)) 2157569cc2e0644c562587a7dd486789a3fe488adb0fionaxu .setContentText(String.format(resources.getString(textId), spn)) 216a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu .setSmallIcon(R.drawable.ic_sim_card) 2175b834a82082c1e7c938d81ade2f28a08d59195a6fionaxu .setColor(context.getColor( 2185b834a82082c1e7c938d81ade2f28a08d59195a6fionaxu com.android.internal.R.color.system_notification_accent_color)) 219a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu .setOngoing(true) 220a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu .setPriority(Notification.PRIORITY_HIGH) 221a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu .setDefaults(Notification.DEFAULT_ALL) 222a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu .setVisibility(Notification.VISIBILITY_PUBLIC) 223a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu .setLocalOnly(true) 224a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu .setWhen(System.currentTimeMillis()) 2255b834a82082c1e7c938d81ade2f28a08d59195a6fionaxu .setShowWhen(false) 226009848b03ed049bd9f6f6e8a9fb4e7da414727a0fionaxu .setExtras(extras) 227009848b03ed049bd9f6f6e8a9fb4e7da414727a0fionaxu .setChannel(NOTIFICATION_CHANNEL_ID_MOBILE_DATA_STATUS); 228a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu 229a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu if (pendingIntent != null) { 230a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu builder.setContentIntent(pendingIntent); 231a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu } 232a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu return builder.build(); 233a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu } 234a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu 23592d759d56a3eedfbbda36da10d0fed44f57dc58ffionaxu /** 23692d759d56a3eedfbbda36da10d0fed44f57dc58ffionaxu * Creates the notification channel and registers it with NotificationManager. Also used to 23792d759d56a3eedfbbda36da10d0fed44f57dc58ffionaxu * update an existing channel's name. 23892d759d56a3eedfbbda36da10d0fed44f57dc58ffionaxu */ 23992d759d56a3eedfbbda36da10d0fed44f57dc58ffionaxu static void createNotificationChannels(Context context) { 24092d759d56a3eedfbbda36da10d0fed44f57dc58ffionaxu context.getSystemService(NotificationManager.class) 24192d759d56a3eedfbbda36da10d0fed44f57dc58ffionaxu .createNotificationChannel(new NotificationChannel( 24292d759d56a3eedfbbda36da10d0fed44f57dc58ffionaxu NOTIFICATION_CHANNEL_ID_MOBILE_DATA_STATUS, 24392d759d56a3eedfbbda36da10d0fed44f57dc58ffionaxu context.getResources().getString( 24492d759d56a3eedfbbda36da10d0fed44f57dc58ffionaxu R.string.mobile_data_status_notification_channel_name), 24592d759d56a3eedfbbda36da10d0fed44f57dc58ffionaxu NotificationManager.IMPORTANCE_DEFAULT)); 24692d759d56a3eedfbbda36da10d0fed44f57dc58ffionaxu } 24792d759d56a3eedfbbda36da10d0fed44f57dc58ffionaxu 248a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu private static void logd(String s) { 249a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu Log.d(TAG, s); 250a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu } 251a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu 252a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu private static void loge(String s) { 253a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu Log.e(TAG, s); 254a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu } 255a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu} 256