Download模块 (十九)

Download模块 (十九)

AuthDialog extends DialogFragment, 有一个webview显示一个login网页,并且会监听login 成功/失败的event,并将event进一步扩散。

<1>对webview的监听是通过WebViewClient和WebChromeClient实现的:
(1)WebViewClient: onPageStarted() onPageFinished() shouldOverrideUrlLoading()
(2)WebChromeClient: onReceivedTitle() onProgressChanged()

<2>依旧是onCreate的时候就setStyle将TITLE去掉.

<3>呈现的View比较简单,为了实现点击Dialog外部就关闭fragment,在onCreateView中调用了getDialog().setCanceledOnTouchOutside(true), webview也会在此阶段初始化<不是new而是设置一些webviewSetting>
初始化webview包括了重新设置其大小,
WebSettings的
setLoadWithOverviewMode(true) 自动缩小
setUseWideViewPort(true)
setJavaScriptCanOpenWindowsAutomatically(true);
setJavaScriptEnabled(true);
setSavePassword(false) 已经在最新版本deprecated
setLightTouchEnabled(false) 已经在最新版本deprecated

还会强制将Activity orentation设置为PORTRAIT Activity setRequestedOrientation,
设置当前Activity的window的VKB mode为 ADJUST_RESIZE,
两个old value都会被保存以退出fragment的时候恢复。
设置webviewClient和webChromeClient
webviw load login的url
为webview注入夜间模式的javascript以及当前的夜间模式 setting。

<2>在onDismiss回调时会将orentation和keyboardMode恢复并且如果在这时候都没有得到AuthorizationCode,也没有通知过Listener,
那么会通知Listener,并设置为已经通知过。

<3>为webview注入Js会因为版本不同而不同,一般来说非chromium内核的kitkat一下的可以直接loadUrl,而以上的则需要
evaluateJavascript<这个差异处理已经被封装在子自定制的webview相关的工具类中>

<4>为了自适应调整webview的合适大小,在每次onConfigurationChanged,都会setWebviewSize()<主要是应对强制的旋转为potrait>

<5>为了保证webview显示的时候一定加载完 login 页面, webview初始时不可见,在 onPageFinsihed才设为可见。

<6>网盘的login 页面在用户填入了login信息并提交以后,如果通过,那么会自动redirect一个新的登陆成功的页面,
通过这一点来检测用户是否login成功,在 onPageStarted/shouldOverrideUrlLoading/onPageFinished都会尝试检查page的url,如果url
以login成功时的url开头,那么可以认为成功,尝试从url的paramter中提取出Auth code<Uri.parse(url).getQueryParameter(XX)>
,如果成功提取到了,那么通知Listener,并且主动的dismiss(),已经不需要再显示了。
另外,因为也涉及到一个异步线程的回调<webview>在fragment已经消失的情况又被调用,因此在checkurl的时候,
应该检测fragment是否已经dismiss<dialogFragemnt专有,直接使用本身的变量mDismissed(package access),
在onDismiss和onCreate设置值,有点多余,不过保险>,如果已经dismiss,就不需要也不应该继续处理了。

<7>onReceiveTitle和onProgressChanged是为了及时向Webview注入APP定制的js.

<8>该类其实和项目中其他类似目的的类有重复,不过还没有进行抽象重构。

<9>该类构造器被隐藏,自己实现了一个类工厂方法接受一个Listener作为参数构造事例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值