安卓7.1忘记某个wifi流程分析

设置中点击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;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

技术求索者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值