| /* |
| * Copyright (C) 2019 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package com.android.server.wifi; |
| |
| import android.annotation.NonNull; |
| import android.app.AlertDialog; |
| import android.app.Notification; |
| import android.app.PendingIntent; |
| import android.content.DialogInterface; |
| import android.content.Intent; |
| import android.graphics.drawable.Icon; |
| import android.net.wifi.WifiConfiguration; |
| import android.view.WindowManager; |
| |
| import com.android.wifi.resources.R; |
| |
| /** |
| * Helper class for ConnectionFailureNotifier. |
| */ |
| public class ConnectionFailureNotificationBuilder { |
| private static final String TAG = "ConnectionFailureNotifier"; |
| |
| public static final String ACTION_SHOW_SET_RANDOMIZATION_DETAILS = |
| "com.android.server.wifi.ACTION_SHOW_SET_RANDOMIZATION_DETAILS"; |
| public static final String RANDOMIZATION_SETTINGS_NETWORK_ID = |
| "com.android.server.wifi.RANDOMIZATION_SETTINGS_NETWORK_ID"; |
| public static final String RANDOMIZATION_SETTINGS_NETWORK_SSID = |
| "com.android.server.wifi.RANDOMIZATION_SETTINGS_NETWORK_SSID"; |
| |
| private final WifiContext mContext; |
| private final FrameworkFacade mFrameworkFacade; |
| |
| public ConnectionFailureNotificationBuilder(WifiContext context, |
| FrameworkFacade framework) { |
| mContext = context; |
| mFrameworkFacade = framework; |
| } |
| |
| /** |
| * Creates a notification that alerts the user that the connection may be failing due to |
| * MAC randomization. |
| * @param config |
| */ |
| public Notification buildNoMacRandomizationSupportNotification( |
| @NonNull WifiConfiguration config) { |
| String ssid = config.SSID; |
| String ssidAndSecurityType = config.getSsidAndSecurityTypeString(); |
| String title = mContext.getResources().getString( |
| R.string.wifi_cannot_connect_with_randomized_mac_title, ssid); |
| String content = mContext.getResources().getString( |
| R.string.wifi_cannot_connect_with_randomized_mac_message); |
| |
| Intent showDetailIntent = new Intent(ACTION_SHOW_SET_RANDOMIZATION_DETAILS) |
| .setPackage(mContext.getServiceWifiPackageName()); |
| showDetailIntent.putExtra(RANDOMIZATION_SETTINGS_NETWORK_ID, config.networkId); |
| showDetailIntent.putExtra(RANDOMIZATION_SETTINGS_NETWORK_SSID, ssidAndSecurityType); |
| PendingIntent pendingShowDetailIntent = mFrameworkFacade.getBroadcast( |
| mContext, 0, showDetailIntent, |
| PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE); |
| |
| return mFrameworkFacade.makeNotificationBuilder( |
| mContext, WifiService.NOTIFICATION_NETWORK_ALERTS) |
| .setSmallIcon(Icon.createWithResource(mContext.getWifiOverlayApkPkgName(), |
| com.android.wifi.resources.R.drawable.stat_notify_wifi_in_range)) |
| .setTicker(title) |
| .setContentTitle(title) |
| .setContentText(content) |
| .setContentIntent(pendingShowDetailIntent) |
| .setShowWhen(false) |
| .setLocalOnly(true) |
| .setColor(mContext.getResources().getColor( |
| android.R.color.system_notification_accent_color, mContext.getTheme())) |
| .setAutoCancel(true) |
| .build(); |
| } |
| |
| /** |
| * Creates an AlertDialog that allows the user to disable MAC randomization for a network. |
| * @param ssid the displayed SSID in the dialog |
| * @param onUserConfirm |
| */ |
| public AlertDialog buildChangeMacRandomizationSettingDialog( |
| String ssid, DialogInterface.OnClickListener onUserConfirm) { |
| AlertDialog.Builder builder = mFrameworkFacade.makeAlertDialogBuilder(mContext) |
| .setTitle(mContext.getResources().getString( |
| R.string.wifi_disable_mac_randomization_dialog_title)) |
| .setMessage(mContext.getResources().getString( |
| R.string.wifi_disable_mac_randomization_dialog_message, ssid)) |
| .setPositiveButton( |
| mContext.getResources().getString( |
| R.string.wifi_disable_mac_randomization_dialog_confirm_text), |
| onUserConfirm) |
| // A null listener allows the dialog to be dismissed directly. |
| .setNegativeButton(android.R.string.no, null); |
| AlertDialog dialog = builder.create(); |
| dialog.setCanceledOnTouchOutside(false); |
| dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT); |
| return dialog; |
| } |
| } |