设置中点击wifi名称—取消保存调用流程跟踪
\sdk\packages\apps\Settings\src\com\android\settings\wifi\WifiConfigController.java
public WifiConfigController(WifiConfigUiBase parent, View view, AccessPoint accessPoint,
int mode) {
mConfigUi = parent;
if (mAccessPoint.isSaved() || mAccessPoint.isActive()) {
mConfigUi.setForgetButton(res.getString(R.string.wifi_forget)); //此处设置取消保存显示内容
}mConfigUi相当于WifiDialog
调用wifi取消保存点击事件之后 packages/apps/Settings/src/com/android/settings/wifi/WifiDialog.java:116
protected void onCreate(Bundle savedInstanceState) {
mView = getLayoutInflater().inflate(R.layout.wifi_dialog, null);
setView(mView);
setInverseBackgroundForced(true);
mController = new WifiConfigController(this, mView, mAccessPoint, mMode); //传入WifiDialog给WifiConfigController
super.onCreate(savedInstanceState);
if (mHideSubmitButton) {
mController.hideSubmitButton();
} else {
/* During creation, the submit button can be unavailable to determine
* visibility. Right after creation, update button visibility */
mController.enableSubmitIfAppropriate();
}
if (mAccessPoint == null) {
mController.hideForgetButton();
}
}
public WifiDialog(Context context, WifiDialogListener listener, AccessPoint accessPoint,
int mode) {
super(context);
mMode = mode;
mListener = listener;
mAccessPoint = accessPoint;
mHideSubmitButton = false;
}
public void onClick(DialogInterface dialogInterface, int id) {
if (mListener != null) {
switch (id) {
case BUTTON_SUBMIT:
mListener.onSubmit(this);
break;
case BUTTON_FORGET:
if (WifiSettings.isEditabilityLockedDown(
getContext(), mAccessPoint.getConfig())) {
RestrictedLockUtils.sendShowAdminSupportDetailsIntent(getContext(),
RestrictedLockUtils.getDeviceOwner(getContext()));
return;
}
mListener.onForget(this);
break;
}
}
}
packages/apps/Settings/src/com/android/settings/wifi/WifiSettings.java +799
public class WifiSettings extends RestrictedSettingsFragment
implements Indexable, WifiTracker.WifiListener, AccessPointListener,
WifiDialog.WifiDialogListener
mDialog = new WifiDialog(getActivity(), this, ap, mDialogMode, //传入Listener
/* no hide submit/connect */ false);
public void onForget(WifiDialog dialog) { WifiDialogListener 接口函数在此处实现
forget();
}
第一步
/* package */ void forget() {
MetricsLogger.action(getActivity(), MetricsEvent.ACTION_WIFI_FORGET);
if (!mSelectedAccessPoint.isSaved()) {
if (mSelectedAccessPoint.getNetworkInfo() != null &&
mSelectedAccessPoint.getNetworkInfo().getState() != State.DISCONNECTED) {
// Network is active but has no network ID - must be ephemeral.
mWifiManager.disableEphemeralNetwork(
AccessPoint.convertToQuotedString(mSelectedAccessPoint.getSsidStr()));
} else {
// Should not happen, but a monkey seems to trigger it
Log.e(TAG, "Failed to forget invalid network " + mSelectedAccessPoint.getConfig());
return;
}
} else {
mWifiManager.forget(mSelectedAccessPoint.getConfig().networkId, mForgetListener);
}
mWifiTracker.resumeScanning();
// We need to rename/replace "Next" button in wifi setup context.
changeNextButtonState(false);
}
第二步
mWifiManager.forget-> frameworks/base/wifi/java/android/net/wifi/WifiManager.java
public void forget(int netId, ActionListener listener) {
if (netId < 0) throw new IllegalArgumentException(“Network id cannot be negative”);
getChannel().sendMessage(FORGET_NETWORK, netId, putListener(listener));
}
第三步
frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiStateMachine.java
case WifiManager.FORGET_NETWORK:
// Only the current foreground user can modify networks.
if (!mWifiConfigManager.isCurrentUserProfile(
UserHandle.getUserId(message.sendingUid))) {
loge(“Only the current foreground user can modify networks "
+ " currentUserId=” + mWifiConfigManager.getCurrentUserId()
+ " sendingUserId=" + UserHandle.getUserId(message.sendingUid));
replyToMessage(message, WifiManager.FORGET_NETWORK_FAILED,
WifiManager.NOT_AUTHORIZED);
break;
}
// Debug only, remember last configuration that was forgotten
WifiConfiguration toRemove
= mWifiConfigManager.getWifiConfiguration(message.arg1);
if (toRemove == null) {
lastForgetConfigurationAttempt = null;
} else {
lastForgetConfigurationAttempt = new WifiConfiguration(toRemove);
}
// check that the caller owns this network
netId = message.arg1;
if (!mWifiConfigManager.canModifyNetwork(message.sendingUid, netId,
/* onlyAnnotate */ false)) {
logw("Not authorized to forget network "
+ " cnid=" + netId
+ " uid=" + message.sendingUid);
replyToMessage(message, WifiManager.FORGET_NETWORK_FAILED,
WifiManager.NOT_AUTHORIZED);
break;
}
if (mWifiConfigManager.forgetNetwork(message.arg1)) {
replyToMessage(message, WifiManager.FORGET_NETWORK_SUCCEEDED);
broadcastWifiCredentialChanged(WifiManager.WIFI_CREDENTIAL_FORGOT,
(WifiConfiguration) message.obj);
} else {
loge("Failed to forget network");
replyToMessage(message, WifiManager.FORGET_NETWORK_FAILED,
WifiManager.ERROR);
}
break;