diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 9f860dca3d..9a717a0f51 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -318,6 +318,10 @@
android:name = "com.gh.gamecenter.qa.column.detail.AskColumnDetailActivity"
android:screenOrientation = "portrait" />
+
+
(R.id.network_diagnosis_result)
+ private val mProgress by bindView(R.id.network_diagnosis_progress)
+ private val mWebView by bindView(R.id.network_diagnosis_web)
+ private val mScrollView by bindView(R.id.network_diagnosis_scrollview)
+
+ private val builder = SpannableStringBuilder()
+
+ private val mSuccessHint = "诊断完毕。( 点击复制 )\n"
+
+ private var mProgressData = 0
+
+
+ override fun getLayoutId(): Int {
+ return R.layout.activity_network_diagnosis
+ }
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+
+ setNavigationTitle("网络诊断")
+ // 5.0后,Android对WebView做了优化,此为关闭该优化
+ if (android.os.Build.VERSION.SDK_INT >= 21) {
+ WebView.enableSlowWholeDocumentDraw()
+ }
+
+ Observable
+ .create(Observable.OnSubscribe {
+
+ var progress = 0
+
+ // 1.获取当前网络情况,network/ip/mac/sim
+
+ // Network 2G/3G/4G/WIFI
+ builder.append("Network:")
+ builder.append(DeviceUtils.getNetwork(applicationContext))
+ builder.append("\n")
+
+ progress += 3
+ it.onNext(ProgressAndDetail(progress, builder.toString()))
+
+ // IP
+ builder.append("IP:")
+ builder.append(DeviceUtils.getIPAddress(applicationContext))
+ builder.append("\n")
+
+ progress += 3
+ it.onNext(ProgressAndDetail(progress, builder.toString()))
+
+ // MAC
+ builder.append("MAC:")
+ builder.append(DeviceUtils.getMac(applicationContext))
+ builder.append("\n")
+
+ progress += 3
+ it.onNext(ProgressAndDetail(progress, builder.toString()))
+
+ // SIM
+ builder.append("SIM:")
+ builder.append(DeviceUtils.getSim(applicationContext))
+ builder.append("\n")
+
+ progress += 3
+ it.onNext(ProgressAndDetail(progress, builder.toString()))
+
+ builder.append("-----------------------------------------------------------------------\n")
+
+ // 2.ping域名
+ val domains = arrayOf("api.ghzs.com", "download.ghzs.com", "apk.ghzs666.com", "image.ghzs666.com", "image.ghzhushou.com")
+ for (domain in domains) {
+ builder.append(DeviceUtils.ping(domain))
+ builder.append("-----------------------------------------------------------------------\n")
+ progress += 7
+ it.onNext(ProgressAndDetail(progress, builder.toString()))
+ }
+
+ // 3.okhttp访问链接
+ val urls = arrayOf("https://api.ghzs.com/v3d3/index/columns", "https://download.ghzs.com/game?id=55097638fc1a6fa45f8b4568&platform=9u", "https://apk.ghzs666.com/packed/5af00abc02b30f7c038b456c.apk", "http://image.ghzs666.com/pic/5b29b3c92924bcaf5d438d38.jpg", "http://image.ghzhushou.com/pic/586cad378ab49e0f1b91b3e8.png")
+ for (url in urls) {
+ builder.append("Url:")
+ builder.append(url)
+ builder.append("\n")
+
+ val client = OkHttpClient()
+ val request = Request.Builder()
+ .head()
+ .url(url)
+ .build()
+ try {
+ val response = client.newCall(request).execute()
+ builder.append("Success:\n")
+ builder.append("Response:\n")
+ builder.append(response.toString())
+ builder.append("\n")
+ builder.append("Response Header:\n")
+ builder.append(response.headers().toString())
+ builder.append("\n")
+ } catch (e: IOException) {
+ builder.append("Error:\n")
+ builder.append(Log.getStackTraceString(e))
+ }
+ builder.append("-----------------------------------------------------------------------\n")
+ progress += 7
+ it.onNext(ProgressAndDetail(progress, builder.toString()))
+ }
+
+ it.onCompleted()
+ }).subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(object : Response() {
+ override fun onNext(response: ProgressAndDetail?) {
+ mResult.text = response?.detail
+ setResultProgress(response?.progress ?: 0)
+ }
+
+ override fun onCompleted() {
+ initWebView()
+ }
+ })
+
+ }
+
+
+ fun setResultProgress(progress: Int) {
+ mProgress.text = "正在进行网络诊断 $progress%"
+ mBaseHandler.post(Runnable {
+ mScrollView.fullScroll(ScrollView.FOCUS_DOWN)
+ })
+
+ mProgressData = progress
+ }
+
+ @SuppressLint("SetJavaScriptEnabled")
+ fun initWebView() {
+ mWebView.loadUrl("https://cdn.dns-detect.alicdn.com/https/doc.html")
+ // 开启JavaScript
+ mWebView.settings.javaScriptEnabled = true
+ // 开启LocalStorage
+ mWebView.settings.domStorageEnabled = true
+ // 监听页面加载完成
+ mWebView.webViewClient = object : WebViewClient() {
+ override fun onPageFinished(view: WebView, url: String) {
+ super.onPageFinished(view, url)
+
+ // 等待10秒,等待js检查完成
+ view.postDelayed({
+ // WebView生成长图,也就是超过一屏的图片,代码中的bitmap就是最后生成的长图
+ mWebView.measure(View.MeasureSpec.makeMeasureSpec(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED),
+ View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED))
+ mWebView.layout(0, 0, mWebView.measuredWidth, mWebView.measuredHeight)
+ mWebView.isDrawingCacheEnabled = true
+ mWebView.buildDrawingCache()
+ val bitmap = Bitmap.createBitmap(mWebView.measuredWidth,
+ mWebView.measuredHeight, Bitmap.Config.ARGB_8888)
+
+ // 画布的宽高和WebView的网页保持一致
+ val canvas = Canvas(bitmap)
+ val paint = Paint()
+ canvas.drawBitmap(bitmap, 0F, mWebView.measuredHeight.toFloat(), paint)
+ mWebView.draw(canvas)
+
+ // 保存成文件
+ val filePath = bitmap2File(bitmap)
+
+ // TODO upload image or copy image to share
+
+ builder.append("WebView Long Image Path:\n")
+ builder.append(filePath)
+ builder.append("\n")
+ builder.append("\n")
+ builder.append(mSuccessHint)
+
+ builder.setSpan(object : ClickableSpan() {
+ override fun updateDrawState(ds: TextPaint) {
+ super.updateDrawState(ds)
+ ds.color = resources.getColor(R.color.theme)
+ ds.isUnderlineText = false
+ }
+
+ override fun onClick(widget: View) {
+ CommentUtils.copyText(builder.toString().replace(mSuccessHint, ""), applicationContext)
+ }
+ }, builder.length - mSuccessHint.length, builder.length, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
+
+ mResult.text = builder
+ mResult.setMovementMethod(LinkMovementMethod.getInstance())
+ setResultProgress(100)
+ }, 1000)
+ }
+ }
+ }
+
+ fun bitmap2File(bitmap: Bitmap): String {
+ try {
+ val file = File(Environment.getExternalStorageDirectory().absolutePath + "/Pictures/ghzhushou/"
+ + (UUID.randomUUID().toString().replace("-".toRegex(), ""))
+ + ".jpg"
+ )
+ if (!file.exists()) {
+ file.getParentFile().mkdirs()
+ file.createNewFile()
+ }
+ val fos = FileOutputStream(file)
+ bitmap.compress(Bitmap.CompressFormat.JPEG, 90, fos)
+ fos.flush()
+ fos.close()
+ return file.getAbsolutePath();
+ } catch (e: IOException) {
+ e.printStackTrace()
+ }
+ return ""
+ }
+
+ override fun handleBackPressed(): Boolean {
+ if (mProgressData < 100) {
+ DialogUtils.showAlertDialog(this, "确认退出", "网络诊断还未完成,退出会终止所有诊断进程,确定退出吗?"
+ ,"确定", "取消", DialogUtils.ConfirmListener {
+ finish()
+ }, null)
+ return true
+ } else {
+ return false
+ }
+
+ }
+}
diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailKaiFuAdapter.java b/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailKaiFuAdapter.java
index 27aa16fc2b..2ad96c6ec0 100644
--- a/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailKaiFuAdapter.java
+++ b/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailKaiFuAdapter.java
@@ -3,7 +3,9 @@ package com.gh.gamecenter.gamedetail;
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
+import android.graphics.Canvas;
import android.graphics.Color;
+import android.graphics.Paint;
import android.graphics.drawable.ColorDrawable;
import android.preference.PreferenceManager;
import android.support.v4.content.ContextCompat;
@@ -28,15 +30,12 @@ import com.gh.gamecenter.entity.CalendarEntity;
import com.gh.gamecenter.entity.GameEntity;
import com.gh.gamecenter.entity.KaiFuCalendarEntity;
import com.gh.gamecenter.entity.MeEntity;
-import com.gh.gamecenter.eventbus.EBReuse;
import com.gh.gamecenter.kaifu.add.AddKaiFuActivity;
import com.gh.gamecenter.kaifu.patch.PatchKaifuActivity;
import com.gh.gamecenter.retrofit.Response;
import com.lightgame.adapter.BaseRecyclerAdapter;
import com.lightgame.utils.Utils;
-import org.greenrobot.eventbus.EventBus;
-
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
diff --git a/app/src/main/java/com/gh/gamecenter/qa/column/detail/hot/HotFragment.kt b/app/src/main/java/com/gh/gamecenter/qa/column/detail/hot/HotFragment.kt
index 5eb6d45c54..ded87a6dde 100644
--- a/app/src/main/java/com/gh/gamecenter/qa/column/detail/hot/HotFragment.kt
+++ b/app/src/main/java/com/gh/gamecenter/qa/column/detail/hot/HotFragment.kt
@@ -1,6 +1,7 @@
package com.gh.gamecenter.qa.column.detail.hot
import android.arch.lifecycle.ViewModelProviders
+import android.view.View
import com.gh.common.util.EntranceUtils
import com.gh.gamecenter.baselist.ListFragment
import com.gh.gamecenter.qa.entity.AnswerEntity
@@ -25,4 +26,14 @@ class HotFragment : ListFragment() {
return ViewModelProviders.of(this, factory).get(HotViewModel::class.java)
}
+ override fun onLoadEmpty() {
+ super.onLoadEmpty()
+ mListRv.visibility = View.VISIBLE
+ }
+
+ override fun onLoadError() {
+ super.onLoadError()
+ mListRv.visibility = View.VISIBLE
+ }
+
}
\ No newline at end of file
diff --git a/app/src/main/java/com/gh/gamecenter/qa/column/detail/recommends/RecommendsFragment.kt b/app/src/main/java/com/gh/gamecenter/qa/column/detail/recommends/RecommendsFragment.kt
index 94648f1751..0b120cfcd3 100644
--- a/app/src/main/java/com/gh/gamecenter/qa/column/detail/recommends/RecommendsFragment.kt
+++ b/app/src/main/java/com/gh/gamecenter/qa/column/detail/recommends/RecommendsFragment.kt
@@ -1,6 +1,7 @@
package com.gh.gamecenter.qa.column.detail.recommends
import android.arch.lifecycle.ViewModelProviders
+import android.view.View
import com.gh.common.util.EntranceUtils
import com.gh.gamecenter.baselist.ListFragment
import com.gh.gamecenter.qa.entity.AnswerEntity
@@ -25,4 +26,14 @@ class RecommendsFragment : ListFragment() {
return ViewModelProviders.of(this, factory).get(RecommendsViewModel::class.java)
}
+ override fun onLoadEmpty() {
+ super.onLoadEmpty()
+ mListRv.visibility = View.VISIBLE
+ }
+
+ override fun onLoadError() {
+ super.onLoadError()
+ mListRv.visibility = View.VISIBLE
+ }
+
}
\ No newline at end of file
diff --git a/app/src/main/java/com/gh/gamecenter/qa/column/detail/unanswered/UnansweredFragment.kt b/app/src/main/java/com/gh/gamecenter/qa/column/detail/unanswered/UnansweredFragment.kt
index b12a0086af..107a0318c7 100644
--- a/app/src/main/java/com/gh/gamecenter/qa/column/detail/unanswered/UnansweredFragment.kt
+++ b/app/src/main/java/com/gh/gamecenter/qa/column/detail/unanswered/UnansweredFragment.kt
@@ -1,6 +1,7 @@
package com.gh.gamecenter.qa.column.detail.unanswered
import android.arch.lifecycle.ViewModelProviders
+import android.view.View
import com.gh.common.util.EntranceUtils
import com.gh.gamecenter.baselist.ListFragment
import com.gh.gamecenter.qa.entity.AskTagGroupsEntity
@@ -25,4 +26,14 @@ class UnansweredFragment : ListFragment() {
return ViewModelProviders.of(this, factory).get(UnansweredViewModel::class.java)
}
+ override fun onLoadEmpty() {
+ super.onLoadEmpty()
+ mListRv.visibility = View.VISIBLE
+ }
+
+ override fun onLoadError() {
+ super.onLoadError()
+ mListRv.visibility = View.VISIBLE
+ }
+
}
\ No newline at end of file
diff --git a/app/src/main/java/com/halo/assistant/fragment/SettingsFragment.java b/app/src/main/java/com/halo/assistant/fragment/SettingsFragment.java
index be344f74d0..4a0293353a 100644
--- a/app/src/main/java/com/halo/assistant/fragment/SettingsFragment.java
+++ b/app/src/main/java/com/halo/assistant/fragment/SettingsFragment.java
@@ -27,6 +27,7 @@ import com.gh.common.util.StringUtils;
import com.gh.gamecenter.AboutActivity;
import com.gh.gamecenter.BuildConfig;
import com.gh.gamecenter.MainActivity;
+import com.gh.gamecenter.NetworkDiagnosisActivity;
import com.gh.gamecenter.R;
import com.gh.gamecenter.entity.LoginTokenEntity;
import com.gh.gamecenter.eventbus.EBReuse;
@@ -215,7 +216,8 @@ public class SettingsFragment extends NormalFragment {
R.id.setting_rl_cache, R.id.setting_cv_font_size,
R.id.setting_rl_concerngame, R.id.setting_rl_about,
R.id.setting_logout_rl, R.id.setting_rl_kc_path,
- R.id.setting_rl_download_path, R.id.setting_rl_pic_path
+ R.id.setting_rl_download_path, R.id.setting_rl_pic_path,
+ R.id.setting_network_diagnosis
})
@Override
public void onClick(final View v) {
@@ -291,6 +293,9 @@ public class SettingsFragment extends NormalFragment {
e.printStackTrace();
}
break;
+ case R.id.setting_network_diagnosis:
+ startActivity(new Intent(getContext(), NetworkDiagnosisActivity.class));
+ break;
default:
break;
}
diff --git a/app/src/main/res/layout/activity_network_diagnosis.xml b/app/src/main/res/layout/activity_network_diagnosis.xml
new file mode 100644
index 0000000000..72fe7f4e6c
--- /dev/null
+++ b/app/src/main/res/layout/activity_network_diagnosis.xml
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_setting.xml b/app/src/main/res/layout/fragment_setting.xml
index ccb9a71594..814cb3394e 100644
--- a/app/src/main/res/layout/fragment_setting.xml
+++ b/app/src/main/res/layout/fragment_setting.xml
@@ -290,5 +290,17 @@
android:textColor = "@color/hint"
android:textSize = "13sp" />
+
+
+
\ No newline at end of file