1 /* 2 * Copyright (C) 2017 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 package com.android.settings.wifi.details; 17 18 import static com.android.settings.wifi.WifiSettings.WIFI_DIALOG_ID; 19 20 import android.app.Dialog; 21 import android.content.Context; 22 import android.net.ConnectivityManager; 23 import android.net.wifi.WifiManager; 24 import android.os.Bundle; 25 import android.os.Handler; 26 import android.os.Looper; 27 import android.view.Menu; 28 import android.view.MenuInflater; 29 import android.view.MenuItem; 30 31 import com.android.internal.logging.nano.MetricsProto; 32 import com.android.internal.logging.nano.MetricsProto.MetricsEvent; 33 import com.android.settings.R; 34 import com.android.settings.dashboard.DashboardFragment; 35 import com.android.settings.wifi.WifiConfigUiBase; 36 import com.android.settings.wifi.WifiDialog; 37 import com.android.settingslib.RestrictedLockUtils; 38 import com.android.settingslib.core.AbstractPreferenceController; 39 import com.android.settingslib.wifi.AccessPoint; 40 41 import java.util.ArrayList; 42 import java.util.List; 43 44 /** 45 * Detail page for the currently connected wifi network. 46 * 47 * <p>The AccessPoint should be saved to the intent Extras when launching this class via 48 * {@link AccessPoint#saveWifiState(Bundle)} in order to properly render this page. 49 */ 50 public class WifiNetworkDetailsFragment extends DashboardFragment { 51 52 private static final String TAG = "WifiNetworkDetailsFrg"; 53 54 private AccessPoint mAccessPoint; 55 private WifiDetailPreferenceController mWifiDetailPreferenceController; 56 57 @Override 58 public void onAttach(Context context) { 59 mAccessPoint = new AccessPoint(context, getArguments()); 60 super.onAttach(context); 61 } 62 63 @Override 64 public int getMetricsCategory() { 65 return MetricsProto.MetricsEvent.WIFI_NETWORK_DETAILS; 66 } 67 68 @Override 69 protected String getLogTag() { 70 return TAG; 71 } 72 73 @Override 74 protected int getPreferenceScreenResId() { 75 return R.xml.wifi_network_details_fragment; 76 } 77 78 @Override 79 public int getDialogMetricsCategory(int dialogId) { 80 if (dialogId == WIFI_DIALOG_ID) { 81 return MetricsEvent.DIALOG_WIFI_AP_EDIT; 82 } 83 return 0; 84 } 85 86 @Override 87 public Dialog onCreateDialog(int dialogId) { 88 if (getActivity() == null || mWifiDetailPreferenceController == null 89 || mAccessPoint == null) { 90 return null; 91 } 92 return WifiDialog.createModal(getActivity(), mWifiDetailPreferenceController, mAccessPoint, 93 WifiConfigUiBase.MODE_MODIFY); 94 } 95 96 97 @Override 98 public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 99 MenuItem item = menu.add(0, Menu.FIRST, 0, R.string.wifi_modify); 100 item.setIcon(R.drawable.ic_mode_edit); 101 item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); 102 super.onCreateOptionsMenu(menu, inflater); 103 } 104 105 @Override 106 public boolean onOptionsItemSelected(MenuItem menuItem) { 107 switch (menuItem.getItemId()) { 108 case Menu.FIRST: 109 if (!mWifiDetailPreferenceController.canModifyNetwork()) { 110 RestrictedLockUtils.sendShowAdminSupportDetailsIntent(getContext(), 111 RestrictedLockUtils.getDeviceOwner(getContext())); 112 } else { 113 showDialog(WIFI_DIALOG_ID); 114 } 115 return true; 116 default: 117 return super.onOptionsItemSelected(menuItem); 118 } 119 } 120 121 @Override 122 protected List<AbstractPreferenceController> createPreferenceControllers(Context context) { 123 final List<AbstractPreferenceController> controllers = new ArrayList<>(); 124 final ConnectivityManager cm = context.getSystemService(ConnectivityManager.class); 125 mWifiDetailPreferenceController = WifiDetailPreferenceController.newInstance( 126 mAccessPoint, 127 cm, 128 context, 129 this, 130 new Handler(Looper.getMainLooper()), // UI thread. 131 getLifecycle(), 132 context.getSystemService(WifiManager.class), 133 mMetricsFeatureProvider); 134 135 controllers.add(mWifiDetailPreferenceController); 136 controllers.add(new WifiMeteredPreferenceController(context, mAccessPoint.getConfig())); 137 138 return controllers; 139 } 140 } 141